Created ability for Admins to review deleted tasks and restore them if needed
This commit is contained in:
+24
-3
@@ -94,7 +94,13 @@ def delete_user(user_id: str, db: Session = Depends(get_db), current_user: model
|
||||
|
||||
@app.get("/tasks", response_model=List[schemas.Task])
|
||||
def read_tasks(db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
return db.query(models.Task).all()
|
||||
return db.query(models.Task).filter(models.Task.deleted_at == None).all()
|
||||
|
||||
@app.get("/tasks/deleted", response_model=List[schemas.Task])
|
||||
def read_deleted_tasks(db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
if current_user.account_type != "admin":
|
||||
raise HTTPException(status_code=403, detail="Not enough permissions")
|
||||
return db.query(models.Task).filter(models.Task.deleted_at != None).all()
|
||||
|
||||
@app.post("/tasks", response_model=schemas.Task)
|
||||
def create_task(task: schemas.TaskCreate, db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
@@ -144,9 +150,24 @@ def delete_task(task_id: str, db: Session = Depends(get_db), current_user: model
|
||||
if not db_task:
|
||||
raise HTTPException(status_code=404, detail="Task not found")
|
||||
|
||||
db.delete(db_task)
|
||||
from sqlalchemy.sql import func
|
||||
db_task.deleted_at = func.now()
|
||||
db.commit()
|
||||
return {"message": "Task deleted"}
|
||||
return {"message": "Task moved to trash"}
|
||||
|
||||
@app.post("/tasks/{task_id}/restore", response_model=schemas.Task)
|
||||
def restore_task(task_id: str, db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
if current_user.account_type != "admin":
|
||||
raise HTTPException(status_code=403, detail="Not enough permissions")
|
||||
|
||||
db_task = db.query(models.Task).filter(models.Task.id == task_id).first()
|
||||
if not db_task:
|
||||
raise HTTPException(status_code=404, detail="Task not found")
|
||||
|
||||
db_task.deleted_at = None
|
||||
db.commit()
|
||||
db.refresh(db_task)
|
||||
return db_task
|
||||
@app.get("/workspace", response_model=schemas.Workspace)
|
||||
def read_workspace(db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
ws = db.query(models.Workspace).first()
|
||||
|
||||
@@ -42,6 +42,7 @@ class Task(Base):
|
||||
added_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
due_at = Column(DateTime(timezone=True))
|
||||
reminder_at = Column(DateTime(timezone=True))
|
||||
deleted_at = Column(DateTime(timezone=True))
|
||||
|
||||
assignee = relationship("User", back_populates="tasks", foreign_keys=[assignee_id])
|
||||
tags = relationship("Tag", secondary=task_tags, back_populates="tasks")
|
||||
|
||||
@@ -67,6 +67,7 @@ class TaskBase(BaseModel):
|
||||
status: str = "open"
|
||||
due_at: Optional[datetime] = None
|
||||
reminder_at: Optional[datetime] = None
|
||||
deleted_at: Optional[datetime] = None
|
||||
|
||||
class TaskCreate(TaskBase):
|
||||
id: Optional[str] = None
|
||||
|
||||
Reference in New Issue
Block a user