@estgbue/mezgeb 0.0.25 → 0.0.26

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.
Files changed (43) hide show
  1. package/dist/mezgeb/client/client.module.js +0 -1
  2. package/dist/mezgeb/listener/audit.module.d.ts +3 -0
  3. package/dist/mezgeb/listener/audit.module.d.ts.map +1 -0
  4. package/dist/mezgeb/listener/audit.module.js +32 -0
  5. package/dist/mezgeb/listener/controllers/activity-audit.controller.d.ts +10 -0
  6. package/dist/mezgeb/listener/controllers/activity-audit.controller.d.ts.map +1 -0
  7. package/dist/mezgeb/listener/controllers/activity-audit.controller.js +99 -0
  8. package/dist/mezgeb/listener/controllers/audit-log-command.controller.d.ts +11 -0
  9. package/dist/mezgeb/listener/controllers/audit-log-command.controller.d.ts.map +1 -0
  10. package/dist/mezgeb/listener/controllers/audit-log-command.controller.js +106 -0
  11. package/dist/mezgeb/listener/controllers/audit-log.controller.d.ts +9 -0
  12. package/dist/mezgeb/listener/controllers/audit-log.controller.d.ts.map +1 -0
  13. package/dist/mezgeb/listener/controllers/audit-log.controller.js +70 -0
  14. package/dist/mezgeb/listener/decorators/ignore-logger.decorator.d.ts +3 -0
  15. package/dist/mezgeb/listener/decorators/ignore-logger.decorator.d.ts.map +1 -0
  16. package/dist/mezgeb/listener/decorators/ignore-logger.decorator.js +7 -0
  17. package/dist/mezgeb/listener/dtos/activity-audit.type.d.ts +17 -0
  18. package/dist/mezgeb/listener/dtos/activity-audit.type.d.ts.map +1 -0
  19. package/dist/mezgeb/listener/dtos/activity-audit.type.js +9 -0
  20. package/dist/mezgeb/listener/dtos/audit.dto.d.ts +62 -0
  21. package/dist/mezgeb/listener/dtos/audit.dto.d.ts.map +1 -0
  22. package/dist/mezgeb/listener/dtos/audit.dto.js +28 -0
  23. package/dist/mezgeb/listener/entities/audit-log-command.entity.d.ts +28 -0
  24. package/dist/mezgeb/listener/entities/audit-log-command.entity.d.ts.map +1 -0
  25. package/dist/mezgeb/listener/entities/audit-log-command.entity.js +88 -0
  26. package/dist/mezgeb/listener/entities/audit-log.entity.d.ts +19 -0
  27. package/dist/mezgeb/listener/entities/audit-log.entity.d.ts.map +1 -0
  28. package/dist/mezgeb/listener/entities/audit-log.entity.js +77 -0
  29. package/dist/mezgeb/listener/interceptor/event-nack.interceptor.d.ts +5 -0
  30. package/dist/mezgeb/listener/interceptor/event-nack.interceptor.d.ts.map +1 -0
  31. package/dist/mezgeb/listener/interceptor/event-nack.interceptor.js +29 -0
  32. package/dist/mezgeb/listener/services/activity-audit.service.d.ts +13 -0
  33. package/dist/mezgeb/listener/services/activity-audit.service.d.ts.map +1 -0
  34. package/dist/mezgeb/listener/services/activity-audit.service.js +92 -0
  35. package/dist/mezgeb/listener/services/audit-log-command.service.d.ts +23 -0
  36. package/dist/mezgeb/listener/services/audit-log-command.service.d.ts.map +1 -0
  37. package/dist/mezgeb/listener/services/audit-log-command.service.js +245 -0
  38. package/dist/mezgeb/listener/services/audit-log.service.d.ts +13 -0
  39. package/dist/mezgeb/listener/services/audit-log.service.d.ts.map +1 -0
  40. package/dist/mezgeb/listener/services/audit-log.service.js +63 -0
  41. package/dist/mezgeb.module.d.ts.map +1 -1
  42. package/dist/mezgeb.module.js +3 -1
  43. package/package.json +2 -1
@@ -0,0 +1,19 @@
1
+ import { AuditLogCommand } from './audit-log-command.entity';
2
+ import { EAuditLogRequestMethod } from '../../mezgeb.enum';
3
+ export declare class AuditLog {
4
+ id?: string;
5
+ createdAt: Date;
6
+ updatedAt: Date;
7
+ requestMethod: EAuditLogRequestMethod;
8
+ application: string;
9
+ module: string;
10
+ requestBody: any;
11
+ requestHeader: any;
12
+ statusCode: number;
13
+ ipAddress: string;
14
+ executionTime?: number;
15
+ status: 'Draft' | 'Commit' | 'Rollback';
16
+ user: any;
17
+ commands?: AuditLogCommand[];
18
+ }
19
+ //# sourceMappingURL=audit-log.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.entity.d.ts","sourceRoot":"","sources":["../../../../libs/mezgeb/src/mezgeb/listener/entities/audit-log.entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,qBACa,QAAQ;IAEnB,EAAE,CAAC,EAAE,MAAM,CAAC;IAGZ,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;IAGjB,aAAa,EAAG,sBAAsB,CAAC;IAGvC,WAAW,EAAG,MAAM,CAAC;IAGrB,MAAM,EAAG,MAAM,CAAC;IAGhB,WAAW,EAAE,GAAG,CAAC;IAGjB,aAAa,EAAE,GAAG,CAAC;IAGnB,UAAU,EAAG,MAAM,CAAC;IAGpB,SAAS,EAAG,MAAM,CAAC;IAGnB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,MAAM,EAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAGzC,IAAI,EAAE,GAAG,CAAC;IAGV,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AuditLog = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const audit_log_command_entity_1 = require("./audit-log-command.entity");
15
+ const mezgeb_enum_1 = require("../../mezgeb.enum");
16
+ let AuditLog = class AuditLog {
17
+ };
18
+ exports.AuditLog = AuditLog;
19
+ __decorate([
20
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
21
+ __metadata("design:type", String)
22
+ ], AuditLog.prototype, "id", void 0);
23
+ __decorate([
24
+ (0, typeorm_1.CreateDateColumn)({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' }),
25
+ __metadata("design:type", Date)
26
+ ], AuditLog.prototype, "createdAt", void 0);
27
+ __decorate([
28
+ (0, typeorm_1.UpdateDateColumn)({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' }),
29
+ __metadata("design:type", Date)
30
+ ], AuditLog.prototype, "updatedAt", void 0);
31
+ __decorate([
32
+ (0, typeorm_1.Column)({ type: 'varchar' }),
33
+ __metadata("design:type", String)
34
+ ], AuditLog.prototype, "requestMethod", void 0);
35
+ __decorate([
36
+ (0, typeorm_1.Column)(),
37
+ __metadata("design:type", String)
38
+ ], AuditLog.prototype, "application", void 0);
39
+ __decorate([
40
+ (0, typeorm_1.Column)(),
41
+ __metadata("design:type", String)
42
+ ], AuditLog.prototype, "module", void 0);
43
+ __decorate([
44
+ (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
45
+ __metadata("design:type", Object)
46
+ ], AuditLog.prototype, "requestBody", void 0);
47
+ __decorate([
48
+ (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
49
+ __metadata("design:type", Object)
50
+ ], AuditLog.prototype, "requestHeader", void 0);
51
+ __decorate([
52
+ (0, typeorm_1.Column)(),
53
+ __metadata("design:type", Number)
54
+ ], AuditLog.prototype, "statusCode", void 0);
55
+ __decorate([
56
+ (0, typeorm_1.Column)(),
57
+ __metadata("design:type", String)
58
+ ], AuditLog.prototype, "ipAddress", void 0);
59
+ __decorate([
60
+ (0, typeorm_1.Column)(),
61
+ __metadata("design:type", Number)
62
+ ], AuditLog.prototype, "executionTime", void 0);
63
+ __decorate([
64
+ (0, typeorm_1.Column)({ default: 'Draft' }),
65
+ __metadata("design:type", String)
66
+ ], AuditLog.prototype, "status", void 0);
67
+ __decorate([
68
+ (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
69
+ __metadata("design:type", Object)
70
+ ], AuditLog.prototype, "user", void 0);
71
+ __decorate([
72
+ (0, typeorm_1.OneToMany)(() => audit_log_command_entity_1.AuditLogCommand, (auditLog) => auditLog.auditLog),
73
+ __metadata("design:type", Array)
74
+ ], AuditLog.prototype, "commands", void 0);
75
+ exports.AuditLog = AuditLog = __decorate([
76
+ (0, typeorm_1.Entity)({ name: 'audit_logs' })
77
+ ], AuditLog);
@@ -0,0 +1,5 @@
1
+ import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
2
+ export declare class EventAcknowledgmentInterceptor implements NestInterceptor {
3
+ intercept(context: ExecutionContext, next: CallHandler): any;
4
+ }
5
+ //# sourceMappingURL=event-nack.interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-nack.interceptor.d.ts","sourceRoot":"","sources":["../../../../libs/mezgeb/src/mezgeb/listener/interceptor/event-nack.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAEhB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAIxB,qBACa,8BAA+B,YAAW,eAAe;IACpE,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,GAAG;CAgB7D"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EventAcknowledgmentInterceptor = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const rxjs_1 = require("rxjs");
12
+ let EventAcknowledgmentInterceptor = class EventAcknowledgmentInterceptor {
13
+ intercept(context, next) {
14
+ const rmqContext = context.switchToRpc().getContext();
15
+ const channel = rmqContext.getChannelRef();
16
+ const originalMsg = rmqContext.getMessage();
17
+ return next.handle().pipe((0, rxjs_1.map)((data) => {
18
+ channel.ack(originalMsg);
19
+ return data;
20
+ }), (0, rxjs_1.catchError)((error) => {
21
+ channel.nack(originalMsg, false, false);
22
+ throw error;
23
+ }));
24
+ }
25
+ };
26
+ exports.EventAcknowledgmentInterceptor = EventAcknowledgmentInterceptor;
27
+ exports.EventAcknowledgmentInterceptor = EventAcknowledgmentInterceptor = __decorate([
28
+ (0, common_1.Injectable)()
29
+ ], EventAcknowledgmentInterceptor);
@@ -0,0 +1,13 @@
1
+ import { Repository } from 'typeorm';
2
+ import { ActivityAudit } from 'src/entities/activity-audit.entity';
3
+ import { TActivityAudit } from '../dtos/activity-audit.type';
4
+ import { CollectionQuery } from 'megp-shared-be';
5
+ export declare class ActivityAuditService {
6
+ private auditLogRepository;
7
+ constructor(auditLogRepository: Repository<ActivityAudit>);
8
+ createAuditLog(data: TActivityAudit): Promise<void>;
9
+ getActivityAudit(id: string): Promise<any>;
10
+ getLatestActivityAuditLog(objectId: string): Promise<any>;
11
+ getActivityAuditLogHistory(objectId: string, query: CollectionQuery): Promise<any>;
12
+ }
13
+ //# sourceMappingURL=activity-audit.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-audit.service.d.ts","sourceRoot":"","sources":["../../../../libs/mezgeb/src/mezgeb/listener/services/activity-audit.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,eAAe,EAIhB,MAAM,gBAAgB,CAAC;AAExB,qBACa,oBAAoB;IAG7B,OAAO,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,UAAU,CAAC,aAAa,CAAC;IAGjD,cAAc,CAAC,IAAI,EAAE,cAAc;IAoBnC,gBAAgB,CAAC,EAAE,EAAE,MAAM;IAQ3B,yBAAyB,CAAC,QAAQ,EAAE,MAAM;IAO1C,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe;CAkB1E"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ActivityAuditService = void 0;
25
+ const common_1 = require("@nestjs/common");
26
+ const typeorm_1 = require("@nestjs/typeorm");
27
+ const typeorm_2 = require("typeorm");
28
+ const activity_audit_entity_1 = require("src/entities/activity-audit.entity");
29
+ const megp_shared_be_1 = require("megp-shared-be");
30
+ let ActivityAuditService = class ActivityAuditService {
31
+ constructor(auditLogRepository) {
32
+ this.auditLogRepository = auditLogRepository;
33
+ }
34
+ createAuditLog(data) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const previous = yield this.auditLogRepository.findOne({
37
+ where: {
38
+ objectId: data.objectId,
39
+ },
40
+ order: {
41
+ createdAt: 'DESC',
42
+ },
43
+ select: {
44
+ id: true,
45
+ createdAt: true,
46
+ },
47
+ });
48
+ const auditItem = this.auditLogRepository.create(Object.assign(Object.assign({}, data), { parentId: previous === null || previous === void 0 ? void 0 : previous.id }));
49
+ yield this.auditLogRepository.insert(auditItem);
50
+ });
51
+ }
52
+ getActivityAudit(id) {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ return yield this.auditLogRepository.findOne({
55
+ where: {
56
+ id,
57
+ },
58
+ });
59
+ });
60
+ }
61
+ getLatestActivityAuditLog(objectId) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ return yield this.auditLogRepository.findOne({
64
+ where: { objectId },
65
+ order: { createdAt: 'DESC' },
66
+ });
67
+ });
68
+ }
69
+ getActivityAuditLogHistory(objectId, query) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ const dataQuery = megp_shared_be_1.QueryConstructor.constructQuery(this.auditLogRepository, query)
72
+ .andWhere('activity_audits.objectId = :objectId', { objectId })
73
+ .orderBy('activity_audits.createdAt', 'DESC');
74
+ const response = new megp_shared_be_1.DataResponseFormat();
75
+ if (query.count) {
76
+ response.total = yield dataQuery.getCount();
77
+ }
78
+ else {
79
+ const [result, total] = yield dataQuery.getManyAndCount();
80
+ response.total = total;
81
+ response.items = result;
82
+ }
83
+ return response;
84
+ });
85
+ }
86
+ };
87
+ exports.ActivityAuditService = ActivityAuditService;
88
+ exports.ActivityAuditService = ActivityAuditService = __decorate([
89
+ (0, common_1.Injectable)(),
90
+ __param(0, (0, typeorm_1.InjectRepository)(activity_audit_entity_1.ActivityAudit)),
91
+ __metadata("design:paramtypes", [typeorm_2.Repository])
92
+ ], ActivityAuditService);
@@ -0,0 +1,23 @@
1
+ import { Repository } from 'typeorm';
2
+ import { CreateEventDTO, EmitQueryDTO } from '../dtos/audit.dto';
3
+ import { AuditLog } from '../entities/audit-log.entity';
4
+ import { AuditLogCommand } from '../entities/audit-log-command.entity';
5
+ export declare class AuditLogCommandService {
6
+ private auditLogRepository;
7
+ private auditLogCommandRepository;
8
+ constructor(auditLogRepository: Repository<AuditLog>, auditLogCommandRepository: Repository<AuditLogCommand>);
9
+ create(itemData: CreateEventDTO): Promise<void>;
10
+ update(itemData: EmitQueryDTO): Promise<void>;
11
+ delete(itemData: EmitQueryDTO): Promise<void>;
12
+ auditParents(entity: any, method: 'INSERT_CHILD' | 'DELETE_CHILD', childEntityName: string, auditLogId: string): Promise<void>;
13
+ private changeCamelToSnakeCase;
14
+ pluralizeAndChangeCase(word: string): string;
15
+ getAuditLogs(entityId: string, application: string, paginate?: {
16
+ skip?: number;
17
+ take?: number;
18
+ }): Promise<[AuditLogCommand[], number]>;
19
+ private getAuditItem;
20
+ private mapQueryToObject;
21
+ private parseInput;
22
+ }
23
+ //# sourceMappingURL=audit-log-command.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log-command.service.d.ts","sourceRoot":"","sources":["../../../../libs/mezgeb/src/mezgeb/listener/services/audit-log-command.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAEL,cAAc,EACd,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,qBACa,sBAAsB;IAG/B,OAAO,CAAC,kBAAkB;IAE1B,OAAO,CAAC,yBAAyB;gBAFzB,kBAAkB,EAAE,UAAU,CAAC,QAAQ,CAAC,EAExC,yBAAyB,EAAE,UAAU,CAAC,eAAe,CAAC;IAG1D,MAAM,CAAC,QAAQ,EAAE,cAAc;IAS/B,MAAM,CAAC,QAAQ,EAAE,YAAY;IAqD7B,MAAM,CAAC,QAAQ,EAAE,YAAY;IAsB7B,YAAY,CAChB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,cAAc,GAAG,cAAc,EACvC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM;IA0CpB,OAAO,CAAC,sBAAsB;IAI9B,sBAAsB,CAAC,IAAI,EAAE,MAAM;IAsB7B,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO;YAwCnC,YAAY;YAqBZ,gBAAgB;IAmD9B,OAAO,CAAC,UAAU;CAWnB"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.AuditLogCommandService = void 0;
25
+ const common_1 = require("@nestjs/common");
26
+ const typeorm_1 = require("@nestjs/typeorm");
27
+ const typeorm_2 = require("typeorm");
28
+ const audit_log_entity_1 = require("../entities/audit-log.entity");
29
+ const audit_log_command_entity_1 = require("../entities/audit-log-command.entity");
30
+ let AuditLogCommandService = class AuditLogCommandService {
31
+ constructor(auditLogRepository, auditLogCommandRepository) {
32
+ this.auditLogRepository = auditLogRepository;
33
+ this.auditLogCommandRepository = auditLogCommandRepository;
34
+ }
35
+ create(itemData) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const auditItem = this.auditLogCommandRepository.create(Object.assign(Object.assign({}, itemData), { auditLogId: itemData.requestId, queryMethod: 'INSERT' }));
38
+ yield this.auditLogCommandRepository.insert(auditItem);
39
+ });
40
+ }
41
+ update(itemData) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const item = yield this.mapQueryToObject(itemData);
44
+ const auditItem = yield this.getAuditItem(item);
45
+ if (!auditItem)
46
+ return;
47
+ const entity = Object.assign(Object.assign({}, auditItem.entity), item.setParams);
48
+ const changes = [];
49
+ for (const key of Object.keys(item.setParams)) {
50
+ if (auditItem.entity[key] == item.setParams[key])
51
+ continue;
52
+ if (auditItem.entity[key] == '' && item.setParams[key] == undefined)
53
+ continue;
54
+ if (auditItem.entity[key] == undefined && item.setParams[key] == '')
55
+ continue;
56
+ if (key === 'updatedAt')
57
+ continue;
58
+ changes.push({
59
+ field: key,
60
+ from: this.parseInput(auditItem.entity[key]),
61
+ to: this.parseInput(item.setParams[key]),
62
+ });
63
+ }
64
+ if (changes.length === 0)
65
+ return;
66
+ const newAuditItem = this.auditLogCommandRepository.create(Object.assign(Object.assign({}, auditItem), { entity, auditLogId: item.requestId, parentId: auditItem.id, id: undefined, createdAt: new Date(item.createdAt), queryMethod: 'UPDATE', changes }));
67
+ yield this.auditLogCommandRepository.insert(newAuditItem);
68
+ });
69
+ }
70
+ delete(itemData) {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ const item = yield this.mapQueryToObject(itemData);
73
+ const auditItem = yield this.getAuditItem(item);
74
+ if (!auditItem)
75
+ return;
76
+ const newAuditItem = this.auditLogCommandRepository.create(Object.assign(Object.assign({}, auditItem), { entity: {}, auditLogId: item.requestId, parentId: auditItem.id, id: undefined, createdAt: new Date(item.createdAt), queryMethod: 'DELETE' }));
77
+ yield this.auditLogCommandRepository.insert(newAuditItem);
78
+ });
79
+ }
80
+ auditParents(entity, method, childEntityName, auditLogId) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const parents = Object.entries(entity)
83
+ .filter(([key, value]) => key.endsWith('Id'))
84
+ .map(([key, value]) => ({ key, parentId: value }));
85
+ const parentAudits = [];
86
+ const payload = {
87
+ id: entity.id,
88
+ name: entity === null || entity === void 0 ? void 0 : entity.name,
89
+ description: entity === null || entity === void 0 ? void 0 : entity.description,
90
+ objectType: entity === null || entity === void 0 ? void 0 : entity.objectType,
91
+ type: entity === null || entity === void 0 ? void 0 : entity.type,
92
+ title: entity === null || entity === void 0 ? void 0 : entity.title,
93
+ entity: childEntityName,
94
+ };
95
+ for (const parent of parents) {
96
+ const entityName = this.changeCamelToSnakeCase(parent.key.replace('Id', ''));
97
+ if (entityName === 'tenant')
98
+ continue;
99
+ parentAudits.push({
100
+ entityId: parent.parentId,
101
+ entity: {},
102
+ entityName: this.pluralizeAndChangeCase(entityName),
103
+ queryMethod: method,
104
+ auditLogId,
105
+ payload,
106
+ });
107
+ }
108
+ if (!parentAudits.length)
109
+ return;
110
+ const auditItems = this.auditLogCommandRepository.create(parentAudits);
111
+ yield this.auditLogCommandRepository.insert(auditItems);
112
+ });
113
+ }
114
+ changeCamelToSnakeCase(str) {
115
+ return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
116
+ }
117
+ pluralizeAndChangeCase(word) {
118
+ if (!word)
119
+ return '';
120
+ word = this.changeCamelToSnakeCase(word);
121
+ word = word.replace(/rfx/g, 'rfq');
122
+ if (word.match(/[^aeiou]y$/i)) {
123
+ return word.replace(/y$/, 'ies');
124
+ }
125
+ if (word.match(/(s|x|z|ch|sh)$/i)) {
126
+ return word + 'es';
127
+ }
128
+ if (word.match(/(f|fe)$/i)) {
129
+ return word.replace(/(f|fe)$/, 'ves');
130
+ }
131
+ return word + 's';
132
+ }
133
+ getAuditLogs(entityId_1, application_1) {
134
+ return __awaiter(this, arguments, void 0, function* (entityId, application, paginate = {}) {
135
+ var _a, _b;
136
+ const dataQuery = this.auditLogCommandRepository.createQueryBuilder('audit_log_commands');
137
+ dataQuery
138
+ .leftJoinAndSelect('audit_log_commands.auditLog', 'auditLog')
139
+ .andWhere('(audit_log_commands.auditLogId IS NULL OR auditLog.application = :application)', { application })
140
+ // .andWhere(
141
+ // `(audit_log_commands.auditLogId IS NULL OR ("auditLog"."user"->>'organizationId')::uuid = :organizationId)`,
142
+ // { organizationId: user.organization.id },
143
+ // )
144
+ .andWhere('(audit_log_commands.auditLogId IS NULL OR auditLog.status = :status)', { status: 'Commit' })
145
+ .andWhere('audit_log_commands.entityId = :entityId', { entityId })
146
+ .select([
147
+ 'audit_log_commands.id',
148
+ 'audit_log_commands.createdAt',
149
+ 'audit_log_commands.deletedAt',
150
+ 'audit_log_commands.entityName',
151
+ 'audit_log_commands.queryMethod',
152
+ 'audit_log_commands.changes',
153
+ 'audit_log_commands.payload',
154
+ 'auditLog.id',
155
+ 'auditLog.user',
156
+ ])
157
+ .addOrderBy('audit_log_commands.createdAt', 'DESC');
158
+ if (paginate) {
159
+ dataQuery.skip((_a = paginate.skip) !== null && _a !== void 0 ? _a : 0).take((_b = paginate.take) !== null && _b !== void 0 ? _b : 10);
160
+ }
161
+ return yield dataQuery.getManyAndCount();
162
+ });
163
+ }
164
+ getAuditItem(item) {
165
+ return __awaiter(this, void 0, void 0, function* () {
166
+ const qb = this.auditLogCommandRepository
167
+ .createQueryBuilder('cmd')
168
+ .select([
169
+ 'cmd.id',
170
+ 'cmd.entityId',
171
+ 'cmd.entity',
172
+ 'cmd.entityName',
173
+ 'cmd.createdAt',
174
+ ])
175
+ .where('cmd.entityName = :entityName', { entityName: item.entityName });
176
+ for (const [key, value] of Object.entries(item.whereParams || {})) {
177
+ qb.andWhere(`"cmd"."entity"->>'${key}' = :${key}`, { [key]: value });
178
+ }
179
+ qb.orderBy('cmd.createdAt', 'DESC');
180
+ return yield qb.getOne();
181
+ });
182
+ }
183
+ mapQueryToObject(payload) {
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ var _a;
186
+ const { query, parameters, user, requestId, createdAt } = payload;
187
+ let setMatches = [];
188
+ if (query.startsWith('UPDATE')) {
189
+ const setClause = query.split('SET')[1].split('WHERE')[0].trim();
190
+ setMatches = setClause.match(/"[^"]+"\s*=\s*\$\d+/g) || [];
191
+ }
192
+ const whereClause = ((_a = query.split('WHERE')[1]) === null || _a === void 0 ? void 0 : _a.trim()) || '';
193
+ const whereMatches = whereClause.match(/"[^"]+"\s*(=|IN|BETWEEN|<|>|<=|>=|<>)\s*\(?\$?\d+(,\s*\$?\d+)*\)?/g) || [];
194
+ const allMatches = [...setMatches, ...whereMatches];
195
+ const setParams = {};
196
+ const whereParams = {};
197
+ allMatches.forEach((match, index) => {
198
+ const cleanedMatch = match.replace(/"/g, '').trim();
199
+ if (cleanedMatch.startsWith('(')) {
200
+ const paramList = cleanedMatch.match(/\$?\d+/g) || [];
201
+ whereParams[`param${index}`] = paramList.map((param) => parseInt(param.replace('$', ''), 10));
202
+ }
203
+ else {
204
+ const [key, param] = cleanedMatch
205
+ .split(/=|IN|BETWEEN|<|>|<=|>=|<>/)
206
+ .map((str) => str.trim());
207
+ if (index < setMatches.length) {
208
+ setParams[key] = parameters[index];
209
+ }
210
+ else {
211
+ whereParams[key] = parameters[index];
212
+ }
213
+ }
214
+ });
215
+ return {
216
+ setParams,
217
+ whereParams,
218
+ user,
219
+ requestId,
220
+ createdAt,
221
+ query,
222
+ entityName: query.split('"')[1],
223
+ entityId: whereParams['id'],
224
+ };
225
+ });
226
+ }
227
+ parseInput(input) {
228
+ try {
229
+ const parsed = JSON.parse(input);
230
+ if (typeof parsed === 'object' && parsed !== null) {
231
+ return parsed;
232
+ }
233
+ }
234
+ catch (error) { }
235
+ return input;
236
+ }
237
+ };
238
+ exports.AuditLogCommandService = AuditLogCommandService;
239
+ exports.AuditLogCommandService = AuditLogCommandService = __decorate([
240
+ (0, common_1.Injectable)(),
241
+ __param(0, (0, typeorm_1.InjectRepository)(audit_log_entity_1.AuditLog)),
242
+ __param(1, (0, typeorm_1.InjectRepository)(audit_log_command_entity_1.AuditLogCommand)),
243
+ __metadata("design:paramtypes", [typeorm_2.Repository,
244
+ typeorm_2.Repository])
245
+ ], AuditLogCommandService);
@@ -0,0 +1,13 @@
1
+ import { Repository } from 'typeorm';
2
+ import { ApproveTransactionPayload, CreateAuditLogDto } from '../dtos/audit.dto';
3
+ import { AuditLog } from '../entities/audit-log.entity';
4
+ import { AuditLogCommand } from '../entities/audit-log-command.entity';
5
+ export declare class AuditLogService {
6
+ private auditLogRepository;
7
+ private auditLogCommandRepository;
8
+ constructor(auditLogRepository: Repository<AuditLog>, auditLogCommandRepository: Repository<AuditLogCommand>);
9
+ createAuditLog(data: CreateAuditLogDto): Promise<void>;
10
+ commitTransaction(payload: ApproveTransactionPayload): Promise<void>;
11
+ rollbackTransaction(payload: ApproveTransactionPayload): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=audit-log.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.service.d.ts","sourceRoot":"","sources":["../../../../libs/mezgeb/src/mezgeb/listener/services/audit-log.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAGvE,qBACa,eAAe;IAGxB,OAAO,CAAC,kBAAkB;IAE1B,OAAO,CAAC,yBAAyB;gBAFzB,kBAAkB,EAAE,UAAU,CAAC,QAAQ,CAAC,EAExC,yBAAyB,EAAE,UAAU,CAAC,eAAe,CAAC;IAG1D,cAAc,CAAC,IAAI,EAAE,iBAAiB;IAKtC,iBAAiB,CAAC,OAAO,EAAE,yBAAyB;IAQpD,mBAAmB,CAAC,OAAO,EAAE,yBAAyB;CAG7D"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.AuditLogService = void 0;
25
+ const common_1 = require("@nestjs/common");
26
+ const typeorm_1 = require("@nestjs/typeorm");
27
+ const typeorm_2 = require("typeorm");
28
+ const audit_log_entity_1 = require("../entities/audit-log.entity");
29
+ const audit_log_command_entity_1 = require("../entities/audit-log-command.entity");
30
+ let AuditLogService = class AuditLogService {
31
+ constructor(auditLogRepository, auditLogCommandRepository) {
32
+ this.auditLogRepository = auditLogRepository;
33
+ this.auditLogCommandRepository = auditLogCommandRepository;
34
+ }
35
+ createAuditLog(data) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const auditItem = this.auditLogRepository.create(data);
38
+ yield this.auditLogRepository.insert(auditItem);
39
+ });
40
+ }
41
+ commitTransaction(payload) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ yield this.auditLogRepository.update(payload.requestId, {
44
+ statusCode: payload.statusCode,
45
+ executionTime: payload.executionTime,
46
+ status: 'Commit',
47
+ });
48
+ });
49
+ }
50
+ rollbackTransaction(payload) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ yield this.auditLogRepository.delete(payload.requestId);
53
+ });
54
+ }
55
+ };
56
+ exports.AuditLogService = AuditLogService;
57
+ exports.AuditLogService = AuditLogService = __decorate([
58
+ (0, common_1.Injectable)(),
59
+ __param(0, (0, typeorm_1.InjectRepository)(audit_log_entity_1.AuditLog)),
60
+ __param(1, (0, typeorm_1.InjectRepository)(audit_log_command_entity_1.AuditLogCommand)),
61
+ __metadata("design:paramtypes", [typeorm_2.Repository,
62
+ typeorm_2.Repository])
63
+ ], AuditLogService);
@@ -1 +1 @@
1
- {"version":3,"file":"mezgeb.module.d.ts","sourceRoot":"","sources":["../libs/mezgeb/src/mezgeb.module.ts"],"names":[],"mappings":"AAIA,qBASa,YAAY;CAAG"}
1
+ {"version":3,"file":"mezgeb.module.d.ts","sourceRoot":"","sources":["../libs/mezgeb/src/mezgeb.module.ts"],"names":[],"mappings":"AAKA,qBAUa,YAAY;CAAI"}
@@ -10,13 +10,15 @@ exports.MezgebModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const client_module_1 = require("./mezgeb/client/client.module");
12
12
  const core_1 = require("@nestjs/core");
13
+ const audit_module_1 = require("./mezgeb/listener/audit.module");
13
14
  let MezgebModule = class MezgebModule {
14
15
  };
15
16
  exports.MezgebModule = MezgebModule;
16
17
  exports.MezgebModule = MezgebModule = __decorate([
17
18
  (0, common_1.Module)({
18
19
  imports: [
19
- client_module_1.AuditClientModule
20
+ client_module_1.AuditClientModule,
21
+ audit_module_1.AuditListenerModule
20
22
  ],
21
23
  providers: [
22
24
  core_1.Reflector
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@estgbue/mezgeb",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "main": "./src/index",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"
@@ -13,6 +13,7 @@
13
13
  "@nestjs/common": "^11.0.20",
14
14
  "@nestjs/core": "^11.0.20",
15
15
  "@nestjs/microservices": "^11.1.0",
16
+ "@nestjs/swagger": "^11.2.3",
16
17
  "@nestjs/typeorm": "^11.0.0",
17
18
  "crypto": "^1.0.1",
18
19
  "dotenv": "^17.2.3",