From ed687650bac627a270b457931c2676938523548b Mon Sep 17 00:00:00 2001 From: ITQ Date: Sat, 2 Mar 2024 13:22:29 +0300 Subject: [PATCH] Reoraganized project --- solution/pulse/{countries => api}/__init__.py | 0 solution/pulse/api/apps.py | 6 ++++++ solution/pulse/{ping => api/countries}/__init__.py | 0 solution/pulse/{ => api}/countries/apps.py | 2 +- solution/pulse/{ => api}/countries/models.py | 1 + solution/pulse/{ => api}/countries/serializers.py | 2 +- solution/pulse/api/countries/urls.py | 12 ++++++++++++ solution/pulse/{ => api}/countries/views.py | 4 ++-- solution/pulse/{users => api/ping}/__init__.py | 0 solution/pulse/{ => api}/ping/apps.py | 2 +- solution/pulse/api/ping/urls.py | 7 +++++++ solution/pulse/{ => api}/ping/views.py | 0 solution/pulse/api/urls.py | 7 +++++++ .../{users/migrations => api/users}/__init__.py | 0 solution/pulse/{ => api}/users/apps.py | 2 +- solution/pulse/{ => api}/users/authentication.py | 2 +- .../pulse/{ => api}/users/migrations/0001_initial.py | 6 +++--- solution/pulse/api/users/migrations/__init__.py | 0 solution/pulse/{ => api}/users/models.py | 2 +- solution/pulse/{ => api}/users/serializers.py | 2 +- solution/pulse/{ => api}/users/urls.py | 8 ++++---- solution/pulse/{ => api}/users/validators.py | 3 ++- solution/pulse/{ => api}/users/views.py | 4 ++-- solution/pulse/countries/urls.py | 12 ------------ solution/pulse/ping/urls.py | 7 ------- solution/pulse/pulse/settings.py | 8 ++++---- solution/pulse/pulse/urls.py | 4 +--- 27 files changed, 58 insertions(+), 45 deletions(-) rename solution/pulse/{countries => api}/__init__.py (100%) create mode 100644 solution/pulse/api/apps.py rename solution/pulse/{ping => api/countries}/__init__.py (100%) rename solution/pulse/{ => api}/countries/apps.py (82%) rename solution/pulse/{ => api}/countries/models.py (93%) rename solution/pulse/{ => api}/countries/serializers.py (82%) create mode 100644 solution/pulse/api/countries/urls.py rename solution/pulse/{ => api}/countries/views.py (91%) rename solution/pulse/{users => api/ping}/__init__.py (100%) rename solution/pulse/{ => api}/ping/apps.py (84%) create mode 100644 solution/pulse/api/ping/urls.py rename solution/pulse/{ => api}/ping/views.py (100%) create mode 100644 solution/pulse/api/urls.py rename solution/pulse/{users/migrations => api/users}/__init__.py (100%) rename solution/pulse/{ => api}/users/apps.py (84%) rename solution/pulse/{ => api}/users/authentication.py (97%) rename solution/pulse/{ => api}/users/migrations/0001_initial.py (90%) create mode 100644 solution/pulse/api/users/migrations/__init__.py rename solution/pulse/{ => api}/users/models.py (97%) rename solution/pulse/{ => api}/users/serializers.py (94%) rename solution/pulse/{ => api}/users/urls.py (54%) rename solution/pulse/{ => api}/users/validators.py (92%) rename solution/pulse/{ => api}/users/views.py (96%) delete mode 100644 solution/pulse/countries/urls.py delete mode 100644 solution/pulse/ping/urls.py diff --git a/solution/pulse/countries/__init__.py b/solution/pulse/api/__init__.py similarity index 100% rename from solution/pulse/countries/__init__.py rename to solution/pulse/api/__init__.py diff --git a/solution/pulse/api/apps.py b/solution/pulse/api/apps.py new file mode 100644 index 0000000..878e7d5 --- /dev/null +++ b/solution/pulse/api/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ApiConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "api" diff --git a/solution/pulse/ping/__init__.py b/solution/pulse/api/countries/__init__.py similarity index 100% rename from solution/pulse/ping/__init__.py rename to solution/pulse/api/countries/__init__.py diff --git a/solution/pulse/countries/apps.py b/solution/pulse/api/countries/apps.py similarity index 82% rename from solution/pulse/countries/apps.py rename to solution/pulse/api/countries/apps.py index 12ce5ef..1ce3638 100644 --- a/solution/pulse/countries/apps.py +++ b/solution/pulse/api/countries/apps.py @@ -3,4 +3,4 @@ from django.apps import AppConfig class CountriesConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "countries" + name = "api.countries" diff --git a/solution/pulse/countries/models.py b/solution/pulse/api/countries/models.py similarity index 93% rename from solution/pulse/countries/models.py rename to solution/pulse/api/countries/models.py index fe3a860..347cda3 100644 --- a/solution/pulse/countries/models.py +++ b/solution/pulse/api/countries/models.py @@ -9,6 +9,7 @@ class Country(models.Model): class Meta: db_table = "countries" + managed = False def __str__(self): return self.name diff --git a/solution/pulse/countries/serializers.py b/solution/pulse/api/countries/serializers.py similarity index 82% rename from solution/pulse/countries/serializers.py rename to solution/pulse/api/countries/serializers.py index 10cfd38..6bb14e1 100644 --- a/solution/pulse/countries/serializers.py +++ b/solution/pulse/api/countries/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers -from countries.models import Country +from api.countries.models import Country class CountrySerializer(serializers.ModelSerializer): diff --git a/solution/pulse/api/countries/urls.py b/solution/pulse/api/countries/urls.py new file mode 100644 index 0000000..9ccafbb --- /dev/null +++ b/solution/pulse/api/countries/urls.py @@ -0,0 +1,12 @@ +from django.urls import path + +import api.countries.views + +urlpatterns = [ + path("", api.countries.views.CountryListView.as_view(), name="countries"), + path( + "/", + api.countries.views.CountryByAlpha2View.as_view(), + name="country_by_alpha2", + ), +] diff --git a/solution/pulse/countries/views.py b/solution/pulse/api/countries/views.py similarity index 91% rename from solution/pulse/countries/views.py rename to solution/pulse/api/countries/views.py index 7ddef29..1ce929a 100644 --- a/solution/pulse/countries/views.py +++ b/solution/pulse/api/countries/views.py @@ -2,8 +2,8 @@ from django.conf import settings from rest_framework.exceptions import ValidationError from rest_framework.generics import ListAPIView, RetrieveAPIView -from countries.models import Country -from countries.serializers import CountrySerializer +from api.countries.models import Country +from api.countries.serializers import CountrySerializer class CountryListView(ListAPIView): diff --git a/solution/pulse/users/__init__.py b/solution/pulse/api/ping/__init__.py similarity index 100% rename from solution/pulse/users/__init__.py rename to solution/pulse/api/ping/__init__.py diff --git a/solution/pulse/ping/apps.py b/solution/pulse/api/ping/apps.py similarity index 84% rename from solution/pulse/ping/apps.py rename to solution/pulse/api/ping/apps.py index 70a3495..f8b5f80 100644 --- a/solution/pulse/ping/apps.py +++ b/solution/pulse/api/ping/apps.py @@ -3,4 +3,4 @@ from django.apps import AppConfig class PingConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "ping" + name = "api.ping" diff --git a/solution/pulse/api/ping/urls.py b/solution/pulse/api/ping/urls.py new file mode 100644 index 0000000..ba00fa7 --- /dev/null +++ b/solution/pulse/api/ping/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +import api.ping.views + +urlpatterns = [ + path("", api.ping.views.PingView.as_view(), name="ping"), +] diff --git a/solution/pulse/ping/views.py b/solution/pulse/api/ping/views.py similarity index 100% rename from solution/pulse/ping/views.py rename to solution/pulse/api/ping/views.py diff --git a/solution/pulse/api/urls.py b/solution/pulse/api/urls.py new file mode 100644 index 0000000..dcfc123 --- /dev/null +++ b/solution/pulse/api/urls.py @@ -0,0 +1,7 @@ +from django.urls import include, path + +urlpatterns = [ + path("ping", include("api.ping.urls")), + path("countries", include("api.countries.urls")), + path("", include("api.users.urls")), +] diff --git a/solution/pulse/users/migrations/__init__.py b/solution/pulse/api/users/__init__.py similarity index 100% rename from solution/pulse/users/migrations/__init__.py rename to solution/pulse/api/users/__init__.py diff --git a/solution/pulse/users/apps.py b/solution/pulse/api/users/apps.py similarity index 84% rename from solution/pulse/users/apps.py rename to solution/pulse/api/users/apps.py index 88f7b17..079b9a5 100644 --- a/solution/pulse/users/apps.py +++ b/solution/pulse/api/users/apps.py @@ -3,4 +3,4 @@ from django.apps import AppConfig class UsersConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "users" + name = "api.users" diff --git a/solution/pulse/users/authentication.py b/solution/pulse/api/users/authentication.py similarity index 97% rename from solution/pulse/users/authentication.py rename to solution/pulse/api/users/authentication.py index de0387a..50ba8b1 100644 --- a/solution/pulse/users/authentication.py +++ b/solution/pulse/api/users/authentication.py @@ -6,7 +6,7 @@ from rest_framework.authentication import ( from rest_framework.exceptions import AuthenticationFailed, NotAuthenticated from rest_framework.permissions import IsAuthenticated -from users.models import Profile +from api.users.models import Profile class JWTAuthentication(BaseAuthentication): diff --git a/solution/pulse/users/migrations/0001_initial.py b/solution/pulse/api/users/migrations/0001_initial.py similarity index 90% rename from solution/pulse/users/migrations/0001_initial.py rename to solution/pulse/api/users/migrations/0001_initial.py index fe3c194..7602951 100644 --- a/solution/pulse/users/migrations/0001_initial.py +++ b/solution/pulse/api/users/migrations/0001_initial.py @@ -1,8 +1,8 @@ -# Generated by Django 4.2.10 on 2024-03-02 09:47 +# Generated by Django 4.2.10 on 2024-03-02 10:14 +import api.users.validators import django.core.validators from django.db import migrations, models -import users.validators class Migration(migrations.Migration): @@ -20,7 +20,7 @@ class Migration(migrations.Migration): ('login', models.CharField(max_length=30, validators=[django.core.validators.RegexValidator('^[a-zA-Z0-9-]+$')])), ('email', models.EmailField(max_length=50)), ('password', models.CharField(max_length=100, validators=[django.core.validators.RegexValidator('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,100}$')])), - ('countryCode', models.CharField(max_length=2, validators=[django.core.validators.RegexValidator('[a-zA-Z]{2}'), users.validators.CountryCodeValidator()])), + ('countryCode', models.CharField(max_length=2, validators=[django.core.validators.RegexValidator('[a-zA-Z]{2}'), api.users.validators.CountryCodeValidator()])), ('isPublic', models.BooleanField()), ('phone', models.CharField(blank=True, max_length=20, null=True, validators=[django.core.validators.MaxLengthValidator(20), django.core.validators.RegexValidator('\\+[\\d]+')])), ('image', models.URLField(blank=True, null=True)), diff --git a/solution/pulse/api/users/migrations/__init__.py b/solution/pulse/api/users/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solution/pulse/users/models.py b/solution/pulse/api/users/models.py similarity index 97% rename from solution/pulse/users/models.py rename to solution/pulse/api/users/models.py index b52e273..cd333a0 100644 --- a/solution/pulse/users/models.py +++ b/solution/pulse/api/users/models.py @@ -4,7 +4,7 @@ from django.core.validators import ( ) from django.db import models -from users.validators import CountryCodeValidator +from api.users.validators import CountryCodeValidator class Profile(models.Model): diff --git a/solution/pulse/users/serializers.py b/solution/pulse/api/users/serializers.py similarity index 94% rename from solution/pulse/users/serializers.py rename to solution/pulse/api/users/serializers.py index 3bc7e60..674ba39 100644 --- a/solution/pulse/users/serializers.py +++ b/solution/pulse/api/users/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers -from users.models import Profile +from api.users.models import Profile class ProfileSerializer(serializers.ModelSerializer): diff --git a/solution/pulse/users/urls.py b/solution/pulse/api/users/urls.py similarity index 54% rename from solution/pulse/users/urls.py rename to solution/pulse/api/users/urls.py index a096b2f..ba6320c 100644 --- a/solution/pulse/users/urls.py +++ b/solution/pulse/api/users/urls.py @@ -1,20 +1,20 @@ from django.urls import path -import users.views +import api.users.views urlpatterns = [ path( "auth/register", - users.views.RegisterUserApiView.as_view(), + api.users.views.RegisterUserApiView.as_view(), name="register", ), path( "auth/sign-in", - users.views.SigninUserApiView.as_view(), + api.users.views.SigninUserApiView.as_view(), name="sign-in", ), path( "me/profile", - users.views.ProfileMeApiView.as_view(), + api.users.views.ProfileMeApiView.as_view(), ) ] diff --git a/solution/pulse/users/validators.py b/solution/pulse/api/users/validators.py similarity index 92% rename from solution/pulse/users/validators.py rename to solution/pulse/api/users/validators.py index fc550f0..ef3755d 100644 --- a/solution/pulse/users/validators.py +++ b/solution/pulse/api/users/validators.py @@ -1,8 +1,9 @@ -from countries.models import Country from django.core.exceptions import ValidationError from django.core.validators import BaseValidator from django.utils.deconstruct import deconstructible +from api.countries.models import Country + @deconstructible class CountryCodeValidator(BaseValidator): diff --git a/solution/pulse/users/views.py b/solution/pulse/api/users/views.py similarity index 96% rename from solution/pulse/users/views.py rename to solution/pulse/api/users/views.py index 448297e..f93e967 100644 --- a/solution/pulse/users/views.py +++ b/solution/pulse/api/users/views.py @@ -9,8 +9,8 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView -from users.models import Profile -from users.serializers import ProfileSerializer, UpdateProfileSerializer +from api.users.models import Profile +from api.users.serializers import ProfileSerializer, UpdateProfileSerializer class RegisterUserApiView(APIView): diff --git a/solution/pulse/countries/urls.py b/solution/pulse/countries/urls.py deleted file mode 100644 index d20947b..0000000 --- a/solution/pulse/countries/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.urls import path - -import countries.views - -urlpatterns = [ - path("", countries.views.CountryListView.as_view(), name="countries"), - path( - "/", - countries.views.CountryByAlpha2View.as_view(), - name="country_by_alpha2", - ), -] diff --git a/solution/pulse/ping/urls.py b/solution/pulse/ping/urls.py deleted file mode 100644 index f4a7044..0000000 --- a/solution/pulse/ping/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.urls import path - -import ping.views - -urlpatterns = [ - path("", ping.views.PingView.as_view(), name="ping"), -] diff --git a/solution/pulse/pulse/settings.py b/solution/pulse/pulse/settings.py index 2fdc524..6180ac5 100644 --- a/solution/pulse/pulse/settings.py +++ b/solution/pulse/pulse/settings.py @@ -26,9 +26,9 @@ INSTALLED_APPS = [ "rest_framework", "django_filters", # Developed apps - "ping.apps.PingConfig", - "countries.apps.CountriesConfig", - "users.apps.UsersConfig", + "api.ping.apps.PingConfig", + "api.countries.apps.CountriesConfig", + "api.users.apps.UsersConfig", ] MIDDLEWARE = [ @@ -116,7 +116,7 @@ REST_FRAMEWORK = { "django_filters.rest_framework.DjangoFilterBackend" ], "DEFAULT_AUTHENTICATION_CLASSES": ( - "users.authentication.JWTAuthentication", + "api.users.authentication.JWTAuthentication", ), } diff --git a/solution/pulse/pulse/urls.py b/solution/pulse/pulse/urls.py index 1d45e78..8679f82 100644 --- a/solution/pulse/pulse/urls.py +++ b/solution/pulse/pulse/urls.py @@ -13,9 +13,7 @@ urlpatterns = [ ), ), # API - path("api/ping", include("ping.urls")), - path("api/countries", include("countries.urls")), - path("api/", include("users.urls")), + path("api/", include("api.urls")), ] if settings.DEBUG: