Skip to content

Commit b7cbffd

Browse files
NakoGHMalem38Rotheem
authored
Versionning of previous years of CDR (#779)
### Description Please explain the changes you made here. ### Checklist - [ ] Created tests which fail without the change (if possible) - [ ] All tests passing - [ ] Extended the documentation, if necessary --------- Co-authored-by: Maxime Lemonnier <[email protected]> Co-authored-by: Thonyk <[email protected]>
1 parent 0e03c0e commit b7cbffd

File tree

10 files changed

+309
-35
lines changed

10 files changed

+309
-35
lines changed

app/modules/cdr/coredata_cdr.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from datetime import UTC, datetime
2+
3+
from app.types.core_data import BaseCoreData
4+
5+
6+
class CdrYear(BaseCoreData):
7+
year: int = datetime.now(UTC).year

app/modules/cdr/cruds_cdr.py

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from collections.abc import Sequence
22
from uuid import UUID
33

4-
from sqlalchemy import delete, select, update
4+
from sqlalchemy import delete, extract, select, update
55
from sqlalchemy.ext.asyncio import AsyncSession
66
from sqlalchemy.orm import noload, selectinload
77

@@ -41,8 +41,12 @@ async def get_sellers(
4141

4242
async 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

5357
async 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

6270
async 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(
122131
async 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(
134157
async 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]:
404431
async 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+
416459
async 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(
684729
async 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(
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from fastapi import Depends
2+
from sqlalchemy.ext.asyncio import AsyncSession
3+
4+
from app.dependencies import get_db
5+
from app.modules.cdr.coredata_cdr import CdrYear
6+
from app.utils.tools import get_core_data
7+
8+
9+
async def get_current_cdr_year(
10+
db: AsyncSession = Depends(get_db),
11+
) -> CdrYear:
12+
"""
13+
Dependency that returns the current cdr year
14+
"""
15+
return await get_core_data(CdrYear, db)

0 commit comments

Comments
 (0)