Initialize Aidoit v0.1 monorepo
CI / frontend (push) Canceled after 0s
CI / api (push) Canceled after 0s

This commit is contained in:
Pavel Kerndl
2026-07-27 18:27:37 +02:00
commit c0b013f067
65 changed files with 1323 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
from fastapi import APIRouter, HTTPException, status
from app.modules.projects.schemas import ProjectCreate, ProjectRead
from app.modules.projects.service import project_service
router = APIRouter(prefix="/projects", tags=["projects"])
@router.get("", response_model=list[ProjectRead])
async def list_projects() -> list[ProjectRead]:
return project_service.list()
@router.post(
"",
response_model=ProjectRead,
status_code=status.HTTP_201_CREATED,
)
async def create_project(payload: ProjectCreate) -> ProjectRead:
return project_service.create(payload)
@router.get("/{project_id}", response_model=ProjectRead)
async def get_project(project_id: int) -> ProjectRead:
project = project_service.get(project_id)
if project is None:
raise HTTPException(status_code=404, detail="Project not found")
return project
+19
View File
@@ -0,0 +1,19 @@
from datetime import datetime
from typing import Literal
from pydantic import BaseModel, ConfigDict, Field
ProductType = Literal["web", "desktop", "msp"]
class ProjectCreate(BaseModel):
name: str = Field(min_length=1, max_length=120)
description: str = Field(default="", max_length=2000)
product: ProductType = "web"
class ProjectRead(ProjectCreate):
model_config = ConfigDict(from_attributes=True)
id: int
created_at: datetime
+31
View File
@@ -0,0 +1,31 @@
from datetime import UTC, datetime
from itertools import count
from app.modules.projects.schemas import ProjectCreate, ProjectRead
class ProjectService:
def __init__(self) -> None:
self._ids = count(1)
self._projects: list[ProjectRead] = []
def list(self) -> list[ProjectRead]:
return self._projects.copy()
def create(self, payload: ProjectCreate) -> ProjectRead:
project = ProjectRead(
id=next(self._ids),
created_at=datetime.now(UTC),
**payload.model_dump(),
)
self._projects.append(project)
return project
def get(self, project_id: int) -> ProjectRead | None:
return next(
(project for project in self._projects if project.id == project_id),
None,
)
project_service = ProjectService()