diff --git a/api.py b/api.py index 613c466..7685855 100644 --- a/api.py +++ b/api.py @@ -45,40 +45,41 @@ def create_user(user: UserCreate, session: SessionDep): session.refresh(db_user) return db_user +@app.patch("/user/update-tasks", response_model=UserPublic) +async def update_user_task(task: UpdateTask, session: SessionDep, current_user: User = Depends(get_current_user)): + user_db = session.get(User, current_user.id) + user_data = task.model_dump(exclude_unset=True) + + new_task = user_data + + # Filter out the task with matching title and keep all others + updated_tasks = [ + task for task in user_db.tasks + if task['title'] != new_task['title'] + ] + + # Add the new task to the filtered list + updated_tasks.append(new_task) + + # Update user_db tasks with the new list + user_db.tasks = updated_tasks + + # Update the session + session.add(user_db) + session.commit() + session.refresh(user_db) + + return user_db + @app.patch("/user/update", response_model=UserPublic) async def update_user(user: UserUpdate, session: SessionDep, current_user: User = Depends(get_current_user)): user_db = session.get(User, current_user.id) user_data = user.model_dump(exclude_unset=True) - print(f"l52_db: {user_db.tasks}") - if 'tasks' in user_data: - if user_db.tasks is None: - user_db.tasks = [] - - for i in range(len(user_db.tasks)): # loop through all tasks - if user_db.tasks[i]['title'] == user_data['tasks'][i]['title']: # check if there is a task with the same title - # if there is, check if the is_completed status has changed - # if it has, update the task in the db - # if it hasn't, do nothing - if user_db.tasks[i]['is_completed'] != user_data['tasks'][i]['is_completed']: - # update the task in the db - updated_task = user_db.tasks[i] - updated_task['is_completed'] = user_data['tasks'][i]['is_completed'] - break - else: - current_tasks = user_db.tasks - new_task = user_data['tasks'] - user_data.tasks = current_tasks + new_task - print(f"l71_update_db: {user_db.tasks}") - print(f"l72_update_user_data: {user_data}") + user_db.sqlmodel_update(user_data) - print(f"l74_user_data {user_data}") - print(f"l75_user_db: {user_db.tasks}") session.add(user_db) - print("l##_db: ", user_db.tasks) session.commit() - print("l76_not_refresh_db: ", user_db.tasks) # randomly sets is_completed to false even though its true every other time session.refresh(user_db) - print(f"l77_db: {user_db.tasks}") return user_db @app.get('/user/login') diff --git a/auth.py b/auth.py index 1d843d0..cbea008 100644 --- a/auth.py +++ b/auth.py @@ -23,9 +23,9 @@ def create_access_token(data: dict, expires_delta: timedelta | None = None): to_encode = data.copy() if expires_delta: - expire = datetime.now(datetime.timezone.utc) + expires_delta + expire = datetime.utcnow() + expires_delta else: - expire = datetime.now(datetime.timezone.utc) + timedelta(minutes=15) + expire = datetime.utcnow() + timedelta(minutes=15) to_encode.update({"exp": expire}) encoded_jwt = jwt.encode(to_encode, secret_key, algorithm=algo) diff --git a/tables.py b/tables.py index c407670..9aece15 100644 --- a/tables.py +++ b/tables.py @@ -14,7 +14,12 @@ class TokenData(BaseModel): class Task(BaseModel): title: str description: str | None = None - is_completed: bool = False + is_completed: bool | None = Field(default=False) + +class UpdateTask(BaseModel): + title: str | None = None + description: str | None = None + is_completed: bool | None = Field(default=None) # User models class UserBase(SQLModel): @@ -44,7 +49,8 @@ class UserUpdate(SQLModel): name: str | None = None email: str | None = None password: str | None = None - tasks: list[Task] | None = None + username: str | None = None + is_active: bool | None = None class VerifyUser(BaseModel): email: str