feat: add survey invite schemas and token field
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
46
backend/app/schemas/survey.py
Normal file
46
backend/app/schemas/survey.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"""Schemas for FlowPilot survey submission."""
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Any, Optional
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
|
||||||
|
class SurveySubmission(BaseModel):
|
||||||
|
"""Incoming survey response from the public form."""
|
||||||
|
respondent_name: Optional[str] = Field(None, max_length=255)
|
||||||
|
responses: dict[str, Any] = Field(
|
||||||
|
...,
|
||||||
|
description="Question ID -> answer mapping. Values can be strings, lists, or numbers.",
|
||||||
|
)
|
||||||
|
token: Optional[str] = Field(None, description="Invite token for tracking")
|
||||||
|
|
||||||
|
|
||||||
|
class SurveySubmissionResponse(BaseModel):
|
||||||
|
"""Response after successful submission."""
|
||||||
|
message: str = "Thank you for your response!"
|
||||||
|
id: str
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyInviteCreate(BaseModel):
|
||||||
|
"""Create a new survey invite."""
|
||||||
|
recipient_name: str = Field(..., min_length=1, max_length=255)
|
||||||
|
recipient_email: Optional[str] = Field(None, max_length=255)
|
||||||
|
send_email: bool = False
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyInviteResponse(BaseModel):
|
||||||
|
"""Invite details returned to admin."""
|
||||||
|
id: str
|
||||||
|
token: str
|
||||||
|
recipient_name: str
|
||||||
|
recipient_email: Optional[str]
|
||||||
|
status: str
|
||||||
|
email_sent: bool
|
||||||
|
created_at: datetime
|
||||||
|
completed_at: Optional[datetime]
|
||||||
|
survey_url: str
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyInviteStatus(BaseModel):
|
||||||
|
"""Public invite status check — minimal info."""
|
||||||
|
name: str
|
||||||
|
status: str
|
||||||
Reference in New Issue
Block a user