Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
dbbee72
chore: crete auth app
Apr 16, 2022
4d4b059
chore: add auth to installed apps
oyasr Apr 16, 2022
a8ad3b2
chore: add .vscode to gitignore
oyasr Apr 16, 2022
94b8696
feat: create initial user model
oyasr Apr 16, 2022
9b30190
chore: create locations app
oyasr Apr 16, 2022
7adf5a3
feat: create initial locations models
oyasr Apr 16, 2022
120a724
feat: add govs and cities data
oyasr Apr 16, 2022
974fd8f
feat: add gov-city db population service
oyasr Apr 16, 2022
5abf6cc
feat: add user create service
oyasr Apr 17, 2022
06118a0
merge dev
oyasr Apr 17, 2022
d3dc2c4
refactor: move auth app inside api/
oyasr Apr 17, 2022
e5332fd
feat: Implement Case model
OsamaRagab520 Apr 17, 2022
ed92a3d
feat: Implement Case services
OsamaRagab520 Apr 17, 2022
c81d9f2
Merge branch 'dev' into feature/case-model
OsamaRagab520 Apr 17, 2022
07d909b
fix: add cases app to local apps
oyasr Apr 17, 2022
1e78ea0
fix: locations typo
oyasr Apr 17, 2022
35e28d2
fix: add api namespace to app names
oyasr Apr 17, 2022
fc8d6eb
fix: rquirements typo
oyasr Apr 17, 2022
fee730d
fix: circular import
oyasr Apr 17, 2022
ff30b99
Merge branch 'dev' into feature/user-authentication
oyasr Apr 17, 2022
6fbdc72
feat: add location attribute to case model
OsamaRagab520 Apr 17, 2022
c614576
Merge branch 'dev' into feature/case-model
OsamaRagab520 Apr 17, 2022
796ad07
fix: admin page typo
oyasr Apr 17, 2022
b4f1678
Merge branch 'dev' into feature/user-model
oyasr Apr 17, 2022
7b77806
Merge branch 'dev' into feature/case-model
OsamaRagab520 Apr 17, 2022
a631c03
feat: initial database migration
oyasr Apr 17, 2022
27eed05
feat: add cases app models to admin site
OsamaRagab520 Apr 17, 2022
3aaeba6
feat: add locations app models to admin site
oyasr Apr 17, 2022
755fd88
Merge branch 'dev' into feature/user-authentication
OsamaRagab520 Apr 17, 2022
619987c
chore: update requirements folder
oyasr Apr 17, 2022
0816e2e
fix: json paths
oyasr Apr 17, 2022
457c8cd
Merge branch 'dev' into feature/location-model
oyasr Apr 17, 2022
a7b64e4
feat: add governorate list selector
oyasr Apr 17, 2022
2e1de07
chore: add dj-rest-auth lib
OsamaRagab520 Apr 17, 2022
4b08e24
Merge branch 'dev' into feature/user-authentication
OsamaRagab520 Apr 17, 2022
9892c81
fix: add None as default value for lon & lat
oyasr Apr 17, 2022
c5e47a5
fix: add firebase token to create user service
oyasr Apr 17, 2022
acef245
Merge branch 'dev' into feature/user-authentication
OsamaRagab520 Apr 17, 2022
612641c
feat: implement user registration
OsamaRagab520 Apr 17, 2022
6a191ad
chore: rename auth app to authentication
OsamaRagab520 Apr 18, 2022
cc16528
fix: RegisterSerializer fields
OsamaRagab520 Apr 18, 2022
10742a9
fix: location clean logic
oyasr Apr 18, 2022
7b59ff2
Merge branch 'dev' into feature/location-model
oyasr Apr 18, 2022
43bcb2c
Merge branch 'dev' into feature/user-authentication
OsamaRagab520 Apr 18, 2022
d6df20c
fix: modify address to accpet null
OsamaRagab520 Apr 18, 2022
fe03a91
Merge branch 'dev' into feature/location-model
OsamaRagab520 Apr 18, 2022
bb3f8fe
Merge branch 'dev' into feature/user-authentication
OsamaRagab520 Apr 18, 2022
198caa6
feat: create custom error handler
oyasr Apr 19, 2022
1737adf
fix: update token auth
OsamaRagab520 Apr 19, 2022
7506331
Merge branch 'dev' of https://github.com/MafQud/API into dev
OsamaRagab520 Apr 19, 2022
a4a1306
feat: implement user registration
OsamaRagab520 Apr 19, 2022
5ef868b
Merge branch 'dev' into feature/user-model
OsamaRagab520 Apr 19, 2022
507a8df
refactor: create_location service
OsamaRagab520 Apr 19, 2022
ce911ae
Merge branch 'dev' into feature/location-model
OsamaRagab520 Apr 19, 2022
28148e9
Merge branch 'feature/location-model' into dev
OsamaRagab520 Apr 19, 2022
c571802
Merge branch 'dev' into feature/user-authentication
OsamaRagab520 Apr 19, 2022
f086437
refactor: migrate to simpleJWT
OsamaRagab520 Apr 19, 2022
9ffb86b
fix: CreateUserApi
OsamaRagab520 Apr 19, 2022
aa00cfa
fix: circural referance
OsamaRagab520 Apr 19, 2022
e8e3ebf
Merge branch 'feature/api-errors' into dev
OsamaRagab520 Apr 19, 2022
c58b39b
Merge branch 'feature/user-model' into dev
OsamaRagab520 Apr 19, 2022
7352c07
chore: apply new model migrations
OsamaRagab520 Apr 19, 2022
5f73013
fix: remove dj-rest-auth from installed apps
oyasr Apr 19, 2022
083303a
Merge branch 'dev' into feature/case-model
OsamaRagab520 Apr 20, 2022
0e21f5d
feat: add common tools
OsamaRagab520 Apr 20, 2022
aa03b9d
Merge branch 'dev' into feature/case-model
OsamaRagab520 Apr 20, 2022
0850ecc
refactor: case services
OsamaRagab520 Apr 20, 2022
7e2d5a3
feat: add custom permissions
oyasr Apr 21, 2022
2dd6f16
refactor: CaseDetails model
OsamaRagab520 Apr 21, 2022
191919c
refactor: case services
OsamaRagab520 Apr 21, 2022
aa9dc34
feat: implement case create view
OsamaRagab520 Apr 21, 2022
0da530b
Merge branch 'dev' into feature/case-model
OsamaRagab520 Apr 22, 2022
390f519
feat: s3 direct upload
oyasr Apr 22, 2022
898f6d0
feat: implement user detail view
oyasr Apr 23, 2022
bcfb922
feat: implement user update view
oyasr Apr 24, 2022
9f914c1
feat: implement update location service
oyasr Apr 24, 2022
7e51ec3
Merge branch 'dev' into feature/user-model
oyasr Apr 24, 2022
0ec293b
refactor: update user location in place
oyasr Apr 24, 2022
99d549d
refactor: make urls for each app
oyasr Apr 24, 2022
1e650b9
fix: api namespace collision
oyasr Apr 24, 2022
3f20267
test: user model test cases
oyasr Apr 24, 2022
e2d1c90
feat: implement DetailCaseApi
OsamaRagab520 Apr 24, 2022
ca2c659
Merge branch 'dev' into feature/case-model
OsamaRagab520 Apr 26, 2022
00766bc
fix: append api namespace to apis url
oyasr Apr 26, 2022
0feb4e8
Merge branch 'feature/user-authentication' into dev
oyasr Apr 26, 2022
dac4f4b
feat: implement CaseListApi
OsamaRagab520 May 3, 2022
b669bf6
Merge branch 'dev' into feature/case-model
OsamaRagab520 May 3, 2022
800eadb
chore: run jobs on dev PR & commits
OsamaRagab520 May 8, 2022
f6a96f6
MAFQUD-208 : notification system (#20)
oyasr May 8, 2022
a9f24ee
MAFQUD-206 : phone validation (#21)
oyasr May 8, 2022
c5e5f97
MAFQUD-207 : Refactor services (#22)
OsamaRagab520 May 8, 2022
c1e5893
MAFQUD-205 : Write list case matches Endpoint (#26)
OsamaRagab520 May 10, 2022
c149531
MAFQUD-210: national id (#27)
oyasr May 10, 2022
3f1d6b7
Final tweaks (#30)
OsamaRagab520 May 13, 2022
e75b3f7
chore: disable push notification & hot fixes
OsamaRagab520 May 13, 2022
de3ab40
chore: integrate files into cases instead of urls
OsamaRagab520 May 15, 2022
5f21b07
chore: apply clean migrations
OsamaRagab520 May 15, 2022
a3696d2
chore: update app base settings
OsamaRagab520 May 15, 2022
fb9159f
fix: minor cases app bugs
OsamaRagab520 May 21, 2022
d2211a3
feat: pack user info in the token
OsamaRagab520 May 21, 2022
89e24ee
chore: use firebase_token as the id for fcm device
OsamaRagab520 May 21, 2022
4ae6c26
chore: disable unnessary urls
OsamaRagab520 May 21, 2022
1ff40cc
Merge branch 'master' into dev
OsamaRagab520 May 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions api/authentication/apis.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,31 @@
from rest_framework import permissions, serializers, status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView

from api.authentication.selectors import validate_phone
from api.common.validators import is_phone


class MyTokenObtainPairView(TokenObtainPairView):
class TokenSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)

# Users Claims
token["name"] = user.name
token["phone"] = user.username
token["national_id"] = user.national_id
token["firebase_token"] = user.firebase_token
token["gov"] = user.location.gov.name_ar
token["city"] = user.location.city.name_ar
return token

serializer_class = TokenSerializer


class ValidatePhoneAPI(APIView):
permission_classes = [permissions.AllowAny]

Expand Down
10 changes: 3 additions & 7 deletions api/authentication/urls.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
from django.urls import path
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
TokenVerifyView,
)
from rest_framework_simplejwt.views import TokenRefreshView, TokenVerifyView

from api.authentication.apis import ValidatePhoneAPI
from api.authentication.apis import MyTokenObtainPairView, ValidatePhoneAPI

app_name = "auth"
urlpatterns = [
path("token/", TokenObtainPairView.as_view(), name="obtain_token"),
path("token/", MyTokenObtainPairView.as_view(), name="obtain_token"),
path("token/refresh/", TokenRefreshView.as_view(), name="refresh_token"),
path("token/verify/", TokenVerifyView.as_view(), name="verify_token"),
path("phone/validate/", ValidatePhoneAPI.as_view(), name="validate_phone"),
Expand Down
3 changes: 3 additions & 0 deletions api/cases/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,9 @@ def publish_case(*, case: Case, performed_by: User):
if not case.is_active:
raise ValidationError("Cannot publish inactive case")

if case.posted_at:
raise ValidationError("Case already published")

case.publish()
case.save()

Expand Down
4 changes: 2 additions & 2 deletions api/notifications/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ def create_notification(
def create_fcm_device(
*,
user: User,
fcm_token: str,
firebase_token: str,
device_type: Optional[str] = "android",
) -> FCMDevice:

device = FCMDevice(
user=user,
type=device_type,
registration_id=fcm_token,
registration_id=firebase_token,
)
device.full_clean()
device.save()
Expand Down
4 changes: 1 addition & 3 deletions api/users/apis.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ class InputSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField()
name = serializers.CharField()
fcm_token = serializers.CharField()
firebase_token = serializers.CharField()
location = inline_serializer(
fields={
Expand Down Expand Up @@ -55,7 +54,6 @@ class UpdateUserApi(APIView):
class InputSerializer(serializers.Serializer):
name = serializers.CharField(required=False)
firebase_token = serializers.CharField(required=False)
fcm_token = serializers.CharField(required=False)
location = inline_serializer(
fields={
"gov": serializers.IntegerField(),
Expand Down Expand Up @@ -91,7 +89,7 @@ class OutputSerializer(serializers.Serializer):
type = serializers.CharField()
state = serializers.CharField(source="get_state_display")
name = serializers.CharField(source="details.name")
thumbnail = serializers.URLField()
thumbnail = serializers.URLField(source="thumbnail.url")
last_seen = serializers.DateField(source="details.last_seen")
posted_at = serializers.DateTimeField()
location = inline_serializer(
Expand Down
3 changes: 1 addition & 2 deletions api/users/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ def create_user(
password: str,
firebase_token: str,
location: Dict,
fcm_token: str,
) -> User:

# Creating user's related entities
Expand All @@ -41,7 +40,7 @@ def create_user(
# Saving user to the database
user.save()

create_fcm_device(user=user, fcm_token=fcm_token)
create_fcm_device(user=user, firebase_token=firebase_token)

return user

Expand Down
1 change: 0 additions & 1 deletion api/users/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ def setUpTestData(cls): # Called once at the beginning of the test run
password="hardpassword",
firebase_token="token",
location={"gov": 1, "city": "4"},
fcm_token="fcm_token",
)

def test_name_max_lenght(self):
Expand Down
43 changes: 23 additions & 20 deletions config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,25 @@
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.http import HttpResponseNotFound
from django.urls import include, path
from django.views import defaults as default_views
from django.views.generic import TemplateView
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
from rest_framework.authtoken.views import obtain_auth_token

# from django.views.generic import TemplateView
# from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
# from rest_framework.authtoken.views import obtain_auth_token

urlpatterns = [
path("", TemplateView.as_view(template_name="pages/home.html"), name="home"),
path(
"about/", TemplateView.as_view(template_name="pages/about.html"), name="about"
),
path("", HttpResponseNotFound),
# path("", TemplateView.as_view(template_name="pages/home.html"), name="home"),
# path(
# "about/", TemplateView.as_view(template_name="pages/about.html"), name="about"
# ),
# Django Admin, use {% url 'admin:index' %}
path(settings.ADMIN_URL, admin.site.urls),
# User management
path("app-users/", include("api.users.app_urls", namespace="app_users")),
path("accounts/", include("allauth.urls")),
# path("app-users/", include("api.users.app_urls", namespace="app_users")),
# path("accounts/", include("allauth.urls")),
# Your stuff: custom urls includes go here
path("api/", include("api.apis.urls", namespace="apis")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Expand All @@ -26,17 +29,17 @@
urlpatterns += staticfiles_urlpatterns()

# API URLS
urlpatterns += [
# DRF auth token
path("auth-token/", obtain_auth_token),
# Docs
path("api/schema/", SpectacularAPIView.as_view(), name="api-schema"),
path(
"api/docs/",
SpectacularSwaggerView.as_view(url_name="api-schema"),
name="api-docs",
),
]
# urlpatterns += [
# # DRF auth token
# path("auth-token/", obtain_auth_token),
# # Docs
# path("api/schema/", SpectacularAPIView.as_view(), name="api-schema"),
# path(
# "api/docs/",
# SpectacularSwaggerView.as_view(url_name="api-schema"),
# name="api-docs",
# ),
# ]

if settings.DEBUG:
# This allows the error pages to be debugged during development, just visit
Expand Down