71 строка
1.5 KiB
Python
71 строка
1.5 KiB
Python
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
from backend.projects_registry import (
|
|
find_project_by_workspace,
|
|
load_projects,
|
|
save_project,
|
|
update_project_settings,
|
|
)
|
|
|
|
router = APIRouter(prefix='/api/projects', tags=['projects'])
|
|
|
|
|
|
class ProjectRegistryRequest(BaseModel):
|
|
name: str
|
|
repo_url: str
|
|
workspace: str
|
|
stack: str | None = None
|
|
|
|
|
|
class ProjectSettingsRequest(BaseModel):
|
|
workspace: str
|
|
settings: dict
|
|
|
|
|
|
@router.get('/list')
|
|
async def projects_list():
|
|
return {
|
|
'success': True,
|
|
'projects': load_projects(),
|
|
}
|
|
|
|
|
|
@router.post('/register')
|
|
async def register_project(payload: ProjectRegistryRequest):
|
|
projects = save_project({
|
|
'name': payload.name,
|
|
'repo_url': payload.repo_url,
|
|
'workspace': payload.workspace,
|
|
'stack': payload.stack,
|
|
})
|
|
|
|
return {
|
|
'success': True,
|
|
'projects': projects,
|
|
}
|
|
|
|
|
|
@router.get('/settings')
|
|
async def project_settings(workspace: str):
|
|
project = find_project_by_workspace(workspace)
|
|
if not project:
|
|
raise HTTPException(status_code=404, detail='Project not found')
|
|
|
|
return {
|
|
'success': True,
|
|
'project': project,
|
|
}
|
|
|
|
|
|
@router.post('/settings')
|
|
async def save_project_settings(payload: ProjectSettingsRequest):
|
|
project = update_project_settings(payload.workspace, payload.settings)
|
|
if not project:
|
|
raise HTTPException(status_code=404, detail='Project not found')
|
|
|
|
return {
|
|
'success': True,
|
|
'project': project,
|
|
}
|