# app/services/submission_service.py from sqlalchemy.orm import Session from typing import Optional, Dict, Any from app.models.submission import Submission from app.schemas.submission import SubmissionCreate class SubmissionService: def __init__(self, db: Session): self.db = db def create_submission(self, submission_data: SubmissionCreate): """Создать новую submission""" submission = Submission( form_id=submission_data.form_id, submission_data=submission_data.data, # ← используем submission_data submission_metadata=submission_data.metadata.dict() if submission_data.metadata else {}, status="completed" ) self.db.add(submission) self.db.commit() self.db.refresh(submission) # Возвращаем словарь, соответствующий схеме return { "id": submission.id, "submission_uuid": str(submission.submission_uuid), "form_id": submission.form_id, "submission_data": submission.submission_data, "submission_metadata": submission.submission_metadata, "status": submission.status, "submitted_at": submission.submitted_at, "created_at": submission.created_at, "updated_at": submission.updated_at, "submitted_by": submission.submitted_by, "completion_time_seconds": submission.completion_time_seconds, "referrer": submission.referrer } def get_submission_by_id(self, submission_id: int): """Получить submission по ID""" submission = self.db.query(Submission).filter(Submission.id == submission_id).first() if not submission: return None return { "id": submission.id, "submission_uuid": str(submission.submission_uuid), "form_id": submission.form_id, "submission_data": submission.submission_data, "submission_metadata": submission.submission_metadata, "status": submission.status, "submitted_at": submission.submitted_at, "created_at": submission.created_at, "updated_at": submission.updated_at, "submitted_by": submission.submitted_by, "completion_time_seconds": submission.completion_time_seconds, "referrer": submission.referrer } def get_submissions_by_form(self, form_id: int, page=1, per_page=20, status=None): """Получить все submission формы""" query = self.db.query(Submission).filter(Submission.form_id == form_id) if status: query = query.filter(Submission.status == status) total = query.count() items = query.offset((page - 1) * per_page).limit(per_page).all() items_list = [] for submission in items: items_list.append({ "id": submission.id, "submission_uuid": str(submission.submission_uuid), "form_id": submission.form_id, "submission_data": submission.submission_data, "submission_metadata": submission.submission_metadata, "status": submission.status, "submitted_at": submission.submitted_at, "created_at": submission.created_at, "updated_at": submission.updated_at, "submitted_by": submission.submitted_by, "completion_time_seconds": submission.completion_time_seconds, "referrer": submission.referrer }) return { "items": items_list, "total": total, "page": page, "per_page": per_page, "pages": (total + per_page - 1) // per_page } def update_submission(self, submission_id: int, data: Dict[str, Any]): """Обновить submission""" submission = self.db.query(Submission).filter(Submission.id == submission_id).first() if not submission: return None submission.submission_data = data self.db.commit() self.db.refresh(submission) return self.get_submission_by_id(submission_id) def delete_submission(self, submission_id: int): """Удалить submission""" submission = self.db.query(Submission).filter(Submission.id == submission_id).first() if not submission: return False self.db.delete(submission) self.db.commit() return True