11from collections .abc import Sequence
22from uuid import UUID
33
4- from sqlalchemy import delete , select , update
4+ from sqlalchemy import delete , extract , select , update
55from sqlalchemy .ext .asyncio import AsyncSession
66from sqlalchemy .orm import noload , selectinload
77
@@ -41,8 +41,12 @@ async def get_sellers(
4141
4242async def get_online_sellers (
4343 db : AsyncSession ,
44+ cdr_year : int ,
4445) -> Sequence [models_cdr .Seller ]:
45- online_products = await get_online_products (db = db )
46+ online_products = await get_online_products (
47+ db = db ,
48+ cdr_year = cdr_year ,
49+ )
4650 seller_ids = set (product .seller_id for product in online_products )
4751 result = await db .execute (
4852 select (models_cdr .Seller ).where (models_cdr .Seller .id .in_ (seller_ids )),
@@ -52,18 +56,23 @@ async def get_online_sellers(
5256
5357async def get_online_products (
5458 db : AsyncSession ,
59+ cdr_year : int ,
5560) -> Sequence [models_cdr .CdrProduct ]:
5661 result = await db .execute (
57- select (models_cdr .CdrProduct ).where (models_cdr .CdrProduct .available_online ),
62+ select (models_cdr .CdrProduct ).where (
63+ models_cdr .CdrProduct .available_online ,
64+ models_cdr .CdrProduct .year == cdr_year ,
65+ ),
5866 )
5967 return result .unique ().scalars ().all ()
6068
6169
6270async def get_products (
6371 db : AsyncSession ,
72+ cdr_year : int ,
6473) -> Sequence [models_cdr .CdrProduct ]:
6574 result = await db .execute (
66- select (models_cdr .CdrProduct ),
75+ select (models_cdr .CdrProduct ). where ( models_cdr . CdrProduct . year == cdr_year ) ,
6776 )
6877 return result .unique ().scalars ().all ()
6978
@@ -122,6 +131,20 @@ async def delete_seller(
122131async def get_products_by_seller_id (
123132 db : AsyncSession ,
124133 seller_id : UUID ,
134+ cdr_year : int ,
135+ ) -> Sequence [models_cdr .CdrProduct ]:
136+ result = await db .execute (
137+ select (models_cdr .CdrProduct ).where (
138+ models_cdr .CdrProduct .seller_id == seller_id ,
139+ models_cdr .CdrProduct .year == cdr_year ,
140+ ),
141+ )
142+ return result .unique ().scalars ().all ()
143+
144+
145+ async def get_all_products_by_seller_id (
146+ db : AsyncSession ,
147+ seller_id : UUID ,
125148) -> Sequence [models_cdr .CdrProduct ]:
126149 result = await db .execute (
127150 select (models_cdr .CdrProduct ).where (
@@ -134,11 +157,13 @@ async def get_products_by_seller_id(
134157async def get_online_products_by_seller_id (
135158 db : AsyncSession ,
136159 seller_id : UUID ,
160+ cdr_year : int ,
137161) -> Sequence [models_cdr .CdrProduct ]:
138162 result = await db .execute (
139163 select (models_cdr .CdrProduct ).where (
140164 models_cdr .CdrProduct .seller_id == seller_id ,
141165 models_cdr .CdrProduct .available_online ,
166+ models_cdr .CdrProduct .year == cdr_year ,
142167 ),
143168 )
144169 return result .unique ().scalars ().all ()
@@ -149,7 +174,9 @@ async def get_product_by_id(
149174 product_id : UUID ,
150175) -> models_cdr .CdrProduct | None :
151176 result = await db .execute (
152- select (models_cdr .CdrProduct ).where (models_cdr .CdrProduct .id == product_id ),
177+ select (models_cdr .CdrProduct ).where (
178+ models_cdr .CdrProduct .id == product_id ,
179+ ),
153180 )
154181 return result .unique ().scalars ().first ()
155182
@@ -404,15 +431,31 @@ async def get_all_purchases(db: AsyncSession) -> Sequence[models_cdr.Purchase]:
404431async def get_purchases_by_user_id (
405432 db : AsyncSession ,
406433 user_id : str ,
434+ cdr_year : int ,
407435) -> Sequence [models_cdr .Purchase ]:
408436 result = await db .execute (
409437 select (models_cdr .Purchase )
410- .where (models_cdr .Purchase .user_id == user_id )
438+ .where (
439+ models_cdr .Purchase .user_id == user_id ,
440+ extract ("year" , models_cdr .Purchase .purchased_on ) == cdr_year ,
441+ )
411442 .options (selectinload ("*" )),
412443 )
413444 return result .scalars ().all ()
414445
415446
447+ async def get_all_purchases_by_user_id (
448+ db : AsyncSession ,
449+ user_id : str ,
450+ ) -> Sequence [models_cdr .Purchase ]:
451+ result = await db .execute (
452+ select (models_cdr .Purchase ).where (
453+ models_cdr .Purchase .user_id == user_id ,
454+ ),
455+ )
456+ return result .scalars ().all ()
457+
458+
416459async def get_purchase_by_id (
417460 db : AsyncSession ,
418461 user_id : str ,
@@ -447,6 +490,7 @@ async def get_purchases_by_user_id_by_seller_id(
447490 db : AsyncSession ,
448491 user_id : str ,
449492 seller_id : UUID ,
493+ cdr_year : int ,
450494) -> Sequence [models_cdr .Purchase ]:
451495 result = await db .execute (
452496 select (models_cdr .Purchase )
@@ -455,6 +499,7 @@ async def get_purchases_by_user_id_by_seller_id(
455499 .where (
456500 models_cdr .CdrProduct .seller_id == seller_id ,
457501 models_cdr .Purchase .user_id == user_id ,
502+ extract ("year" , models_cdr .Purchase .purchased_on ) == cdr_year ,
458503 ),
459504 )
460505 return result .scalars ().all ()
@@ -684,9 +729,13 @@ async def delete_curriculum_membership(
684729async def get_payments_by_user_id (
685730 db : AsyncSession ,
686731 user_id : str ,
732+ cdr_year : int ,
687733) -> Sequence [models_cdr .Payment ]:
688734 result = await db .execute (
689- select (models_cdr .Payment ).where (models_cdr .Payment .user_id == user_id ),
735+ select (models_cdr .Payment ).where (
736+ models_cdr .Payment .user_id == user_id ,
737+ models_cdr .Payment .year == cdr_year ,
738+ ),
690739 )
691740 return result .scalars ().all ()
692741
@@ -929,7 +978,10 @@ async def get_product_validated_purchases(
929978 db : AsyncSession ,
930979 product_id : UUID ,
931980) -> Sequence [models_cdr .Purchase ]:
932- variant = await get_product_variants (db = db , product_id = product_id )
981+ variant = await get_product_variants (
982+ db = db ,
983+ product_id = product_id ,
984+ )
933985 variant_ids = [v .id for v in variant ]
934986 result = await db .execute (
935987 select (models_cdr .Purchase ).where (
0 commit comments