Daily Expenses Sharing Application Backend

Overview

This backend service handles user and expense management for a daily expenses sharing application. The application allows users to add expenses and split them based on three different methods: exact amounts, percentages, and equal splits. Additionally, the application manages user details, validates inputs, and generates downloadable balance sheets.

Features

  • User Management

    • Create user
    • Retrieve user details
  • Expense Management

    • Add expense
    • Retrieve individual user expenses
    • Retrieve overall expenses
    • Download balance sheet

Requirements

  • Node.js
  • MongoDB

Setup and Installation

  1. Clone the repository
git clone https://github.com/your-username/daily-expenses-sharing-app.git
cd daily-expenses-sharing-app
  1. Install dependencies
npm install
  1. Environment Variables

Create a .env file in the root directory and add the following environment variables:

PORT=3000
MONGODB_URI=mongodb://localhost:27017/expenses_db
JWT_SECRET=your_jwt_secret
  1. Start the server
npm start

The server will start on http://localhost:3000.

API Endpoints

User Endpoints

  • Create User

    • Endpoint: /api/users

    • Method: POST

    • Request Body:

      {
        "name": "Test User",
        "email": "test@example.com",
        "mobile": "1234567890",
        "password": "password"
      }
    • Response:

      {
        "_id": "60c72b2f9b1d8c1f8c4d8e0f",
        "name": "Test User",
        "email": "test@example.com",
        "mobile": "1234567890",
        "password": "$2b$10$..."
      }
  • Retrieve User Details

    • Endpoint: /api/users/:id

    • Method: GET

    • Headers:

      Authorization: Bearer <your_jwt_token>
    • Response:

      {
        "_id": "60c72b2f9b1d8c1f8c4d8e0f",
        "name": "Test User",
        "email": "test@example.com",
        "mobile": "1234567890"
      }

Expense Endpoints

  • Add Expense

    • Endpoint: /api/expenses

    • Method: POST

    • Headers:

      Authorization: Bearer <your_jwt_token>
    • Request Body:

      {
        "description": "Lunch",
        "amount": 1000,
        "paidBy": "user1@example.com",
        "splitMethod": "equal",
        "splits": [
          { "user": "user1@example.com", "amount": 1000 },
          { "user": "user2@example.com", "amount": 1000 },
          { "user": "user3@example.com", "amount": 1000 }
        ]
      }
    • Response:

      {
        "_id": "60c72b2f9b1d8c1f8c4d8e0f",
        "description": "Lunch",
        "amount": 1000,
        "paidBy": "user1@example.com",
        "splitMethod": "equal",
        "splits": [
          { "user": "user1@example.com", "amount": 1000 },
          { "user": "user2@example.com", "amount": 1000 },
          { "user": "user3@example.com", "amount": 1000 }
        ]
      }
  • Retrieve Individual User Expenses

    • Endpoint: /api/expenses/user/:userId

    • Method: GET

    • Headers:

      Authorization: Bearer <your_jwt_token>
    • Response:

      [
        {
          "_id": "60c72b2f9b1d8c1f8c4d8e0f",
          "description": "Lunch",
          "amount": 1000,
          "paidBy": "user1@example.com",
          "splitMethod": "equal",
          "splits": [
            { "user": "user1@example.com", "amount": 1000 },
            { "user": "user2@example.com", "amount": 1000 },
            { "user": "user3@example.com", "amount": 1000 }
          ]
        }
      ]
  • Retrieve Overall Expenses

    • Endpoint: /api/expenses

    • Method: GET

    • Headers:

      Authorization: Bearer <your_jwt_token>
    • Response:

      [
        {
          "_id": "60c72b2f9b1d8c1f8c4d8e0f",
          "description": "Lunch",
          "amount": 1000,
          "paidBy": "user1@example.com",
          "splitMethod": "equal",
          "splits": [
            { "user": "user1@example.com", "amount": 1000 },
            { "user": "user2@example.com", "amount": 1000 },
            { "user": "user3@example.com", "amount": 1000 }
          ]
        }
      ]
  • Download Balance Sheet

    • Endpoint: /api/expenses/balance-sheet

    • Method: GET

    • Headers:

      Authorization: Bearer <your_jwt_token>
    • Response: A downloadable file containing the balance sheet details.