mirror of
https://github.com/a-mayb3/Kanban_clone_backend.git
synced 2026-03-21 18:15:37 +01:00
Created a bunch of endpoints but forgetting to commit accordingly :)
This commit is contained in:
parent
4e4f25de06
commit
68bdba08fe
1 changed files with 133 additions and 4 deletions
|
|
@ -5,9 +5,17 @@ from database import db_dependency
|
||||||
|
|
||||||
import schemas.tasks as tasks
|
import schemas.tasks as tasks
|
||||||
import schemas.projects as projects
|
import schemas.projects as projects
|
||||||
|
import schemas.users as users
|
||||||
|
|
||||||
router = APIRouter(prefix="/projects", tags=["projects"])
|
router = APIRouter(prefix="/projects", tags=["projects"])
|
||||||
|
|
||||||
|
##
|
||||||
|
## GET endpoints
|
||||||
|
##
|
||||||
|
|
||||||
|
|
||||||
|
"""Get a project by ID"""
|
||||||
|
|
||||||
@router.get("/{project_id}", response_model=projects.ProjectBase)
|
@router.get("/{project_id}", response_model=projects.ProjectBase)
|
||||||
def read_project(project_id: int, db: db_dependency):
|
def read_project(project_id: int, db: db_dependency):
|
||||||
db_project = db.query(projects.models.Project).filter(projects.models.Project.id == project_id).first()
|
db_project = db.query(projects.models.Project).filter(projects.models.Project.id == project_id).first()
|
||||||
|
|
@ -15,18 +23,38 @@ def read_project(project_id: int, db: db_dependency):
|
||||||
raise HTTPException(status_code=404, detail="Project not found")
|
raise HTTPException(status_code=404, detail="Project not found")
|
||||||
return db_project
|
return db_project
|
||||||
|
|
||||||
@router.get("/{project_id}/tasks", response_model=List[tasks.TaskBase])
|
"""Get tasks from a specified project"""
|
||||||
|
@router.get("/{project_id}/tasks", response_model=List[tasks.TaskBase], tags=["tasks"])
|
||||||
def read_tasks_from_project(project_id: int, db: db_dependency):
|
def read_tasks_from_project(project_id: int, db: db_dependency):
|
||||||
db_tasks = db.query(tasks.models.Task).filter(tasks.models.Task.project_id == project_id).all()
|
db_tasks = db.query(tasks.models.Task).filter(tasks.models.Task.project_id == project_id).all()
|
||||||
return db_tasks
|
return db_tasks
|
||||||
|
|
||||||
@router.get("/{project_id}/tasks/{task_id}", response_model=tasks.TaskBase)
|
"""Get a specific task from a specified project"""
|
||||||
|
@router.get("/{project_id}/tasks/{task_id}", response_model=tasks.TaskBase, tags=["tasks"])
|
||||||
def read_task_from_project(project_id: int, task_id: int, db: db_dependency):
|
def read_task_from_project(project_id: int, task_id: int, db: db_dependency):
|
||||||
db_task = db.query(tasks.models.Task).filter(tasks.models.Task.project_id == project_id, tasks.models.Task.id == task_id).first()
|
db_task = db.query(tasks.models.Task).filter(tasks.models.Task.project_id == project_id, tasks.models.Task.id == task_id).first()
|
||||||
if db_task is None:
|
if db_task is None:
|
||||||
raise HTTPException(status_code=404, detail="Task not found in the specified project")
|
raise HTTPException(status_code=404, detail="Task not found in the specified project")
|
||||||
return db_task
|
return db_task
|
||||||
|
|
||||||
|
|
||||||
|
"""Get users from a specified project"""
|
||||||
|
|
||||||
|
@router.get("/{project_id}/users", response_model=List[users.UserBase], tags=["users"])
|
||||||
|
def read_users_from_project(project_id: int, db: db_dependency):
|
||||||
|
db_project = db.query(projects.models.Project).filter(projects.models.Project.id == project_id).first()
|
||||||
|
if db_project is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Project not found")
|
||||||
|
return db_project.users
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
## POST endpoints
|
||||||
|
##
|
||||||
|
|
||||||
|
|
||||||
|
"""Create a new project"""
|
||||||
|
|
||||||
@router.post("/", response_model=projects.ProjectCreate)
|
@router.post("/", response_model=projects.ProjectCreate)
|
||||||
def create_project(project: projects.ProjectCreate, db: db_dependency):
|
def create_project(project: projects.ProjectCreate, db: db_dependency):
|
||||||
db_project = projects.models.Project(
|
db_project = projects.models.Project(
|
||||||
|
|
@ -38,7 +66,10 @@ def create_project(project: projects.ProjectCreate, db: db_dependency):
|
||||||
db.refresh(db_project)
|
db.refresh(db_project)
|
||||||
return db_project
|
return db_project
|
||||||
|
|
||||||
@router.post("/{project_id}/tasks", response_model=tasks.TaskBase)
|
|
||||||
|
"""Create a new task in a specified project"""
|
||||||
|
|
||||||
|
@router.post("/{project_id}/tasks", response_model=tasks.TaskBase, tags=["tasks"])
|
||||||
def create_task_in_project(project_id: int, task: tasks.TaskBase, db: db_dependency):
|
def create_task_in_project(project_id: int, task: tasks.TaskBase, db: db_dependency):
|
||||||
db_task = tasks.models.Task(
|
db_task = tasks.models.Task(
|
||||||
title=task.title,
|
title=task.title,
|
||||||
|
|
@ -50,3 +81,101 @@ def create_task_in_project(project_id: int, task: tasks.TaskBase, db: db_depende
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(db_task)
|
db.refresh(db_task)
|
||||||
return db_task
|
return db_task
|
||||||
|
|
||||||
|
|
||||||
|
"""Add users to a specified project using their IDs"""
|
||||||
|
|
||||||
|
@router.post("/{project_id}/users", response_model=projects.ProjectAddUsers, tags=["users"])
|
||||||
|
def add_users_to_project(project_id: int, user_data: projects.ProjectAddUsers, db: db_dependency):
|
||||||
|
db_project = db.query(projects.models.Project).filter(projects.models.Project.id == project_id).first()
|
||||||
|
if db_project is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Project not found")
|
||||||
|
for user_id in user_data.user_ids:
|
||||||
|
db_user = db.query(users.models.User).filter(users.models.User.id == user_id).first()
|
||||||
|
if db_user:
|
||||||
|
db_project.users.append(db_user)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_project)
|
||||||
|
return db_project
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
## PUT endpoints
|
||||||
|
##
|
||||||
|
|
||||||
|
|
||||||
|
"""Update a project by ID"""
|
||||||
|
|
||||||
|
@router.put("/{project_id}", response_model=projects.ProjectUpdate)
|
||||||
|
def update_project(project_id: int, project: projects.ProjectUpdate, db: db_dependency):
|
||||||
|
db_project = db.query(projects.models.Project).filter(projects.models.Project.id == project_id).first()
|
||||||
|
if db_project is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Project not found")
|
||||||
|
if project.name is not None:
|
||||||
|
db_project.name = project.name
|
||||||
|
if project.description is not None:
|
||||||
|
db_project.description = project.description
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_project)
|
||||||
|
return db_project
|
||||||
|
|
||||||
|
|
||||||
|
"""Update a task in a specified project"""
|
||||||
|
|
||||||
|
@router.put("/{project_id}/tasks/{task_id}", response_model=tasks.TaskUpdate, tags=["tasks"])
|
||||||
|
def update_task_in_project(project_id: int, task_id: int, task: tasks.TaskUpdate, db: db_dependency):
|
||||||
|
db_task = db.query(tasks.models.Task).filter(tasks.models.Task.project_id == project_id, tasks.models.Task.id == task_id).first()
|
||||||
|
if db_task is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Task not found in the specified project")
|
||||||
|
if task.title is not None:
|
||||||
|
db_task.title = task.title
|
||||||
|
if task.description is not None:
|
||||||
|
db_task.description = task.description
|
||||||
|
if task.status is not None:
|
||||||
|
db_task.status = task.status
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_task)
|
||||||
|
return db_task
|
||||||
|
|
||||||
|
##
|
||||||
|
## DELETE endpoints
|
||||||
|
##
|
||||||
|
|
||||||
|
"""Delete a project by ID"""
|
||||||
|
|
||||||
|
@router.delete("/{project_id}")
|
||||||
|
def delete_project(project_id: int, db: db_dependency):
|
||||||
|
db_project = db.query(projects.models.Project).filter(projects.models.Project.id == project_id).first()
|
||||||
|
if db_project is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Project not found")
|
||||||
|
db.delete(db_project)
|
||||||
|
db.commit()
|
||||||
|
return {"detail": "Project deleted successfully"}
|
||||||
|
|
||||||
|
|
||||||
|
"""Delete a task from a specified project"""
|
||||||
|
|
||||||
|
@router.delete("/{project_id}/tasks/{task_id}" , tags=["tasks"])
|
||||||
|
def delete_task_from_project(project_id: int, task_id: int, db: db_dependency):
|
||||||
|
db_task = db.query(tasks.models.Task).filter(tasks.models.Task.project_id == project_id, tasks.models.Task.id == task_id).first()
|
||||||
|
if db_task is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Task not found in the specified project")
|
||||||
|
db.delete(db_task)
|
||||||
|
db.commit()
|
||||||
|
return {"detail": "Task deleted successfully"}
|
||||||
|
|
||||||
|
|
||||||
|
"""Remove users from a specified project using their IDs"""
|
||||||
|
|
||||||
|
@router.delete("/{project_id}/users/{user_id}", tags=["users"])
|
||||||
|
def remove_user_from_project(project_id: int, user_id: int, db: db_dependency):
|
||||||
|
db_project = db.query(projects.models.Project).filter(projects.models.Project.id == project_id).first()
|
||||||
|
if db_project is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Project not found")
|
||||||
|
db_user = db.query(users.models.User).filter(users.models.User.id == user_id).first()
|
||||||
|
if db_user is None or db_user not in db_project.users:
|
||||||
|
raise HTTPException(status_code=404, detail="User not found in the specified project")
|
||||||
|
db_project.users.remove(db_user)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_project)
|
||||||
|
return {"detail": "User removed from project successfully"}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue