From 601a0128b0c9685ab8214dfdeed9dd6aebe1efa0 Mon Sep 17 00:00:00 2001 From: Ernest Litvinenko Date: Wed, 15 Nov 2023 16:20:07 +0300 Subject: [PATCH] add profile --- core/handlers/office/handlers.py | 4 ++-- core/handlers/profile/handlers.py | 18 +++++++++++------- core/models/office/responses.py | 8 ++++---- core/services/office/services.py | 2 +- core/storages/office_storage.py | 4 ++-- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/core/handlers/office/handlers.py b/core/handlers/office/handlers.py index 5f1273f..bebff1c 100644 --- a/core/handlers/office/handlers.py +++ b/core/handlers/office/handlers.py @@ -7,12 +7,12 @@ from core.services.office import services router = APIRouter(prefix='/offices') -@router.get('/offices') +@router.get('/') async def list_offices(offices: list[JdeOfficeDetailResponse] = Depends(services.list_offices_service)) -> list[ JdeOfficeDetailResponse]: return offices -@router.post('/offices') +@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 0bdb20d..1a2a306 100644 --- a/core/handlers/profile/handlers.py +++ b/core/handlers/profile/handlers.py @@ -1,5 +1,9 @@ from fastapi import APIRouter, Path +from core.models.office.db import ProfileDB +from core.models.office.requests import CreateOrUpdateProfileRequest +from core.registry import profile_storage + router = APIRouter(prefix='/profiles') @@ -11,13 +15,13 @@ async def create_profile(): @router.get('/') -async def list_profiles(): - pass +async def list_profiles() -> list[ProfileDB]: + return profile_storage.list_all_profiles() @router.get('/{profile_id}') -async def get_profile(profile_id: int = Path()): - pass +async def get_profile(profile_id: int = Path()) -> ProfileDB: + return profile_storage.get_by_id(profile_id) @router.delete('/{profile_id}') @@ -25,6 +29,6 @@ async def delete_profile(profile_id: int = Path()): pass -@router.put('/{profile_id}') -async def update_profile(profile_id: int = Path()): - pass +@router.put('/') +async def update_profile(data: CreateOrUpdateProfileRequest): + profile_storage.create_or_update_profile(data=data) diff --git a/core/models/office/responses.py b/core/models/office/responses.py index 09a9c6c..6b97340 100644 --- a/core/models/office/responses.py +++ b/core/models/office/responses.py @@ -7,10 +7,10 @@ class ProfileResponse(ProfileDB): class ExtendedResponse(BaseModel): - features: str | None - contact_person: ProfileResponse | None - person_count: int | None - rating: int | None + features: str | None = None + contact_person: ProfileResponse | None = None + person_count: int | None = None + rating: int | None = None class JdeOfficeDetailResponse(JdeOfficeDB): diff --git a/core/services/office/services.py b/core/services/office/services.py index f7ba035..c2adb13 100644 --- a/core/services/office/services.py +++ b/core/services/office/services.py @@ -7,7 +7,7 @@ from ...models.office.requests import UpdateOfficeRequest async def list_offices_service() -> list[JdeOfficeDetailResponse]: offices = await grab_data() offices.sort(key=lambda x: x.code) - offices_additional_data = {data.code: data for data in office_storage.list_all_offices()} + offices_additional_data = {data.code: data.model_dump() for data in office_storage.list_all_offices()} response_data = [ JdeOfficeDetailResponse(**office.model_dump(), changeable_info=None or offices_additional_data.get(office.code)) for office in offices ] diff --git a/core/storages/office_storage.py b/core/storages/office_storage.py index 35aa939..e37b0d1 100644 --- a/core/storages/office_storage.py +++ b/core/storages/office_storage.py @@ -10,14 +10,14 @@ class OfficeStorage(BaseStorage): row = self.get_by('office', code=idx) if row is None: raise HTTPException(status_code=404, detail='Office not found') - office = JdeOfficeLocalDB(code=row[0], features=row[1], contact_person_id=row[2], person_count=row[3], + office = JdeOfficeLocalDB(code=str(row[0]), features=row[1], contact_person_id=row[2], person_count=row[3], rating=row[4]) return office def list_all_offices(self): rows = self.list_by('office') return [ - JdeOfficeLocalDB(code=row[0], + JdeOfficeLocalDB(code=str(row[0]), features=row[1], contact_person_id=row[2], person_count=row[3],