Files
CloudBudget/app/routes/accounts.js

530 lines
22 KiB
JavaScript

var passport = require('../security/passport'),
AccountController = require('../controllers/accounts');
module.exports = function(app) {
/**
* @api {get} /accounts List accounts
* @apiVersion 1.0.0
* @apiName Retrieve accounts
* @apiGroup Accounts
*
* @apiHeader {String} Content-Type application/json
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (200) {json} accounts List of all accounts and their (sub)categories.
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* [{
* "name": "Home",
* "reference": "1234567890",
* "user_id": "55e6e4e005230f49271c7078",
* "_id": "55e8218912c65a1730c34858",
* "created_at": "2015-09-03T10:31:37.889Z",
* "categories": [
* {
* "key": "alimony_payments",
* "label": "Alimony Payments",
* "_id": "55e8218912c65a1730c34859",
* "sub_categories": []
* },
* {
* "key": "automobile_expenses",
* "label": "Automobile Expenses",
* "_id": "55e8218912c65a1730c3485a",
* "sub_categories": [
* {
* "label": "Car Payment",
* "key": "car_payment",
* "_id": "55e8218912c65a1730c3485d"
* }
* ]
* }
* ]
* }]
*/
app.get('/api/accounts', passport.jwt, AccountController.retrieve_accounts);
/**
* @api {post} /accounts Create account
* @apiVersion 1.0.0
* @apiName Create account
* @apiGroup Accounts
*
* @apiParam {String} name Name for the new account
* @apiParam {String} reference A reference (bank account number) for the new account
* @apiParamExample {json} Request-Example:
* {
* name: 'Home',
* reference: '1234567890'
* }
*
* @apiHeader {String} Content-Type application/json
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (201) {Object} account The new account with its (sub)categories.
* @apiSuccessExample Success-Response:
* HTTP/1.1 201 Created
* {
* "name": "Home",
* "reference": "1234567890",
* "user_id": "55e6e4e005230f49271c7078",
* "_id": "55e8218912c65a1730c34858",
* "created_at": "2015-09-03T10:31:37.889Z",
* "categories": [
* {
* "key": "alimony_payments",
* "label": "Alimony Payments",
* "_id": "55e8218912c65a1730c34859",
* "sub_categories": []
* },
* {
* "key": "automobile_expenses",
* "label": "Automobile Expenses",
* "_id": "55e8218912c65a1730c3485a",
* "sub_categories": [
* {
* "label": "Car Payment",
* "key": "car_payment",
* "_id": "55e8218912c65a1730c3485d"
* }
* ]
* }
* ]
* }
*
* @apiError (400) {json} BadRequest The user can't be found.
*
* @apiErrorExample BadRequest:
* HTTP/1.1 400 Bad Request
* [
* {
* "field": "name",
* "rule": "required",
* "message": "Path `name` is required."
* }
* ]
*
*/
app.post('/api/accounts', passport.jwt, AccountController.create);
/**
* @api {delete} /accounts/:account_id Delete account
* @apiVersion 1.0.0
* @apiName Delete account
* @apiGroup Accounts
*
* @apiParam {String} account_id The account to delete
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (204) -
* @apiSuccessExample Success-Response:
* HTTP/1.1 204 No Content
*
* @apiError (404) {json} AccountNotFound The account can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
* {
* "message": "Unknown account"
* }
*/
app.delete('/api/accounts/:account_id', passport.jwt, AccountController.delete);
/**
* @api {get} /accounts/:account_id Get account
* @apiVersion 1.0.0
* @apiName Get account
* @apiGroup Accounts
*
* @apiParam {String} account_id The given account
*
* @apiHeader {String} Content-Type application/json
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (200) {Object} account The account with its (sub)categories.
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "name": "Home",
* "reference": "1234567890",
* "user_id": "55e6e4e005230f49271c7078",
* "_id": "55e8218912c65a1730c34858",
* "created_at": "2015-09-03T10:31:37.889Z",
* "categories": [
* {
* "key": "alimony_payments",
* "label": "Alimony Payments",
* "_id": "55e8218912c65a1730c34859",
* "sub_categories": []
* },
* {
* "key": "automobile_expenses",
* "label": "Automobile Expenses",
* "_id": "55e8218912c65a1730c3485a",
* "sub_categories": [
* {
* "label": "Car Payment",
* "key": "car_payment",
* "_id": "55e8218912c65a1730c3485d"
* }
* ]
* }
* ]
* }
*
* @apiError (404) {json} AccountNotFound The account can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
* {
* "message": "Unknown account"
* }
*/
app.get('/api/accounts/:account_id', passport.jwt, AccountController.get);
/**
* @api {put} /accounts/:account_id Modify account
* @apiVersion 1.0.0
* @apiName Modify account
* @apiGroup Accounts
*
* @apiParam {String} account_id The account id to modify
* @apiParam {String} name Name for the new account
* @apiParam {String} reference A reference (bank account number) for the new account
* @apiParamExample {json} Request-Example:
* {
* name: 'Home',
* reference: '1234567890'
* }
*
* @apiHeader {String} Content-Type application/json
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess {String} username Username of the User.
* @apiSuccess {String} token The JWT valid token.
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "name": "Home",
* "reference": "1234567890",
* "user_id": "55e6e4e005230f49271c7078",
* "_id": "55e8218912c65a1730c34858",
* "created_at": "2015-09-03T10:31:37.889Z",
* "categories": [
* {
* "key": "alimony_payments",
* "label": "Alimony Payments",
* "_id": "55e8218912c65a1730c34859",
* "sub_categories": []
* },
* {
* "key": "automobile_expenses",
* "label": "Automobile Expenses",
* "_id": "55e8218912c65a1730c3485a",
* "sub_categories": [
* {
* "label": "Car Payment",
* "key": "car_payment",
* "_id": "55e8218912c65a1730c3485d"
* }
* ]
* }
* ]
* }
*
* @apiError (400) {json} BadRequest The user can't be found.
* @apiErrorExample BadRequest:
* HTTP/1.1 400 Bad Request
* [
* {
* "field": "name",
* "rule": "required",
* "message": "Path `name` is required."
* }
* ]
* @apiError (404) {json} AccountNotFound The account can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
* {
* "message": "Unknown account"
* }
*/
app.put('/api/accounts/:account_id', passport.jwt, AccountController.modify);
/**
* @api {get} /accounts/:account_id/entries List account entries
* @apiVersion 1.0.0
* @apiName List entries
* @apiGroup Entries
*
* @apiParam {String} account_id The account id to retrieve
*
* @apiHeader {String} Content-Type application/json
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (200) {json} entries List of all account entries.
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* [
* {
* _id: '',
* account_id: '1000',
* type: 'DEPOSIT'
* amount: 1000,
* date: 2015-09-03T10:04:11.481Z
* }
* ]
*
* @apiError (404) {json} AccountNotFound The account can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
* {
* "message": "Unknown account"
* }
*/
app.get('/api/accounts/:account_id/entries', passport.jwt, AccountController.list_entries);
/**
* @api {post} /accounts/:account_id/entries Create entry
* @apiVersion 1.0.0
* @apiName Create entry
* @apiGroup Entries
*
* @apiParam {String} account_id The account id to populate
* @apiParam {String} amount Amount of the entry
* @apiParam {String} date Date of the bill/deposit
* @apiParam {String} [category] Category id of the bill/deposit
* @apiParam {String} [sub_category] Sub category id of the bill/deposit
* @apiParam {String} [label] A label for the entry
* @apiParamExample {json} Request-Example:
* {
* amount: 1000,
* date: 2015-09-03T10:04:11.481Z
* }
*
* @apiHeader {String} Content-Type application/json
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (201) {Object} entry The created entry.
* @apiSuccess (201) {Object[]} entries All account's entries
* @apiSuccess (201) {Number} balance The account's total balance
* @apiSuccessExample Success-Response:
* HTTP/1.1 201 Created
* {
* entry: {
* _id: '',
* account_id: '1000',
* type: 'DEPOSIT'
* amount: 1000,
* date: 2015-09-03T10:04:11.481Z
* },
* entries: [
* {
* _id: '',
* account_id: '1000',
* type: 'DEPOSIT'
* amount: 1000,
* date: 2015-09-03T10:04:11.481Z
* }
* ],
* balance: 1000
* }
*
* @apiError (400) {json} BadRequest The user can't be found.
* @apiErrorExample BadRequest:
* HTTP/1.1 400 Bad Request
* [
* {
* "field": "amount",
* "rule": "required",
* "message": "Path `amount` is required."
* }
* ]
*
* @apiError (404) {json} AccountNotFound The account can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
* {
* "message": "Unknown account"
* }
*/
app.post('/api/accounts/:account_id/entries', passport.jwt, AccountController.add_entry);
/**
* @api {post} /accounts/:account_id/entries/:entry_id Modify entry
* @apiVersion 1.0.0
* @apiName Modify entry
* @apiGroup Entries
*
* @apiParam {String} account_id The owner account
* @apiParam {String} entry_id The entry to modify
* @apiParam {String} amount Amount of the entry
* @apiParam {String} date Date of the bill/deposit
* @apiParam {String} [category] Category id of the bill/deposit
* @apiParam {String} [sub_category] Sub category id of the bill/deposit
* @apiParam {String} [label] A label for the entry
* @apiParamExample {json} Request-Example:
* {
* amount: 1000,
* date: 2015-09-03T10:04:11.481Z
* }
*
* @apiHeader {String} Content-Type application/json
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (200) {Object} entry The created entry.
* @apiSuccess (200) {Object[]} entries All account's entries
* @apiSuccess (200) {Number} balance The account's total balance
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* entry: {
* _id: '',
* account_id: '1000',
* type: 'DEPOSIT'
* amount: 1000,
* date: 2015-09-03T10:04:11.481Z
* },
* entries: [
* {
* _id: '',
* account_id: '1000',
* type: 'DEPOSIT'
* amount: 1000,
* date: 2015-09-03T10:04:11.481Z
* }
* ],
* balance: 1000
* }
*
* @apiError (400) {json} BadRequest The user can't be found.
* @apiErrorExample BadRequest:
* HTTP/1.1 400 Bad Request
* [
* {
* "field": "amount",
* "rule": "required",
* "message": "Path `amount` is required."
* }
* ]
*
* @apiError (404) {json} AccountNotFound The account can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
* {
* "message": "Unknown account"
* }
* @apiError (404) {json} EntryNotFound The entry can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
*/
app.put('/api/accounts/:account_id/entries/:entry_id', passport.jwt, AccountController.modify_entry);
/**
* @api {delete} /accounts/:account_id/entries/:entry_id Delete entry
* @apiVersion 1.0.0
* @apiName Delete entry
* @apiGroup Entries
*
* @apiParam {String} account_id The owner account
* @apiParam {String} entry_id The entry to delete
*
* @apiHeader {String} Authorization The valid JWT token provided by the {post} /users/login resource
* @apiHeaderExample {string} Authorization header example:
* "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTVlNmU0ZTAwNTIzMGY0OTI3MWM3MDc4IiwiaWF0IjoxNDQxMTk1MjMyfQ.eWh9nuXVVSVDKKCmTMDoc9FBU55-KgkiOJH1hrdQRTQ"
* @apiError (401) {json} AuthenticationFailed The user can't be found.
* @apiErrorExample AuthenticationFailed:
* HTTP/1.1 401 Not Found
* {
* "message": "Authentication failed"
* }
*
* @apiSuccess (204) -
* @apiSuccessExample Success-Response:
* HTTP/1.1 204 No Content
*
* @apiError (404) {json} AccountNotFound The account can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
* {
* "message": "Unknown account"
* }
* @apiError (404) {json} EntryNotFound The entry can't be found.
* @apiErrorExample AccountNotFound:
* HTTP/1.1 404 Not Found
*/
app.delete('/api/accounts/:account_id/entries/:entry_id', passport.jwt, AccountController.delete_entry);
app.get('/api/accounts/:account_id/entries', passport.jwt, AccountController.list_entries);
};