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 });
}
}
} |