feat: deploy infrastructure + disk/drive, calendar, presentation, workspaces, onboarding, demo user

This commit is contained in:
2026-05-19 16:26:26 +03:00
parent 688d043dad
commit 3529c39b22
304 changed files with 18826 additions and 1176 deletions
+2
View File
@@ -41,12 +41,14 @@ class AgentInfoResponse(BaseModel):
description: str = ""
is_enabled: bool = True
version: str = "1.0.0"
config: Optional[str] = None
last_run_at: Optional[datetime] = None
class AgentUpdateRequest(BaseModel):
description: Optional[str] = None
is_enabled: Optional[bool] = None
config: Optional[str] = None
class ServiceActionRequest(BaseModel):
+66
View File
@@ -0,0 +1,66 @@
"""Collaboration schemas for VoIdea API."""
from datetime import datetime
from typing import Any, Optional
from pydantic import BaseModel, Field
class VoteResponse(BaseModel):
id: str
idea_id: str
user_id: str
vote: str
created_at: datetime
class VoteToggleRequest(BaseModel):
vote: str = Field(pattern="^(up|down)$")
class VoteCount(BaseModel):
up: int = 0
down: int = 0
user_vote: Optional[str] = None
class CommentCreate(BaseModel):
content: str = Field(min_length=1)
parent_id: Optional[str] = None
class CommentResponse(BaseModel):
id: str
idea_id: str
user_id: str
content: str
parent_id: Optional[str] = None
display_name: str = ""
avatar_url: Optional[str] = None
created_at: datetime
updated_at: datetime
replies: list["CommentResponse"] = []
class ActivityResponse(BaseModel):
id: str
idea_id: str
user_id: Optional[str] = None
action: str
details: Optional[dict[str, Any]] = None
display_name: str = ""
created_at: datetime
class NotificationResponse(BaseModel):
id: str
type: str
title: str
body: str
link: Optional[str] = None
is_read: bool
created_at: datetime
class NotificationUnreadCount(BaseModel):
count: int = 0
+6
View File
@@ -19,6 +19,7 @@ class IdeaUpdate(BaseModel):
status: Optional[str] = None
tags: Optional[list[str]] = None
is_public: Optional[bool] = None
funnel_status: Optional[str] = None
class IdeaResponse(BaseModel):
@@ -30,10 +31,15 @@ class IdeaResponse(BaseModel):
tags: Optional[list[str]] = None
is_public: bool
public_slug: Optional[str] = None
funnel_status: Optional[str] = None
created_at: datetime
updated_at: datetime
class FunnelTransitionRequest(BaseModel):
target_status: str = Field(min_length=1, max_length=20)
AI_AGENT_ROLES = [
"coordinator",
"task_organizer",
+42
View File
@@ -0,0 +1,42 @@
"""Workspace schemas for VoIdea API."""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
class WorkspaceCreate(BaseModel):
name: str = Field(min_length=1, max_length=255)
type: str = Field(default="team", pattern="^(personal|team)$")
class WorkspaceUpdate(BaseModel):
name: Optional[str] = Field(None, min_length=1, max_length=255)
description: Optional[str] = None
class WorkspaceResponse(BaseModel):
id: str
name: str
type: str
owner_id: str
description: Optional[str] = None
member_count: int = 0
created_at: datetime
updated_at: datetime
class AddMemberRequest(BaseModel):
user_id: str
role: str = Field(default="member", pattern="^(admin|member)$")
class MemberResponse(BaseModel):
id: str
user_id: str
workspace_id: str
role: str
email: str = ""
display_name: str = ""
joined_at: datetime