Implement a way to update tasks. v0.0.2
This commit is contained in:
parent
2b4d9d1a1f
commit
86bd06f8ed
51
api.py
51
api.py
@ -45,40 +45,41 @@ def create_user(user: UserCreate, session: SessionDep):
|
|||||||
session.refresh(db_user)
|
session.refresh(db_user)
|
||||||
return 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)
|
@app.patch("/user/update", response_model=UserPublic)
|
||||||
async def update_user(user: UserUpdate, session: SessionDep, current_user: User = Depends(get_current_user)):
|
async def update_user(user: UserUpdate, session: SessionDep, current_user: User = Depends(get_current_user)):
|
||||||
user_db = session.get(User, current_user.id)
|
user_db = session.get(User, current_user.id)
|
||||||
user_data = user.model_dump(exclude_unset=True)
|
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)
|
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)
|
session.add(user_db)
|
||||||
print("l##_db: ", user_db.tasks)
|
|
||||||
session.commit()
|
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)
|
session.refresh(user_db)
|
||||||
print(f"l77_db: {user_db.tasks}")
|
|
||||||
return user_db
|
return user_db
|
||||||
|
|
||||||
@app.get('/user/login')
|
@app.get('/user/login')
|
||||||
|
4
auth.py
4
auth.py
@ -23,9 +23,9 @@ def create_access_token(data: dict, expires_delta: timedelta | None = None):
|
|||||||
to_encode = data.copy()
|
to_encode = data.copy()
|
||||||
|
|
||||||
if expires_delta:
|
if expires_delta:
|
||||||
expire = datetime.now(datetime.timezone.utc) + expires_delta
|
expire = datetime.utcnow() + expires_delta
|
||||||
else:
|
else:
|
||||||
expire = datetime.now(datetime.timezone.utc) + timedelta(minutes=15)
|
expire = datetime.utcnow() + timedelta(minutes=15)
|
||||||
|
|
||||||
to_encode.update({"exp": expire})
|
to_encode.update({"exp": expire})
|
||||||
encoded_jwt = jwt.encode(to_encode, secret_key, algorithm=algo)
|
encoded_jwt = jwt.encode(to_encode, secret_key, algorithm=algo)
|
||||||
|
10
tables.py
10
tables.py
@ -14,7 +14,12 @@ class TokenData(BaseModel):
|
|||||||
class Task(BaseModel):
|
class Task(BaseModel):
|
||||||
title: str
|
title: str
|
||||||
description: str | None = None
|
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
|
# User models
|
||||||
class UserBase(SQLModel):
|
class UserBase(SQLModel):
|
||||||
@ -44,7 +49,8 @@ class UserUpdate(SQLModel):
|
|||||||
name: str | None = None
|
name: str | None = None
|
||||||
email: str | None = None
|
email: str | None = None
|
||||||
password: str | None = None
|
password: str | None = None
|
||||||
tasks: list[Task] | None = None
|
username: str | None = None
|
||||||
|
is_active: bool | None = None
|
||||||
|
|
||||||
class VerifyUser(BaseModel):
|
class VerifyUser(BaseModel):
|
||||||
email: str
|
email: str
|
||||||
|
Loading…
Reference in New Issue
Block a user