Files
backend/app/schemas.py
2026-02-02 22:22:11 -08:00

125 lines
2.6 KiB
Python

from pydantic import BaseModel, ConfigDict
from typing import List, Optional
from datetime import datetime
# Heir Schemas
class HeirBase(BaseModel):
name: str
class HeirCreate(HeirBase):
pass
class HeirOut(HeirBase):
id: int
user_id: int
model_config = ConfigDict(from_attributes=True)
# User Schemas
class UserCreate(BaseModel):
username: str
password: str
email: str
class UserLogin(BaseModel):
username: str
password: str
class UserOut(BaseModel):
id: int
username: str
public_key: Optional[str] = None
is_admin: bool = False
guale: bool = False
tier: Optional[str] = None
tier_expires_at: Optional[datetime] = None
last_active_at: Optional[datetime] = None
#heirs: List[HeirOut] = []
model_config = ConfigDict(from_attributes=True)
class LoginResponse(BaseModel):
access_token: str
token_type: str
user: UserOut
# Asset Schemas (renamed from Article)
class AssetBase(BaseModel):
title: str
type: Optional[str] = "note"
class AssetCreate(AssetBase):
private_key_shard: str
content_inner_encrypted: str
class AssetOut(AssetBase):
id: int
author_id: int
private_key_shard: str
content_outer_encrypted: str
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
heir_id: Optional[int] = None
heir_email: Optional[str] = None
model_config = ConfigDict(from_attributes=True)
class AssetClaim(BaseModel):
asset_id: int
private_key_shard: str
class AssetClaimOut(AssetClaim):
id: int
result: str
class AssetAssign(BaseModel):
asset_id: int
heir_email: str
class AssetDelete(BaseModel):
asset_id: int
class DeclareGuale(BaseModel):
username: str
# AI Proxy Schemas
class AIMessage(BaseModel):
role: str
content: str
class AIRequest(BaseModel):
messages: List[AIMessage]
model: Optional[str] = None
class AIResponse(BaseModel):
id: str
object: str
created: int
model: str
choices: List[dict]
usage: dict
# Subscription Plans Schemas
class SubscriptionPlansBase(BaseModel):
name: str
max_heirs: int
weekly_token_limit: int
max_assets: int
max_storage_mb: int
can_use_ai_proxy: bool
description: Optional[str] = None
class SubscriptionPlansOut(SubscriptionPlansBase):
id: int
model_config = ConfigDict(from_attributes=True)
# AI Role Schemas
class AIRoleBase(BaseModel):
id: int
name: str
description: str
systemPrompt: str
icon: str
iconFamily: str
class AIRoleOut(AIRoleBase):
model_config = ConfigDict(from_attributes=True)