diff --git a/core/handlers/office/handlers.py b/core/handlers/office/handlers.py index bebff1c..eb6f63e 100644 --- a/core/handlers/office/handlers.py +++ b/core/handlers/office/handlers.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, Depends +from fastapi import APIRouter, Depends, Path from core.models.office.requests import UpdateOfficeRequest from core.models.office.responses import JdeOfficeDetailResponse @@ -9,10 +9,19 @@ router = APIRouter(prefix='/offices') @router.get('/') async def list_offices(offices: list[JdeOfficeDetailResponse] = Depends(services.list_offices_service)) -> list[ - JdeOfficeDetailResponse]: + JdeOfficeDetailResponse]: return offices +@router.get('/{office_id}') +async def get_office_by_id(office_id: str = Path()) -> JdeOfficeDetailResponse | None: + data = await services.list_offices_service() + try: + return [x for x in data if x.code == office_id][0] + except IndexError: + return None + + @router.post('/') async def update_office(data: UpdateOfficeRequest): await services.update_office(data) diff --git a/core/handlers/profile/handlers.py b/core/handlers/profile/handlers.py index 1a2a306..6150624 100644 --- a/core/handlers/profile/handlers.py +++ b/core/handlers/profile/handlers.py @@ -10,8 +10,8 @@ router = APIRouter(prefix='/profiles') # todo implement this handlers in services and storages. Then use fastapi.Depends() @router.post('/') -async def create_profile(): - pass +async def create_profile(data: CreateOrUpdateProfileRequest): + return profile_storage.create_profile(data) @router.get('/') @@ -31,4 +31,4 @@ async def delete_profile(profile_id: int = Path()): @router.put('/') async def update_profile(data: CreateOrUpdateProfileRequest): - profile_storage.create_or_update_profile(data=data) + profile_storage.update_profile(data=data) diff --git a/core/models/office/requests.py b/core/models/office/requests.py index c079158..8fcb3d4 100644 --- a/core/models/office/requests.py +++ b/core/models/office/requests.py @@ -10,7 +10,7 @@ class UpdateOfficeRequest(BaseModel): class CreateOrUpdateProfileRequest(BaseModel): - id: int | None + id: int | None = None full_name: str - phone: str | None - email: str | None + phone: str + email: str diff --git a/core/models/office/responses.py b/core/models/office/responses.py index 6b97340..4911d4c 100644 --- a/core/models/office/responses.py +++ b/core/models/office/responses.py @@ -8,7 +8,7 @@ class ProfileResponse(ProfileDB): class ExtendedResponse(BaseModel): features: str | None = None - contact_person: ProfileResponse | None = None + contact_person_id: int | None = None person_count: int | None = None rating: int | None = None diff --git a/core/storages/profile_storage.py b/core/storages/profile_storage.py index bc9b0fb..7a5193a 100644 --- a/core/storages/profile_storage.py +++ b/core/storages/profile_storage.py @@ -25,6 +25,18 @@ class ProfileStorage(BaseStorage): sql = f"insert into profile (full_name, phone, email) values (%s, %s, %s)" self.db.execute(sql, (data.full_name, data.phone, data.email)) + def update_profile(self, data: CreateOrUpdateProfileRequest): + self.get_by_id(data.id) + sql = f"update profile set full_name = %s, phone = %s, email = %s where id = %s" + self.db.execute(sql, (data.full_name, data.phone, data.email, data.id)) + + def create_profile(self, data: CreateOrUpdateProfileRequest): + sql = f"insert into profile (full_name, phone, email) values (%s, %s, %s)" + self.db.execute(sql, (data.full_name, data.phone, data.email)) + row = self.get_by('profile', email=data.email) + return ProfileDB(id=row[0], full_name=row[1], phone=row[2], email=row[3]) + + def list_all_profiles(self): rows = self.list_by('profile') return [ProfileDB(id=row[0], full_name=row[1], phone=row[2], email=row[3]) for row in rows]