/
aastray
/
StudentPart
Обзор
Документация
Войти
/
aastray
/
StudentPart
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
service/src/database/models/practice_application.py
64 строки
3 KB
aastray
Реализован функционал загрузки файлов и просмотра документов, удалены базовые эндпоинты, обновлена документация
10 янв 2026, 15:38
10 янв 2026, 15:38
4d47c55
Код
Авторство
О чём код?
""" Модель для хранения анкет на практику. """ from uuid import uuid4 from sqlalchemy import Column, String, DateTime, JSON, Index from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.orm import relationship from sqlalchemy.sql import func from src.database import Base from typing import TYPE_CHECKING if TYPE_CHECKING: from src.database.models.practice_file import PracticeApplicationFile # Enum типы для PostgreSQL PracticeTypeEnum = ENUM( 'учебная', 'производственная', 'преддипломная', name='practicetype', create_type=False ) ApplicationStatusEnum = ENUM( 'draft', 'submitted', 'approved', 'printed', 'completed', name='applicationstatus', create_type=False ) class PracticeApplication(Base): """ Модель для хранения анкет на практику. Хранит данные анкет студентов для прохождения практики. """ __tablename__ = "practice_applications" id = Column(String, primary_key=True, default=lambda: uuid4().hex) student_id = Column(String, nullable=False, index=True) # ID студента из внешней системы practice_type = Column(PracticeTypeEnum, nullable=False) # Вид практики practice_subtype = Column(String, nullable=True) # Тип практики (для производственной) status = Column(ApplicationStatusEnum, nullable=False, default='draft') # Статус анкеты application_data = Column(JSON, nullable=False) # Данные из анкеты (JSON) created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False) submitted_at = Column(DateTime(timezone=True), nullable=True) # Дата отправки approved_at = Column(DateTime(timezone=True), nullable=True) # Дата одобрения printed_at = Column(DateTime(timezone=True), nullable=True) # Дата печати документов # Связь с файлами files = relationship("PracticeApplicationFile", back_populates="application", cascade="all, delete-orphan") # Индексы для быстрого поиска __table_args__ = ( Index('ix_practice_applications_student_id', 'student_id'), Index('ix_practice_applications_status', 'status'), Index('ix_practice_applications_practice_type', 'practice_type'), )