first
This commit is contained in:
115
app/services/submission_service.py
Normal file
115
app/services/submission_service.py
Normal file
@@ -0,0 +1,115 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user