From 11cb3090aea9f5dbd46f9735e65d869974b58a60 Mon Sep 17 00:00:00 2001 From: Narul Hidayah Date: Tue, 30 Dec 2025 20:25:18 +0700 Subject: [PATCH] initial setup --- config/default.json | 13 +- config/prod.json | 8 +- config/stag.json | 8 +- src/controllers/branch.ts | 397 ------------------------------ src/controllers/categories.ts | 306 ----------------------- src/controllers/class_economi.ts | 397 ------------------------------ src/controllers/income_tier.ts | 397 ------------------------------ src/controllers/product.ts | 401 ------------------------------- src/helpers/orm.ts | 4 +- src/routes/private.ts | 35 --- 10 files changed, 17 insertions(+), 1949 deletions(-) delete mode 100644 src/controllers/branch.ts delete mode 100644 src/controllers/categories.ts delete mode 100644 src/controllers/class_economi.ts delete mode 100644 src/controllers/income_tier.ts delete mode 100644 src/controllers/product.ts diff --git a/config/default.json b/config/default.json index 2515e0b..57c3b2e 100644 --- a/config/default.json +++ b/config/default.json @@ -6,9 +6,9 @@ "env": "Development" }, "server": { - "port": "4010", + "port": "7010", "host": "0.0.0.0", - "host_swagger": "http://127.0.0.1:4010", + "host_swagger": "http://127.0.0.1:7010", "max_body": "50mb", "max_upload": 104857600, "morgan": "combined", @@ -22,10 +22,11 @@ "database": { "engine": "postgres", "host": "127.0.0.1", - "port": "5432", - "username": "postgres", - "password": "123", - "database": "bri_erp", + "port": "15432", + "username": "tcel_staging", + "password": "fK*#o>1W2&6f", + "database": "tcel_anatl_staging", + "synchronize": true, "logging": true } } diff --git a/config/prod.json b/config/prod.json index 2b94133..adcfe5d 100644 --- a/config/prod.json +++ b/config/prod.json @@ -6,7 +6,7 @@ "env": "Production" }, "server": { - "port": "4010", + "port": "7010", "host": "0.0.0.0", "host_swagger": "https://brilianapps.britimorleste.tl/test/m/", "max_body": "50mb", @@ -23,9 +23,9 @@ "engine": "postgres", "host": "172.16.11.202", "port": "5432", - "username": "bri_production", - "password": "44jTPj54%6<£", - "database": "bri_erp_production", + "username": "tcel_staging", + "password": "fK*#o>1W2&6f", + "database": "tcel_anatl_staging", "logging": false } } diff --git a/config/stag.json b/config/stag.json index a387361..54187fe 100644 --- a/config/stag.json +++ b/config/stag.json @@ -6,7 +6,7 @@ "env": "Staging" }, "server": { - "port": "4010", + "port": "7010", "host": "0.0.0.0", "host_swagger": "https://brilianapps.shiblysolution.id/test/m/", "max_body": "50mb", @@ -23,9 +23,9 @@ "engine": "postgres", "host": "172.16.11.202", "port": "5432", - "username": "bri_staging", - "password": "fK*#o>1W2&6f", - "database": "bri_erp_staging", + "username": "tcel_staging", + "password": "fK*#o>1W2&6f", + "database": "tcel_anatl_staging", "logging": true } } diff --git a/src/controllers/branch.ts b/src/controllers/branch.ts deleted file mode 100644 index 2b75028..0000000 --- a/src/controllers/branch.ts +++ /dev/null @@ -1,397 +0,0 @@ -import { Response, NextFunction, Application } from "express"; -import { Request } from "express-jwt"; -import { ReturnHelper } from "../helpers/express/return"; -import { OrmHelper } from "../helpers/orm"; -import Joi from "joi"; -import { ILogObj, Logger } from "tslog"; -import { Language } from "../langs/lang"; -import { Paging } from "entity"; -import CommonHelper from "../helpers/common"; -import * as fastcsv from 'fast-csv'; -import dayjs from "dayjs"; -import { Branch } from "entity"; - -const log: Logger = new Logger({ name: '[BranchController]', type: 'pretty' }); - -export class BranchController { - static async list(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Branch'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['limit'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['page'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['with_deleted'] = { - in: 'query', - required: true, - type: 'boolean' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - page: Joi.number().required().min(1).label('Page'), - limit: Joi.number().required().min(1).label('Limit'), - with_deleted: Joi.bool().required().label('With Deleted'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(Branch); - - const offset = (param.page - 1) * param.limit - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const res_count = repo.createQueryBuilder() - .where(whereAttr, whereVal); - const res_list = repo.createQueryBuilder() - .where(whereAttr, whereVal) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(param.limit); - - if (param.with_deleted) { - res_count.withDeleted(); - res_list.withDeleted(); - } - - const current_page = param.page; - const total_count_data = await res_count.getCount(); - const list_data = await res_list.getMany(); - const count_data = CommonHelper.countObject(list_data); - - return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, list_data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async export(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Branch'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['filter'] = { - in: 'query', - type: 'string' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(Branch); - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const filename = "branch.csv"; - - res.setHeader('Content-Type', 'text/csv'); - res.setHeader('Content-Disposition', 'attachment; filename=' + filename); - - const csvStream = fastcsv.format({ - headers: true, - writeHeaders: true, - transform: (row: Branch): any => ({ - ...row, - created_at: dayjs(row.created_at).format('DD-MM-YYYY HH:MM:ss'), - }) - }); - csvStream.pipe(res); - - const limit = 50; - - const fetchAndWrite = async (page: any) => { - const offset = (page - 1) * limit - - const data = await repo.createQueryBuilder() - .where(whereAttr, whereVal) - .select([ - 'id', - 'code', - 'name', - 'status', - 'created_at']) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(limit).getRawMany(); - - if (CommonHelper.countObject(data) === 0) { - csvStream.end(); - } else { - data.forEach((item: any) => csvStream.write(item)); - - if (CommonHelper.countObject(data) == limit) { - fetchAndWrite(page + 1); - } else { - csvStream.end(); - } - } - }; - - fetchAndWrite(1); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async create(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Branch'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/branch" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - code: Joi.string().max(6).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - const param: Branch = await schema.validateAsync(req.body); - - const data = new Branch() - data.code = param.code - data.name = param.name - data.status = param.status - - await OrmHelper.DB.manager.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_insert, data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 401, Language.lang.failed_insert, err.message); - } - } - - static async update(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Branch'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'Branch ID.', - required: true, - type: 'string' - } - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/branch" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - code: Joi.string().max(6).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - req.body.id = req.params['id']; - - const param: Branch = await schema.validateAsync(req.body); - - const repo = OrmHelper.DB.getRepository(Branch); - - const data = await repo.findOneBy({ id: param.id }); - - if (data != null) { - data.code = param.code - data.name = param.name - data.status = param.status - - await repo.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_update, err.message); - } - } - - static async delete(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Branch'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'Branch ID.', - required: true, - type: 'string' - } - #swagger.parameters['hard'] = { - in: 'path', - description: 'Is Hard Delete', - required: false, - type: 'boolean' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - hard: Joi.bool().optional().allow('').label('Is hard delete?') - }); - - const param: { id: string, hard: boolean } = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(Branch); - - const affected = (!param.hard ? await repo.softDelete({ id: param.id }) : await repo.delete({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); - } - } - - static async restore(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Branch'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.parameters['id'] = { - in: 'path', - description: 'Branch ID.', - required: true, - type: 'string' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID') - }); - - const param: Branch = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(Branch); - - const affected = (await repo.restore({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); - } - } -} \ No newline at end of file diff --git a/src/controllers/categories.ts b/src/controllers/categories.ts deleted file mode 100644 index 61e3e89..0000000 --- a/src/controllers/categories.ts +++ /dev/null @@ -1,306 +0,0 @@ -import { Response, NextFunction, Application } from "express"; -import { Request } from "express-jwt"; -import { ReturnHelper } from "../helpers/express/return"; -import { OrmHelper } from "../helpers/orm"; -import Joi from "joi"; -import { ILogObj, Logger } from "tslog"; -import { Language } from "../langs/lang"; -import { Category, Paging } from "entity"; -import CommonHelper from "../helpers/common"; -import * as fastcsv from 'fast-csv'; -import dayjs from "dayjs"; -import { Product } from "entity"; - -const log: Logger = new Logger({ name: '[CategoryController]', type: 'pretty' }); - -export class CategoryController { - static async list(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Category'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['limit'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['page'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['with_deleted'] = { - in: 'query', - required: true, - type: 'boolean' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - page: Joi.number().required().min(1).label('Page'), - limit: Joi.number().required().min(1).label('Limit'), - with_deleted: Joi.bool().required().label('With Deleted'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(Category); - - const offset = (param.page - 1) * param.limit - - let filterCheck = JSON.parse(param.filter) - let additionalWhere = "" - if (filterCheck['parentId']) { - additionalWhere = 'Category.parentId is null' - delete filterCheck.parentId - param.filter = JSON.stringify(filterCheck) - } - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'], - additional_where: additionalWhere - }); - - const res_count = repo.createQueryBuilder() - .where(whereAttr, whereVal) - const res_list = repo.createQueryBuilder() - .where(whereAttr, whereVal) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(param.limit); - - if (param.with_deleted) { - res_count.withDeleted(); - res_list.withDeleted(); - } - - const current_page = param.page; - const total_count_data = await res_count.getCount(); - const list_data = await res_list.getMany(); - const count_data = CommonHelper.countObject(list_data); - - return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, list_data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async create(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/product" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - code: Joi.string().max(6).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - const param: Product = await schema.validateAsync(req.body); - - const data = new Product() - data.code = param.code - data.name = param.name - data.status = param.status - - await OrmHelper.DB.manager.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_insert, data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 401, Language.lang.failed_insert, err.message); - } - } - - static async update(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'Product ID.', - required: true, - type: 'string' - } - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/product" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - code: Joi.string().max(6).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - req.body.id = req.params['id']; - - const param: Product = await schema.validateAsync(req.body); - - const repo = OrmHelper.DB.getRepository(Product); - - const data = await repo.findOneBy({ id: param.id }); - - if (data != null) { - data.code = param.code - data.name = param.name - data.status = param.status - - await repo.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_update, err.message); - } - } - - static async delete(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'Product ID.', - required: true, - type: 'string' - } - #swagger.parameters['hard'] = { - in: 'path', - description: 'Is Hard Delete', - required: false, - type: 'boolean' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - hard: Joi.bool().optional().allow('').label('Is hard delete?') - }); - - const param: { id: string, hard: boolean } = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(Product); - - const affected = (!param.hard ? await repo.softDelete({ id: param.id }) : await repo.delete({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); - } - } - - static async restore(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.parameters['id'] = { - in: 'path', - description: 'Product ID.', - required: true, - type: 'string' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID') - }); - - const param: Product = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(Product); - - const affected = (await repo.restore({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); - } - } -} \ No newline at end of file diff --git a/src/controllers/class_economi.ts b/src/controllers/class_economi.ts deleted file mode 100644 index d2702fd..0000000 --- a/src/controllers/class_economi.ts +++ /dev/null @@ -1,397 +0,0 @@ -import { Response, NextFunction, Application } from "express"; -import { Request } from "express-jwt"; -import { ReturnHelper } from "../helpers/express/return"; -import { OrmHelper } from "../helpers/orm"; -import Joi from "joi"; -import { ILogObj, Logger } from "tslog"; -import { Language } from "../langs/lang"; -import { Paging } from "entity"; -import CommonHelper from "../helpers/common"; -import * as fastcsv from 'fast-csv'; -import dayjs from "dayjs"; -import { ClassEconomi } from "entity"; - -const log: Logger = new Logger({ name: '[ClassEconomiController]', type: 'pretty' }); - -export class ClassEconomiController { - static async list(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['ClassEconomi'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['limit'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['page'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['with_deleted'] = { - in: 'query', - required: true, - type: 'boolean' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - page: Joi.number().required().min(1).label('Page'), - limit: Joi.number().required().min(1).label('Limit'), - with_deleted: Joi.bool().required().label('With Deleted'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(ClassEconomi); - - const offset = (param.page - 1) * param.limit - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const res_count = repo.createQueryBuilder() - .where(whereAttr, whereVal); - const res_list = repo.createQueryBuilder() - .where(whereAttr, whereVal) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(param.limit); - - if (param.with_deleted) { - res_count.withDeleted(); - res_list.withDeleted(); - } - - const current_page = param.page; - const total_count_data = await res_count.getCount(); - const list_data = await res_list.getMany(); - const count_data = CommonHelper.countObject(list_data); - - return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, list_data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async export(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['ClassEconomi'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['filter'] = { - in: 'query', - type: 'string' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(ClassEconomi); - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const filename = "classEconomi.csv"; - - res.setHeader('Content-Type', 'text/csv'); - res.setHeader('Content-Disposition', 'attachment; filename=' + filename); - - const csvStream = fastcsv.format({ - headers: true, - writeHeaders: true, - transform: (row: ClassEconomi): any => ({ - ...row, - created_at: dayjs(row.created_at).format('DD-MM-YYYY HH:MM:ss'), - }) - }); - csvStream.pipe(res); - - const limit = 50; - - const fetchAndWrite = async (page: any) => { - const offset = (page - 1) * limit - - const data = await repo.createQueryBuilder() - .where(whereAttr, whereVal) - .select([ - 'id', - 'code', - 'name', - 'status', - 'created_at']) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(limit).getRawMany(); - - if (CommonHelper.countObject(data) === 0) { - csvStream.end(); - } else { - data.forEach((item: any) => csvStream.write(item)); - - if (CommonHelper.countObject(data) == limit) { - fetchAndWrite(page + 1); - } else { - csvStream.end(); - } - } - }; - - fetchAndWrite(1); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async create(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['ClassEconomi'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/classEconomi" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - code: Joi.string().max(256).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - const param: ClassEconomi = await schema.validateAsync(req.body); - - const data = new ClassEconomi() - data.code = param.code - data.name = param.name - data.status = param.status - - await OrmHelper.DB.manager.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_insert, data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 401, Language.lang.failed_insert, err.message); - } - } - - static async update(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['ClassEconomi'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'ClassEconomi ID.', - required: true, - type: 'string' - } - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/classEconomi" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - code: Joi.string().max(256).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - req.body.id = req.params['id']; - - const param: ClassEconomi = await schema.validateAsync(req.body); - - const repo = OrmHelper.DB.getRepository(ClassEconomi); - - const data = await repo.findOneBy({ id: param.id }); - - if (data != null) { - data.code = param.code - data.name = param.name - data.status = param.status - - await repo.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_update, err.message); - } - } - - static async delete(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['ClassEconomi'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'ClassEconomi ID.', - required: true, - type: 'string' - } - #swagger.parameters['hard'] = { - in: 'path', - description: 'Is Hard Delete', - required: false, - type: 'boolean' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - hard: Joi.bool().optional().allow('').label('Is hard delete?') - }); - - const param: { id: string, hard: boolean } = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(ClassEconomi); - - const affected = (!param.hard ? await repo.softDelete({ id: param.id }) : await repo.delete({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); - } - } - - static async restore(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['ClassEconomi'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.parameters['id'] = { - in: 'path', - description: 'ClassEconomi ID.', - required: true, - type: 'string' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID') - }); - - const param: ClassEconomi = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(ClassEconomi); - - const affected = (await repo.restore({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); - } - } -} \ No newline at end of file diff --git a/src/controllers/income_tier.ts b/src/controllers/income_tier.ts deleted file mode 100644 index 51f54b3..0000000 --- a/src/controllers/income_tier.ts +++ /dev/null @@ -1,397 +0,0 @@ -import { Response, NextFunction, Application } from "express"; -import { Request } from "express-jwt"; -import { ReturnHelper } from "../helpers/express/return"; -import { OrmHelper } from "../helpers/orm"; -import Joi from "joi"; -import { ILogObj, Logger } from "tslog"; -import { Language } from "../langs/lang"; -import { Paging } from "entity"; -import CommonHelper from "../helpers/common"; -import * as fastcsv from 'fast-csv'; -import dayjs from "dayjs"; -import { IncomeTier } from "entity"; - -const log: Logger = new Logger({ name: '[IncomeTierController]', type: 'pretty' }); - -export class IncomeTierController { - static async list(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['IncomeTier'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['limit'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['page'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['with_deleted'] = { - in: 'query', - required: true, - type: 'boolean' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - page: Joi.number().required().min(1).label('Page'), - limit: Joi.number().required().min(1).label('Limit'), - with_deleted: Joi.bool().required().label('With Deleted'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(IncomeTier); - - const offset = (param.page - 1) * param.limit - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const res_count = repo.createQueryBuilder() - .where(whereAttr, whereVal); - const res_list = repo.createQueryBuilder() - .where(whereAttr, whereVal) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(param.limit); - - if (param.with_deleted) { - res_count.withDeleted(); - res_list.withDeleted(); - } - - const current_page = param.page; - const total_count_data = await res_count.getCount(); - const list_data = await res_list.getMany(); - const count_data = CommonHelper.countObject(list_data); - - return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, list_data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async export(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['IncomeTier'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['filter'] = { - in: 'query', - type: 'string' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(IncomeTier); - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const filename = "incomeTier.csv"; - - res.setHeader('Content-Type', 'text/csv'); - res.setHeader('Content-Disposition', 'attachment; filename=' + filename); - - const csvStream = fastcsv.format({ - headers: true, - writeHeaders: true, - transform: (row: IncomeTier): any => ({ - ...row, - created_at: dayjs(row.created_at).format('DD-MM-YYYY HH:MM:ss'), - }) - }); - csvStream.pipe(res); - - const limit = 50; - - const fetchAndWrite = async (page: any) => { - const offset = (page - 1) * limit - - const data = await repo.createQueryBuilder() - .where(whereAttr, whereVal) - .select([ - 'id', - 'code', - 'name', - 'status', - 'created_at']) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(limit).getRawMany(); - - if (CommonHelper.countObject(data) === 0) { - csvStream.end(); - } else { - data.forEach((item: any) => csvStream.write(item)); - - if (CommonHelper.countObject(data) == limit) { - fetchAndWrite(page + 1); - } else { - csvStream.end(); - } - } - }; - - fetchAndWrite(1); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async create(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['IncomeTier'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/incomeTier" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - code: Joi.string().max(128).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - const param: IncomeTier = await schema.validateAsync(req.body); - - const data = new IncomeTier() - data.code = param.code - data.name = param.name - data.status = param.status - - await OrmHelper.DB.manager.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_insert, data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 401, Language.lang.failed_insert, err.message); - } - } - - static async update(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['IncomeTier'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'IncomeTier ID.', - required: true, - type: 'string' - } - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/incomeTier" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - code: Joi.string().max(128).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - status: Joi.string().required().label('Status'), - }); - - req.body.id = req.params['id']; - - const param: IncomeTier = await schema.validateAsync(req.body); - - const repo = OrmHelper.DB.getRepository(IncomeTier); - - const data = await repo.findOneBy({ id: param.id }); - - if (data != null) { - data.code = param.code - data.name = param.name - data.status = param.status - - await repo.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_update, err.message); - } - } - - static async delete(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['IncomeTier'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'IncomeTier ID.', - required: true, - type: 'string' - } - #swagger.parameters['hard'] = { - in: 'path', - description: 'Is Hard Delete', - required: false, - type: 'boolean' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - hard: Joi.bool().optional().allow('').label('Is hard delete?') - }); - - const param: { id: string, hard: boolean } = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(IncomeTier); - - const affected = (!param.hard ? await repo.softDelete({ id: param.id }) : await repo.delete({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); - } - } - - static async restore(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['IncomeTier'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.parameters['id'] = { - in: 'path', - description: 'IncomeTier ID.', - required: true, - type: 'string' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID') - }); - - const param: IncomeTier = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(IncomeTier); - - const affected = (await repo.restore({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); - } - } -} \ No newline at end of file diff --git a/src/controllers/product.ts b/src/controllers/product.ts deleted file mode 100644 index 7d24ec1..0000000 --- a/src/controllers/product.ts +++ /dev/null @@ -1,401 +0,0 @@ -import { Response, NextFunction, Application } from "express"; -import { Request } from "express-jwt"; -import { ReturnHelper } from "../helpers/express/return"; -import { OrmHelper } from "../helpers/orm"; -import Joi from "joi"; -import { ILogObj, Logger } from "tslog"; -import { Language } from "../langs/lang"; -import { Paging } from "entity"; -import CommonHelper from "../helpers/common"; -import * as fastcsv from 'fast-csv'; -import dayjs from "dayjs"; -import { Product } from "entity"; - -const log: Logger = new Logger({ name: '[ProductController]', type: 'pretty' }); - -export class ProductController { - static async list(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['limit'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['page'] = { - in: 'query', - required: true, - type: 'number' - } - #swagger.parameters['with_deleted'] = { - in: 'query', - required: true, - type: 'boolean' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - page: Joi.number().required().min(1).label('Page'), - limit: Joi.number().required().min(1).label('Limit'), - with_deleted: Joi.bool().required().label('With Deleted'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(Product); - - const offset = (param.page - 1) * param.limit - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const res_count = repo.createQueryBuilder() - .where(whereAttr, whereVal); - const res_list = repo.createQueryBuilder() - .where(whereAttr, whereVal) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(param.limit); - - if (param.with_deleted) { - res_count.withDeleted(); - res_list.withDeleted(); - } - - const current_page = param.page; - const total_count_data = await res_count.getCount(); - const list_data = await res_list.getMany(); - const count_data = CommonHelper.countObject(list_data); - - return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, list_data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async export(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.parameters['filter'] = { - description: 'Filter with 2 format :
  • Simple format use text plaint will filter eq:code or like %name%
  • Advance format using field existing {status:\'Y\', any:\'SAME AS PLAINT LOGIC\', etc...}
', - in: 'query', - type: 'string' - } - #swagger.parameters['filter'] = { - in: 'query', - type: 'string' - } - #swagger.parameters['order_field'] = { - in: 'query', - required: true, - type: 'string' - } - #swagger.parameters['order_direction'] = { - in: 'query', - required: true, - schema: { - '@enum': ['ASC', 'DESC'] - } - } - #swagger.parameters['token'] = { - in: 'query', - required: true, - type: 'string' - } - */ - - try { - const schema = Joi.object().keys({ - filter: Joi.string().allow('').optional().label('Filter'), - order_field: Joi.string().required().label('Order Field'), - order_direction: Joi.string().allow('asc', 'desc').required().label('Order Direction'), - token: Joi.string().required().label('Token'), - }); - - const param: Paging = await schema.validateAsync(req.query); - - const repo = OrmHelper.DB.getRepository(Product); - - const { whereAttr, whereVal } = CommonHelper.handleFilter({ - filter: param.filter, - col_any_eq: ['code'], - col_any_like: ['name'] - }); - - const filename = "product.csv"; - - res.setHeader('Content-Type', 'text/csv'); - res.setHeader('Content-Disposition', 'attachment; filename=' + filename); - - const csvStream = fastcsv.format({ - headers: true, - writeHeaders: true, - transform: (row: Product): any => ({ - ...row, - created_at: dayjs(row.created_at).format('DD-MM-YYYY HH:MM:ss'), - }) - }); - csvStream.pipe(res); - - const limit = 50; - - const fetchAndWrite = async (page: any) => { - const offset = (page - 1) * limit - - const data = await repo.createQueryBuilder() - .where(whereAttr, whereVal) - .select([ - 'id', - 'code', - 'name', - 'status', - 'created_at']) - .orderBy(param.order_field, param.order_direction) - .offset(offset) - .limit(limit).getRawMany(); - - if (CommonHelper.countObject(data) === 0) { - csvStream.end(); - } else { - data.forEach((item: any) => csvStream.write(item)); - - if (CommonHelper.countObject(data) == limit) { - fetchAndWrite(page + 1); - } else { - csvStream.end(); - } - } - }; - - fetchAndWrite(1); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } - } - - static async create(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/product" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - code: Joi.string().max(6).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - source: Joi.string().max(256).required().label('Source'), - status: Joi.string().required().label('Status'), - }); - - const param: Product = await schema.validateAsync(req.body); - - const data = new Product() - data.code = param.code - data.name = param.name - data.source = param.source - data.status = param.status - - await OrmHelper.DB.manager.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_insert, data); - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 401, Language.lang.failed_insert, err.message); - } - } - - static async update(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'Product ID.', - required: true, - type: 'string' - } - - #swagger.requestBody = { - required: true, - content: { - "application/json": { - schema: { - $ref: "#/components/schemas/product" - } - } - } - } - */ - - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - code: Joi.string().max(6).required().label('Code'), - name: Joi.string().max(256).required().label('Name'), - source: Joi.string().max(256).required().label('Source'), - status: Joi.string().required().label('Status'), - }); - - req.body.id = req.params['id']; - - const param: Product = await schema.validateAsync(req.body); - - const repo = OrmHelper.DB.getRepository(Product); - - const data = await repo.findOneBy({ id: param.id }); - - if (data != null) { - data.code = param.code - data.name = param.name - data.source = param.source - data.status = param.status - - await repo.save(data); - - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, data); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_update, err.message); - } - } - - static async delete(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - #swagger.parameters['id'] = { - in: 'path', - description: 'Product ID.', - required: true, - type: 'string' - } - #swagger.parameters['hard'] = { - in: 'path', - description: 'Is Hard Delete', - required: false, - type: 'boolean' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID'), - hard: Joi.bool().optional().allow('').label('Is hard delete?') - }); - - const param: { id: string, hard: boolean } = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(Product); - - const affected = (!param.hard ? await repo.softDelete({ id: param.id }) : await repo.delete({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); - } - } - - static async restore(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Product'] - #swagger.security = [{ - "bearerAuth": [] - }] - - #swagger.parameters['id'] = { - in: 'path', - description: 'Product ID.', - required: true, - type: 'string' - } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label('ID') - }); - - const param: Product = await schema.validateAsync(req.params); - - const repo = OrmHelper.DB.getRepository(Product); - - const affected = (await repo.restore({ id: param.id })).affected; - - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); - } - } -} \ No newline at end of file diff --git a/src/helpers/orm.ts b/src/helpers/orm.ts index 75999a9..ecd1e97 100644 --- a/src/helpers/orm.ts +++ b/src/helpers/orm.ts @@ -1,7 +1,7 @@ import config from 'config'; import { DataSource } from "typeorm"; import { ILogObj, Logger } from 'tslog'; -import { Administrativu, Aldeia, Branch, ClassEconomi, District, IncomeTier, Menu, Munisipo, Product, Suco, Category, Target, Application } from 'entity' +import { Administrativu, Aldeia, District, Menu, Munisipo, Suco, Application } from 'entity' export class OrmHelper { static DB: DataSource = null @@ -20,7 +20,7 @@ export class OrmHelper { database: String(config.get("database.database")), synchronize: true, logging: config.get('database.logging'), - entities: [Product, Branch, Menu, Administrativu, Aldeia, ClassEconomi, District, IncomeTier, Munisipo, Suco, Category, Target, Application], + entities: [Menu, Administrativu, Aldeia, District, Munisipo, Suco, Application], subscribers: [], migrations: [], }) diff --git a/src/routes/private.ts b/src/routes/private.ts index ae83354..645bb14 100644 --- a/src/routes/private.ts +++ b/src/routes/private.ts @@ -1,17 +1,12 @@ import express from 'express'; import { Language } from '../langs/lang'; import JwtHelper from '../helpers/jwt'; -import { BranchController } from '../controllers/branch'; -import { ProductController } from '../controllers/product'; import { MenuController } from '../controllers/menu'; import { AdministrativuController } from '../controllers/administrativu'; import { AldeiaController } from '../controllers/aldeia'; -import { ClassEconomiController } from '../controllers/class_economi'; import { DistrictController } from '../controllers/district'; -import { IncomeTierController } from '../controllers/income_tier'; import { MunisipoController } from '../controllers/munisipo'; import { SucoController } from '../controllers/suco'; -import { CategoryController } from '../controllers/categories'; import { ApplicationController } from '../controllers/application'; export class RoutePrivate { @@ -21,20 +16,6 @@ export class RoutePrivate { JwtHelper.secure(app); - app.get('/api/branch/list', BranchController.list) - app.get('/api/branch/export', BranchController.export) - app.post('/api/branch/create', BranchController.create) - app.put('/api/branch/update/:id', BranchController.update) - app.delete('/api/branch/delete/:id/:hard', BranchController.delete) - app.put('/api/branch/restore/:id', BranchController.restore) - - app.get('/api/product/list', ProductController.list) - app.get('/api/product/export', ProductController.export) - app.post('/api/product/create', ProductController.create) - app.put('/api/product/update/:id', ProductController.update) - app.delete('/api/product/delete/:id/:hard', ProductController.delete) - app.put('/api/product/restore/:id', ProductController.restore) - app.get('/api/menu/list', MenuController.list) app.get('/api/menu/export', MenuController.export) app.post('/api/menu/create', MenuController.create) @@ -56,13 +37,6 @@ export class RoutePrivate { app.delete('/api/aldeia/delete/:id/:hard', AldeiaController.delete) app.put('/api/aldeia/restore/:id', AldeiaController.restore) - app.get('/api/class_economi/list', ClassEconomiController.list) - app.get('/api/class_economi/export', ClassEconomiController.export) - app.post('/api/class_economi/create', ClassEconomiController.create) - app.put('/api/class_economi/update/:id', ClassEconomiController.update) - app.delete('/api/class_economi/delete/:id/:hard', ClassEconomiController.delete) - app.put('/api/class_economi/restore/:id', ClassEconomiController.restore) - app.get('/api/district/list', DistrictController.list) app.get('/api/district/export', DistrictController.export) app.post('/api/district/create', DistrictController.create) @@ -70,13 +44,6 @@ export class RoutePrivate { app.delete('/api/district/delete/:id/:hard', DistrictController.delete) app.put('/api/district/restore/:id', DistrictController.restore) - app.get('/api/income_tier/list', IncomeTierController.list) - app.get('/api/income_tier/export', IncomeTierController.export) - app.post('/api/income_tier/create', IncomeTierController.create) - app.put('/api/income_tier/update/:id', IncomeTierController.update) - app.delete('/api/income_tier/delete/:id/:hard', IncomeTierController.delete) - app.put('/api/income_tier/restore/:id', IncomeTierController.restore) - app.get('/api/munisipo/list', MunisipoController.list) app.get('/api/munisipo/export', MunisipoController.export) app.post('/api/munisipo/create', MunisipoController.create) @@ -97,7 +64,5 @@ export class RoutePrivate { app.put('/api/application/update/:id', ApplicationController.update) app.delete('/api/application/delete/:id/:hard', ApplicationController.delete) app.put('/api/application/restore/:id', ApplicationController.restore) - - app.get('/api/category/list', CategoryController.list) } } \ No newline at end of file