Silos/backend/app/schemas/document.py
AnuragJangid18 bf5cd44dc1 feat: implement workspace management and member invitations
- Added tenant API for managing workspaces, including listing, creating, and inviting members.
- Introduced new models for organizations, workspaces, and workspace memberships in the backend.
- Created frontend components for workspace administration, allowing users to manage workspaces and invite members.
- Updated document listing to support workspace-specific filtering.
- Implemented account settings page for user profile management and password changes.
- Added end-to-end tests for workspace administration and dashboard functionalities.
2026-10-23 01:19:11 +05:30

68 lines
1.6 KiB
Python

from datetime import datetime
from typing import Any, Literal
from pydantic import BaseModel, Field
CreateType = Literal["shed", "silo", "sketch", "stead"]
MemberRole = Literal["editor", "viewer"]
Visibility = Literal["private", "members"]
class DocumentMember(BaseModel):
user_id: int
role: MemberRole
name: str = ""
email: str = ""
class DocumentCreate(BaseModel):
type: CreateType
title: str
content: dict[str, Any] = Field(default_factory=dict)
template_id: str | None = None
stead_id: str | None = None
parent_page_id: str | None = None
workspace_id: int | None = None
class DocumentUpdate(BaseModel):
title: str | None = None
content: dict[str, Any] | None = None
starred: bool | None = None
stead_id: str | None = None
parent_page_id: str | None = None
workspace_id: int | None = None
class ShareRequest(BaseModel):
email_or_username: str
role: MemberRole = "editor"
class DocumentResponse(BaseModel):
id: str
type: CreateType
title: str
template_id: str | None = None
stead_id: str | None = None
parent_page_id: str | None = None
content: dict[str, Any]
created_by: str
created_at: datetime
updated_at: datetime
starred: bool = False
last_visited_at: datetime | None = None
owner_id: int | None = None
visibility: Visibility = "private"
members: list[DocumentMember] = Field(default_factory=list)
workspace_id: int | None = None
class DocumentVersionResponse(BaseModel):
id: str
document_id: str
title: str
content: dict[str, Any]
created_by: str
created_at: datetime
reason: str