# Project: Fista Personal Finance ## The Project Description Fista app give users the picture of their personal finance health after storing users's input and processing data. ### Feature - App is designed so that user can have eyes on many portfolios (which are known as wallets in App). Wallets are created by user. - In each wallet, there are wide range of categories for user to determine type of cashflow transaction. - For further tracking, user can take note in description of each transaction. - Transactions are collected to build report for user to have overview about what their cash flow health. ### Challenge: - To build this app, developer need to have basic knowledge about accounting & finance. - Design of app should be plain and simple but still need to transmit enough information. - Financial chart is really challenging. ### Implement feature in future: - In the future, Planning & Budget would be one of the most important segment that Fista should have, this feature will help user to determine what is really necessary for their plan, and consider thoroughly before spending their money. ## User Story ### Background: - Fista is an personal finance app that allows user to manage personal finance statement. - Each User should provide a name, an email and a password to create an account. - After joining Fista: * User can easily manage cash flow by creating their own wallets. * Wallet can be named by user for friendly interface. * User can create new wallet (such as Cash Wallet, Bank Wallet). In a specific wallet, user can create transaction that describe money inflow or outflow, which also includes information of category, date of transaction, amount and description. * For overview purpose, user can review money inflow and outflow by weekly, monthly or other duration upon user's wish. ### Authentication - As a user I can sign in. with my email and password. - As a user, I can register for a new account, email, password. - As a user, I can stay signed in with refreshing page. ### Wallet - As a user, I can create a new wallet with name, type of wallet: cash or bank account type - As a user, I can change a wallet name. - As a user, I can delete a wallet. - As a user, I can get a wallet balance at specific time. ### Category - As a user, I can get a list of categories. ### Transaction - As a user, I can create a transaction: Wallet, date, category (claim default transaction type), amount, description. - As a user, I can change a transaction. - As a user, I can delete a transaction. - As a user, I can find transactions by searching: by wallet, by category, by time range, by description. ### Report - As a user, I can read dashboard information (Income, Expense), by week, by month or by customized time range. ## API endpoints ### Auth APIs ``` * @route POST /auth/login * @description Log in with username and password * @body {email, passsword} * @access Public ``` ### Wallet APIs ``` * @route POST /wallets * @description Create a new wallet * body {name, type} * @access Login required ``` ``` * @route GET /wallets * @description Get the list of wallets * @access Login required ``` ``` * @route GET /wallets/:id * @description Get the specific wallet * @access Login required ``` ``` * @route PUT /wallets/:id * @description Update specific wallet * body {name} * @access Login required ``` ``` * @route PUT /wallets/:id * @description Delete a wallet * @access Login required ``` ### Category API ``` * @route GET /categories * @description Get the list of categories * @access Login required ``` ### Transaction APIs ``` * @route POST /transaction * @description Create a new transaction * body {wallet, category, date, amount, description} * @access Login required ``` ``` * @route GET /transaction/?wallet=&category=&fromDate=&toDate=&page=1&limit=20 * @description Get transactions of a wallet * @access Login required ``` ``` * @route PUT /transaction/:id * @description Update a transaction * body {wallet, category, date, amount, description} * @access Login required ``` ``` * @route DELETE /transaction/:id * @description Delete a transaction * @access Login required ``` ### Report APIs ``` * @route GET /report/?wallet=&fromDate=&toDate= * @description Get the report of a wallet * @access Login required ``` ## Diagram Relation ![](https://i.imgur.com/BikHhL5.png)