/
Yan_Yu
/
Nereus
Обзор
Документация
Войти
/
Yan_Yu
/
Nereus
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
working
src/database/models.py
139 строк
4 KB
yan
init: scaffold Nereus AI tutoring platform with multi-agent orchestration
02 авг 2026, 18:25
02 авг 2026, 18:25
13d60da
Код
Авторство
О чём код?
"""SQLAlchemy database models for Nereus.""" from datetime import datetime from typing import Optional from sqlalchemy import ( Column, Integer, String, Float, Boolean, Text, DateTime, ForeignKey, Enum as SAEnum, ) from sqlalchemy.orm import relationship, declarative_base import enum Base = declarative_base() class SessionStatus(str, enum.Enum): """Status of a user's learning session.""" ACTIVE = "active" PAUSED = "paused" COMPLETED = "completed" class BlockStatus(str, enum.Enum): """Status of a learning block.""" PENDING = "pending" IN_PROGRESS = "in_progress" COMPLETED = "completed" class AssessmentType(str, enum.Enum): """Type of assessment.""" THEORY = "theory" PRACTICE = "practice" class User(Base): """User model.""" __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) name = Column(String(100), nullable=False) email = Column(String(255), unique=True, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) # Relationships sessions = relationship("Session", back_populates="user", cascade="all, delete-orphan") class Session(Base): """Learning session model.""" __tablename__ = "sessions" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=False) status = Column(SAEnum(SessionStatus), default=SessionStatus.ACTIVE) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # Relationships user = relationship("User", back_populates="sessions") roadmaps = relationship("Roadmap", back_populates="session", cascade="all, delete-orphan") class Roadmap(Base): """Roadmap model - represents a skill learning path.""" __tablename__ = "roadmaps" id = Column(Integer, primary_key=True, index=True) session_id = Column(Integer, ForeignKey("sessions.id"), nullable=False) skill_name = Column(String(200), nullable=False) total_blocks = Column(Integer, default=0) created_at = Column(DateTime, default=datetime.utcnow) # Relationships session = relationship("Session", back_populates="roadmaps") blocks = relationship("Block", back_populates="roadmap", cascade="all, delete-orphan") class Block(Base): """Learning block model - individual topic within a roadmap.""" __tablename__ = "blocks" id = Column(Integer, primary_key=True, index=True) roadmap_id = Column(Integer, ForeignKey("roadmaps.id"), nullable=False) title = Column(String(200), nullable=False) description = Column(Text, nullable=True) status = Column(SAEnum(BlockStatus), default=BlockStatus.PENDING) order_index = Column(Integer, default=0) # Relationships roadmap = relationship("Roadmap", back_populates="blocks") progress = relationship("Progress", back_populates="block", cascade="all, delete-orphan") assessments = relationship("Assessment", back_populates="block", cascade="all, delete-orphan") class Progress(Base): """Progress tracking model.""" __tablename__ = "progress" id = Column(Integer, primary_key=True, index=True) block_id = Column(Integer, ForeignKey("blocks.id"), nullable=False) session_id = Column(Integer, ForeignKey("sessions.id"), nullable=False) materials_provided = Column(Boolean, default=False) completed_at = Column(DateTime, nullable=True) # Relationships block = relationship("Block", back_populates="progress") session = relationship("Session") class Assessment(Base): """Assessment model - stores test and practical task scores.""" __tablename__ = "assessments" id = Column(Integer, primary_key=True, index=True) block_id = Column(Integer, ForeignKey("blocks.id"), nullable=False) session_id = Column(Integer, ForeignKey("sessions.id"), nullable=False) type = Column(SAEnum(AssessmentType), nullable=False) score = Column(Float, nullable=True) # 0.0 - 1.0 feedback = Column(Text, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) # Relationships block = relationship("Block", back_populates="assessments") session = relationship("Session")