Skip to content

Commit 91a4381

Browse files
committed
feat: add endpoint generate excel role
1 parent 11b0252 commit 91a4381

File tree

3 files changed

+77
-4
lines changed

3 files changed

+77
-4
lines changed

docs/swagger/routes/role.js

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ module.exports = {
3939
schema: {
4040
type: 'object',
4141
properties: {
42-
nama: {
42+
name: {
4343
type: 'string',
4444
},
4545
},
46-
required: ['nama'],
46+
required: ['name'],
4747
},
4848
},
4949
},
@@ -55,6 +55,32 @@ module.exports = {
5555
},
5656
},
5757
},
58+
'/role/generate-excel': {
59+
get: {
60+
tags: ['Role'],
61+
summary: 'Get All Role with Generate Excel',
62+
produces: ['application/json'],
63+
parameters: [
64+
{
65+
$ref: '#/components/parameters/page',
66+
},
67+
{
68+
$ref: '#/components/parameters/pageSize',
69+
},
70+
{
71+
$ref: '#/components/parameters/filtered',
72+
},
73+
{
74+
$ref: '#/components/parameters/sorted',
75+
},
76+
],
77+
responses: {
78+
200: {
79+
description: 'Get All Role with Generate Excel',
80+
},
81+
},
82+
},
83+
},
5884
'/role/multiple/delete': {
5985
post: {
6086
tags: ['Role'],
@@ -169,11 +195,11 @@ module.exports = {
169195
schema: {
170196
type: 'object',
171197
properties: {
172-
nama: {
198+
name: {
173199
type: 'string',
174200
},
175201
},
176-
required: ['nama'],
202+
required: ['name'],
177203
},
178204
},
179205
},

src/controllers/Role/controller.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Authorization from 'middlewares/Authorization'
55
import BuildResponse from 'modules/Response/BuildResponse'
66
import RoleService from 'controllers/Role/service'
77
import { arrayFormatter } from 'helpers/Common'
8+
import { formatDateGenerateFile } from 'helpers/Date'
89

910
routes.get(
1011
'/role',
@@ -16,6 +17,25 @@ routes.get(
1617
})
1718
)
1819

20+
routes.get(
21+
'/role/generate-excel',
22+
Authorization,
23+
asyncHandler(async function generateExcelEvent(req: Request, res: Response) {
24+
const streamExcel = await RoleService.generateExcel(req)
25+
const dateNow = formatDateGenerateFile(new Date())
26+
const filename = `${dateNow}_generate_role.xlsx`
27+
28+
res.setHeader(
29+
'Content-Type',
30+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
31+
)
32+
res.setHeader('Content-Disposition', `attachment; filename=${filename}`)
33+
res.setHeader('Content-Length', streamExcel.length)
34+
35+
return res.send(streamExcel)
36+
})
37+
)
38+
1939
routes.get(
2040
'/role/:id',
2141
asyncHandler(async function getOne(req: Request, res: Response) {

src/controllers/Role/service.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import useValidation from 'helpers/useValidation'
66
import { RoleAttributes } from 'models/role'
77
import PluginSqlizeQuery from 'modules/SqlizeQuery/PluginSqlizeQuery'
88
import schema from 'controllers/Role/schema'
9+
import ExcelHelper from 'helpers/Excel'
910

1011
const { Sequelize } = db
1112
const { Op } = Sequelize
@@ -81,6 +82,32 @@ class RoleService {
8182
return data
8283
}
8384

85+
/**
86+
*
87+
* @param req - Request
88+
*/
89+
public static async generateExcel(req: Request) {
90+
const { data } = await this.getAll(req)
91+
const roleData = JSON.parse(JSON.stringify(data))
92+
93+
const header = [
94+
{ header: 'No', key: 'no', width: 5 },
95+
{ header: 'Name', key: 'name', width: 20 },
96+
]
97+
98+
const newData = []
99+
for (let i = 0; i < roleData.length; i += 1) {
100+
const item = roleData[i]
101+
newData.push({
102+
...item,
103+
})
104+
}
105+
106+
const stream: Buffer = await ExcelHelper.generate(header, newData)
107+
108+
return stream
109+
}
110+
84111
/**
85112
*
86113
* @param id - Delete Forever

0 commit comments

Comments
 (0)