Skip to content

Commit 4b134f8

Browse files
creates cruds
1 parent 1c0801c commit 4b134f8

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
from collections.abc import Sequence
2+
3+
from sqlalchemy import delete, func, select, update
4+
from sqlalchemy.exc import IntegrityError
5+
from sqlalchemy.ext.asyncio import AsyncSession
6+
7+
from app.core.models_core import CoreUser
8+
from app.modules.greencode import models_greencode, schemas_greencode
9+
10+
11+
async def get_items(db: AsyncSession) -> Sequence[models_greencode.Item]:
12+
result = await db.execute(select(models_greencode.Item))
13+
return result.scalars().all()
14+
15+
16+
async def get_user_items(
17+
db: AsyncSession,
18+
user_id: str,
19+
) -> Sequence[models_greencode.Item]:
20+
result = await db.execute(
21+
select(models_greencode.Item).where(
22+
models_greencode.Item.users.any(
23+
models_greencode.Membership.user_id == user_id,
24+
),
25+
),
26+
)
27+
return result.scalars().all()
28+
29+
30+
async def get_item_by_qr_code_content(
31+
db: AsyncSession,
32+
qr_code_content: Sequence[str],
33+
) -> models_greencode.Item | None:
34+
result = await db.execute(
35+
select(models_greencode.Item).where(
36+
models_greencode.Item.qr_code_content == qr_code_content,
37+
),
38+
)
39+
return result.scalars().first()
40+
41+
42+
async def get_item_by_id(
43+
db: AsyncSession,
44+
item_id: Sequence[str],
45+
) -> models_greencode.Item | None:
46+
result = await db.execute(
47+
select(models_greencode.Item).where(
48+
models_greencode.Item.id == item_id,
49+
),
50+
)
51+
return result.scalars().first()
52+
53+
54+
async def create_item(
55+
item: models_greencode.Item,
56+
db: AsyncSession,
57+
) -> models_greencode.Item:
58+
db.add(item)
59+
try:
60+
await db.commit()
61+
except IntegrityError:
62+
await db.rollback()
63+
raise ValueError()
64+
return item
65+
66+
67+
async def delete_item(item_id: str, db: AsyncSession):
68+
await db.execute(
69+
delete(models_greencode.Item).where(
70+
models_greencode.Item.id == item_id,
71+
),
72+
)
73+
try:
74+
await db.commit()
75+
except IntegrityError:
76+
await db.rollback()
77+
raise ValueError()
78+
79+
80+
async def update_item(
81+
item_id: str,
82+
item_update: schemas_greencode.ItemUpdate,
83+
db: AsyncSession,
84+
):
85+
await db.execute(
86+
update(models_greencode.Item)
87+
.where(models_greencode.Item.id == item_id)
88+
.values(**item_update.model_dump(exclude_none=True)),
89+
)
90+
try:
91+
await db.commit()
92+
except IntegrityError:
93+
await db.rollback()
94+
raise ValueError()
95+
96+
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()
100+
101+
102+
async def get_items_count_for_user(user_id: str, db: AsyncSession) -> int | None:
103+
result = await db.execute(
104+
select(func.count(models_greencode.Membership)).where(
105+
models_greencode.Membership.user_id == user_id,
106+
),
107+
)
108+
return result.scalars().first()
109+
110+
111+
async def get_items_count_for_users(
112+
user_id: str,
113+
db: AsyncSession,
114+
) -> Sequence[tuple[CoreUser, int]]:
115+
result = await db.execute(
116+
select(
117+
models_greencode.Membership.user,
118+
func.count(models_greencode.Membership),
119+
).where(
120+
models_greencode.Membership.user_id == user_id,
121+
),
122+
)
123+
return result.scalars().all()
124+
125+
126+
async def create_membership(
127+
membership: models_greencode.Membership,
128+
db: AsyncSession,
129+
) -> models_greencode.Membership:
130+
db.add(membership)
131+
try:
132+
await db.commit()
133+
except IntegrityError:
134+
await db.rollback()
135+
raise ValueError()
136+
return membership
137+
138+
139+
async def delete_membership(membership_id: str, db: AsyncSession):
140+
await db.execute(
141+
delete(models_greencode.Membership).where(
142+
models_greencode.Membership.id == membership_id,
143+
),
144+
)
145+
try:
146+
await db.commit()
147+
except IntegrityError:
148+
await db.rollback()
149+
raise ValueError()

0 commit comments

Comments
 (0)