From 49b767dc9bb3595c9b6c6f8777ce1aa87bcd73e0 Mon Sep 17 00:00:00 2001 From: Oleg Date: Fri, 30 Aug 2024 23:53:26 +0300 Subject: [PATCH] feat(server): add get asset by id endpoint --- core/models/asset.py | 11 ++++++++ core/repositories/asset_repository.py | 10 +++++++ db.py | 3 ++ .../c1221a71b614_create_asset_table.py | 28 +++++++++++++++++++ server.py | 11 ++++++++ 5 files changed, 63 insertions(+) create mode 100644 core/models/asset.py create mode 100644 core/repositories/asset_repository.py create mode 100644 migrations/versions/c1221a71b614_create_asset_table.py diff --git a/core/models/asset.py b/core/models/asset.py new file mode 100644 index 0000000..e0698ff --- /dev/null +++ b/core/models/asset.py @@ -0,0 +1,11 @@ +import sqlalchemy +from sqlalchemy import Column, Text + +from db import Base + + +class Asset(Base): + __tablename__ = 'asset' + + id = Column("id", Text, primary_key=True) + content = Column("content", sqlalchemy.JSON) diff --git a/core/repositories/asset_repository.py b/core/repositories/asset_repository.py new file mode 100644 index 0000000..7425fee --- /dev/null +++ b/core/repositories/asset_repository.py @@ -0,0 +1,10 @@ +from core.models.asset import Asset +from db import Session + + +class AssetRepository: + def __init__(self, session: Session) -> None: + self.session = session + + def get_by_id(self, asset_id: str) -> Asset: + return self.session.query(Asset).filter_by(id=asset_id).first() diff --git a/db.py b/db.py index b20e15d..4b1a36d 100644 --- a/db.py +++ b/db.py @@ -8,6 +8,9 @@ connect_url = os.getenv("DATABASE_URL") +if connect_url is None: + raise ValueError("DATABASE_URL environment variable not set") + engine = create_engine(connect_url, echo=True) Base.metadata.create_all(bind=engine) diff --git a/migrations/versions/c1221a71b614_create_asset_table.py b/migrations/versions/c1221a71b614_create_asset_table.py new file mode 100644 index 0000000..5a31b56 --- /dev/null +++ b/migrations/versions/c1221a71b614_create_asset_table.py @@ -0,0 +1,28 @@ +"""create asset table + +Revision ID: c1221a71b614 +Revises: 79c9b1a9b39d +Create Date: 2024-08-30 23:43:13.031430 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'c1221a71b614' +down_revision = '79c9b1a9b39d' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + 'asset', + sa.Column('id', sa.Text, primary_key=True), + sa.Column('content', sa.JSON), + ) + + +def downgrade(): + op.drop_table('asset') diff --git a/server.py b/server.py index 054768f..74da37a 100644 --- a/server.py +++ b/server.py @@ -4,6 +4,7 @@ from fastapi import FastAPI +from core.repositories.asset_repository import AssetRepository from core.repositories.faculty_repository import FacultyRepository from core.repositories.group_repository import GroupRepository from core.request import unecon_request @@ -131,6 +132,15 @@ async def get_next_lessons(group_id: int, after_date: Optional[str] = None): 'lessons': [] } +@app.get("/asset/{asset_id}") +async def get_asset(asset_id: str): + session = Session() + + asset_repository = AssetRepository(session) + + asset = asset_repository.get_by_id(asset_id) + + return asset @app.get("/hello/{name}") async def say_hello(name: str): @@ -172,3 +182,4 @@ def lessons_to_dict(lessons: list[Lesson]) -> list[dict]: dict_lessons.append(dict_lesson) return dict_lessons +