Files
plumbing-dashy/backend/schemas.py
T

135 lines
2.8 KiB
Python

from pydantic import BaseModel, EmailStr
from typing import List, Optional
from datetime import datetime
class UserBase(BaseModel):
id: str
name: str
role: str
hue: int
initials: str
email: Optional[str] = None
phone: Optional[str] = None
photo: Optional[str] = None
account_type: str = "standard"
class UserCreate(UserBase):
password: str
class UserLogin(BaseModel):
id: str
password: str
class UserUpdate(BaseModel):
name: Optional[str] = None
role: Optional[str] = None
account_type: Optional[str] = None
photo: Optional[str] = None
class PasswordChange(BaseModel):
old_password: str
new_password: str
class User(UserBase):
created_at: datetime
class Config:
from_attributes = True
class TaskNoteBase(BaseModel):
body: str
class TaskNoteCreate(TaskNoteBase):
task_id: str
author_id: str
class TaskNote(TaskNoteBase):
id: int
task_id: str
author_id: str
created_at: datetime
class Config:
from_attributes = True
class TagBase(BaseModel):
tag: str
class Tag(TagBase):
class Config:
from_attributes = True
class TaskBase(BaseModel):
title: str
description: Optional[str] = None
assignee_id: str
added_by: str
priority: str
source: str
status: str = "open"
due_at: Optional[datetime] = None
reminder_at: Optional[datetime] = None
deleted_at: Optional[datetime] = None
class TaskCreate(TaskBase):
id: Optional[str] = None
tags: List[str] = []
class TaskUpdate(BaseModel):
title: Optional[str] = None
description: Optional[str] = None
assignee_id: Optional[str] = None
priority: Optional[str] = None
status: Optional[str] = None
due_at: Optional[datetime] = None
reminder_at: Optional[datetime] = None
class Task(TaskBase):
id: str
added_at: datetime
tags: List[Tag] = []
notes: List[TaskNote] = []
class Config:
from_attributes = True
class AuditLogBase(BaseModel):
actor: str
action: str
summary: str
target: Optional[str] = None
class AuditLog(AuditLogBase):
id: str
at: datetime
class Config:
from_attributes = True
class SessionBase(BaseModel):
user_id: str
device: str
location: Optional[str] = None
class Session(SessionBase):
id: int
last_active: datetime
class Config:
from_attributes = True
class WorkspaceBase(BaseModel):
name: str
timezone: str
class WorkspaceUpdate(BaseModel):
name: Optional[str] = None
timezone: Optional[str] = None
class Workspace(WorkspaceBase):
id: str
class Config:
from_attributes = True
class Token(BaseModel):
access_token: str
token_type: str
class TokenData(BaseModel):
username: Optional[str] = None