48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class TimeTrackEntry(BaseModel):
|
|
id: str = Field(min_length=1, max_length=128)
|
|
task: str = ""
|
|
start: str
|
|
end: str
|
|
duration: int = Field(ge=0)
|
|
|
|
|
|
class TimeTrackSync(BaseModel):
|
|
device_id: str = Field(min_length=1, max_length=128)
|
|
entries: list[TimeTrackEntry] = Field(default_factory=list, max_length=1000)
|
|
|
|
|
|
class ZedRecord(BaseModel):
|
|
source_id: str = Field(min_length=1, max_length=128)
|
|
timestamp: str
|
|
zed_active: bool | None = None
|
|
type: str | None = None
|
|
branch: str | None = None
|
|
subject: str | None = None
|
|
message: str | None = None
|
|
author: str | None = None
|
|
source: str | None = None
|
|
title: str | None = None
|
|
class_: str | None = Field(default=None, alias="class")
|
|
model_config = {"extra": "allow", "populate_by_name": True}
|
|
|
|
|
|
class ZedSync(BaseModel):
|
|
device_id: str = Field(min_length=1, max_length=128)
|
|
project_slug: str = Field(min_length=1, max_length=255)
|
|
records: list[ZedRecord] = Field(default_factory=list, max_length=2000)
|
|
|
|
|
|
class EntryUpdate(BaseModel):
|
|
task: str | None = Field(default=None, max_length=512)
|
|
project_slug: str | None = Field(default=None, max_length=255)
|
|
notes: str | None = None
|
|
status: str | None = None
|
|
start_at: datetime | None = None
|
|
end_at: datetime | None = None
|