1+ import uuid
12from collections .abc import Sequence
23
3- from sqlalchemy import delete , func , select , update
4+ from sqlalchemy import delete , select , update
45from sqlalchemy .exc import IntegrityError
56from sqlalchemy .ext .asyncio import AsyncSession
7+ from sqlalchemy .orm import selectinload
68
79from app .core .models_core import CoreUser
810from app .modules .greencode import models_greencode , schemas_greencode
911
1012
11- async def get_items (db : AsyncSession ) -> Sequence [models_greencode .Item ]:
12- result = await db .execute (select (models_greencode .Item ))
13+ async def get_items (db : AsyncSession ) -> Sequence [models_greencode .GreenCodeItem ]:
14+ result = await db .execute (
15+ select (models_greencode .GreenCodeItem ).options (
16+ selectinload (models_greencode .GreenCodeItem .memberships ).selectinload (
17+ models_greencode .GreenCodeMembership .user ,
18+ ),
19+ ),
20+ )
1321 return result .scalars ().all ()
1422
1523
1624async def get_user_items (
1725 db : AsyncSession ,
1826 user_id : str ,
19- ) -> Sequence [models_greencode .Item ]:
27+ ) -> Sequence [models_greencode .GreenCodeItem ]:
2028 result = await db .execute (
21- select (models_greencode .Item ).where (
22- models_greencode .Item . users .any (
23- models_greencode .Membership .user_id == user_id ,
29+ select (models_greencode .GreenCodeItem ).where (
30+ models_greencode .GreenCodeItem . memberships .any (
31+ models_greencode .GreenCodeMembership .user_id == user_id ,
2432 ),
2533 ),
2634 )
@@ -30,10 +38,10 @@ async def get_user_items(
3038async def get_item_by_qr_code_content (
3139 db : AsyncSession ,
3240 qr_code_content : Sequence [str ],
33- ) -> models_greencode .Item | None :
41+ ) -> models_greencode .GreenCodeItem | None :
3442 result = await db .execute (
35- select (models_greencode .Item ).where (
36- models_greencode .Item .qr_code_content == qr_code_content ,
43+ select (models_greencode .GreenCodeItem ).where (
44+ models_greencode .GreenCodeItem .qr_code_content == qr_code_content ,
3745 ),
3846 )
3947 return result .scalars ().first ()
@@ -42,19 +50,19 @@ async def get_item_by_qr_code_content(
4250async def get_item_by_id (
4351 db : AsyncSession ,
4452 item_id : Sequence [str ],
45- ) -> models_greencode .Item | None :
53+ ) -> models_greencode .GreenCodeItem | None :
4654 result = await db .execute (
47- select (models_greencode .Item ).where (
48- models_greencode .Item .id == item_id ,
55+ select (models_greencode .GreenCodeItem ).where (
56+ models_greencode .GreenCodeItem .id == item_id ,
4957 ),
5058 )
5159 return result .scalars ().first ()
5260
5361
5462async def create_item (
55- item : models_greencode .Item ,
63+ item : models_greencode .GreenCodeItem ,
5664 db : AsyncSession ,
57- ) -> models_greencode .Item :
65+ ) -> models_greencode .GreenCodeItem :
5866 db .add (item )
5967 try :
6068 await db .commit ()
@@ -66,8 +74,8 @@ async def create_item(
6674
6775async def delete_item (item_id : str , db : AsyncSession ):
6876 await db .execute (
69- delete (models_greencode .Item ).where (
70- models_greencode .Item .id == item_id ,
77+ delete (models_greencode .GreenCodeItem ).where (
78+ models_greencode .GreenCodeItem .id == item_id ,
7179 ),
7280 )
7381 try :
@@ -83,8 +91,8 @@ async def update_item(
8391 db : AsyncSession ,
8492):
8593 await db .execute (
86- update (models_greencode .Item )
87- .where (models_greencode .Item .id == item_id )
94+ update (models_greencode .GreenCodeItem )
95+ .where (models_greencode .GreenCodeItem .id == item_id )
8896 .values (** item_update .model_dump (exclude_none = True )),
8997 )
9098 try :
@@ -94,38 +102,43 @@ async def update_item(
94102 raise ValueError ()
95103
96104
97- async def get_items_count (db : AsyncSession ) -> int | None :
98- result = await db .execute (select (func . count ( models_greencode .Item ) ))
99- return result .scalars ().first ( )
105+ async def get_items_count (db : AsyncSession ) -> int :
106+ result = await db .execute (select (models_greencode .GreenCodeItem . id ))
107+ return len ( result .scalars ().all () )
100108
101109
102- async def get_items_count_for_user (user_id : str , db : AsyncSession ) -> int | None :
110+ async def get_items_count_for_user (user_id : str , db : AsyncSession ) -> int :
103111 result = await db .execute (
104- select (func . count ( models_greencode .Membership ) ).where (
105- models_greencode .Membership .user_id == user_id ,
112+ select (models_greencode .GreenCodeMembership ).where (
113+ models_greencode .GreenCodeMembership .user_id == user_id ,
106114 ),
107115 )
108- return result .scalars ().first ( )
116+ return len ( result .scalars ().all () )
109117
110118
111- async def get_items_count_for_users (
119+ async def get_greencode_users (
112120 db : AsyncSession ,
113- ) -> Sequence [ tuple [ CoreUser , int ] ]:
121+ ) -> list [ CoreUser ]:
114122 result = await db .execute (
115123 select (
116- models_greencode .Membership .user ,
117- func .count (models_greencode .Membership ),
118- ).group_by (models_greencode .Membership .user ),
124+ models_greencode .GreenCodeMembership ,
125+ )
126+ .options (
127+ selectinload (models_greencode .GreenCodeMembership .user ),
128+ )
129+ .group_by (models_greencode .GreenCodeMembership .user_id ), #
119130 )
120- return result .scalars ().all ()
131+ memberships = result .scalars ().all ()
132+ return [user_membership .user for user_membership in memberships ]
121133
122134
123135async def create_membership (
124136 item_id : str ,
125137 user_id : str ,
126138 db : AsyncSession ,
127- ) -> models_greencode .Membership :
128- membership = models_greencode .Membership (
139+ ) -> models_greencode .GreenCodeMembership :
140+ membership = models_greencode .GreenCodeMembership (
141+ id = str (uuid .uuid4 ()),
129142 item_id = item_id ,
130143 user_id = user_id ,
131144 )
@@ -140,9 +153,9 @@ async def create_membership(
140153
141154async def delete_membership (item_id : str , user_id , db : AsyncSession ):
142155 await db .execute (
143- delete (models_greencode .Membership ).where (
144- models_greencode .Membership .user_id == user_id ,
145- models_greencode .Membership .item_id == item_id ,
156+ delete (models_greencode .GreenCodeMembership ).where (
157+ models_greencode .GreenCodeMembership .user_id == user_id ,
158+ models_greencode .GreenCodeMembership .item_id == item_id ,
146159 ),
147160 )
148161 try :
0 commit comments