From 188c0a7e49a30997dc600fca5f1652c1f602cca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20W=C3=B6rister?= <31357619+fwoerister@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:14:16 +0100 Subject: [PATCH] script (seed.py) added to insert demo data --- app/db/model/__init__.py | 2 +- app/db/seed.py | 74 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 app/db/seed.py diff --git a/app/db/model/__init__.py b/app/db/model/__init__.py index f37894f..26d8bc4 100644 --- a/app/db/model/__init__.py +++ b/app/db/model/__init__.py @@ -1,4 +1,4 @@ -from .exercise import Exercise, TestCase +from .exercise import Exercise, TestCase, Competition from .grading_job import GradingJob from .logging_event import LoggingEvent from .tan import Tan diff --git a/app/db/seed.py b/app/db/seed.py new file mode 100644 index 0000000..eb9d1c1 --- /dev/null +++ b/app/db/seed.py @@ -0,0 +1,74 @@ +import asyncio + +from sqlalchemy.ext.asyncio.session import AsyncSession + +from app.db.database import async_session_maker, engine, Base +from app.db.model import Tan, Competition, Exercise + + +async def wipe_db(): + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.drop_all) + await conn.run_sync(Base.metadata.create_all) + + +async def insert_demo_data(): + async with async_session_maker() as session: + await wipe_db() + + third_exercise_id = await insert_exercise(session, Exercise( + title="Third Exercise!", + markdown="# πŸš€ Third Exercise: \n lorem ipsum", + coding_mode="bbp", + skip_delay=10 + )) + + second_exercise_id = await insert_exercise(session, Exercise( + title="Second Exercise!", + markdown="# πŸš€ Second Exercise: \n lorem ipsum", + coding_mode="bbp", + skip_delay=10, + next_exercise_id=third_exercise_id + )) + + first_exercise_id = await insert_exercise(session, Exercise( + title="First Exercise!", + markdown="# πŸš€First Exercise: \n lorem ipsum", + coding_mode="bbp", + skip_delay=10, + next_exercise_id=second_exercise_id + )) + + competition_id = await insert_competition(session, Competition( + name="test-competition", + first_exercise_id=first_exercise_id + )) + + tan_code = await insert_tan(session, Tan( + code="test-tan", + competition_id=competition_id + )) + + +async def insert_exercise(session: AsyncSession, exercise: Exercise) -> int: + session.add(exercise) + await session.commit() + await session.refresh(exercise) + return exercise.id + + +async def insert_competition(session: AsyncSession, competition: Competition) -> int: + session.add(competition) + await session.commit() + await session.refresh(competition) + return competition.id + + +async def insert_tan(session: AsyncSession, tan: Tan) -> str: + session.add(tan) + await session.commit() + await session.refresh(tan) + return tan.code + + +asyncio.run(insert_demo_data())