43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
from fastapi import HTTPException
|
|
|
|
|
|
from .base_storage import BaseStorage
|
|
from core.models.office.db import ProfileDB
|
|
from core.models.office.requests import CreateOrUpdateProfileRequest
|
|
|
|
|
|
class ProfileStorage(BaseStorage):
|
|
|
|
def get_by_id(self, id: int):
|
|
row = self.get_by('profile', id=id)
|
|
if row is None:
|
|
raise HTTPException(status_code=404, detail='Profile not found')
|
|
return ProfileDB(id=row[0], full_name=row[1], phone=row[2], email=row[3])
|
|
|
|
def create_or_update_profile(self, data: CreateOrUpdateProfileRequest):
|
|
try:
|
|
if not data.id:
|
|
raise KeyError('No id provided')
|
|
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))
|
|
except (HTTPException, KeyError) as _:
|
|
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]
|