Skip to content

Latest commit

 

History

History
264 lines (213 loc) · 4.66 KB

README.md

File metadata and controls

264 lines (213 loc) · 4.66 KB

Expense Tracker API

Overview

RESTful web service built with Spring Boot, using MySQL for the database and provides endpoints for creating, updating, and retrieving expense records.

Table of Contents

  1. Database Structure
  2. Endpoints

Database Structure

The primary structure involves two main tables:

  1. users
  2. expense_base
  1. users Table

The users table serves as the repository for user information. Whenever a new user is created, their details, are stored in this table.

Table Structure

`users` (
  `user_id` varchar(255) NOT NULL,
  `email_id` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `username` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
)
  1. expense_base Table

The expense_base table acts as a foundational template for individual user expense tables. When a new user is added to the system, a corresponding table is dynamically created with the user's username as the table name.

Table Structure

`expense_base` (
  `transaction_id` int NOT NULL AUTO_INCREMENT,
  `amount` decimal(10,2) NOT NULL,
  `isCredited` tinyint(1) NOT NULL,
  `category` varchar(255) NOT NULL,
  `description` varchar(255) NOT NULL,
  `transaction_date` datetime NOT NULL,
  PRIMARY KEY (`transaction_id`)
)

Endpoints

  1. Creating a new user

    POST /user/new

Request Body

{
    "password": "[password]",
    "username": "[username]",
    "emailId": "[email id]"
}

Success Response

{
    "status": "success",
    "message": "User created successfully",
    "data": {
        "userId": "[userid]", //generated
        "username": "[username]",
        "password": "[password]",
        "emailId": "[email id]"
    }
}

Failure Response

{
    "status": "failure",
    "message": "User already exists",
    "data": {
        "userId": null,
        "username": "[username]",
        "password": "[password]",
        "emailId": "[email id]"
    }
}

  1. Authentication of a user

    POST /user/auth

Request Body

{
    "username":"[username]" ,
    "password": "[password]"
}

Success Response

{
    "status": "successful",
    "message": "Authenticated Successfully",
    "token": "[JWT TOKEN]"
}

Failure Response

{
    "status": "failure",
    "message": "Unauthorized: Authentication unsuccessful.",
    "data": null
}
  1. Add a expense

    POST /expense/add/{username}

Header

Authorization: Bearer [JWT Token]

Request Body

{
    "amount": "[amount]",
    "isCredit": [true/false],
    "category": "[category]",
    "description": "[description]",
    "dateTime": "[dateTime]"
}

Response

{
    "status": "success",
    "message": "Expense Added Successfully",
    "data": {
        "id": null,
        "dateTime": "[dateTime]",
        "amount": "[amount]",
        "description": "[description]",
        "category": "[category]",
        "credit": [true/false]
    }
}
  1. Get all expenses

    GET /expense/get/all/{username}

Header

Authorization: Bearer [JWT Token]

Response

[
    {
        "id": 1,
        "dateTime": "[DateTime 1]",
        "amount": "[Amount 1]",
        "description": "[Description 1]",
        "category": "[Category 1]",
        "credit": false
    },
    {
        "id": 2,
        "dateTime": "[DateTime 2]",
        "amount": "[Amount 2]",
        "description": "[Description 2]",
        "category": "[Category 2]",
        "credit": false
    },
    {
        "id": 3,
        "dateTime": "[DateTime 3]",
        "amount": "[Amount 3]",
        "description": "[Description 3]",
        "category": "[Category 3]",
        "credit": false
    }
]

  1. Update a expense

    PUT /expense/update/{username}/{id}

Header

Authorization: Bearer [JWT Token]

Request Body

{
   "dateTime": "[updated date time]",
    "amount": [updated amount],
    "description": "[updated description]",
    "category": "[updated category]",
    "isCredit": [updated boolean]
}

Response

{
    "status": "success",
    "message": "Expense Updated Successfully",
    "data": {
        "id": 3,
        "dateTime": "[updated date time]",
        "amount": [updated amount],
        "description": "[updated description]",
        "category": "[updated category]",
        "credit": [updated boolean]
    }
}
  1. Delete a expense

    /expense/delete/{username}/{id}

Header

Authorization: Bearer [JWT Token]

Response

{
    "status": "success",
    "message": "Expense Deleted Successfully",
    "data": null
}