11from functools import reduce
2+ from typing import Any
3+ from fastapi import HTTPException
24from fastapi .responses import JSONResponse
35from psycopg2 .errors import UniqueViolation
46from fastapi .datastructures import QueryParams
@@ -16,25 +18,28 @@ def __init__(self) -> None:
1618 self .columns : list [str ] = retrieve_table_columns (self .table )
1719 self .all_columns = reduce (lambda acc , elem : acc + ", " + str (elem ), self .columns )
1820
19- def all (self , query_params : QueryParams ) -> JSONResponse :
21+ def all (self , query_params : QueryParams ) -> dict [ str , Any ] :
2022 query = f"SELECT { self .all_columns } FROM { self .table } "
2123 page = int (query_params .get ("page" , 1 ))
2224 rows_per_page = int (query_params .get ("rows_per_page" , 10 ))
2325 sort = query_params .get ("sort_by" , None )
2426
2527 if sort is not None :
26- sort_column , sort_order = sort .split ("," )
28+ try :
29+ sort_column , sort_order = sort .split ("," )
30+ except Exception :
31+ raise HTTPException (status_code = 422 , detail = {"error" : True , "message" : f"Coluna e direção { sort } não separada corretamente por ','" })
2732
2833 if sort_column not in self .columns :
29- return JSONResponse ( {"error" : True , "message" : f"Coluna { sort_column } não identificada" }, 400 )
34+ raise HTTPException ( status_code = 422 , detail = {"error" : True , "message" : f"Coluna { sort_column } não identificada" })
3035
3136 if sort_order .lower () not in ["asc" , "desc" ]:
32- return JSONResponse ( {"error" : True , "message" : f"Direção de ordenação { sort_order } inválida, deve ser 'asc' ou 'desc'" }, 400 )
37+ raise HTTPException ( status_code = 422 , detail = {"error" : True , "message" : f"Direção de ordenação { sort_order } inválida, deve ser 'asc' ou 'desc'" })
3338
3439 output = paginate (query , page , rows_per_page , sort )
35- return JSONResponse ( output , 200 )
40+ return output
3641
37- def view (self , user_type_id : int ) -> JSONResponse :
42+ def view (self , user_type_id : int ) -> dict [ str , Any ] :
3843 user_type = None
3944
4045 try :
@@ -43,54 +48,54 @@ def view(self, user_type_id: int) -> JSONResponse:
4348 row = db .cursor .fetchone ()
4449
4550 if row is None :
46- return JSONResponse (status_code = 404 , content = {"error" : True , "message" : "Tipo de usuário não encontrado" })
51+ raise HTTPException (status_code = 404 , detail = {"error" : True , "message" : "Tipo de usuário não encontrado" })
4752 except Exception :
48- return JSONResponse (status_code = 500 , content = {"error" : True , "message" : "Database error" })
53+ raise HTTPException (status_code = 500 , detail = {"error" : True , "message" : "Database error" })
4954
5055 user_type = line_to_dict (row , self .columns )
51- return JSONResponse ( status_code = 200 , content = { "error" : False , "data" : user_type })
56+ return user_type
5257
53- def add (self , user_type : UserTypeSchema ) -> JSONResponse :
58+ def add (self , user_type : UserTypeSchema ) -> dict [ str , Any ] :
5459 try :
5560 with PgDatabase () as db :
5661 db .cursor .execute (f"INSERT INTO { self .table } (nome) VALUES (%s) RETURNING id" , (user_type .nome ,))
5762 raw_id = db .cursor .fetchone ()
5863
5964 if raw_id is None :
60- return JSONResponse (status_code = 500 , content = {"error" : True , "message" : "Não foi possível inserir o tipo de usuário." })
65+ raise HTTPException (status_code = 500 , detail = {"error" : True , "message" : "Não foi possível inserir o tipo de usuário." })
6166
6267 inserted_id = raw_id [0 ]
6368 db .connection .commit ()
6469 except UniqueViolation as e :
65- return JSONResponse (status_code = 400 , content = {"error" : True , "message" : str (e )})
70+ raise HTTPException (status_code = 400 , detail = {"error" : True , "message" : str (e )})
6671 except Exception :
67- return JSONResponse (status_code = 500 , content = {"error" : True , "message" : "Database error" })
72+ raise HTTPException (status_code = 500 , detail = {"error" : True , "message" : "Database error" })
6873
69- return JSONResponse ( status_code = 200 , content = {"error" : False , "message" : f"Tipo de usuário { user_type .nome } adicionado com sucesso." , "id" : inserted_id })
74+ return {"error" : False , "message" : f"Tipo de usuário { user_type .nome } adicionado com sucesso." , "id" : inserted_id }
7075
71- def edit (self , user_type_id : int , user_type : UserTypeSchema ) -> JSONResponse :
76+ def edit (self , user_type_id : int , user_type : UserTypeSchema ) -> dict [ str , Any ] :
7277 user_type_dict = user_type .model_dump (exclude_none = True )
7378 if not user_type_dict :
74- return JSONResponse (status_code = 200 , content = {"error" : False , "message" : f"Tipo de usuário com id { user_type_id } editado com sucesso." })
79+ raise HTTPException (status_code = 200 , detail = {"error" : False , "message" : f"Tipo de usuário com id { user_type_id } editado com sucesso." })
7580
7681 set_fields , set_values = fields_to_update (user_type_dict )
7782 try :
7883 with PgDatabase () as db :
7984 db .cursor .execute (f"UPDATE { self .table } SET { set_fields } WHERE id = %s" , set_values + (user_type_id ,))
8085 db .connection .commit ()
8186 except UniqueViolation as e :
82- return JSONResponse (status_code = 400 , content = {"error" : True , "message" : str (e )})
87+ raise HTTPException (status_code = 400 , detail = {"error" : True , "message" : str (e )})
8388 except Exception as e :
84- return JSONResponse (status_code = 500 , content = {"error" : True , "message" : str (e )})
89+ raise HTTPException (status_code = 500 , detail = {"error" : True , "message" : str (e )})
8590
86- return JSONResponse ( status_code = 200 , content = {"error" : False , "message" : f"Tipo de usuário com id { user_type_id } editado com sucesso." })
91+ return {"error" : False , "message" : f"Tipo de usuário com id { user_type_id } editado com sucesso." }
8792
88- def delete (self , user_type_id : int ) -> JSONResponse :
93+ def delete (self , user_type_id : int ) -> dict [ str , Any ] :
8994 try :
9095 with PgDatabase () as db :
9196 db .cursor .execute (f"DELETE FROM { self .table } WHERE id = %s" , (user_type_id ,))
9297 db .connection .commit ()
9398 except Exception :
94- return JSONResponse (status_code = 500 , content = {"error" : True , "message" : "Database error" })
99+ raise HTTPException (status_code = 500 , detail = {"error" : True , "message" : "Database error" })
95100
96- return JSONResponse ( status_code = 200 , content = {"error" : False , "message" : f"Tipo de usuário com id { user_type_id } deletado com sucesso." })
101+ return {"error" : False , "message" : f"Tipo de usuário com id { user_type_id } deletado com sucesso." }
0 commit comments