11import uuid
22from typing import Any
33
4- from fastapi import APIRouter , HTTPException
5- from sqlmodel import func , select
4+ from fastapi import APIRouter
5+
66
77from app .api .deps import CurrentUser , SessionDep
8- from app .models import TokenPayload
9- from app .model .users import User
8+ from app .model .items import ItemCreate , ItemPublic , ItemsPublic , ItemUpdate
9+ from app .model .users import Message
10+ from app .service .item_service import ItemService
1011
1112router = APIRouter (prefix = "/items" , tags = ["items" ])
1213
@@ -18,42 +19,25 @@ def read_items(
1819 """
1920 Retrieve items.
2021 """
21-
22- if current_user .is_superuser :
23- count_statement = select (func .count ()).select_from (Item )
24- count = session .exec (count_statement ).one ()
25- statement = select (Item ).offset (skip ).limit (limit )
26- items = session .exec (statement ).all ()
27- else :
28- count_statement = (
29- select (func .count ())
30- .select_from (Item )
31- .where (Item .owner_id == current_user .id )
32- )
33- count = session .exec (count_statement ).one ()
34- statement = (
35- select (Item )
36- .where (Item .owner_id == current_user .id )
37- .offset (skip )
38- .limit (limit )
39- )
40- items = session .exec (statement ).all ()
41-
42- return ItemsPublic (data = items , count = count )
22+ item_service = ItemService (session )
23+ result = item_service .read_items (
24+ owner_id = current_user .id ,
25+ is_superuser = current_user .is_superuser ,
26+ skip = skip ,
27+ limit = limit ,
28+ )
29+ return ItemsPublic (data = result ["data" ], count = result ["count" ])
4330
4431
4532@router .get ("/{id}" , response_model = ItemPublic )
4633def read_item (session : SessionDep , current_user : CurrentUser , id : uuid .UUID ) -> Any :
4734 """
4835 Get item by ID.
4936 """
50- item = session .get (Item , id )
51- if not item :
52- raise HTTPException (status_code = 404 , detail = "Item not found" )
53- if not current_user .is_superuser and (item .owner_id != current_user .id ):
54- raise HTTPException (status_code = 400 , detail = "Not enough permissions" )
55- return item
56-
37+ item_service = ItemService (session )
38+ return item_service .read_item (
39+ item_id = id , owner_id = current_user .id , is_superuser = current_user .is_superuser
40+ )
5741
5842@router .post ("/" , response_model = ItemPublic )
5943def create_item (
@@ -62,11 +46,8 @@ def create_item(
6246 """
6347 Create new item.
6448 """
65- item = Item .model_validate (item_in , update = {"owner_id" : current_user .id })
66- session .add (item )
67- session .commit ()
68- session .refresh (item )
69- return item
49+ item_service = ItemService (session )
50+ return item_service .create_item (item_in , current_user .id )
7051
7152
7253@router .put ("/{id}" , response_model = ItemPublic )
@@ -80,17 +61,13 @@ def update_item(
8061 """
8162 Update an item.
8263 """
83- item = session .get (Item , id )
84- if not item :
85- raise HTTPException (status_code = 404 , detail = "Item not found" )
86- if not current_user .is_superuser and (item .owner_id != current_user .id ):
87- raise HTTPException (status_code = 400 , detail = "Not enough permissions" )
88- update_dict = item_in .model_dump (exclude_unset = True )
89- item .sqlmodel_update (update_dict )
90- session .add (item )
91- session .commit ()
92- session .refresh (item )
93- return item
64+ item_service = ItemService (session )
65+ return item_service .update_item (
66+ item_id = id ,
67+ item_in = item_in ,
68+ owner_id = current_user .id ,
69+ is_superuser = current_user .is_superuser ,
70+ )
9471
9572
9673@router .delete ("/{id}" )
@@ -100,11 +77,7 @@ def delete_item(
10077 """
10178 Delete an item.
10279 """
103- item = session .get (Item , id )
104- if not item :
105- raise HTTPException (status_code = 404 , detail = "Item not found" )
106- if not current_user .is_superuser and (item .owner_id != current_user .id ):
107- raise HTTPException (status_code = 400 , detail = "Not enough permissions" )
108- session .delete (item )
109- session .commit ()
110- return Message (message = "Item deleted successfully" )
80+ item_service = ItemService (session )
81+ item_service .delete_item (
82+ item_id = id , owner_id = current_user .id , is_superuser = current_user .is_superuser
83+ )
0 commit comments