Files
forms/app/services/submission_service.py
2026-04-09 19:28:41 +03:00

115 lines
4.5 KiB
Python

# 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