mirror of https://github.com/buster-so/buster.git
4.0 KiB
4.0 KiB
Update Message REST Endpoint PRD
Overview
This PRD describes the implementation of a new REST endpoint for updating a message. This endpoint will allow users to update specific properties of a message, such as setting feedback on a message.
Endpoint Details
Basic Information
- HTTP Method: PUT
- URL Path:
/api/v1/messages/:id
- Purpose: Update properties of a specific message
Request Format
- Headers:
Content-Type: application/json
Authorization: Bearer {token}
- URL Parameters:
id
: UUID of the message to update
- Request Body (JSON):
feedback
: String (optional) - "positive" or "negative"
Response Format
- Success:
- Status: 200 OK
- Body: Updated message object
- Error Responses:
- 401 Unauthorized: If the user is not authenticated
- 403 Forbidden: If the user does not have permission to update the message
- 404 Not Found: If the message with the specified ID does not exist
- 500 Internal Server Error: If there's a server error
Example Request
curl --location --request PUT 'http://localhost:3001/api/v1/messages/cee3065d-c165-4e04-be44-be05d1e6d902' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjMmRkNjRjZC1mN2YzLTQ4ODQtYmM5MS1kNDZhZTQzMTkwMWUiLCJuYW1lIjoiSm9obiBEb2UiLCJpYXQiOjE1MTYyMzkwMjIsImV4cCI6MjUxODU1NTMyNiwiYXVkIjoiYXV0aGVudGljYXRlZCJ9.uRs5OVyYErQ1iSQwAXVUD6TFolOu31ejPhcBS41ResA' \
--data '{
"feedback": "negative"
}'
Example Response
{
"id": "cee3065d-c165-4e04-be44-be05d1e6d902",
"request_message": {
"request": "Example message text",
"sender_id": "c2dd64cd-f7f3-4884-bc91-d46ae431901e",
"sender_name": "John Doe",
"sender_avatar": null
},
"response_message_ids": ["..."],
"response_messages": {},
"reasoning_message_ids": ["..."],
"reasoning_messages": {},
"created_at": "2025-03-20T15:30:00Z",
"final_reasoning_message": null,
"feedback": "negative"
}
Implementation Details
New Files to Create
1. Handler Implementation
- File:
/libs/handlers/src/messages/helpers/update_message_handler.rs
- Purpose: Contains the business logic for updating a message
2. REST Route Implementation
- File:
/src/routes/rest/routes/messages/update_message.rs
- Purpose: Contains the HTTP handler for the REST endpoint
3. Update Module Exports
- File:
/libs/handlers/src/messages/helpers/mod.rs
(update) - File:
/src/routes/rest/routes/messages/mod.rs
(update)
Implementation Steps
1. Create the Handler Function
Create a new handler in /libs/handlers/src/messages/helpers/update_message_handler.rs
that:
- Takes a user, message ID, and update parameters
- Verifies the user has permission to update the message
- Updates the message in the database
- Returns the updated message
2. Create the REST Endpoint
Create a new file at /src/routes/rest/routes/messages/update_message.rs
that:
- Creates a request struct to deserialize the request body
- Maps the HTTP request to the handler function
- Handles errors appropriately
- Returns the appropriate HTTP response
3. Update Module Exports
Update the module exports to include the new handler and endpoint.
Technical Details
Database Updates
The update operation will modify records in the messages
table.
Expected Behavior
- Only the user who created the message or an admin should be able to update the message
- Updates should be atomic and consistent
- The endpoint should validate input data before updating the database
Testing Strategy
- Test updating a message with valid data as the message owner
- Test updating a message with valid data as an admin
- Test updating a message with invalid data
- Test updating a non-existent message
- Test updating a message without permission
- Test concurrent updates to the same message
Security Considerations
- Ensure proper authentication and authorization
- Validate input data to prevent injection attacks
- Ensure database queries are properly parameterized