Skip to content

Commit 2cb938a

Browse files
committed
Add update log endpoint to item lifecycle API
- Implemented a new PUT endpoint to update existing log entries for items, allowing modification of log details. - Added validation to ensure the log entry and item exist, and that the event type is valid. - Included error handling for database commit failures to enhance robustness of the logging functionality.
1 parent 5416c54 commit 2cb938a

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

app/api/item_lifecycle.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,34 @@ def create_log(item_id: int, payload: ItemLogCreate, user: User = Depends(authen
136136
return log_entry
137137

138138

139+
@route.put("/{item_id}/log/{log_id}")
140+
def update_log(item_id: int, log_id: int, payload: ItemLogCreate, user: User = Depends(authenticate)):
141+
log_entry = db.session.query(ItemLog).filter_by(
142+
id=log_id, item_id=item_id
143+
).first()
144+
if not log_entry:
145+
raise HTTPException(404, "Log entry not found.")
146+
147+
item = db.session.query(Item).filter_by(id=item_id, user_id=user.id).first()
148+
if not item:
149+
raise HTTPException(404, "Item not found.")
150+
151+
if payload.event_type not in VALID_EVENT_TYPES:
152+
raise HTTPException(400, f"Invalid event_type. Must be one of: {', '.join(VALID_EVENT_TYPES)}")
153+
154+
for key, value in payload.dict().items():
155+
setattr(log_entry, key, value)
156+
157+
try:
158+
db.session.commit()
159+
db.session.refresh(log_entry)
160+
except Exception:
161+
logger.exception("Failed to update item log")
162+
raise HTTPException(400, "Unable to update log entry.")
163+
164+
return log_entry
165+
166+
139167
@route.get("/{item_id}/log")
140168
def fetch_logs(item_id: int, user: User = Depends(authenticate)):
141169
item = db.session.query(Item).filter_by(id=item_id, user_id=user.id).first()

0 commit comments

Comments
 (0)