Skip to content

Commit f57685a

Browse files
create tests with all the changes to make it works
1 parent d65836b commit f57685a

File tree

4 files changed

+384
-105
lines changed

4 files changed

+384
-105
lines changed

app/modules/greencode/cruds_greencode.py

Lines changed: 50 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
1+
import uuid
12
from collections.abc import Sequence
23

3-
from sqlalchemy import delete, func, select, update
4+
from sqlalchemy import delete, select, update
45
from sqlalchemy.exc import IntegrityError
56
from sqlalchemy.ext.asyncio import AsyncSession
7+
from sqlalchemy.orm import selectinload
68

79
from app.core.models_core import CoreUser
810
from 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

1624
async 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(
3038
async 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(
4250
async 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

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

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

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

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

Comments
 (0)