jde-server/core/storages/profile_storage.py

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]