aloux-iam 0.0.115 → 0.0.117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,268 +1,268 @@
1
- const Log = require("../models/Log");
2
- const Label = require("../models/Label");
3
- const self = module.exports;
4
-
5
- self.create = async (req, res) => {
6
- try {
7
- const log = new Log(req.body);
8
- log.createdAt = new Date().getTime();
9
- log._user = req.user._id;
10
- const label = await Label.findOne(
11
- { label: req.body.label },
12
- { _id: 1 }
13
- ).lean();
14
- if (label) {
15
- log._label = label._id;
16
- await log.save();
17
- }
18
-
19
- res.status(201).send(log);
20
- } catch (error) {
21
- res.status(400).send({ error: error.message });
22
- }
23
- };
24
-
25
- self.update = async (req, resp) => {
26
- try {
27
- await new Log(req.body).validate();
28
- const _id = req.params.LOG_ID;
29
- const count = await Log.findOne({ _id }).countDocuments();
30
- if (!count) throw new Error("Upss! No se encontró el registro");
31
- req.body.lastUpdate = new Date().getTime();
32
- const result = await Log.updateOne({ _id }, req.body);
33
- resp.status(200).send(req.body);
34
- } catch (error) {
35
- resp.status(400).send({ error: error.message });
36
- }
37
- };
38
- self.status = async (req, resp) => {
39
- try {
40
- const _id = req.params.LOG_ID;
41
- const user = await Log.findOne({ _id });
42
- if (!user) throw new Error("Upss! No se encontró el Elemento");
43
- user.status = req.body.status;
44
- user.lastUpdate = new Date().getTime();
45
- const result = await user.save();
46
- resp.status(200).send(result);
47
- } catch (error) {
48
- resp.status(400).send({ error: error.message });
49
- }
50
- };
51
- self.retrieve = async (req, res) => {
52
- try {
53
- let query = {};
54
-
55
- if (req.body.users.length) {
56
- query = {
57
- _user: { $in: req.body.users },
58
- };
59
- }
60
-
61
- const consulta = await Log.find(query)
62
- .populate([
63
- { path: "_label" },
64
- { path: "_user", select: { name: 1, lastName: 1 } },
65
- ])
66
- .sort({ createdAt: 1 })
67
- .lean();
68
-
69
- const response = {
70
- dataset0: { field: "Total de operaciones", count: consulta.length },
71
- dataset1: consulta,
72
- dataset2: processDataset2(consulta),
73
- dataset3: processDataset3(consulta),
74
- dataset4: processDataset4(consulta),
75
- dataset5: processDataset5(consulta),
76
- dataset6: processDataset6(consulta),
77
- dataset7: processDataset7(consulta),
78
- };
79
-
80
- res.status(200).send(response);
81
- } catch (error) {
82
- console.error(error);
83
- res.status(400).send(error);
84
- }
85
- };
86
-
87
- function formatDate(date) {
88
- const day = String(date.getDate()).padStart(2, "0");
89
- const monthNames = [
90
- "Ene",
91
- "Feb",
92
- "Mar",
93
- "Abr",
94
- "May",
95
- "Jun",
96
- "Jul",
97
- "Ago",
98
- "Sep",
99
- "Oct",
100
- "Nov",
101
- "Dic",
102
- ];
103
- const month = monthNames[date.getMonth()];
104
- const year = date.getFullYear();
105
- return `${day} ${month} ${year}`;
106
- }
107
-
108
- function processDataset2(consulta) {
109
- const labelCounts = consulta.reduce((acc, item) => {
110
- const label = item._label.label;
111
- acc[label] = (acc[label] || 0) + 1;
112
- return acc;
113
- }, {});
114
-
115
- return {
116
- field: "Distribución de acciones",
117
- counts: Object.values(labelCounts),
118
- operations: Object.keys(labelCounts),
119
- };
120
- }
121
-
122
- function processDataset3(consulta) {
123
- const labelCounts = consulta.reduce((acc, item) => {
124
- const label = item._label.label;
125
- acc[label] = (acc[label] || 0) + 1;
126
- return acc;
127
- }, {});
128
-
129
- return {
130
- field: "Distribución de acciones",
131
- items: Object.keys(labelCounts).map((label) => ({
132
- addGroup: label,
133
- totalResponse: labelCounts[label],
134
- })),
135
- };
136
- }
137
-
138
- function processDataset4(consulta) {
139
- const dateCounts = consulta.reduce((acc, item) => {
140
- const date = formatDate(new Date(item.createdAt));
141
- acc[date] = (acc[date] || 0) + 1;
142
- return acc;
143
- }, {});
144
-
145
- return {
146
- field: "Actividad en la plataforma",
147
- counts: Object.values(dateCounts),
148
- actionsName: Object.keys(dateCounts),
149
- };
150
- }
151
-
152
- function processDataset5(consulta) {
153
- const labelCountsByDate = {};
154
- const categories = new Set();
155
-
156
- consulta.forEach((item) => {
157
- const date = formatDate(new Date(item.createdAt));
158
- const label = item._label.label;
159
- categories.add(date);
160
-
161
- if (!labelCountsByDate[date]) {
162
- labelCountsByDate[date] = {};
163
- }
164
- labelCountsByDate[date][label] = (labelCountsByDate[date][label] || 0) + 1;
165
- });
166
-
167
- const uniqueLabels = new Set(
168
- Object.values(labelCountsByDate).flatMap(Object.keys)
169
- );
170
- const series = Array.from(uniqueLabels).map((label) => ({
171
- name: label,
172
- data: Array.from(categories).map(
173
- (date) => labelCountsByDate[date]?.[label] || 0
174
- ),
175
- }));
176
-
177
- return {
178
- field: "Actividad en la plataforma por operación",
179
- categories: Array.from(categories),
180
- series: series,
181
- };
182
- }
183
-
184
- function processDataset6(data) {
185
- const userActivity = {};
186
-
187
- // Count activity per user. Assuming data contains _user with name and lastName
188
- data.forEach((item) => {
189
- const fullName = `${item._user.name} ${item._user.lastName}`;
190
- userActivity[fullName] = (userActivity[fullName] || 0) + 1;
191
- });
192
-
193
- // Sort users by activity count in descending order
194
- const sortedUsers = Object.entries(userActivity).sort(
195
- ([, countA], [, countB]) => countB - countA
196
- );
197
-
198
- // Extract top 10 users
199
- const topUsers = sortedUsers.slice(0, 10);
200
-
201
- // Build the result object
202
- const result = {
203
- counts: topUsers.map(([, count]) => count),
204
- actionsName: topUsers.map(([fullName]) => fullName.split(" ")),
205
- field: "Usuarios con mas actividad en la plataforma",
206
- };
207
-
208
- return result;
209
- }
210
-
211
- function processDataset7(data) {
212
- const userActivity = {};
213
-
214
- // Count activity per user. Assuming data contains _user with name and lastName
215
- data.forEach((item) => {
216
- const fullName = `${item._user.name} ${item._user.lastName}`;
217
- userActivity[fullName] = (userActivity[fullName] || 0) + 1;
218
- });
219
-
220
- // Sort users by activity count in ascending order
221
- const sortedUsers = Object.entries(userActivity).sort(
222
- ([, countA], [, countB]) => countA - countB
223
- );
224
-
225
- // Extract top 10 least active users
226
- const leastActiveUsers = sortedUsers.slice(0, 10);
227
-
228
- // Build the result object
229
- const result = {
230
- counts: leastActiveUsers.map(([, count]) => count),
231
- actionsName: leastActiveUsers.map(([fullName]) => fullName.split(" ")),
232
- field: "Usuarios con menos actividad en la plataforma",
233
- };
234
-
235
- return result;
236
- }
237
-
238
- self.get = async (req, res) => {
239
- try {
240
- const _id = req.params.LOG_ID;
241
- const log = await Log.findOne({ _id });
242
- if (!log) res.status(404).send();
243
- res.status(200).send(log);
244
- } catch (error) {
245
- res.status(400).send(error);
246
- }
247
- };
248
-
249
- self.delete = async (req, res) => {
250
- try {
251
- const _id = req.params.LOG_ID;
252
- const response = await Log.deleteOne({ _id });
253
- if (!response.deletedCount)
254
- res.status(404).send({ error: "El registro no existe" });
255
- else res.status(200).send({});
256
- } catch (error) {
257
- res.status(400).send({ error: error.message });
258
- }
259
- };
260
-
261
- self.count = async (req, res) => {
262
- try {
263
- let result = await Log.find({}).countDocuments();
264
- res.status(200).send({ count: result });
265
- } catch (error) {
266
- res.status(400).send({ error: error.message });
267
- }
268
- };
1
+ const Log = require("../models/Log");
2
+ const Label = require("../models/Label");
3
+ const self = module.exports;
4
+
5
+ self.create = async (req, res) => {
6
+ try {
7
+ const log = new Log(req.body);
8
+ log.createdAt = new Date().getTime();
9
+ log._user = req.user._id;
10
+ const label = await Label.findOne(
11
+ { label: req.body.label },
12
+ { _id: 1 }
13
+ ).lean();
14
+ if (label) {
15
+ log._label = label._id;
16
+ await log.save();
17
+ }
18
+
19
+ res.status(201).send(log);
20
+ } catch (error) {
21
+ res.status(400).send({ error: error.message });
22
+ }
23
+ };
24
+
25
+ self.update = async (req, resp) => {
26
+ try {
27
+ await new Log(req.body).validate();
28
+ const _id = req.params.LOG_ID;
29
+ const count = await Log.findOne({ _id }).countDocuments();
30
+ if (!count) throw new Error("Upss! No se encontró el registro");
31
+ req.body.lastUpdate = new Date().getTime();
32
+ const result = await Log.updateOne({ _id }, req.body);
33
+ resp.status(200).send(req.body);
34
+ } catch (error) {
35
+ resp.status(400).send({ error: error.message });
36
+ }
37
+ };
38
+ self.status = async (req, resp) => {
39
+ try {
40
+ const _id = req.params.LOG_ID;
41
+ const user = await Log.findOne({ _id });
42
+ if (!user) throw new Error("Upss! No se encontró el Elemento");
43
+ user.status = req.body.status;
44
+ user.lastUpdate = new Date().getTime();
45
+ const result = await user.save();
46
+ resp.status(200).send(result);
47
+ } catch (error) {
48
+ resp.status(400).send({ error: error.message });
49
+ }
50
+ };
51
+ self.retrieve = async (req, res) => {
52
+ try {
53
+ let query = {};
54
+
55
+ if (req.body.users.length) {
56
+ query = {
57
+ _user: { $in: req.body.users },
58
+ };
59
+ }
60
+
61
+ const consulta = await Log.find(query)
62
+ .populate([
63
+ { path: "_label" },
64
+ { path: "_user", select: { name: 1, lastName: 1 } },
65
+ ])
66
+ .sort({ createdAt: 1 })
67
+ .lean();
68
+
69
+ const response = {
70
+ dataset0: { field: "Total de operaciones", count: consulta.length },
71
+ dataset1: consulta,
72
+ dataset2: processDataset2(consulta),
73
+ dataset3: processDataset3(consulta),
74
+ dataset4: processDataset4(consulta),
75
+ dataset5: processDataset5(consulta),
76
+ dataset6: processDataset6(consulta),
77
+ dataset7: processDataset7(consulta),
78
+ };
79
+
80
+ res.status(200).send(response);
81
+ } catch (error) {
82
+ console.error(error);
83
+ res.status(400).send(error);
84
+ }
85
+ };
86
+
87
+ function formatDate(date) {
88
+ const day = String(date.getDate()).padStart(2, "0");
89
+ const monthNames = [
90
+ "Ene",
91
+ "Feb",
92
+ "Mar",
93
+ "Abr",
94
+ "May",
95
+ "Jun",
96
+ "Jul",
97
+ "Ago",
98
+ "Sep",
99
+ "Oct",
100
+ "Nov",
101
+ "Dic",
102
+ ];
103
+ const month = monthNames[date.getMonth()];
104
+ const year = date.getFullYear();
105
+ return `${day} ${month} ${year}`;
106
+ }
107
+
108
+ function processDataset2(consulta) {
109
+ const labelCounts = consulta.reduce((acc, item) => {
110
+ const label = item._label.label;
111
+ acc[label] = (acc[label] || 0) + 1;
112
+ return acc;
113
+ }, {});
114
+
115
+ return {
116
+ field: "Distribución de acciones",
117
+ counts: Object.values(labelCounts),
118
+ operations: Object.keys(labelCounts),
119
+ };
120
+ }
121
+
122
+ function processDataset3(consulta) {
123
+ const labelCounts = consulta.reduce((acc, item) => {
124
+ const label = item._label.label;
125
+ acc[label] = (acc[label] || 0) + 1;
126
+ return acc;
127
+ }, {});
128
+
129
+ return {
130
+ field: "Distribución de acciones",
131
+ items: Object.keys(labelCounts).map((label) => ({
132
+ addGroup: label,
133
+ totalResponse: labelCounts[label],
134
+ })),
135
+ };
136
+ }
137
+
138
+ function processDataset4(consulta) {
139
+ const dateCounts = consulta.reduce((acc, item) => {
140
+ const date = formatDate(new Date(item.createdAt));
141
+ acc[date] = (acc[date] || 0) + 1;
142
+ return acc;
143
+ }, {});
144
+
145
+ return {
146
+ field: "Actividad en la plataforma",
147
+ counts: Object.values(dateCounts),
148
+ actionsName: Object.keys(dateCounts),
149
+ };
150
+ }
151
+
152
+ function processDataset5(consulta) {
153
+ const labelCountsByDate = {};
154
+ const categories = new Set();
155
+
156
+ consulta.forEach((item) => {
157
+ const date = formatDate(new Date(item.createdAt));
158
+ const label = item._label.label;
159
+ categories.add(date);
160
+
161
+ if (!labelCountsByDate[date]) {
162
+ labelCountsByDate[date] = {};
163
+ }
164
+ labelCountsByDate[date][label] = (labelCountsByDate[date][label] || 0) + 1;
165
+ });
166
+
167
+ const uniqueLabels = new Set(
168
+ Object.values(labelCountsByDate).flatMap(Object.keys)
169
+ );
170
+ const series = Array.from(uniqueLabels).map((label) => ({
171
+ name: label,
172
+ data: Array.from(categories).map(
173
+ (date) => labelCountsByDate[date]?.[label] || 0
174
+ ),
175
+ }));
176
+
177
+ return {
178
+ field: "Actividad en la plataforma por operación",
179
+ categories: Array.from(categories),
180
+ series: series,
181
+ };
182
+ }
183
+
184
+ function processDataset6(data) {
185
+ const userActivity = {};
186
+
187
+ // Count activity per user. Assuming data contains _user with name and lastName
188
+ data.forEach((item) => {
189
+ const fullName = `${item._user.name} ${item._user.lastName}`;
190
+ userActivity[fullName] = (userActivity[fullName] || 0) + 1;
191
+ });
192
+
193
+ // Sort users by activity count in descending order
194
+ const sortedUsers = Object.entries(userActivity).sort(
195
+ ([, countA], [, countB]) => countB - countA
196
+ );
197
+
198
+ // Extract top 10 users
199
+ const topUsers = sortedUsers.slice(0, 10);
200
+
201
+ // Build the result object
202
+ const result = {
203
+ counts: topUsers.map(([, count]) => count),
204
+ actionsName: topUsers.map(([fullName]) => fullName.split(" ")),
205
+ field: "Usuarios con mas actividad en la plataforma",
206
+ };
207
+
208
+ return result;
209
+ }
210
+
211
+ function processDataset7(data) {
212
+ const userActivity = {};
213
+
214
+ // Count activity per user. Assuming data contains _user with name and lastName
215
+ data.forEach((item) => {
216
+ const fullName = `${item._user.name} ${item._user.lastName}`;
217
+ userActivity[fullName] = (userActivity[fullName] || 0) + 1;
218
+ });
219
+
220
+ // Sort users by activity count in ascending order
221
+ const sortedUsers = Object.entries(userActivity).sort(
222
+ ([, countA], [, countB]) => countA - countB
223
+ );
224
+
225
+ // Extract top 10 least active users
226
+ const leastActiveUsers = sortedUsers.slice(0, 10);
227
+
228
+ // Build the result object
229
+ const result = {
230
+ counts: leastActiveUsers.map(([, count]) => count),
231
+ actionsName: leastActiveUsers.map(([fullName]) => fullName.split(" ")),
232
+ field: "Usuarios con menos actividad en la plataforma",
233
+ };
234
+
235
+ return result;
236
+ }
237
+
238
+ self.get = async (req, res) => {
239
+ try {
240
+ const _id = req.params.LOG_ID;
241
+ const log = await Log.findOne({ _id });
242
+ if (!log) res.status(404).send();
243
+ res.status(200).send(log);
244
+ } catch (error) {
245
+ res.status(400).send(error);
246
+ }
247
+ };
248
+
249
+ self.delete = async (req, res) => {
250
+ try {
251
+ const _id = req.params.LOG_ID;
252
+ const response = await Log.deleteOne({ _id });
253
+ if (!response.deletedCount)
254
+ res.status(404).send({ error: "El registro no existe" });
255
+ else res.status(200).send({});
256
+ } catch (error) {
257
+ res.status(400).send({ error: error.message });
258
+ }
259
+ };
260
+
261
+ self.count = async (req, res) => {
262
+ try {
263
+ let result = await Log.find({}).countDocuments();
264
+ res.status(200).send({ count: result });
265
+ } catch (error) {
266
+ res.status(400).send({ error: error.message });
267
+ }
268
+ };