|
1 | | -from fastapi import APIRouter, HTTPException |
2 | | -from config import DB_USE |
3 | | -from src import ProjectCreate, ProjectOut |
4 | | -from src import get_repo |
5 | | -import os |
| 1 | +from fastapi import APIRouter, Depends, HTTPException |
| 2 | +from sqlalchemy.orm import Session |
| 3 | +from typing import List |
| 4 | +from src.database.database import get_db |
| 5 | +from src.database.repository import ProjectRepository |
| 6 | +from src.schemas.project_dto import (ProjectCreateDTO, ProjectUpdateDTO, |
| 7 | + ProjectOutputDTO) |
6 | 8 |
|
7 | | -ProjectRouter = APIRouter() |
| 9 | +router = APIRouter() |
8 | 10 |
|
9 | | -HOST = os.getenv("PROJECTS_SERVICE_HOST", "0.0.0.0") |
10 | | -PORT = os.getenv("PROJECTS_SERVICE_PORT", 8001) |
| 11 | +NOT_FOUND = "Proyecto no encontrado {id}" |
11 | 12 |
|
12 | | -db = get_repo(DB_USE) |
13 | 13 |
|
| 14 | +@router.post("/", response_model=ProjectOutputDTO) |
| 15 | +def create_project(project: ProjectCreateDTO, db: Session = Depends(get_db)): |
| 16 | + repository = ProjectRepository(db) |
| 17 | + return repository.create(project) |
14 | 18 |
|
15 | | -@ProjectRouter.post("/projects/", response_model=ProjectOut) |
16 | | -def create_project(project: ProjectCreate): |
17 | | - """Create a new project.""" |
18 | | - return db.create_project(project) |
19 | 19 |
|
20 | | - |
21 | | -@ProjectRouter.get("/projects/", response_model=list[ProjectOut]) |
22 | | -def get_projects(): |
23 | | - """Get all projects.""" |
24 | | - return db.get_projects() |
25 | | - |
26 | | - |
27 | | -@ProjectRouter.get("/projects/{project_id}", response_model=ProjectOut) |
28 | | -def get_project(project_id: str): |
29 | | - """Get a project by ID.""" |
30 | | - project = db.get_project(project_id) |
31 | | - if not project: |
32 | | - raise HTTPException(status_code=404, detail="Project not found") |
| 20 | +@router.get("/{project_id}", response_model=ProjectOutputDTO) |
| 21 | +def get_project(project_id: int, |
| 22 | + db: Session = Depends(get_db)): |
| 23 | + repository = ProjectRepository(db) |
| 24 | + project = repository.get_by_id(project_id) |
| 25 | + if project is None: |
| 26 | + raise HTTPException(status_code=404, |
| 27 | + detail=NOT_FOUND.format(id=project_id)) |
33 | 28 | return project |
34 | 29 |
|
35 | 30 |
|
36 | | -@ProjectRouter.delete("/projects/{project_id}") |
37 | | -def delete_project(project_id: str): |
38 | | - """Delete a project by ID.""" |
39 | | - db.delete_project(project_id) |
40 | | - return {"detail": "Project deleted"} |
| 31 | +@router.get("/", response_model=List[ProjectOutputDTO]) |
| 32 | +def get_projects(db: Session = Depends(get_db)): |
| 33 | + repository = ProjectRepository(db) |
| 34 | + return repository.get_all() |
41 | 35 |
|
42 | 36 |
|
43 | | -@ProjectRouter.put("/projects/{project_id}", response_model=ProjectOut) |
44 | | -def update_project(project_id: str, project: ProjectCreate): |
45 | | - """Update a project by ID.""" |
46 | | - updated_project = db.update_project(project_id, project) |
47 | | - if not updated_project: |
48 | | - raise HTTPException(status_code=404, detail="Project not found") |
| 37 | +@router.put("/{project_id}", response_model=ProjectOutputDTO) |
| 38 | +def update_project(project_id: int, |
| 39 | + project: ProjectUpdateDTO, |
| 40 | + db: Session = Depends(get_db)): |
| 41 | + repository = ProjectRepository(db) |
| 42 | + updated_project = repository.update(project_id, project) |
| 43 | + if updated_project is None: |
| 44 | + raise HTTPException(status_code=404, |
| 45 | + detail=NOT_FOUND.format(id=project_id)) |
49 | 46 | return updated_project |
| 47 | + |
| 48 | + |
| 49 | +@router.delete("/{project_id}") |
| 50 | +def delete_project(project_id: int, |
| 51 | + db: Session = Depends(get_db)): |
| 52 | + repository = ProjectRepository(db) |
| 53 | + if not repository.delete(project_id): |
| 54 | + raise HTTPException(status_code=404, |
| 55 | + detail=NOT_FOUND.format(id=project_id)) |
| 56 | + return {"message": "Proyecto eliminado"} |
0 commit comments