This is a simple blogging application with user registration and login functionality. Users can manage their blog posts, including viewing all posts, creating new ones, editing existing ones, and deleting them. Additional features include a search function and a like system to enhance user interaction.
backend
: Contains the backend code for the application.constants.js
: Defines constants used in the application.db.js
: Sets up the MongoDB database connection and defines database schemas.index.js
: Entry point for the backend server.routes
: Contains route handlers for different endpoints.index.js
: Main router combining user and blog routes.user.js
: Handles user-related endpoints (signup, login, update, delete, get details).blog.js
: Handles blog-related endpoints (create, update, delete, get all, filter, get recommended).Middlewares
: Contains middleware functions.authentication.js
: Handles user authentication using JWT.
Schemas
: Contains request validation schemas using Zod.blog.js
: Defines schemas for blog-related requests.user.js
: Defines schemas for user-related requests.
-
Clone the repository:
git clone https://github.com/Aryan-Garg-dev/Blog-App-Backend.git
-
Install dependencies:
cd Blog-App/backend npm install
-
Environment variables:
Create a
.env
file in thebackend
directory with the following content:DB_HOST=<your-mongodb-uri> JWT_SECRET=<your-secret-key>
Replace
<your-mongodb-uri>
with your MongoDB connection string and<your-secret-key>
with a secret key for JWT. -
Start the server:
npx nodemon index.js
This will start the backend server at
http://localhost:3000
.
- Endpoint:
POST /api/v1/user/signup
- Request Body:
{ "username": "username", "name": { "first": "First", "last": "Last" }, "password": "password", "email": "user@example.com", "preferences": ["travel", "food", "fitness"] }
- Response:
{ "token": "access-token", "message": "User created successfully", "success": true }
- Endpoint:
POST /api/v1/user/login
- Request Body:
{ "email": "user@example.com", "password": "password" }
- Response:
{ "token": "access-token", "message": "User logged in successfully", "success": true }
- Endpoint:
PUT /api/v1/user/update
- Authorization: Bearer token
- Request Body:
{ "username": "newusername", "name": { "first": "NewFirst", "last": "NewLast" }, "email": "newemail@example.com", "preferences": ["food", "technology", "travel"] }
- Response:
{ "message": "User-Info updated successfully", "success": true }
- Endpoint:
DELETE /api/v1/user/delete
- Authorization: Bearer token
- Response:
{ "message": "User deleted successfully", "success": true }
- Endpoint:
GET /api/v1/user/bulk
- Authorization: Bearer token
- Query Parameters:
filter
: Search filter
- Response:
{ "users": [ { "username": "username1", "name": { "first": "First1", "last": "Last1" }, "email": "user1@example.com", "_id": "user-id-1" }, { "username": "username2", "name": { "first": "First2", "last": "Last2" }, "email": "user2@example.com", "_id": "user-id-2" } ], "success": true, "message": "Users fetched successfully." }
- Endpoint:
GET /api/v1/user/details
- Authorization: Bearer token
- Response:
{ "user": { "username": "username", "name": { "first": "First", "last": "Last" }, "email": "user@example.com", "preferences": ["travel", "food", "fitness"] }, "message": "Users details fetched successfully", "success": true }
- Endpoint:
POST /api/v1/blog/create
- Authorization: Bearer token
- Request Body:
{ "title": "Blog Title", "body": "Blog Content", "tags": ["food", "travel"] }
- Response:
{ "message": "Blog created successfully", "blogId": "blog-id", "success": true }
- Endpoint:
PUT /api/v1/blog/update/:id
- Authorization: Bearer token
- Request Body:
{ "title": "Updated Blog Title", "body": "Updated Blog Content", "tags": ["fitness", "personal-development"] }
- Response:
{ "message": "Blog updated successfully", "success": true }
- Endpoint:
DELETE /api/v1/blog/delete/:id
- Authorization: Bearer token
- Response:
{ "message": "Blog deleted successfully", "success": true }
- Endpoint:
PUT /api/v1/blog/like/:id
- Authorization: Bearer token
- Request Parameters:
:id
: The ID of the blog post to like
- Response:
{ "success": true, "message": "Like toggled successfully", "liked": true }
- Endpoint:
PUT /api/v1/blog/comment/:id
- Authorization: Bearer token
- Request Parameters:
:id
: The ID of the blog post to comment on
- Request Body:
{ "comment": "Your comment here" }
- Response:
{ "success": true, "message": "Comment added successfully", }
- Endpoint:
GET /api/v1/blog
- Authorization: Bearer token
- Query Parameters:
filter
: Search filter
- Response:
{ "blogs": [ { "author": "user-id", "title": "Blog Title", "body": "Blog Content", "likes": { "count": 0, "users": [] }, "comments": [], "authoredDate": "2024-04-25T00:00:00.000Z", "tags": ["food", "travel"], "_id": "blog-id" } ], "success": true, "message": "fetched all the users' blogs successfully" }
- Endpoint:
GET /api/v1/blog/all
- Authorization: Bearer token
- Query Parameters:
filter
: Search filter
- Response: Same as above
- Endpoint:
GET /api/v1/blog/recommended
- Authorization: Bearer token
- Response: Same as above
To test the application locally, follow these steps:
-
Start the server:
cd Blog-App/backend npx nodemon index.js
-
Use Postman:
- Import Postman Collection to test the API endpoints.
- Set the environment variables if necessary.