Skip to content

Commit

Permalink
Чуть более рабочее состояние, работает создание нового уровня
Browse files Browse the repository at this point in the history
  • Loading branch information
codEnjoyer committed Nov 19, 2023
1 parent 2ba21e0 commit 35f9931
Show file tree
Hide file tree
Showing 13 changed files with 52 additions and 44 deletions.
4 changes: 2 additions & 2 deletions backend/migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
from game.modules.models import Module
from game.levels.models import Level, LevelTheory, LevelTask
from game.units.tasks.models import TaskUnit, EmployeesTask
from game.units.tasks.questions.models import Question, Answer
from game.units.tasks.questions.models import Question, AnswerOption
from game.units.tasks.proofs.models import Proof, ProofVideos, ProofImages
from game.units.theory.models import TheoryUnit, TheoryVideo
from game.units.theory.models import TheoryUnit # , TheoryVideo

from users.models import User
from users.tutors.models import Tutor
Expand Down
7 changes: 7 additions & 0 deletions backend/src/game/levels/enums.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from enum import auto, Enum


class LevelStates(Enum):
NotViewed = auto()
Viewed = auto()
Completed = auto()
12 changes: 3 additions & 9 deletions backend/src/game/levels/models.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,21 @@
import enum
import typing
import uuid

from sqlalchemy import String, Boolean, UUID, ForeignKey, Enum
from sqlalchemy import String, UUID, ForeignKey
from sqlalchemy.dialects import postgresql
from sqlalchemy.ext.associationproxy import AssociationProxy, association_proxy
from sqlalchemy.orm import Mapped, mapped_column, relationship

from database import BaseModel
from game.levels.enums import LevelStates
from game.levels.schemas import LevelRead
from game.units import TaskUnit, TheoryUnit

if typing.TYPE_CHECKING:
from game.modules.models import Module
from game.units.tasks.models import TaskUnit
from game.units.theory.models import TheoryUnit


class LevelStates(enum.Enum):
NotViewed = enum.auto()
Viewed = enum.auto()
Completed = enum.auto()


class Level(BaseModel):
__tablename__ = 'levels'

Expand Down
5 changes: 3 additions & 2 deletions backend/src/game/levels/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ class LevelRead(__LevelBase):


class LevelCreate(__LevelBase):
theory_units: list[TheoryUnitRead] | None
task_units: list[TaskUnitRead] | None
# theory_units: list[TheoryUnitRead] | None
# task_units: list[TaskUnitRead] | None
pass


class LevelUpdate(__LevelBase):
Expand Down
2 changes: 2 additions & 0 deletions backend/src/game/units/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .tasks import TaskUnit
from .theory import TheoryUnit
2 changes: 1 addition & 1 deletion backend/src/game/units/tasks/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from .models import TaskUnit, TaskTypes, TaskStates, EmployeesTask
from .models import TaskUnit, EmployeesTask
12 changes: 12 additions & 0 deletions backend/src/game/units/tasks/enums.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from enum import Enum, auto


class TaskTypes(Enum):
Test = auto()


class TaskStates(Enum):
NotViewed = auto()
Viewed = auto()
Submitted = auto()
Finished = auto()
15 changes: 3 additions & 12 deletions backend/src/game/units/tasks/models.py
Original file line number Diff line number Diff line change
@@ -1,39 +1,30 @@
import uuid
import enum
from typing import TYPE_CHECKING

from sqlalchemy import UUID, Integer, ForeignKey, Boolean
from sqlalchemy.dialects import postgresql
from sqlalchemy.orm import Mapped, mapped_column, relationship

from database import BaseModel
from .enums import TaskTypes, TaskStates
from .schemas import TaskUnitRead

if TYPE_CHECKING:
from game.levels.models import Level
from questions.models import Question

class TaskTypes(enum.Enum):
Test = enum.auto()


class TaskStates(enum.Enum):
NotViewed = enum.auto()
Viewed = enum.auto()
Submitted = enum.auto()
Finished = enum.auto()


class TaskUnit(BaseModel):
__tablename__ = 'tasks'

id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4)
type: Mapped[TaskTypes] = mapped_column(postgresql.ENUM(TaskTypes, name='task_types'), nullable=False,
default=TaskTypes.Test)
level_id: Mapped[uuid.UUID] = mapped_column(UUID, ForeignKey('levels.id'), default=uuid.uuid4, nullable=True)
requires_review: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
score_reward: Mapped[int] = mapped_column(Integer, nullable=False, default=1)

# questions: Mapped[list["Question"]] = relationship()
questions: Mapped[list["Question"]] = relationship(back_populates='task')
level: Mapped[list["Level"]] = relationship(secondary="level_tasks", back_populates='task_units')

def to_read_schema(self) -> TaskUnitRead:
Expand Down
13 changes: 7 additions & 6 deletions backend/src/game/units/tasks/questions/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import enum
from typing import TYPE_CHECKING

from sqlalchemy import UUID, Enum, String
from sqlalchemy import UUID, Enum, String, ForeignKey
from sqlalchemy.dialects import postgresql
from sqlalchemy.orm import Mapped, mapped_column, relationship

Expand All @@ -21,21 +21,22 @@ class Question(BaseModel):
__tablename__ = 'questions'

id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4)
task_id: Mapped[uuid.UUID] = mapped_column(UUID, ForeignKey('tasks.id'), default=uuid.uuid4, nullable=True)
type: Mapped[QuestionTypes] = mapped_column(
postgresql.ENUM(QuestionTypes, name='question_types'), nullable=False, default=QuestionTypes.SingleChoice)
question: Mapped[str] = mapped_column(String, nullable=False, default="Вопрос!")
correct_answer_id: Mapped[uuid.UUID] = mapped_column(UUID, default=uuid.uuid4)

task: Mapped["TaskUnit"] = relationship(back_populates='questions')
possible_answers: Mapped[list["Answer"]] = relationship(back_populates='question')
correct_answers: Mapped[list["Answer"]] = relationship(back_populates='question')
possible_answers: Mapped[list["AnswerOption"]] = relationship(back_populates='question')
correct_answers: Mapped[list["AnswerOption"]] = relationship(back_populates='question')


class Answer(BaseModel):
class AnswerOption(BaseModel):
__tablename__ = 'answers'

id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4)
question_id: Mapped[uuid.UUID] = mapped_column(UUID, default=uuid.uuid4)
question_id: Mapped[uuid.UUID] = mapped_column(UUID, ForeignKey('questions.id'), default=uuid.uuid4)
content: Mapped[str] = mapped_column(String, nullable=False, default='Ответ?')

question: Mapped["Question"] = relationship(back_populates='answers')
question: Mapped["Question"] = relationship(back_populates='possible_answers')
3 changes: 1 addition & 2 deletions backend/src/game/units/tasks/schemas.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import typing
from uuid import UUID

from pydantic import BaseModel, ConfigDict

from game.units.tasks.questions.schemas import QuestionRead, QuestionCreate, QuestionUpdate
from game.units.tasks import TaskTypes
from game.units.tasks.enums import TaskTypes


class __TaskUnitBase(BaseModel):
Expand Down
1 change: 1 addition & 0 deletions backend/src/game/units/theory/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .models import TheoryUnit
16 changes: 8 additions & 8 deletions backend/src/game/units/theory/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ def to_read_model(self) -> TheoryUnitRead:
content=self.content)


class TheoryVideo(BaseModel):
__tablename__ = 'theory_videos'

id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4)
theory_id: Mapped[uuid.UUID] = mapped_column(UUID, ForeignKey('theory_blocks.id'), nullable=False)
url: Mapped[URL] = mapped_column(URLType, nullable=False)

theory: Mapped["TheoryUnit"] = relationship(back_populates="theory_video")
# class TheoryVideo(BaseModel):
# __tablename__ = 'theory_videos'
#
# id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4)
# theory_id: Mapped[uuid.UUID] = mapped_column(UUID, ForeignKey('theory_blocks.id'), nullable=False)
# url: Mapped[URL] = mapped_column(URLType, nullable=False)
#
# theory: Mapped["TheoryUnit"] = relationship(back_populates="theory_video")
4 changes: 2 additions & 2 deletions backend/src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from fastapi.responses import RedirectResponse
from fastapi.middleware.cors import CORSMiddleware

# from game.levels.router import router as levels_router
from game.levels.router import router as levels_router
from game.modules.router import router as modules_router
from game.map.router import router as map_router
# from game.units.tasks.router import router as tasks_router
Expand Down Expand Up @@ -54,7 +54,7 @@ async def unprotected_route():


include_routers(
# levels_router,
levels_router,
modules_router,
map_router,
# tasks_router,
Expand Down

0 comments on commit 35f9931

Please sign in to comment.