master
Ernest Litvinenko 2023-11-21 01:02:56 +03:00
parent 601a0128b0
commit 4da6db5c49
5 changed files with 30 additions and 9 deletions

View File

@ -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.requests import UpdateOfficeRequest
from core.models.office.responses import JdeOfficeDetailResponse from core.models.office.responses import JdeOfficeDetailResponse
@ -9,10 +9,19 @@ router = APIRouter(prefix='/offices')
@router.get('/') @router.get('/')
async def list_offices(offices: list[JdeOfficeDetailResponse] = Depends(services.list_offices_service)) -> list[ async def list_offices(offices: list[JdeOfficeDetailResponse] = Depends(services.list_offices_service)) -> list[
JdeOfficeDetailResponse]: JdeOfficeDetailResponse]:
return offices 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('/') @router.post('/')
async def update_office(data: UpdateOfficeRequest): async def update_office(data: UpdateOfficeRequest):
await services.update_office(data) await services.update_office(data)

View File

@ -10,8 +10,8 @@ router = APIRouter(prefix='/profiles')
# todo implement this handlers in services and storages. Then use fastapi.Depends() # todo implement this handlers in services and storages. Then use fastapi.Depends()
@router.post('/') @router.post('/')
async def create_profile(): async def create_profile(data: CreateOrUpdateProfileRequest):
pass return profile_storage.create_profile(data)
@router.get('/') @router.get('/')
@ -31,4 +31,4 @@ async def delete_profile(profile_id: int = Path()):
@router.put('/') @router.put('/')
async def update_profile(data: CreateOrUpdateProfileRequest): async def update_profile(data: CreateOrUpdateProfileRequest):
profile_storage.create_or_update_profile(data=data) profile_storage.update_profile(data=data)

View File

@ -10,7 +10,7 @@ class UpdateOfficeRequest(BaseModel):
class CreateOrUpdateProfileRequest(BaseModel): class CreateOrUpdateProfileRequest(BaseModel):
id: int | None id: int | None = None
full_name: str full_name: str
phone: str | None phone: str
email: str | None email: str

View File

@ -8,7 +8,7 @@ class ProfileResponse(ProfileDB):
class ExtendedResponse(BaseModel): class ExtendedResponse(BaseModel):
features: str | None = None features: str | None = None
contact_person: ProfileResponse | None = None contact_person_id: int | None = None
person_count: int | None = None person_count: int | None = None
rating: int | None = None rating: int | None = None

View File

@ -25,6 +25,18 @@ class ProfileStorage(BaseStorage):
sql = f"insert into profile (full_name, phone, email) values (%s, %s, %s)" sql = f"insert into profile (full_name, phone, email) values (%s, %s, %s)"
self.db.execute(sql, (data.full_name, data.phone, data.email)) 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): def list_all_profiles(self):
rows = self.list_by('profile') rows = self.list_by('profile')
return [ProfileDB(id=row[0], full_name=row[1], phone=row[2], email=row[3]) for row in rows] return [ProfileDB(id=row[0], full_name=row[1], phone=row[2], email=row[3]) for row in rows]