File size: 1,772 Bytes
5efe61a
 
 
1f2ec65
 
 
5efe61a
 
 
 
 
 
 
 
1c85752
 
 
5efe61a
 
 
 
 
 
1f2ec65
5efe61a
1f2ec65
5efe61a
 
 
 
 
 
 
 
1f2ec65
 
 
 
 
 
5efe61a
 
 
 
 
 
 
 
1f2ec65
5efe61a
1f2ec65
5efe61a
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { Request, Response } from "express";
import { WalletBusiness } from "../business";
import { UserDatabase, WalletDatabase } from "../data";
import { InvalidParameterError } from "../error";
import { InsuficientFundsError } from "../error/insuficient-funds-error";
import { TransactionType } from "../model";


export class WalletController {
  async getStatement(req: Request, res: Response) {

    try {
      const user_id = req.params.user_id

      const skip = Number(req.query.skip)
      const limit = Number(req.query.limit)
      const order_by = Number(req.query.order_by)

      const walletDatabase = new WalletDatabase()
      const userDatabase = new UserDatabase()
      const walletBusiness = new WalletBusiness(walletDatabase, userDatabase)

      const statement = await walletBusiness.getStatement(user_id, skip, limit, order_by)
      res.status(200).send(statement)
    } catch (error) {
      res.status(400).send(error);
    }
  }

  async handleTransaction(req: Request, res: Response) {
    try {

      const { amount, category, user_id } = req.body

      const categories = [TransactionType.PAYMENT, TransactionType.WITHDRAWL, TransactionType.DEPOSIT]

      if (categories.indexOf(category) === -1) {
        res.status(400).send(new InvalidParameterError('category'));
      }

      const walletDatabase = new WalletDatabase()
      const userDatabase = new UserDatabase()
      const walletBusiness = new WalletBusiness(walletDatabase, userDatabase)

      const parameters = { amount, category, user_id }

      const transaction = await walletBusiness.handleTransaction(parameters)

      res.status(204).send(transaction)
    } catch (error) {
      res.status(error.errorCode || 400).send({ message: error.message });
    }
  }
}