-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Description
Develop an endpoint to handle requests to create a new blog post. If the blog post is created successfully, it will be returned to the client with a 201 Created status. If an error occurs, an appropriate error status will be returned.
Blog Table Schema
| Field | Type | Description | Constraints |
|---|---|---|---|
| id | Integer | Unique identifier for the blog post | Primary Key, Auto Increment |
| title | String | Title of the blog post | Unique, Not Null, Max Length: 255 |
| excerpt | String | A summary of the blog post | Max Length: 300, Not Null |
| content | Text | Full content of the blog post | Not Null |
| image_url | String | A url string of the image | Max Length: 255, Not Null |
| is_deleted | Boolean | Flag for soft deletion of the blog post | Default: False |
| created_at | DateTime | Timestamp when the blog post was created | Default: Current Timestamp |
| updated_at | DateTime | Timestamp when the blog post was last updated | Default: Current Timestamp, Updated on Modification |
Acceptance Criteria
- The endpoint allows creating a new blog post with the fields: title, excerpt, image_url and content.
- The endpoint validates the input data and returns appropriate error messages for invalid data or missing required fields.
- Returns a
201 Createdstatus code and the created blog post data when the blog post is created successfully.
Requirements
- Implement API endpoint for creating a new blog post.
- Validate the input data, including length and format checks for title, excerpt, image_url and content.
- Handle conflicts if a blog post with the same title already exists and return a
409 Conflictstatus code. - Handle unexpected errors and return the appropriate status code.
Expected Outcome
- Users should be able to send a request to create a new blog post.
- Users should receive appropriate status codes and responses based on the outcome of the request.
Endpoints
[POST] /api/v1/blogs
-
Description: Creates a new blog post.
-
Request Body (JSON):
{ "title": "New Blog Post", "excerpt": "A summary of the blog post...", "content": "The content of the blog post...", } -
Success Response:
-
Status:
201 Created -
Body:
{ "id": 1, "title": "New Blog Post", "excerpt": "A summary of the blog post...", "content": "The content of the blog post...", "image_url": "image-url-link", "created_at": "2024-07-18T00:00:00Z", "updated_at": "2024-07-18T00:00:00Z" }
-
-
Error Response:
-
Status:
500 Internal Server Error -
Body:
{ "error": "Internal server error." }
-
-
Conflict Response:
-
Status:
409 Error: Conflict -
Body:
{ "detail": "A blog post with this title already exists." }
-
-
Validation Error Response:
-
Status:
422 Error: Unprocessable Entity -
Body:
{ "detail": "Invalid data message." }
-
Testing
Test Scenarios
-
Successful Creation of Blog Post
- Ensure that the endpoint successfully creates a new blog post.
- Verify that the response includes the created blog post data and a
201 Createdstatus code.
-
Conflict Error
- Simulate a request to create a blog post with a title that already exists.
- Verify that the endpoint returns a
409 Conflictstatus code and an appropriate error message.
-
Internal Server Error
- Simulate an internal server error to raise an exception.
- Verify that the endpoint returns a
500 Internal Server Errorstatus code and an appropriate error message.
-
Invalid Data
- Send requests with invalid data (e.g., missing required fields, incorrect data types).
- Verify that the endpoint returns a
400 Bad Requeststatus code and an appropriate error message.
-
Boundary Testing for Fields
- Test the maximum length constraints for the title and excerpt fields.
- Ensure that the endpoint handles the boundary conditions correctly and returns appropriate error messages for exceeding the length limits.
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request