2026-03-06 20:14:50 +07:00
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
|
|
|
|
|
2026-03-07 06:38:06 +07:00
|
|
|
class SketchFile(BaseModel):
|
|
|
|
|
name: str
|
|
|
|
|
content: str
|
|
|
|
|
|
|
|
|
|
|
2026-03-06 20:14:50 +07:00
|
|
|
class ProjectCreateRequest(BaseModel):
|
|
|
|
|
name: str
|
|
|
|
|
description: str | None = None
|
|
|
|
|
is_public: bool = True
|
|
|
|
|
board_type: str = "arduino-uno"
|
2026-03-07 06:38:06 +07:00
|
|
|
# Multi-file workspace. Falls back to legacy `code` field if omitted.
|
|
|
|
|
files: list[SketchFile] | None = None
|
|
|
|
|
code: str = "" # legacy single-file fallback
|
2026-03-06 20:14:50 +07:00
|
|
|
components_json: str = "[]"
|
|
|
|
|
wires_json: str = "[]"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProjectUpdateRequest(BaseModel):
|
|
|
|
|
name: str | None = None
|
|
|
|
|
description: str | None = None
|
|
|
|
|
is_public: bool | None = None
|
|
|
|
|
board_type: str | None = None
|
2026-03-07 06:38:06 +07:00
|
|
|
files: list[SketchFile] | None = None
|
|
|
|
|
code: str | None = None # legacy
|
2026-03-06 20:14:50 +07:00
|
|
|
components_json: str | None = None
|
|
|
|
|
wires_json: str | None = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProjectResponse(BaseModel):
|
|
|
|
|
id: str
|
|
|
|
|
name: str
|
|
|
|
|
slug: str
|
|
|
|
|
description: str | None
|
|
|
|
|
is_public: bool
|
|
|
|
|
board_type: str
|
2026-03-07 06:38:06 +07:00
|
|
|
# Files loaded from disk volume
|
|
|
|
|
files: list[SketchFile] = []
|
|
|
|
|
# Legacy single-file code (kept for backwards compat)
|
2026-03-06 20:14:50 +07:00
|
|
|
code: str
|
|
|
|
|
components_json: str
|
|
|
|
|
wires_json: str
|
|
|
|
|
owner_username: str
|
|
|
|
|
created_at: datetime
|
|
|
|
|
updated_at: datetime
|
|
|
|
|
|
|
|
|
|
model_config = {"from_attributes": True}
|