@flusys/nestjs-event-manager 7.1.0 → 8.0.0
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.
- package/adapters/event-manager.adapter.d.ts +2 -2
- package/adapters/index.d.ts +1 -1
- package/config/index.d.ts +3 -3
- package/controllers/event.controller.d.ts +3 -3
- package/controllers/index.d.ts +1 -1
- package/docs/event-manager-swagger.config.d.ts +2 -2
- package/docs/index.d.ts +1 -1
- package/dtos/calendar-query.dto.d.ts +1 -1
- package/dtos/event.dto.d.ts +1 -1
- package/dtos/index.d.ts +3 -3
- package/entities/event-with-company.entity.d.ts +1 -1
- package/entities/index.d.ts +8 -8
- package/fesm/477.js +1798 -0
- package/fesm/833.js +840 -0
- package/fesm/adapters/index.js +884 -1
- package/fesm/config/index.js +87 -3
- package/fesm/controllers/index.js +365 -1
- package/fesm/docs/index.js +155 -2
- package/fesm/dtos/index.js +720 -3
- package/fesm/entities/index.js +350 -11
- package/fesm/index.js +121 -9
- package/fesm/interfaces/index.js +16 -2
- package/fesm/modules/index.js +13 -1
- package/fesm/runtime.js +85 -0
- package/fesm/services/index.js +272 -4
- package/index.d.ts +9 -9
- package/interfaces/event-manager-module.interface.d.ts +3 -3
- package/interfaces/event.interface.d.ts +1 -1
- package/interfaces/index.d.ts +2 -2
- package/modules/event-manager.module.d.ts +2 -2
- package/modules/index.d.ts +1 -1
- package/package.json +29 -39
- package/services/event-manager-config.service.d.ts +3 -3
- package/services/event-manager-datasource.provider.d.ts +3 -3
- package/services/event-manager-helper.service.d.ts +3 -3
- package/services/event.service.d.ts +7 -7
- package/services/index.d.ts +4 -4
- package/cjs/adapters/event-manager.adapter.js +0 -65
- package/cjs/adapters/event-manager.adapter.spec.js +0 -104
- package/cjs/adapters/index.js +0 -18
- package/cjs/config/event-actions.js +0 -31
- package/cjs/config/event-manager.constants.js +0 -13
- package/cjs/config/index.js +0 -20
- package/cjs/config/message-keys.js +0 -27
- package/cjs/controllers/event.controller.js +0 -190
- package/cjs/controllers/event.controller.spec.js +0 -156
- package/cjs/controllers/index.js +0 -18
- package/cjs/docs/event-manager-swagger.config.js +0 -125
- package/cjs/docs/event-manager-swagger.config.spec.js +0 -65
- package/cjs/docs/index.js +0 -21
- package/cjs/dtos/calendar-query.dto.js +0 -212
- package/cjs/dtos/event-participant.dto.js +0 -181
- package/cjs/dtos/event.dto.js +0 -343
- package/cjs/dtos/index.js +0 -20
- package/cjs/entities/event-participant.entity.js +0 -89
- package/cjs/entities/event-with-company.entity.js +0 -56
- package/cjs/entities/event.entity.js +0 -156
- package/cjs/entities/index.js +0 -55
- package/cjs/entities/index.spec.js +0 -18
- package/cjs/index.js +0 -27
- package/cjs/interfaces/event-manager-module.interface.js +0 -4
- package/cjs/interfaces/event.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -19
- package/cjs/modules/event-manager.module.js +0 -132
- package/cjs/modules/event-manager.module.spec.js +0 -146
- package/cjs/modules/index.js +0 -18
- package/cjs/services/event-manager-config.service.js +0 -76
- package/cjs/services/event-manager-config.service.spec.js +0 -111
- package/cjs/services/event-manager-datasource.provider.js +0 -84
- package/cjs/services/event-manager-datasource.provider.spec.js +0 -198
- package/cjs/services/event-manager-helper.service.js +0 -235
- package/cjs/services/event-manager-helper.service.spec.js +0 -327
- package/cjs/services/event.service.js +0 -481
- package/cjs/services/event.service.spec.js +0 -929
- package/cjs/services/index.js +0 -21
- package/fesm/adapters/event-manager.adapter.js +0 -55
- package/fesm/adapters/event-manager.adapter.spec.js +0 -100
- package/fesm/config/event-actions.js +0 -10
- package/fesm/config/event-manager.constants.js +0 -3
- package/fesm/config/message-keys.js +0 -9
- package/fesm/controllers/event.controller.js +0 -180
- package/fesm/controllers/event.controller.spec.js +0 -152
- package/fesm/docs/event-manager-swagger.config.js +0 -118
- package/fesm/docs/event-manager-swagger.config.spec.js +0 -61
- package/fesm/dtos/calendar-query.dto.js +0 -194
- package/fesm/dtos/event-participant.dto.js +0 -157
- package/fesm/dtos/event.dto.js +0 -322
- package/fesm/entities/event-participant.entity.js +0 -79
- package/fesm/entities/event-with-company.entity.js +0 -46
- package/fesm/entities/event.entity.js +0 -146
- package/fesm/entities/index.spec.js +0 -14
- package/fesm/interfaces/event-manager-module.interface.js +0 -3
- package/fesm/interfaces/event.interface.js +0 -1
- package/fesm/modules/event-manager.module.js +0 -122
- package/fesm/modules/event-manager.module.spec.js +0 -142
- package/fesm/services/event-manager-config.service.js +0 -66
- package/fesm/services/event-manager-config.service.spec.js +0 -107
- package/fesm/services/event-manager-datasource.provider.js +0 -74
- package/fesm/services/event-manager-datasource.provider.spec.js +0 -194
- package/fesm/services/event-manager-helper.service.js +0 -225
- package/fesm/services/event-manager-helper.service.spec.js +0 -323
- package/fesm/services/event.service.js +0 -471
- package/fesm/services/event.service.spec.js +0 -925
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _nestjsshared = require("@flusys/nestjs-shared");
|
|
6
|
-
const _eventmanageradapter = require("./event-manager.adapter");
|
|
7
|
-
describe('EventManagerAdapter', ()=>{
|
|
8
|
-
let adapter;
|
|
9
|
-
let mockHelper;
|
|
10
|
-
beforeEach(()=>{
|
|
11
|
-
mockHelper = {
|
|
12
|
-
createEvent: jest.fn(),
|
|
13
|
-
updateParticipantStatus: jest.fn(),
|
|
14
|
-
getEventsForUser: jest.fn(),
|
|
15
|
-
getEventById: jest.fn()
|
|
16
|
-
};
|
|
17
|
-
adapter = new _eventmanageradapter.EventManagerAdapter(mockHelper);
|
|
18
|
-
});
|
|
19
|
-
describe('createEvent', ()=>{
|
|
20
|
-
it('delegates to the helper service and returns its result', async ()=>{
|
|
21
|
-
const options = {
|
|
22
|
-
title: 'Sprint Planning',
|
|
23
|
-
eventDate: '2026-04-03',
|
|
24
|
-
startTime: '09:00',
|
|
25
|
-
endTime: '10:00'
|
|
26
|
-
};
|
|
27
|
-
const expected = {
|
|
28
|
-
id: 'event-uuid-1',
|
|
29
|
-
title: 'Sprint Planning',
|
|
30
|
-
description: null,
|
|
31
|
-
eventDate: '2026-04-03',
|
|
32
|
-
startTime: '09:00',
|
|
33
|
-
endTime: '10:00',
|
|
34
|
-
isAllDay: false,
|
|
35
|
-
recurrenceType: 'none',
|
|
36
|
-
recurrenceEndDate: null,
|
|
37
|
-
weekDays: null,
|
|
38
|
-
color: '#3B82F6',
|
|
39
|
-
meetingLink: null,
|
|
40
|
-
isActive: true,
|
|
41
|
-
companyId: null,
|
|
42
|
-
createdAt: new Date(),
|
|
43
|
-
updatedAt: new Date()
|
|
44
|
-
};
|
|
45
|
-
mockHelper.createEvent.mockResolvedValue(expected);
|
|
46
|
-
const result = await adapter.createEvent(options);
|
|
47
|
-
expect(mockHelper.createEvent).toHaveBeenCalledWith(options);
|
|
48
|
-
expect(result).toBe(expected);
|
|
49
|
-
});
|
|
50
|
-
it('propagates errors thrown by the helper service', async ()=>{
|
|
51
|
-
mockHelper.createEvent.mockRejectedValue(new Error('boom'));
|
|
52
|
-
await expect(adapter.createEvent({})).rejects.toThrow('boom');
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe('updateParticipantStatus', ()=>{
|
|
56
|
-
it('delegates to the helper service', async ()=>{
|
|
57
|
-
mockHelper.updateParticipantStatus.mockResolvedValue(undefined);
|
|
58
|
-
await adapter.updateParticipantStatus('participant-uuid-1', _nestjsshared.ParticipantStatus.ACCEPTED);
|
|
59
|
-
expect(mockHelper.updateParticipantStatus).toHaveBeenCalledWith('participant-uuid-1', _nestjsshared.ParticipantStatus.ACCEPTED);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe('getEventsForUser', ()=>{
|
|
63
|
-
it('converts Date range boundaries to YYYY-MM-DD strings before delegating', async ()=>{
|
|
64
|
-
mockHelper.getEventsForUser.mockResolvedValue([]);
|
|
65
|
-
const startDate = new Date('2026-04-01T00:00:00.000Z');
|
|
66
|
-
const endDate = new Date('2026-04-30T23:59:59.000Z');
|
|
67
|
-
await adapter.getEventsForUser('user-uuid-1', startDate, endDate, 'company-uuid-1');
|
|
68
|
-
expect(mockHelper.getEventsForUser).toHaveBeenCalledWith('user-uuid-1', '2026-04-01', '2026-04-30', 'company-uuid-1');
|
|
69
|
-
});
|
|
70
|
-
it('forwards undefined companyId when not supplied', async ()=>{
|
|
71
|
-
mockHelper.getEventsForUser.mockResolvedValue([]);
|
|
72
|
-
const startDate = new Date('2026-04-01T00:00:00.000Z');
|
|
73
|
-
const endDate = new Date('2026-04-02T00:00:00.000Z');
|
|
74
|
-
await adapter.getEventsForUser('user-uuid-1', startDate, endDate);
|
|
75
|
-
expect(mockHelper.getEventsForUser).toHaveBeenCalledWith('user-uuid-1', '2026-04-01', '2026-04-02', undefined);
|
|
76
|
-
});
|
|
77
|
-
it('returns the events resolved by the helper service', async ()=>{
|
|
78
|
-
const events = [
|
|
79
|
-
{
|
|
80
|
-
id: 'event-uuid-1'
|
|
81
|
-
}
|
|
82
|
-
];
|
|
83
|
-
mockHelper.getEventsForUser.mockResolvedValue(events);
|
|
84
|
-
const result = await adapter.getEventsForUser('user-uuid-1', new Date('2026-01-01T00:00:00.000Z'), new Date('2026-01-31T00:00:00.000Z'));
|
|
85
|
-
expect(result).toBe(events);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
describe('getEventById', ()=>{
|
|
89
|
-
it('returns the event resolved by the helper service', async ()=>{
|
|
90
|
-
const event = {
|
|
91
|
-
id: 'event-uuid-1'
|
|
92
|
-
};
|
|
93
|
-
mockHelper.getEventById.mockResolvedValue(event);
|
|
94
|
-
const result = await adapter.getEventById('event-uuid-1');
|
|
95
|
-
expect(mockHelper.getEventById).toHaveBeenCalledWith('event-uuid-1');
|
|
96
|
-
expect(result).toBe(event);
|
|
97
|
-
});
|
|
98
|
-
it('returns null when the helper service finds no matching event', async ()=>{
|
|
99
|
-
mockHelper.getEventById.mockResolvedValue(null);
|
|
100
|
-
const result = await adapter.getEventById('missing-uuid');
|
|
101
|
-
expect(result).toBeNull();
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|
package/cjs/adapters/index.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
_export_star(require("./event-manager.adapter"), exports);
|
|
6
|
-
function _export_star(from, to) {
|
|
7
|
-
Object.keys(from).forEach(function(k) {
|
|
8
|
-
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
9
|
-
Object.defineProperty(to, k, {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: function() {
|
|
12
|
-
return from[k];
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
return from;
|
|
18
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domain event actions published by the event manager module, alongside the CRUD
|
|
3
|
-
* lifecycle actions every ApiService emits.
|
|
4
|
-
*/ "use strict";
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
function _export(target, all) {
|
|
9
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
_export(exports, {
|
|
15
|
-
get EVENT_MANAGER_EVENT_ACTIONS () {
|
|
16
|
-
return EVENT_MANAGER_EVENT_ACTIONS;
|
|
17
|
-
},
|
|
18
|
-
get EVENT_MANAGER_EVENT_ENTITIES () {
|
|
19
|
-
return EVENT_MANAGER_EVENT_ENTITIES;
|
|
20
|
-
},
|
|
21
|
-
get EVENT_MANAGER_EVENT_MODULE () {
|
|
22
|
-
return EVENT_MANAGER_EVENT_MODULE;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
const EVENT_MANAGER_EVENT_ACTIONS = {
|
|
26
|
-
PARTICIPANT_STATUS_CHANGED: 'participant-status-changed'
|
|
27
|
-
};
|
|
28
|
-
const EVENT_MANAGER_EVENT_ENTITIES = {
|
|
29
|
-
EVENT: 'event'
|
|
30
|
-
};
|
|
31
|
-
const EVENT_MANAGER_EVENT_MODULE = 'event-manager';
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Event Manager Module Constants
|
|
3
|
-
*/ "use strict";
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
Object.defineProperty(exports, "EVENT_MANAGER_MODULE_OPTIONS", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
get: function() {
|
|
10
|
-
return EVENT_MANAGER_MODULE_OPTIONS;
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
const EVENT_MANAGER_MODULE_OPTIONS = 'EVENT_MANAGER_MODULE_OPTIONS';
|
package/cjs/config/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
_export_star(require("./event-actions"), exports);
|
|
6
|
-
_export_star(require("./event-manager.constants"), exports);
|
|
7
|
-
_export_star(require("./message-keys"), exports);
|
|
8
|
-
function _export_star(from, to) {
|
|
9
|
-
Object.keys(from).forEach(function(k) {
|
|
10
|
-
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
11
|
-
Object.defineProperty(to, k, {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
get: function() {
|
|
14
|
-
return from[k];
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
return from;
|
|
20
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// ==================== EVENT MANAGER MODULE MESSAGE KEYS ====================
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
function _export(target, all) {
|
|
7
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
_export(exports, {
|
|
13
|
-
get EVENT_MESSAGES () {
|
|
14
|
-
return EVENT_MESSAGES;
|
|
15
|
-
},
|
|
16
|
-
get EVENT_PARTICIPANT_MESSAGES () {
|
|
17
|
-
return EVENT_PARTICIPANT_MESSAGES;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
const EVENT_MESSAGES = {
|
|
21
|
-
GET_ALL_SUCCESS: 'event.get.all.success',
|
|
22
|
-
NOT_FOUND: 'event.not.found'
|
|
23
|
-
};
|
|
24
|
-
const EVENT_PARTICIPANT_MESSAGES = {
|
|
25
|
-
NOT_FOUND: 'event.participant.not.found',
|
|
26
|
-
STATUS_UPDATE_SUCCESS: 'event.participant.status.update.success'
|
|
27
|
-
};
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "EventController", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return EventController;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _classes = require("@flusys/nestjs-shared/classes");
|
|
12
|
-
const _decorators = require("@flusys/nestjs-shared/decorators");
|
|
13
|
-
const _dtos = require("@flusys/nestjs-shared/dtos");
|
|
14
|
-
const _guards = require("@flusys/nestjs-shared/guards");
|
|
15
|
-
const _interfaces = require("@flusys/nestjs-shared/interfaces");
|
|
16
|
-
const _common = require("@nestjs/common");
|
|
17
|
-
const _swagger = require("@nestjs/swagger");
|
|
18
|
-
const _classtransformer = require("class-transformer");
|
|
19
|
-
const _config = require("../config");
|
|
20
|
-
const _docs = require("../docs");
|
|
21
|
-
const _dtos1 = require("../dtos");
|
|
22
|
-
const _eventservice = require("../services/event.service");
|
|
23
|
-
function _define_property(obj, key, value) {
|
|
24
|
-
if (key in obj) {
|
|
25
|
-
Object.defineProperty(obj, key, {
|
|
26
|
-
value: value,
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true
|
|
30
|
-
});
|
|
31
|
-
} else {
|
|
32
|
-
obj[key] = value;
|
|
33
|
-
}
|
|
34
|
-
return obj;
|
|
35
|
-
}
|
|
36
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
37
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
38
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
39
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
40
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
41
|
-
}
|
|
42
|
-
function _ts_metadata(k, v) {
|
|
43
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
44
|
-
}
|
|
45
|
-
function _ts_param(paramIndex, decorator) {
|
|
46
|
-
return function(target, key) {
|
|
47
|
-
decorator(target, key, paramIndex);
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
let EventController = class EventController extends (0, _classes.createApiController)(_dtos1.CreateEventDto, _dtos1.UpdateEventDto, _dtos1.EventResponseDto, {
|
|
51
|
-
entityName: 'event',
|
|
52
|
-
security: {
|
|
53
|
-
insert: {
|
|
54
|
-
level: 'permission',
|
|
55
|
-
permissions: [
|
|
56
|
-
_docs.EVENT_PERMISSIONS.CREATE
|
|
57
|
-
]
|
|
58
|
-
},
|
|
59
|
-
insertMany: {
|
|
60
|
-
level: 'permission',
|
|
61
|
-
permissions: [
|
|
62
|
-
_docs.EVENT_PERMISSIONS.CREATE
|
|
63
|
-
]
|
|
64
|
-
},
|
|
65
|
-
getById: {
|
|
66
|
-
level: 'permission',
|
|
67
|
-
permissions: [
|
|
68
|
-
_docs.EVENT_PERMISSIONS.READ
|
|
69
|
-
]
|
|
70
|
-
},
|
|
71
|
-
getAll: {
|
|
72
|
-
level: 'permission',
|
|
73
|
-
permissions: [
|
|
74
|
-
_docs.EVENT_PERMISSIONS.READ
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
update: {
|
|
78
|
-
level: 'permission',
|
|
79
|
-
permissions: [
|
|
80
|
-
_docs.EVENT_PERMISSIONS.UPDATE
|
|
81
|
-
]
|
|
82
|
-
},
|
|
83
|
-
updateMany: {
|
|
84
|
-
level: 'permission',
|
|
85
|
-
permissions: [
|
|
86
|
-
_docs.EVENT_PERMISSIONS.UPDATE
|
|
87
|
-
]
|
|
88
|
-
},
|
|
89
|
-
delete: {
|
|
90
|
-
level: 'permission',
|
|
91
|
-
permissions: [
|
|
92
|
-
_docs.EVENT_PERMISSIONS.DELETE
|
|
93
|
-
]
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}) {
|
|
97
|
-
async getCalendarEvents(dto, user) {
|
|
98
|
-
const events = await this.eventService.getEventsForCalendarRange(dto, user);
|
|
99
|
-
const plainOptions = {
|
|
100
|
-
excludeExtraneousValues: true
|
|
101
|
-
};
|
|
102
|
-
const data = (0, _classtransformer.plainToInstance)(_dtos1.CalendarEventResponseDto, events, plainOptions);
|
|
103
|
-
return {
|
|
104
|
-
success: true,
|
|
105
|
-
message: 'Calendar events retrieved successfully',
|
|
106
|
-
messageKey: _config.EVENT_MESSAGES.GET_ALL_SUCCESS,
|
|
107
|
-
data,
|
|
108
|
-
meta: {
|
|
109
|
-
total: data.length,
|
|
110
|
-
page: 0,
|
|
111
|
-
pageSize: data.length,
|
|
112
|
-
count: data.length
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
async updateParticipantStatus(dto, user) {
|
|
117
|
-
const participant = await this.eventService.updateParticipantStatus(dto, user);
|
|
118
|
-
const plainOptions = {
|
|
119
|
-
excludeExtraneousValues: true
|
|
120
|
-
};
|
|
121
|
-
return {
|
|
122
|
-
success: true,
|
|
123
|
-
message: 'Participant status updated successfully',
|
|
124
|
-
messageKey: _config.EVENT_PARTICIPANT_MESSAGES.STATUS_UPDATE_SUCCESS,
|
|
125
|
-
data: (0, _classtransformer.plainToInstance)(_dtos1.EventParticipantResponseDto, participant, plainOptions)
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
constructor(eventService){
|
|
129
|
-
super(eventService), _define_property(this, "eventService", void 0), this.eventService = eventService;
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
_ts_decorate([
|
|
133
|
-
(0, _common.Post)('calendar'),
|
|
134
|
-
(0, _common.UseGuards)(_guards.JwtAuthGuard),
|
|
135
|
-
(0, _swagger.ApiBearerAuth)(),
|
|
136
|
-
(0, _common.HttpCode)(_common.HttpStatus.OK),
|
|
137
|
-
(0, _swagger.ApiOperation)({
|
|
138
|
-
summary: 'Get events for calendar range with recurrence expansion'
|
|
139
|
-
}),
|
|
140
|
-
(0, _swagger.ApiBody)({
|
|
141
|
-
type: _dtos1.CalendarQueryDto
|
|
142
|
-
}),
|
|
143
|
-
(0, _swagger.ApiResponse)({
|
|
144
|
-
status: 200,
|
|
145
|
-
description: 'Calendar events retrieved successfully',
|
|
146
|
-
type: _dtos.ListResponseDto
|
|
147
|
-
}),
|
|
148
|
-
_ts_param(0, (0, _common.Body)()),
|
|
149
|
-
_ts_param(1, (0, _decorators.CurrentUser)()),
|
|
150
|
-
_ts_metadata("design:type", Function),
|
|
151
|
-
_ts_metadata("design:paramtypes", [
|
|
152
|
-
typeof _dtos1.CalendarQueryDto === "undefined" ? Object : _dtos1.CalendarQueryDto,
|
|
153
|
-
typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
|
|
154
|
-
]),
|
|
155
|
-
_ts_metadata("design:returntype", Promise)
|
|
156
|
-
], EventController.prototype, "getCalendarEvents", null);
|
|
157
|
-
_ts_decorate([
|
|
158
|
-
(0, _common.Post)('update-participant-status'),
|
|
159
|
-
(0, _common.UseGuards)(_guards.JwtAuthGuard, _guards.PermissionGuard),
|
|
160
|
-
(0, _swagger.ApiBearerAuth)(),
|
|
161
|
-
(0, _common.HttpCode)(_common.HttpStatus.OK),
|
|
162
|
-
(0, _decorators.RequirePermission)(_docs.EVENT_PERMISSIONS.UPDATE),
|
|
163
|
-
(0, _swagger.ApiOperation)({
|
|
164
|
-
summary: 'Update participant status (accept/decline/tentative)'
|
|
165
|
-
}),
|
|
166
|
-
(0, _swagger.ApiBody)({
|
|
167
|
-
type: _dtos1.UpdateParticipantStatusDto
|
|
168
|
-
}),
|
|
169
|
-
(0, _swagger.ApiResponse)({
|
|
170
|
-
status: 200,
|
|
171
|
-
type: _dtos.SingleResponseDto
|
|
172
|
-
}),
|
|
173
|
-
_ts_param(0, (0, _common.Body)()),
|
|
174
|
-
_ts_param(1, (0, _decorators.CurrentUser)()),
|
|
175
|
-
_ts_metadata("design:type", Function),
|
|
176
|
-
_ts_metadata("design:paramtypes", [
|
|
177
|
-
typeof _dtos1.UpdateParticipantStatusDto === "undefined" ? Object : _dtos1.UpdateParticipantStatusDto,
|
|
178
|
-
typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
|
|
179
|
-
]),
|
|
180
|
-
_ts_metadata("design:returntype", Promise)
|
|
181
|
-
], EventController.prototype, "updateParticipantStatus", null);
|
|
182
|
-
EventController = _ts_decorate([
|
|
183
|
-
(0, _swagger.ApiTags)('Events'),
|
|
184
|
-
(0, _common.Controller)('event-manager/event'),
|
|
185
|
-
_ts_param(0, (0, _common.Inject)(_eventservice.EventService)),
|
|
186
|
-
_ts_metadata("design:type", Function),
|
|
187
|
-
_ts_metadata("design:paramtypes", [
|
|
188
|
-
typeof _eventservice.EventService === "undefined" ? Object : _eventservice.EventService
|
|
189
|
-
])
|
|
190
|
-
], EventController);
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _common = require("@nestjs/common");
|
|
6
|
-
const _enums = require("@flusys/nestjs-shared/enums");
|
|
7
|
-
const _loggedusermock = require("@test-utils/mocks/logged-user.mock");
|
|
8
|
-
const _config = require("../config");
|
|
9
|
-
const _eventcontroller = require("./event.controller");
|
|
10
|
-
function buildCalendarEvent(overrides = {}) {
|
|
11
|
-
return {
|
|
12
|
-
id: 'event-uuid-1',
|
|
13
|
-
title: 'Sprint Planning',
|
|
14
|
-
description: null,
|
|
15
|
-
eventDate: '2026-04-03',
|
|
16
|
-
startTime: '09:00',
|
|
17
|
-
endTime: '10:00',
|
|
18
|
-
isAllDay: false,
|
|
19
|
-
recurrenceType: _enums.RecurrenceType.NONE,
|
|
20
|
-
recurrenceEndDate: null,
|
|
21
|
-
weekDays: null,
|
|
22
|
-
color: '#3B82F6',
|
|
23
|
-
meetingLink: null,
|
|
24
|
-
isActive: true,
|
|
25
|
-
createdAt: new Date('2026-01-01T00:00:00Z'),
|
|
26
|
-
updatedAt: new Date('2026-01-01T00:00:00Z'),
|
|
27
|
-
deletedAt: null,
|
|
28
|
-
createdById: null,
|
|
29
|
-
updatedById: null,
|
|
30
|
-
deletedById: null,
|
|
31
|
-
...overrides
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
describe('EventController', ()=>{
|
|
35
|
-
let controller;
|
|
36
|
-
let mockService;
|
|
37
|
-
const user = (0, _loggedusermock.buildMockUser)();
|
|
38
|
-
beforeEach(()=>{
|
|
39
|
-
mockService = {
|
|
40
|
-
getEventsForCalendarRange: jest.fn(),
|
|
41
|
-
updateParticipantStatus: jest.fn()
|
|
42
|
-
};
|
|
43
|
-
controller = new _eventcontroller.EventController(mockService);
|
|
44
|
-
});
|
|
45
|
-
describe('getCalendarEvents', ()=>{
|
|
46
|
-
it('returns a ListResponseDto shaped payload with meta reflecting the result count', async ()=>{
|
|
47
|
-
const events = [
|
|
48
|
-
buildCalendarEvent(),
|
|
49
|
-
buildCalendarEvent({
|
|
50
|
-
id: 'event-uuid-2'
|
|
51
|
-
})
|
|
52
|
-
];
|
|
53
|
-
mockService.getEventsForCalendarRange.mockResolvedValue(events);
|
|
54
|
-
const dto = {
|
|
55
|
-
startDate: '2026-04-01',
|
|
56
|
-
endDate: '2026-04-30'
|
|
57
|
-
};
|
|
58
|
-
const result = await controller.getCalendarEvents(dto, user);
|
|
59
|
-
expect(mockService.getEventsForCalendarRange).toHaveBeenCalledWith(dto, user);
|
|
60
|
-
expect(result.success).toBe(true);
|
|
61
|
-
expect(result.messageKey).toBe(_config.EVENT_MESSAGES.GET_ALL_SUCCESS);
|
|
62
|
-
expect(result.data).toHaveLength(2);
|
|
63
|
-
expect(result.meta).toEqual({
|
|
64
|
-
total: 2,
|
|
65
|
-
page: 0,
|
|
66
|
-
pageSize: 2,
|
|
67
|
-
count: 2
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
it('returns an empty payload with zeroed meta when no events are found', async ()=>{
|
|
71
|
-
mockService.getEventsForCalendarRange.mockResolvedValue([]);
|
|
72
|
-
const dto = {
|
|
73
|
-
startDate: '2026-04-01',
|
|
74
|
-
endDate: '2026-04-01'
|
|
75
|
-
};
|
|
76
|
-
const result = await controller.getCalendarEvents(dto, user);
|
|
77
|
-
expect(result.data).toEqual([]);
|
|
78
|
-
expect(result.meta).toEqual({
|
|
79
|
-
total: 0,
|
|
80
|
-
page: 0,
|
|
81
|
-
pageSize: 0,
|
|
82
|
-
count: 0
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
it('serializes events through CalendarEventResponseDto, exposing only declared fields', async ()=>{
|
|
86
|
-
const events = [
|
|
87
|
-
buildCalendarEvent({
|
|
88
|
-
originalEventId: 'event-uuid-1',
|
|
89
|
-
isRecurrenceInstance: true,
|
|
90
|
-
// extraneous field that must be stripped by excludeExtraneousValues
|
|
91
|
-
...{
|
|
92
|
-
secretInternalField: 'should-not-leak'
|
|
93
|
-
}
|
|
94
|
-
})
|
|
95
|
-
];
|
|
96
|
-
mockService.getEventsForCalendarRange.mockResolvedValue(events);
|
|
97
|
-
const dto = {
|
|
98
|
-
startDate: '2026-04-01',
|
|
99
|
-
endDate: '2026-04-30'
|
|
100
|
-
};
|
|
101
|
-
const result = await controller.getCalendarEvents(dto, user);
|
|
102
|
-
const [firstEvent] = result.data ?? [];
|
|
103
|
-
expect(firstEvent).not.toHaveProperty('secretInternalField');
|
|
104
|
-
expect(firstEvent).toMatchObject({
|
|
105
|
-
id: 'event-uuid-1',
|
|
106
|
-
originalEventId: 'event-uuid-1',
|
|
107
|
-
isRecurrenceInstance: true
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
it('propagates errors raised by the service', async ()=>{
|
|
111
|
-
mockService.getEventsForCalendarRange.mockRejectedValue(new Error('db down'));
|
|
112
|
-
const dto = {
|
|
113
|
-
startDate: '2026-04-01',
|
|
114
|
-
endDate: '2026-04-30'
|
|
115
|
-
};
|
|
116
|
-
await expect(controller.getCalendarEvents(dto, user)).rejects.toThrow('db down');
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
describe('updateParticipantStatus', ()=>{
|
|
120
|
-
it('returns a SingleResponseDto shaped payload on success', async ()=>{
|
|
121
|
-
const participant = {
|
|
122
|
-
id: 'participant-uuid-1',
|
|
123
|
-
eventId: 'event-uuid-1',
|
|
124
|
-
userId: user.id,
|
|
125
|
-
status: _enums.ParticipantStatus.ACCEPTED,
|
|
126
|
-
isOrganizer: false,
|
|
127
|
-
createdAt: new Date('2026-01-01T00:00:00Z'),
|
|
128
|
-
updatedAt: new Date('2026-01-02T00:00:00Z')
|
|
129
|
-
};
|
|
130
|
-
mockService.updateParticipantStatus.mockResolvedValue(participant);
|
|
131
|
-
const dto = {
|
|
132
|
-
id: 'participant-uuid-1',
|
|
133
|
-
status: _enums.ParticipantStatus.ACCEPTED
|
|
134
|
-
};
|
|
135
|
-
const result = await controller.updateParticipantStatus(dto, user);
|
|
136
|
-
expect(mockService.updateParticipantStatus).toHaveBeenCalledWith(dto, user);
|
|
137
|
-
expect(result.success).toBe(true);
|
|
138
|
-
expect(result.messageKey).toBe(_config.EVENT_PARTICIPANT_MESSAGES.STATUS_UPDATE_SUCCESS);
|
|
139
|
-
expect(result.data).toMatchObject({
|
|
140
|
-
id: 'participant-uuid-1',
|
|
141
|
-
status: _enums.ParticipantStatus.ACCEPTED
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
it('propagates a NotFoundException raised by the service', async ()=>{
|
|
145
|
-
mockService.updateParticipantStatus.mockRejectedValue(new _common.NotFoundException({
|
|
146
|
-
message: 'Event participant not found',
|
|
147
|
-
messageKey: _config.EVENT_PARTICIPANT_MESSAGES.NOT_FOUND
|
|
148
|
-
}));
|
|
149
|
-
const dto = {
|
|
150
|
-
id: 'missing-uuid',
|
|
151
|
-
status: _enums.ParticipantStatus.DECLINED
|
|
152
|
-
};
|
|
153
|
-
await expect(controller.updateParticipantStatus(dto, user)).rejects.toThrow(_common.NotFoundException);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
});
|
package/cjs/controllers/index.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
_export_star(require("./event.controller"), exports);
|
|
6
|
-
function _export_star(from, to) {
|
|
7
|
-
Object.keys(from).forEach(function(k) {
|
|
8
|
-
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
9
|
-
Object.defineProperty(to, k, {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: function() {
|
|
12
|
-
return from[k];
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
return from;
|
|
18
|
-
}
|