Skip to content

Commit 47fc503

Browse files
authored
fix curriculum membership (#813)
### 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
1 parent 00572d9 commit 47fc503

File tree

3 files changed

+75
-3
lines changed

3 files changed

+75
-3
lines changed

app/modules/cdr/cruds_cdr.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,11 @@ async def get_product_by_id(
174174
product_id: UUID,
175175
) -> models_cdr.CdrProduct | None:
176176
result = await db.execute(
177-
select(models_cdr.CdrProduct).where(
177+
select(models_cdr.CdrProduct)
178+
.where(
178179
models_cdr.CdrProduct.id == product_id,
179-
),
180+
)
181+
.options(selectinload(models_cdr.CdrProduct.product_constraints)),
180182
)
181183
return result.unique().scalars().first()
182184

app/modules/cdr/models_cdr.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ class CurriculumMembership(Base):
135135
)
136136
curriculum_id: Mapped[uuid.UUID] = mapped_column(
137137
ForeignKey("cdr_curriculum.id"),
138-
primary_key=True,
139138
)
140139

141140

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
"""remove curriculum memberships duplicate
2+
3+
Create Date: 2025-09-01 11:47:32.727885
4+
"""
5+
6+
from collections.abc import Sequence
7+
from typing import TYPE_CHECKING
8+
9+
if TYPE_CHECKING:
10+
from pytest_alembic import MigrationContext
11+
12+
import sqlalchemy as sa
13+
from alembic import op
14+
15+
# revision identifiers, used by Alembic.
16+
revision: str = "2880c583d7f1"
17+
down_revision: str | None = "06c94803745b"
18+
branch_labels: str | Sequence[str] | None = None
19+
depends_on: str | Sequence[str] | None = None
20+
21+
22+
def upgrade():
23+
op.drop_constraint(
24+
"cdr_curriculum_membership_pkey",
25+
table_name="cdr_curriculum_membership",
26+
type_="primary",
27+
)
28+
29+
op.execute("""
30+
DELETE FROM cdr_curriculum_membership AS c
31+
WHERE EXISTS (
32+
SELECT 1
33+
FROM cdr_curriculum_membership AS sub
34+
WHERE sub.user_id = c.user_id
35+
AND sub.curriculum_id < c.curriculum_id
36+
);
37+
""")
38+
39+
op.create_primary_key(
40+
"cdr_curriculum_membership_pkey",
41+
"cdr_curriculum_membership",
42+
["user_id"],
43+
)
44+
45+
46+
def downgrade():
47+
op.drop_constraint(
48+
"cdr_curriculum_membership_pkey",
49+
table_name="cdr_curriculum_membership",
50+
type_="primary",
51+
)
52+
53+
op.create_primary_key(
54+
"cdr_curriculum_membership_pkey",
55+
"cdr_curriculum_membership",
56+
["user_id", "curriculum_id"],
57+
)
58+
59+
60+
def pre_test_upgrade(
61+
alembic_runner: "MigrationContext",
62+
alembic_connection: sa.Connection,
63+
) -> None:
64+
pass
65+
66+
67+
def test_upgrade(
68+
alembic_runner: "MigrationContext",
69+
alembic_connection: sa.Connection,
70+
) -> None:
71+
pass

0 commit comments

Comments
 (0)