Add poll workflow and signed participation support
This commit is contained in:
@@ -6,7 +6,7 @@ from typing import Any, Literal
|
||||
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
||||
|
||||
|
||||
PollKind = Literal["single_choice", "multiple_choice", "yes_no", "ranked_choice", "availability"]
|
||||
PollKind = Literal["single_choice", "multiple_choice", "yes_no", "yes_no_maybe", "ranked_choice", "availability"]
|
||||
PollStatus = Literal["draft", "open", "closed", "decided", "archived"]
|
||||
PollVisibility = Literal["private", "tenant", "public", "unlisted"]
|
||||
PollResultVisibility = Literal["organizer", "after_response", "after_close", "public"]
|
||||
@@ -33,6 +33,11 @@ class PollCreateRequest(BaseModel):
|
||||
status: PollStatus = "draft"
|
||||
visibility: PollVisibility = "private"
|
||||
result_visibility: PollResultVisibility = "after_close"
|
||||
context_module: str | None = Field(default=None, max_length=100)
|
||||
context_resource_type: str | None = Field(default=None, max_length=100)
|
||||
context_resource_id: str | None = Field(default=None, max_length=255)
|
||||
workflow_state: str | None = Field(default=None, max_length=100)
|
||||
workflow_steps: list[dict[str, Any]] = Field(default_factory=list)
|
||||
allow_anonymous: bool = False
|
||||
allow_response_update: bool = True
|
||||
min_choices: int = Field(default=1, ge=0)
|
||||
@@ -56,6 +61,11 @@ class PollUpdateRequest(BaseModel):
|
||||
description: str | None = None
|
||||
visibility: PollVisibility | None = None
|
||||
result_visibility: PollResultVisibility | None = None
|
||||
context_module: str | None = Field(default=None, max_length=100)
|
||||
context_resource_type: str | None = Field(default=None, max_length=100)
|
||||
context_resource_id: str | None = Field(default=None, max_length=255)
|
||||
workflow_state: str | None = Field(default=None, max_length=100)
|
||||
workflow_steps: list[dict[str, Any]] | None = None
|
||||
allow_anonymous: bool | None = None
|
||||
allow_response_update: bool | None = None
|
||||
min_choices: int | None = Field(default=None, ge=0)
|
||||
@@ -96,6 +106,11 @@ class PollResponse(BaseModel):
|
||||
status: str
|
||||
visibility: str
|
||||
result_visibility: str
|
||||
context_module: str | None = None
|
||||
context_resource_type: str | None = None
|
||||
context_resource_id: str | None = None
|
||||
workflow_state: str | None = None
|
||||
workflow_steps: list[dict[str, Any]] = Field(default_factory=list)
|
||||
allow_anonymous: bool
|
||||
allow_response_update: bool
|
||||
min_choices: int
|
||||
@@ -166,3 +181,32 @@ class PollStatusResponse(BaseModel):
|
||||
|
||||
class PollResponseListResponse(BaseModel):
|
||||
responses: list[PollResponseItem] = Field(default_factory=list)
|
||||
|
||||
|
||||
class PollInvitationCreateRequest(BaseModel):
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
respondent_id: str | None = Field(default=None, max_length=255)
|
||||
respondent_label: str | None = Field(default=None, max_length=500)
|
||||
email: str | None = Field(default=None, max_length=320)
|
||||
expires_at: datetime | None = None
|
||||
metadata: dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class PollInvitationResponse(BaseModel):
|
||||
id: str
|
||||
poll_id: str
|
||||
respondent_id: str | None = None
|
||||
respondent_label: str | None = None
|
||||
email: str | None = None
|
||||
token: str | None = None
|
||||
expires_at: datetime | None = None
|
||||
revoked_at: datetime | None = None
|
||||
last_used_at: datetime | None = None
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
metadata: dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class PollInvitationListResponse(BaseModel):
|
||||
invitations: list[PollInvitationResponse] = Field(default_factory=list)
|
||||
|
||||
Reference in New Issue
Block a user