Added esc functionality to open windows, added 'n' keybind to create new tasks, fixed Accounts and settings page to allow for edits to be made as well as profile picture to be updated
This commit is contained in:
+35
-15
@@ -1,6 +1,7 @@
|
||||
from fastapi import FastAPI, Depends, HTTPException, status
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.sql import func
|
||||
from typing import List
|
||||
import uuid
|
||||
|
||||
@@ -50,9 +51,8 @@ def create_user(user: schemas.UserCreate, db: Session = Depends(get_db), current
|
||||
initials=user.initials,
|
||||
email=user.email,
|
||||
phone=user.phone,
|
||||
photo=user.photo,
|
||||
account_type=user.account_type,
|
||||
password_hash=auth.get_password_hash(user.password)
|
||||
password_hash=auth.get_password_hash(user.password) if user.password else None,
|
||||
account_type=user.account_type
|
||||
)
|
||||
db.add(db_user)
|
||||
db.commit()
|
||||
@@ -61,6 +61,9 @@ def create_user(user: schemas.UserCreate, db: Session = Depends(get_db), current
|
||||
|
||||
@app.patch("/users/{user_id}", response_model=schemas.User)
|
||||
def update_user(user_id: str, user_update: schemas.UserUpdate, db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
if current_user.account_type != "admin" and current_user.id != user_id:
|
||||
raise HTTPException(status_code=403, detail="Not enough permissions")
|
||||
|
||||
db_user = db.query(models.User).filter(models.User.id == user_id).first()
|
||||
if not db_user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
@@ -74,25 +77,26 @@ def update_user(user_id: str, user_update: schemas.UserUpdate, db: Session = Dep
|
||||
return db_user
|
||||
|
||||
@app.post("/users/{user_id}/password")
|
||||
def change_password(user_id: str, payload: schemas.PasswordChange, db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
db_user = db.query(models.User).filter(models.User.id == user_id).first()
|
||||
if not db_user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
if not auth.verify_password(payload.old_password, db_user.password_hash):
|
||||
raise HTTPException(status_code=401, detail="Current password is incorrect")
|
||||
db_user.password_hash = auth.get_password_hash(payload.new_password)
|
||||
def change_password(user_id: str, pwd_data: schemas.PasswordChange, db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
if current_user.id != user_id:
|
||||
raise HTTPException(status_code=403, detail="Cannot change another user's password")
|
||||
|
||||
if not auth.verify_password(pwd_data.old_password, current_user.password_hash):
|
||||
raise HTTPException(status_code=400, detail="Incorrect current password")
|
||||
|
||||
current_user.password_hash = auth.get_password_hash(pwd_data.new_password)
|
||||
db.commit()
|
||||
return {"message": "Password updated"}
|
||||
return {"message": "Password updated successfully"}
|
||||
|
||||
@app.delete("/users/{user_id}")
|
||||
def delete_user(user_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_user = db.query(models.User).filter(models.User.id == user_id).first()
|
||||
if not db_user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
|
||||
# Reassign tasks to rod
|
||||
db.query(models.Task).filter(models.Task.assignee_id == user_id).update({"assignee_id": "rod"})
|
||||
|
||||
db.delete(db_user)
|
||||
db.commit()
|
||||
return {"message": "User deleted"}
|
||||
@@ -160,11 +164,26 @@ 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")
|
||||
|
||||
from sqlalchemy.sql import func
|
||||
db_task.deleted_at = func.now()
|
||||
db.commit()
|
||||
return {"message": "Task moved to trash"}
|
||||
|
||||
@app.get("/tasks/{task_id}/notes", response_model=List[schemas.TaskNote])
|
||||
def read_task_notes(task_id: str, db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
return db.query(models.TaskNote).filter(models.TaskNote.task_id == task_id).order_by(models.TaskNote.created_at.desc()).all()
|
||||
|
||||
@app.post("/tasks/{task_id}/notes", response_model=schemas.TaskNote)
|
||||
def create_task_note(task_id: str, note: schemas.TaskNoteBase, db: Session = Depends(get_db), current_user: models.User = Depends(auth.get_current_user)):
|
||||
db_note = models.TaskNote(
|
||||
task_id=task_id,
|
||||
author_id=current_user.id,
|
||||
body=note.body
|
||||
)
|
||||
db.add(db_note)
|
||||
db.commit()
|
||||
db.refresh(db_note)
|
||||
return db_note
|
||||
|
||||
@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":
|
||||
@@ -178,6 +197,7 @@ def restore_task(task_id: str, db: Session = Depends(get_db), current_user: mode
|
||||
db.commit()
|
||||
db.refresh(db_task)
|
||||
return db_task
|
||||
|
||||
@app.get("/workspace", response_model=schemas.Workspace)
|
||||
def read_workspace(db: Session = Depends(get_db)):
|
||||
ws = db.query(models.Workspace).first()
|
||||
|
||||
@@ -25,6 +25,8 @@ class UserUpdate(BaseModel):
|
||||
role: Optional[str] = None
|
||||
account_type: Optional[str] = None
|
||||
photo: Optional[str] = None
|
||||
email: Optional[str] = None
|
||||
phone: Optional[str] = None
|
||||
|
||||
class PasswordChange(BaseModel):
|
||||
old_password: str
|
||||
|
||||
Reference in New Issue
Block a user