Changed it so that tasks can be dragged and reordered, as well as having tasks breathe to leave a space where the task will go when you let go
This commit is contained in:
+8
-3
@@ -99,17 +99,21 @@ 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).filter(models.Task.deleted_at == None).all()
|
||||
return db.query(models.Task).filter(models.Task.deleted_at == None).order_by(models.Task.position.asc()).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()
|
||||
return db.query(models.Task).filter(models.Task.deleted_at != None).order_by(models.Task.position.asc()).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)):
|
||||
task_id = task.id or f"t_{uuid.uuid4().hex[:8]}"
|
||||
|
||||
# Calculate position (max in column + 1000)
|
||||
max_pos = db.query(func.max(models.Task.position)).filter(models.Task.assignee_id == task.assignee_id).scalar() or 0.0
|
||||
|
||||
db_task = models.Task(
|
||||
id=task_id,
|
||||
title=task.title,
|
||||
@@ -120,7 +124,8 @@ def create_task(task: schemas.TaskCreate, db: Session = Depends(get_db), current
|
||||
source=task.source,
|
||||
status=task.status,
|
||||
due_at=task.due_at,
|
||||
reminder_at=task.reminder_at
|
||||
reminder_at=task.reminder_at,
|
||||
position=max_pos + 1000.0
|
||||
)
|
||||
db.add(db_task)
|
||||
|
||||
|
||||
+3
-1
@@ -1,4 +1,4 @@
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, Table, DateTime, Enum
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, Table, DateTime, Enum, Float
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
from .database import Base
|
||||
@@ -43,6 +43,7 @@ class Task(Base):
|
||||
due_at = Column(DateTime(timezone=True))
|
||||
reminder_at = Column(DateTime(timezone=True))
|
||||
deleted_at = Column(DateTime(timezone=True))
|
||||
position = Column(Float, default=0.0)
|
||||
|
||||
assignee = relationship("User", back_populates="tasks", foreign_keys=[assignee_id])
|
||||
tags = relationship("Tag", secondary=task_tags, back_populates="tasks")
|
||||
@@ -90,3 +91,4 @@ class Workspace(Base):
|
||||
id = Column(String, primary_key=True)
|
||||
name = Column(String, nullable=False)
|
||||
timezone = Column(String, nullable=False, default="Pacific/Auckland")
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ class TaskBase(BaseModel):
|
||||
due_at: Optional[datetime] = None
|
||||
reminder_at: Optional[datetime] = None
|
||||
deleted_at: Optional[datetime] = None
|
||||
position: float = 0.0
|
||||
|
||||
class TaskCreate(TaskBase):
|
||||
id: Optional[str] = None
|
||||
@@ -81,6 +82,7 @@ class TaskUpdate(BaseModel):
|
||||
status: Optional[str] = None
|
||||
due_at: Optional[datetime] = None
|
||||
reminder_at: Optional[datetime] = None
|
||||
position: Optional[float] = None
|
||||
|
||||
class Task(TaskBase):
|
||||
id: str
|
||||
|
||||
Reference in New Issue
Block a user