Skip to content
Snippets Groups Projects
spec.json 56.4 KiB
Newer Older
heikkkk's avatar
heikkkk committed
{
  "openapi": "3.0.1",
  "info": {
    "title": "Sparesti API",
    "description": "The Sparesti API",
    "version": "3.0"
  },
  "servers": [
    {
      "url": "http://localhost:8080",
      "description": "Generated server url"
    }
  ],
  "security": [
    {
      "Bearer Authentication": []
    }
  ],
    {
      "name": "Item",
      "description": "Endpoints for managing store and user inventory."
    },
    {
      "name": "Friend",
      "description": "API for managing friend relationships"
    }
  ],
heikkkk's avatar
heikkkk committed
  "paths": {
    "/api/users/subscription/{subscriptionLevel}": {
      "put": {
        "tags": [
          "User"
        ],
        "summary": "Update User Subscription Level",
        "description": "Updates the subscription level of the current user",
        "operationId": "updateSubscriptionLevel",
        "parameters": [
          {
            "name": "subscriptionLevel",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Subscription level updated successfully",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/friends/{friendId}": {
      "put": {
        "tags": [
          "Friend"
        ],
        "summary": "Accept a friend request",
        "description": "Accepts a friend request from another user.",
        "operationId": "acceptFriendRequest",
        "parameters": [
          {
            "name": "friendId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Friend request not found",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "200": {
            "description": "Friend request successfully accepted",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Friend"
        ],
        "summary": "Delete a friend or cancel a friend request",
        "description": "Deletes an existing friend from your friend list or cancels a received friend request.",
        "operationId": "deleteFriendOrFriendRequest",
        "parameters": [
          {
            "name": "friendId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Friend or friend request not found",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "200": {
            "description": "Friend successfully deleted or friend request cancelled",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
heikkkk's avatar
heikkkk committed
    "/bank/v1/transaction/norwegian-domestic-payment-to-self": {
      "post": {
        "tags": [
          "transaction-controller"
        ],
        "summary": "Transfer to account",
        "description": "Transfer money from a users account to another account of the same user",
        "operationId": "transferToSelf",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "404": {
            "description": "Bank profile id does not exist",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          },
          "200": {
            "description": "No accounts associated with a bank user",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDTO"
                }
              }
            }
          }
        }
      }
    },
    "/bank/v1/profile/create-profile": {
      "post": {
        "tags": [
          "bank-profile-controller"
        ],
        "summary": "Create bank profile",
        "description": "Create a bank profile by providing a social security number",
        "operationId": "createBankProfile",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankProfileDTO"
heikkkk's avatar
heikkkk committed
              }
            }
          },
          "required": true
        },
        "responses": {
          "400": {
            "description": "Could not create profile",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/BankProfileResponseDTO"
                }
              }
            }
          },
          "200": {
            "description": "Successfully created a bank profile",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/BankProfileResponseDTO"
                }
              }
            }
          }
        }
      }
    },
    "/bank/v1/account/create-account": {
      "post": {
        "tags": [
          "account-controller"
        ],
        "summary": "Create account",
        "description": "Create account with random balance",
        "operationId": "createAccount",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountRequestDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "404": {
            "description": "Provided bank profile id could not be found",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponseDTO"
                }
              }
            }
          },
          "200": {
            "description": "Successfully created account",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponseDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/send-feedback": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Send feedback",
        "description": "Send feedback from an email.",
        "operationId": "sendFeedback",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackRequestDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
heikkkk's avatar
heikkkk committed
    "/api/users/reset-password": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Initiate a password reset",
        "description": "Send a password reset mail to the user with the specified email",
        "operationId": "resetPassword",
        "requestBody": {
          "content": {
            "text/plain": {
              "schema": {
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Successfully initiated a password reset"
          }
        },
        "security": []
      }
    },
    "/api/users/confirm-password": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Confirm a password reset",
        "description": "Confirms a password reset using a token and a new password",
        "operationId": "confirmPasswordReset",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PasswordResetDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "403": {
            "description": "Invalid token"
          },
          "204": {
            "description": "Password was reset successfully"
heikkkk's avatar
heikkkk committed
          }
        },
        "security": []
      }
    },
    "/api/item/{itemId}": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "Purchase an item",
        "description": "Performs a purchase of the item by the user. Points will be deducted from the user.",
        "operationId": "buyItem",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "403": {
            "description": "Insufficient points to purchase the item",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "201": {
            "description": "Item purchased and added to inventory successfully",
            "content": {
              "application/json": {

              }
            }
          }
        }
      }
    },
heikkkk's avatar
heikkkk committed
      "post": {
        "tags": [
          "Image"
        ],
        "summary": "Upload an image",
        "description": "Upload an image to the server",
        "operationId": "uploadImage",
        "requestBody": {
          "content": {
            "multipart/form-data": {
heikkkk's avatar
heikkkk committed
              "schema": {
                "required": [
                  "file"
                ],
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
            "description": "Successfully uploaded the image",
            "content": {
              "*/*": {
                "schema": {
                  "type": "integer",
                  "format": "int64"
                }
              }
            }
heikkkk's avatar
heikkkk committed
          }
        }
      }
    },
    "/api/goals": {
      "get": {
        "tags": [
          "Goal"
        ],
        "summary": "Get goals",
        "description": "Get the goals of the authenticated user",
        "operationId": "getGoals",
        "responses": {
          "200": {
            "description": "Successfully retrieved the goals",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GoalDTO"
                  }
                }
              }
            }
          }
        }
      },
heikkkk's avatar
heikkkk committed
      "post": {
        "tags": [
heikkkk's avatar
heikkkk committed
        ],
        "summary": "Create a goal",
        "description": "Create a new goal",
heikkkk's avatar
heikkkk committed
        "operationId": "createGoal",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateGoalDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successfully created a goal",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
heikkkk's avatar
heikkkk committed
                "schema": {
                  "$ref": "#/components/schemas/GoalDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/goals/update-challenge": {
      "post": {
        "tags": [
          "Goal"
        ],
        "summary": "Update a challenge",
        "description": "Update a challenge day as completed",
        "operationId": "updateChallenge",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarkChallengeDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Day is already completed or day outside of range",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionResponse"
                }
              }
            }
          },
          "200": {
            "description": "Successfully updated the challenge"
          }
        }
      }
    },
    "/api/goals/update-challenge-amount": {
      "post": {
        "tags": [
          "Goal"
        ],
        "summary": "Update challenge saving amount",
        "description": "Update the challenge saving amount",
        "operationId": "updateChallengeAmount",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarkChallengeDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully updated the challenge"
          }
        }
      }
    },
    "/api/friends/{userId}": {
      "post": {
        "tags": [
          "Friend"
        ],
        "summary": "Send a friend request",
        "description": "Sends a new friend request to another user.",
        "operationId": "addFriendRequest",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Friend request successfully created"
          }
        }
      }
    },
Henrik's avatar
Henrik committed
    "/api/budget/update/{budgetId}": {
heikkkk's avatar
heikkkk committed
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Updates a budget",
        "description": "Updates a budget based on the budget request",
        "operationId": "updateBudget",
Henrik's avatar
Henrik committed
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
heikkkk's avatar
heikkkk committed
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
Henrik's avatar
Henrik committed
                "$ref": "#/components/schemas/BudgetRequestDTO"
heikkkk's avatar
heikkkk committed
              }
            }
          },
          "required": true
        },
        "responses": {
          "500": {
            "description": "Budget is not found",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "200": {
            "description": "Successfully updated budget",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/budget/update/expense/{budgetId}": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Created/Updates an expense",
        "description": "Creates/Updates a budget based on the budget request",
        "operationId": "updateExpense",
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExpenseRequestDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "500": {
            "description": "Error updating expense",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "200": {
            "description": "Successfully updated budget",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/budget/create": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Create a new budget",
        "description": "Create a new budget with based on the budget request",
        "operationId": "createBudget",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetRequestDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully created new budget",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
heikkkk's avatar
heikkkk committed
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/valid-email/{email}": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Validate email",
        "description": "Check that the given email is valid",
        "operationId": "validateEmail",
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "409": {
            "description": "Email already exists",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionResponse"
heikkkk's avatar
heikkkk committed
                }
              }
            }
          },
          "200": {
            "description": "Email is valid",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
heikkkk's avatar
heikkkk committed
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/auth/signup": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "User Signup",
        "description": "Sign up a new user",
        "operationId": "signup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignUpRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "409": {
            "description": "Email already exists",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionResponse"
heikkkk's avatar
heikkkk committed
                }
              }
            }
          },
          "201": {
            "description": "Successfully signed up",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationResponse"
heikkkk's avatar
heikkkk committed
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/auth/login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "User Login",
        "description": "Log in with an existing user",
        "operationId": "login",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully logged in",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionResponse"
                }
              }
            }
          },
          "404": {
            "description": "User not found",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionResponse"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/users": {
      "patch": {
        "tags": [
          "User"
        ],
        "summary": "Update a profile",
        "description": "Update the profile of the authenticated user",
        "operationId": "update",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserUpdateDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully updated profile",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/update-account": {
      "patch": {
        "tags": [
          "User"
        ],
        "summary": "Update a user's bank account",
        "description": "Changes either a user's checking account or savings account",
        "operationId": "selectBankAccount",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankAccountDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/password": {
      "patch": {
        "tags": [
          "User"
        ],
        "summary": "Update a password",
        "description": "Update the password of the authenticated user",
        "operationId": "updatePassword",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PasswordUpdateDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully updated password",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/UserDTO"
                }
              }
            }
          }
        }
      }
    },
heikkkk's avatar
heikkkk committed
    "/bank/v1/account/accounts/ssn/{ssn}": {
      "get": {
        "tags": [
          "account-controller"
        ],
        "summary": "Get user accounts",
        "description": "Get accounts associated with a user by providing their social security number",
        "operationId": "getAccountsBySsn",
        "parameters": [
          {
            "name": "ssn",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "No accounts associated with a bank user",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Account"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Social security number does not exist",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Account"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/bank/v1/account/accounts/profile/{bankProfileId}": {
      "get": {
        "tags": [
          "account-controller"
        ],
        "summary": "Get user accounts",
        "description": "Get accounts associated with a user by providing their bank profile id",
        "operationId": "getAccounts",
        "parameters": [
          {
            "name": "bankProfileId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Bank profile id does not exist",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Account"
                  }
                }
              }
            }
          },
          "200": {
            "description": "No accounts associated with a bank user",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Account"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/users/{userId}/profile": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get a profile",
        "description": "Get the profile of a user",
        "operationId": "getProfile",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully got profile",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/search/{searchTerm}/{filter}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Search for users by name and filter",
        "description": "Returns a list of users whose names contain the specified search term and match the filter.",
        "operationId": "getUsersByNameAndFilter",
        "parameters": [
          {
            "name": "searchTerm",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved list of users",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/users/search/random/{amount}/{filter}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get X amount of random users",
        "description": "Get X amount of random users that fit the filter",
        "operationId": "getRandomUsers",
        "parameters": [
          {
            "name": "amount",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "filter",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved list of users",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
heikkkk's avatar
heikkkk committed
    "/api/users/me": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get the authenticated user",
        "description": "Get all user information for the authenticated user",
        "operationId": "getUser",
        "responses": {
          "200": {
            "description": "Successfully got user",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/get-feedback": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Send feedback",
        "description": "Send feedback from a user.",
        "operationId": "getFeedback",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FeedbackResponseDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
heikkkk's avatar
heikkkk committed
    "/api/leaderboard": {
      "get": {
        "tags": [
          "Leaderboard"
        ],
        "operationId": "getLeaderboard",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entryCount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaderboardDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/leaderboard/surrounding": {
      "get": {
        "tags": [
          "Leaderboard"
        ],
        "operationId": "getSurrounding",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entryCount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaderboardDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/item/store": {
heikkkk's avatar
heikkkk committed
      "get": {
        "tags": [
heikkkk's avatar
heikkkk committed
        ],
        "summary": "Get available store items",
        "description": "Retrieves all items available in the store and a flag indicating whether the user has purchased each item.",
        "operationId": "getStore",
heikkkk's avatar
heikkkk committed
        "responses": {
            "description": "List of store items fetched successfully",
Henrik's avatar
Henrik committed
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemDTO"
                  }
heikkkk's avatar
heikkkk committed
      }
    },
    "/api/item/inventory": {
heikkkk's avatar
heikkkk committed
      "get": {
        "tags": [
heikkkk's avatar
heikkkk committed
        ],
        "summary": "Get user inventory items",
        "description": "Retrieves a list of all items currently in the inventory of the user.",
        "operationId": "getInventory",
heikkkk's avatar
heikkkk committed
        "responses": {
          "200": {
            "description": "List of inventory items fetched successfully",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InventoryDTO"
    "/api/images/{id}": {
heikkkk's avatar
heikkkk committed
      "get": {
        "tags": [
          "Image"
        ],
        "summary": "Retrieve an image",
        "description": "Retrieve an image from the server",
        "operationId": "getImage",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
heikkkk's avatar
heikkkk committed
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the image",
heikkkk's avatar
heikkkk committed
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Image not found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionResponse"
        },
        "security": []
heikkkk's avatar
heikkkk committed
      }
    },
    "/api/friends": {
      "get": {
        "tags": [
          "Friend"
        ],
        "summary": "Get all friends",
        "description": "Returns a list of all friends.",
        "operationId": "getFriends",
        "responses": {
          "200": {
            "description": "Successfully retrieved list of friends",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/friends/requests": {
      "get": {
        "tags": [
          "Friend"
        ],
        "summary": "Get friend requests",
        "description": "Returns a list of all users who have sent a friend request.",
        "operationId": "getFriendRequests",
        "responses": {
          "200": {
            "description": "Successfully retrieved friend requests",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
heikkkk's avatar
heikkkk committed
    "/api/budget": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get the list of budgets",
        "description": "Get all budgets related to the authenticated user",
        "operationId": "getBudgetsByUser",
        "responses": {
          "200": {
            "description": "Successfully got budgets",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BudgetResponseDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/budget/{budgetId}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get the budget",
        "description": "Get budget by its id ",
        "operationId": "getBudget",
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "500": {
            "description": "Budget is not found",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponseDTO"
                }
              }
            }
          },
          "200": {
            "description": "Successfully got budget",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponseDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/budget/expenses/{budgetId}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get the list of budgets",
        "description": "Get all budgets related to the authenticated user",
        "operationId": "getExpenses",
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully got expenses",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExpenseResponseDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/budget/expense/{expenseId}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get the expense",
        "description": "Get expense by its id ",
        "operationId": "getExpense",
        "parameters": [
          {
            "name": "expenseId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully got expense",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseResponseDTO"
                }
              }
            }
          },
          "500": {
            "description": "Expense is not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseResponseDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/budget/delete/{budgetId}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Deletes a budget",
        "description": "Deletes a budget based on provided budget id",
        "operationId": "deleteBudget",
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "500": {
            "description": "Budget is not found",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "200": {
            "description": "Successfully deleted budget",
heikkkk's avatar
heikkkk committed
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/budget/delete/expense/{expenseId}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Deletes an expense",
        "description": "Deletes an expense based on provided expense id",
        "operationId": "deleteExpense",
        "parameters": [
          {
            "name": "expenseId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted expense",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "500": {
            "description": "Expense is not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "TransactionDTO": {
        "type": "object",
        "properties": {
          "debtorBBAN": {
            "type": "integer",
            "format": "int64"
          },
          "creditorBBAN": {
            "type": "integer",
            "format": "int64"
          },
          "amount": {
            "type": "number"
          }
        }
      },
      "BankProfileDTO": {
        "type": "object",
        "properties": {
          "ssn": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Account": {
        "type": "object",
        "properties": {
          "bban": {
            "type": "integer",
            "format": "int64"
          },
          "balance": {
            "type": "number"
          },
          "bankProfile": {
            "$ref": "#/components/schemas/BankProfile"
          }
        }
      },
      "BankProfile": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "ssn": {
            "type": "integer",
            "format": "int64"
          },
          "accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Account"
            }
          }
        }
      },
      "BankProfileResponseDTO": {
        "type": "object",
        "properties": {
          "ssn": {
            "type": "integer",
            "format": "int64"
          },
          "accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Account"
            }
          }
        }
      },
      "AccountRequestDTO": {
        "type": "object",
        "properties": {
          "ssn": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "AccountResponseDTO": {
        "type": "object",
        "properties": {
          "bankProfileId": {
            "type": "integer",
            "format": "int64"
          },
          "balance": {
            "type": "number"
          }
        }
      },
      "FeedbackRequestDTO": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
heikkkk's avatar
heikkkk committed
      "PasswordResetDTO": {
        "required": [
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "password": {
            "type": "string"
          }
        }
      },
      "CreateGoalDTO": {
        "type": "object",
        "properties": {
          "name": {
heikkkk's avatar
heikkkk committed
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "targetAmount": {
            "type": "number"
heikkkk's avatar
heikkkk committed
          },
          "targetDate": {
            "type": "string"
heikkkk's avatar
heikkkk committed
          }
        }
      },
      "ChallengeDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "amount": {
            "type": "number"
          },
          "points": {
heikkkk's avatar
heikkkk committed
            "type": "integer",
            "format": "int32"
          },
          "checkDays": {
heikkkk's avatar
heikkkk committed
            "type": "integer",
            "format": "int32"
          },
          "totalDays": {
heikkkk's avatar
heikkkk committed
            "type": "integer",
            "format": "int32"
          },
          "startDate": {
heikkkk's avatar
heikkkk committed
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "challengeTemplate": {
            "$ref": "#/components/schemas/ChallengeTemplateDTO"
          },
          "progressList": {
heikkkk's avatar
heikkkk committed
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProgressDTO"
      "ChallengeTemplateDTO": {
heikkkk's avatar
heikkkk committed
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "text": {
            "type": "string"
heikkkk's avatar
heikkkk committed
          },
          "amount": {
            "type": "number"
          },
          "type": {
heikkkk's avatar
heikkkk committed
            "type": "string",
            "enum": [
              "NO_COFFEE",
              "NO_CAR",
              "SHORTER_SHOWER",
              "SPEND_LESS_ON_FOOD",
              "BUY_USED_CLOTHES",
              "LESS_SHOPPING",
              "DROP_SUBSCRIPTION",
              "SELL_SOMETHING",
              "BUY_USED",
              "EAT_PACKED_LUNCH",
              "STOP_SHOPPING",
              "ZERO_SPENDING",
              "RENT_YOUR_STUFF",
              "MEATLESS",
              "SCREEN_TIME_LIMIT",
              "UNPLUGGED_ENTERTAINMENT"
            ]
heikkkk's avatar
heikkkk committed
          }
        }
      },
      "GoalDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "name": {
heikkkk's avatar
heikkkk committed
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "targetAmount": {
            "type": "number"
heikkkk's avatar
heikkkk committed
          },
          "targetDate": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "challenges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChallengeDTO"
            }
          },
          "user": {
            "$ref": "#/components/schemas/UserDTO"
heikkkk's avatar
heikkkk committed
          }
        }
      },
      "ProgressDTO": {
heikkkk's avatar
heikkkk committed
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
heikkkk's avatar
heikkkk committed
          },
          "day": {
            "type": "integer",
            "format": "int32"
          },
          "amount": {
            "type": "number"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time"
heikkkk's avatar
heikkkk committed
          }
        }
      },
      "UserDTO": {
heikkkk's avatar
heikkkk committed
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
heikkkk's avatar
heikkkk committed
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "profileImage": {
            "type": "integer",
            "format": "int64"
          },
          "email": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "role": {
            "type": "string"
          },
          "subscriptionLevel": {
            "type": "string"
          }
        }
      },
      "MarkChallengeDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "day": {
            "type": "integer",
            "format": "int32"
          },
          "amount": {
            "type": "number"
          }
        }
      },
      "ExceptionResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
heikkkk's avatar
heikkkk committed
          }
        }
      },
Henrik's avatar
Henrik committed
      "BudgetRequestDTO": {
heikkkk's avatar
heikkkk committed
        "type": "object",
        "properties": {
          "budgetName": {
            "type": "string"
          },
          "budgetAmount": {
            "type": "number"
          },
          "expenseAmount": {
            "type": "number"
          }
        }
      },
      "ExpenseRequestDTO": {
        "type": "object",
        "properties": {
          "expenseId": {
            "type": "integer",
            "format": "int64"
          },
          "description": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          }
        }
      },
      "ConfigurationDTO": {
        "type": "object",
        "properties": {
          "commitment": {
            "type": "string"
          },
          "experience": {
            "type": "string"
          },
          "challengeTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SignUpRequest": {
        "required": [
          "configuration"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "configuration": {
            "$ref": "#/components/schemas/ConfigurationDTO"
          }
        }
      },
      "AuthenticationResponse": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "userId": {
            "type": "integer",
            "format": "int64"
          },
          "profileImage": {
            "type": "integer",
            "format": "int64"
          },
heikkkk's avatar
heikkkk committed
          "role": {
            "type": "string"
          },
          "subscriptionLevel": {
            "type": "string"
          },
heikkkk's avatar
heikkkk committed
          "token": {
            "type": "string"
          }
        }
      },
      "LoginRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          }
        }
      },
      "UserUpdateDTO": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "profileImage": {
            "type": "integer",
            "format": "int64"
heikkkk's avatar
heikkkk committed
          },
          "configuration": {
            "$ref": "#/components/schemas/ConfigurationDTO"
          }
        }
      },
      "BankAccountDTO": {
        "type": "object",
        "properties": {
          "bban": {
            "type": "integer",
            "format": "int64"
          },
          "bankAccountType": {
            "type": "string"
          }
        }
      },
      "PasswordUpdateDTO": {
        "type": "object",
        "properties": {
          "oldPassword": {
            "type": "string"
          },
          "newPassword": {
            "type": "string"
          }
        }
      },
heikkkk's avatar
heikkkk committed
      "ProfileDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "profileImage": {
            "type": "integer",
            "format": "int64"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FeedbackResponseDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
Loading
Loading full blame...