goldstars-services 1.0.63 → 1.0.64

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.
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _eventRegistration = _interopRequireDefault(require("../models/eventRegistration.model"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
10
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
11
+ var MAX_DORSAL = 1000;
12
+ var getUsedDorsals = /*#__PURE__*/function () {
13
+ var _ref = _asyncToGenerator(function* () {
14
+ var regs = yield _eventRegistration.default.find({}, {
15
+ dorsalNumber: 1,
16
+ _id: 0
17
+ }).lean();
18
+ return new Set(regs.map(r => r.dorsalNumber));
19
+ });
20
+ return function getUsedDorsals() {
21
+ return _ref.apply(this, arguments);
22
+ };
23
+ }();
24
+ var getNextAvailableDorsal = /*#__PURE__*/function () {
25
+ var _ref2 = _asyncToGenerator(function* () {
26
+ var used = yield getUsedDorsals();
27
+ // Try random distribution first
28
+ for (var i = 0; i < 50; i++) {
29
+ var candidate = Math.floor(Math.random() * (MAX_DORSAL + 1));
30
+ if (!used.has(candidate)) return candidate;
31
+ }
32
+ // Fallback sequential
33
+ for (var d = 0; d <= MAX_DORSAL; d++) {
34
+ if (!used.has(d)) return d;
35
+ }
36
+ throw new Error('No hay dorsales disponibles. Cupo lleno.');
37
+ });
38
+ return function getNextAvailableDorsal() {
39
+ return _ref2.apply(this, arguments);
40
+ };
41
+ }();
42
+ var createRegistration = /*#__PURE__*/function () {
43
+ var _ref4 = _asyncToGenerator(function* (_ref3) {
44
+ var {
45
+ name,
46
+ email,
47
+ phone,
48
+ age
49
+ } = _ref3;
50
+ if (!name || !email || !phone || age === undefined || age === null) {
51
+ throw new Error('Faltan campos requeridos');
52
+ }
53
+ var lastErr;
54
+ for (var attempt = 0; attempt < 3; attempt++) {
55
+ try {
56
+ var dorsalNumber = yield getNextAvailableDorsal();
57
+ var reg = yield _eventRegistration.default.create({
58
+ name,
59
+ email,
60
+ phone,
61
+ age,
62
+ dorsalNumber
63
+ });
64
+ return reg.toObject();
65
+ } catch (e) {
66
+ lastErr = e;
67
+ // Retry if duplicate key error on dorsalNumber
68
+ if (e && e.code === 11000) continue;
69
+ throw e;
70
+ }
71
+ }
72
+ throw lastErr || new Error('No se pudo crear el registro');
73
+ });
74
+ return function createRegistration(_x) {
75
+ return _ref4.apply(this, arguments);
76
+ };
77
+ }();
78
+ var listRegistrations = /*#__PURE__*/function () {
79
+ var _ref5 = _asyncToGenerator(function* () {
80
+ return _eventRegistration.default.find({}).sort({
81
+ createdAt: -1
82
+ }).lean();
83
+ });
84
+ return function listRegistrations() {
85
+ return _ref5.apply(this, arguments);
86
+ };
87
+ }();
88
+ var getRegistrationById = /*#__PURE__*/function () {
89
+ var _ref6 = _asyncToGenerator(function* (id) {
90
+ return _eventRegistration.default.findById(id).lean();
91
+ });
92
+ return function getRegistrationById(_x2) {
93
+ return _ref6.apply(this, arguments);
94
+ };
95
+ }();
96
+ var getRegistrationByDorsal = /*#__PURE__*/function () {
97
+ var _ref7 = _asyncToGenerator(function* (dorsalNumber) {
98
+ return _eventRegistration.default.findOne({
99
+ dorsalNumber
100
+ }).lean();
101
+ });
102
+ return function getRegistrationByDorsal(_x3) {
103
+ return _ref7.apply(this, arguments);
104
+ };
105
+ }();
106
+ var updateRegistration = /*#__PURE__*/function () {
107
+ var _ref8 = _asyncToGenerator(function* (id, updateData) {
108
+ return _eventRegistration.default.findByIdAndUpdate(id, updateData, {
109
+ new: true
110
+ }).lean();
111
+ });
112
+ return function updateRegistration(_x4, _x5) {
113
+ return _ref8.apply(this, arguments);
114
+ };
115
+ }();
116
+ var deleteRegistration = /*#__PURE__*/function () {
117
+ var _ref9 = _asyncToGenerator(function* (id) {
118
+ return _eventRegistration.default.findByIdAndDelete(id).lean();
119
+ });
120
+ return function deleteRegistration(_x6) {
121
+ return _ref9.apply(this, arguments);
122
+ };
123
+ }();
124
+ var getRegistrationStats = /*#__PURE__*/function () {
125
+ var _ref10 = _asyncToGenerator(function* () {
126
+ var total = yield _eventRegistration.default.countDocuments();
127
+ var ageGroups = yield _eventRegistration.default.aggregate([{
128
+ $group: {
129
+ _id: {
130
+ $switch: {
131
+ branches: [{
132
+ case: {
133
+ $lt: ['$age', 18]
134
+ },
135
+ then: 'Menor de 18'
136
+ }, {
137
+ case: {
138
+ $and: [{
139
+ $gte: ['$age', 18]
140
+ }, {
141
+ $lt: ['$age', 30]
142
+ }]
143
+ },
144
+ then: '18-29'
145
+ }, {
146
+ case: {
147
+ $and: [{
148
+ $gte: ['$age', 30]
149
+ }, {
150
+ $lt: ['$age', 50]
151
+ }]
152
+ },
153
+ then: '30-49'
154
+ }, {
155
+ case: {
156
+ $gte: ['$age', 50]
157
+ },
158
+ then: '50+'
159
+ }],
160
+ default: 'Sin especificar'
161
+ }
162
+ },
163
+ count: {
164
+ $sum: 1
165
+ }
166
+ }
167
+ }]);
168
+ return {
169
+ total,
170
+ available: MAX_DORSAL + 1 - total,
171
+ ageGroups
172
+ };
173
+ });
174
+ return function getRegistrationStats() {
175
+ return _ref10.apply(this, arguments);
176
+ };
177
+ }();
178
+ var _default = exports.default = {
179
+ createRegistration,
180
+ listRegistrations,
181
+ getRegistrationById,
182
+ getRegistrationByDorsal,
183
+ updateRegistration,
184
+ deleteRegistration,
185
+ getRegistrationStats,
186
+ getNextAvailableDorsal
187
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "goldstars-services",
3
- "version": "1.0.63",
3
+ "version": "1.0.64",
4
4
  "description": "This is the services layer for GoldStars",
5
5
  "main": "./dist/index.js",
6
6
  "scripts": {