-
Notifications
You must be signed in to change notification settings - Fork 3
Backend
Welcome to the documentation of the Wallet App API. Our API has been fully developed by Małgorzata Marczyńska, our talented developer who has put in a lot of effort and dedication. The backend logic takes care of user account handling, authorization, and transactions management. Our backend is hosted on Render, and the database is hosted on MongoDB.
Backend base URL: https://waller-api.onrender.com/api/
Authorization is done using a JWT token, which must be included in the request header Authorization
. The token can be obtained from the user object in the database and is provided in the response of the /users/auth/log-in
endpoint.
If the authorization fails, you will receive the following response:
{
"status": "error",
"code": 401,
"message": "Unauthorized",
"data": "Unauthorized"
}
{
"password": {
"type": "String",
"minlength": 6,
"maxlength": 100,
"required": true
},
"email": {
"type": "String",
"minlength": 3,
"maxlength": 50,
"required": true,
"unique": true
},
"username": {
"type": "String",
"minlength": 1,
"maxlength": 12
},
"token": {
"type": "String",
"default": null
},
"verify": {
"type": "Boolean",
"default": false
},
"verificationToken": {
"type": "String",
"required": true,
"default": null
},
"balance": {
"type": "Number",
"default": 0
},
"owner": {
"type": "Schema.Types.ObjectId",
"ref": "user"
}
}
{
"transactionDate": {
"type": "String",
"default": "dateNow"
},
"typeOfTransaction": {
"type": "String",
"enum": ["Income", "Expense"],
"default": "Expense"
},
"categoryId": {
"type": "String"
},
"comment": {
"type": "String",
"default": ""
},
"amountOfTransaction": {
"type": "Number",
"default": 0
}
}
{
"name": {
"type": "String"
}
}
Used to create a new user account.
- Does not require authorization.
- Does not accept parameters.
Request Body:
{
"email": "example@mail.com",
"password": "SamplePass123",
"doubledPassword": "SamplePass123",
"username": "Josh"
}
Responses:
- On success:
{
"status": "Success",
"code": 201,
"message": "Registration successful! Verification e-mail has just been sent, please verify your e-mail",
"data": {
"newUser": {
"id": "String",
"email": "String",
"username": "String",
"balance": "Number",
"verificationToken": "string"
}
}
}
- When a field is missing:
json
{
"status": "error",
"message": "missing field"
}
- Incorrect credentials:
{
"status": "Unauthorized",
"code": 401,
"message": "Incorrect login or password or you have not verified your email yet. If you have not verified yet, please check your email inbox or go to 'api/users/verify' to get a second verification email",
"data": "Bad credentials"
}
Used to log in to a user account.
- Does not require authorization.
- Does not accept parameters.
Request Body:
{
"email": "example@mail.com",
"password": "SamplePass123"
}
Responses:
- On success:
{
"status": "Success",
"code": 200,
"data": {
"token": "String",
"user": {
"id": "String",
"username": "String",
"email": "String",
"balance": "Number"
}
}
}
- When a field is missing:
{
"status": "error",
"message": "missing field"
}
- Incorrect credentials:
{
"status": "Unauthorized",
"code": 401,
"message": "Incorrect login or password or you have not verified your email yet. If you have not verified yet, please check your email inbox or go to 'api/users/verify' to get a second verification email",
"data": "Bad credentials"
}
Used to verify a user's email.
- Does not require authorization.
- Does not accept a request body.
Parameters:
- verificationToken (String, required): Example: "ad8eu2j89daj892JDW82j"
Responses:
- On success:
{
"status": "Verification successful, please log in",
"code": 200
}
- When already verified or the token doesn't exist:
{
"status": "error",
"message": "User not found"
}
Used to send a verification email again.
- Does not require authorization.
- Does not accept parameters.
Request Body:
{
"email": "example@mail.com"
}
Responses:
- On success:
{
"code": 200,
"message": "Verification email sent"
}
- Email has not been provided:
{
"status": "error",
"message": "missing required field email"
}
- When the user is already verified:
{
"message": "Verification has already been passed, please log in"
}
Used to get the current user's data.
- Requires authorization.
- Does not accept parameters or a request body.
Responses:
- On success:
{
"status": "Success",
"code": 200,
"data": {
"id": "String",
"email": "String",
"username": "String",
"balance": "Number"
}
}
Used to log out from a user account.
- Requires authorization.
- Does not accept parameters or a request body.
Responses:
- On success:
{
"status": "No content",
"code": 204,
"data": "Not found"
}
Used to delete a user account.
- Requires authorization.
- Does not accept parameters or a request body.
Responses:
- On success:
{
"status": "No content",
"code": 204,
"data": "Not found"
}
Returns all the user's transactions.
- Requires authorization.
- Does not accept parameters or a request body.
Response:
On success:
{
"status": "success",
"code": 200,
"countTransactions": "Number",
"totalPages": "Number",
"currentPage": "Number",
"limit": "Number",
"data": {
"balance": "Number",
"userId": "String",
"transactions": "Array"
}
}
Returns the transaction with the provided ID.
- Requires authorization.
Parameters:
- transactionId (String, required): Example: "dawlij289jf9ajn98a22j"
Response:
On success:
{
"status": "success",
"code": 200,
"data": {
"transaction": "Object"
}
}
If the transaction is not found:
{
"status": "error",
"code": 404,
"message": "Not found transaction id: ${transactionId}",
"data": "Not Found"
}
Adds a new transaction entry.
- Requires authorization.
- Does not accept parameters.
Request Body:
{
"typeOfTransaction": "String (required)",
"category": "String (required)",
"amountOfTransaction": "Number (required)",
"transactionDate": "String (required)",
"comment": "String (required)"
}
Response:
On success:
{
"status": "success",
"code": 200,
"data": {
"updatedTransaction": "Object",
"updatedBalance": "Number"
}
}
If there is an incompatibility between the typeOfTransaction and category (e.g., type = "expense", category = "income"):
{
"status": "error",
"code": 400,
"message": "Bad request"
}
Edits a transaction.
- Requires authorization.
Parameters:
- transactionId (String, required): Example: "dawlij289jf9ajn98a22j"
Request Body:
At least one field from the Transaction model. Example:
{
"comment": "Edited sample transaction",
"amountOfTransaction": 666
}
Response:
On success:
{
"status": "created",
"code": 201,
"data": {
"newTransaction": "Object",
"updatedBalance": "Number"
}
}
If the transaction is not found:
{
"status": "error",
"code": 404,
"message": "Not found transaction id: ${transactionId}",
"data": "Not Found"
}
If there is an incompatibility between the typeOfTransaction and category (e.g., type = "expense", category = "income"):
{
"status": "error",
"code": 400,
"message": "Bad request"
}
DELETE /transactions/:transactionId
Deletes a transaction.
- Requires authorization.
Parameters:
- transactionId (String, required): Example: "dawlij289jf9ajn98a22j"
Response:
On success:
{
"status": "No content",
"code": 204,
"data": "No Content"
}
If the transaction is not found:
{
"status": "error",
"code": 404,
"message": "Not found transaction id: ${transactionId}",
"data": "Not Found"
}
Returns all categories.
- Requires authorization.
- Does not accept parameters or a request body.
Response:
On success:
{
"status": "success",
"code": 200,
"data": { "allCategories": "Objects Array" },
}
Returns finances summary
- Requires authorization.
- Does not accept parameters or a request body.
Response:
On success:
{
"status": "success",
"code": 200,
"data": {
"incomeValue":"Number",
"expenseValue":"Number",
"balanceForMonth":"Number",
"usedCategoryIds":"Array",
"categoryIdValues":"Array",
},
}