@comasoft/nestjs 0.0.97 → 0.1.2

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 (211) hide show
  1. package/README.md +31 -0
  2. package/dist/aws/aws-s3.service.d.ts +17 -0
  3. package/dist/aws/aws-s3.service.js +158 -0
  4. package/dist/aws/aws.module.d.ts +2 -0
  5. package/dist/aws/aws.module.js +25 -0
  6. package/dist/aws/aws.service.d.ts +3 -0
  7. package/dist/aws/aws.service.js +21 -0
  8. package/dist/aws/constants/storage.constant.d.ts +4 -0
  9. package/dist/aws/constants/storage.constant.js +25 -0
  10. package/dist/aws/dto/create-s3-presigned.dto.d.ts +12 -0
  11. package/dist/aws/dto/create-s3-presigned.dto.js +78 -0
  12. package/dist/aws/dto/index.d.ts +2 -0
  13. package/dist/aws/dto/index.js +18 -0
  14. package/dist/aws/dto/response-s3-presigned.dto.d.ts +30 -0
  15. package/dist/aws/dto/response-s3-presigned.dto.js +110 -0
  16. package/dist/aws/index.d.ts +4 -0
  17. package/dist/aws/index.js +20 -0
  18. package/dist/aws/types/s3.interface.d.ts +14 -0
  19. package/dist/aws/types/s3.interface.js +2 -0
  20. package/dist/aws/types/storage.interface.d.ts +19 -0
  21. package/dist/aws/types/storage.interface.js +2 -0
  22. package/dist/category/category.module.d.ts +2 -0
  23. package/dist/category/category.module.js +23 -0
  24. package/dist/category/category.service.d.ts +13 -0
  25. package/dist/category/category.service.js +124 -0
  26. package/dist/category/dto/create-category.dto.d.ts +7 -0
  27. package/dist/category/dto/create-category.dto.js +34 -0
  28. package/dist/category/dto/delete-category.dto.d.ts +3 -0
  29. package/dist/category/dto/delete-category.dto.js +6 -0
  30. package/dist/category/dto/index.d.ts +5 -0
  31. package/dist/category/dto/index.js +21 -0
  32. package/dist/category/dto/response-categories.dto.d.ts +12 -0
  33. package/dist/category/dto/response-categories.dto.js +52 -0
  34. package/dist/category/dto/update-category-sort.dto.d.ts +9 -0
  35. package/dist/category/dto/update-category-sort.dto.js +33 -0
  36. package/dist/category/dto/update-category.dto.d.ts +6 -0
  37. package/dist/category/dto/update-category.dto.js +9 -0
  38. package/dist/category/index.d.ts +3 -0
  39. package/dist/category/index.js +19 -0
  40. package/dist/comment/comment.module.d.ts +2 -0
  41. package/dist/comment/comment.module.js +23 -0
  42. package/dist/comment/comment.service.d.ts +33 -0
  43. package/dist/comment/comment.service.js +240 -0
  44. package/dist/comment/dto/create-comment.dto.d.ts +7 -0
  45. package/dist/comment/dto/create-comment.dto.js +41 -0
  46. package/dist/comment/dto/index.d.ts +3 -0
  47. package/dist/comment/dto/index.js +19 -0
  48. package/dist/comment/dto/response-comment.dto.d.ts +26 -0
  49. package/dist/comment/dto/response-comment.dto.js +97 -0
  50. package/dist/comment/dto/update-comment.dto.d.ts +4 -0
  51. package/dist/comment/dto/update-comment.dto.js +22 -0
  52. package/dist/comment/index.d.ts +3 -0
  53. package/dist/comment/index.js +19 -0
  54. package/dist/database/entities/category.entity.d.ts +14 -0
  55. package/dist/database/entities/category.entity.js +70 -0
  56. package/dist/database/entities/comment.entity.d.ts +16 -0
  57. package/dist/database/entities/comment.entity.js +77 -0
  58. package/dist/database/entities/config.entity.d.ts +8 -0
  59. package/dist/database/entities/config.entity.js +44 -0
  60. package/dist/database/entities/file.entity.d.ts +20 -0
  61. package/dist/database/entities/file.entity.js +91 -0
  62. package/dist/database/entities/index.d.ts +10 -0
  63. package/dist/database/entities/index.js +26 -0
  64. package/dist/database/entities/like.entity.d.ts +10 -0
  65. package/dist/database/entities/like.entity.js +49 -0
  66. package/dist/database/entities/logs-audit.entity.d.ts +16 -0
  67. package/dist/database/entities/logs-audit.entity.js +72 -0
  68. package/dist/database/entities/logs-event.entity.d.ts +16 -0
  69. package/dist/database/entities/logs-event.entity.js +72 -0
  70. package/dist/database/entities/notification-recipient.entity.d.ts +19 -0
  71. package/dist/database/entities/notification-recipient.entity.js +74 -0
  72. package/dist/database/entities/notification.entity.d.ts +18 -0
  73. package/dist/database/entities/notification.entity.js +69 -0
  74. package/dist/database/entities/role.entity.d.ts +13 -0
  75. package/dist/database/entities/role.entity.js +54 -0
  76. package/dist/database/entities/roles.entity.d.ts +12 -0
  77. package/dist/database/entities/roles.entity.js +1 -0
  78. package/dist/decorators/auth.decorator.factory.d.ts +1 -1
  79. package/dist/decorators/auth.decorator.factory.js +23 -2
  80. package/dist/decorators/delete-columns.decorator.js +1 -33
  81. package/dist/decorators/patch-body.decorator.js +20 -12
  82. package/dist/decorators/soft-delete.decorator.js +1 -15
  83. package/dist/decorators/timestamps.decorator.js +5 -13
  84. package/dist/dto/file.dto.d.ts +18 -0
  85. package/dist/dto/file.dto.js +70 -0
  86. package/dist/dto/index.d.ts +2 -0
  87. package/dist/dto/index.js +2 -0
  88. package/dist/dto/response-uid.dto.d.ts +2 -0
  89. package/dist/dto/response-uid.dto.js +8 -0
  90. package/dist/dto/update-ids.dto.d.ts +6 -1
  91. package/dist/dto/update-ids.dto.js +24 -10
  92. package/dist/dto/update-sort.dto.d.ts +9 -0
  93. package/dist/dto/update-sort.dto.js +50 -0
  94. package/dist/enums.common.d.ts +23 -0
  95. package/dist/enums.common.js +28 -1
  96. package/dist/events/event-bus.module.d.ts +2 -0
  97. package/dist/events/event-bus.module.js +44 -0
  98. package/dist/events/index.d.ts +4 -0
  99. package/dist/events/index.js +20 -0
  100. package/dist/events/listeners/audit-event.listener.d.ts +9 -0
  101. package/dist/events/listeners/audit-event.listener.js +58 -0
  102. package/dist/events/listeners/index.d.ts +1 -0
  103. package/dist/events/listeners/index.js +17 -0
  104. package/dist/events/listeners/system-event.listener.d.ts +9 -0
  105. package/dist/events/listeners/system-event.listener.js +58 -0
  106. package/dist/events/services/event-logger.service.d.ts +5 -0
  107. package/dist/events/services/event-logger.service.js +34 -0
  108. package/dist/events/services/event-notification.service.d.ts +7 -0
  109. package/dist/events/services/event-notification.service.js +104 -0
  110. package/dist/events/services/event-storage.service.d.ts +11 -0
  111. package/dist/events/services/event-storage.service.js +79 -0
  112. package/dist/events/services/index.d.ts +4 -0
  113. package/dist/events/services/index.js +20 -0
  114. package/dist/events/services/token.service.d.ts +23 -0
  115. package/dist/events/services/token.service.js +88 -0
  116. package/dist/events/types/audit-events.type.d.ts +12 -0
  117. package/dist/events/types/audit-events.type.js +2 -0
  118. package/dist/events/types/index.d.ts +18 -0
  119. package/dist/events/types/index.js +17 -0
  120. package/dist/filters/http-exception.filter.d.ts +4 -0
  121. package/dist/filters/http-exception.filter.js +26 -4
  122. package/dist/guards/auth.guard.d.ts +3 -1
  123. package/dist/guards/auth.guard.js +33 -11
  124. package/dist/index.d.ts +20 -8
  125. package/dist/index.js +12 -0
  126. package/dist/library.module.d.ts +2 -0
  127. package/dist/library.module.js +20 -0
  128. package/dist/like/dto/create-like.dto.d.ts +7 -0
  129. package/dist/like/dto/create-like.dto.js +47 -0
  130. package/dist/like/dto/index.d.ts +2 -0
  131. package/dist/like/dto/index.js +18 -0
  132. package/dist/like/dto/response-like.dto.d.ts +19 -0
  133. package/dist/like/dto/response-like.dto.js +79 -0
  134. package/dist/like/index.d.ts +3 -0
  135. package/dist/like/index.js +19 -0
  136. package/dist/like/like.module.d.ts +2 -0
  137. package/dist/like/like.module.js +23 -0
  138. package/dist/like/like.service.d.ts +13 -0
  139. package/dist/like/like.service.js +155 -0
  140. package/dist/logger/index.d.ts +2 -0
  141. package/dist/logger/index.js +18 -0
  142. package/dist/logger/pino-options.d.ts +31 -0
  143. package/dist/logger/pino-options.js +77 -0
  144. package/dist/logger/pino-pretty-transport.d.ts +1 -0
  145. package/dist/logger/pino-pretty-transport.js +164 -0
  146. package/dist/modules/index.d.ts +1 -0
  147. package/dist/modules/index.js +1 -0
  148. package/dist/modules/redis.module.d.ts +9 -0
  149. package/dist/modules/redis.module.js +1 -0
  150. package/dist/notifications/index.d.ts +70 -0
  151. package/dist/notifications/index.js +18 -0
  152. package/dist/notifications/notification.module.d.ts +2 -0
  153. package/dist/notifications/notification.module.js +32 -0
  154. package/dist/notifications/services/email.service.d.ts +31 -0
  155. package/dist/notifications/services/email.service.js +69 -0
  156. package/dist/notifications/services/index.d.ts +7 -0
  157. package/dist/notifications/services/index.js +23 -0
  158. package/dist/notifications/services/kakao.service.d.ts +41 -0
  159. package/dist/notifications/services/kakao.service.js +94 -0
  160. package/dist/notifications/services/message-template.service.d.ts +15 -0
  161. package/dist/notifications/services/message-template.service.js +74 -0
  162. package/dist/notifications/services/notification-send.service.d.ts +30 -0
  163. package/dist/notifications/services/notification-send.service.js +146 -0
  164. package/dist/notifications/services/notification.service.d.ts +37 -0
  165. package/dist/notifications/services/notification.service.js +125 -0
  166. package/dist/notifications/services/slack.service.d.ts +11 -0
  167. package/dist/notifications/services/slack.service.js +53 -0
  168. package/dist/notifications/services/sms.service.d.ts +19 -0
  169. package/dist/notifications/services/sms.service.js +62 -0
  170. package/dist/redis/index.d.ts +2 -0
  171. package/dist/redis/index.js +18 -0
  172. package/dist/redis/redis-constraint.d.ts +1 -0
  173. package/dist/redis/redis-constraint.js +4 -0
  174. package/dist/redis/redis.module.d.ts +8 -0
  175. package/dist/redis/redis.module.js +62 -0
  176. package/dist/redis/redis.service.d.ts +12 -0
  177. package/dist/redis/redis.service.js +76 -0
  178. package/dist/role/dto/create-role.dto.d.ts +5 -0
  179. package/dist/role/dto/create-role.dto.js +41 -0
  180. package/dist/role/dto/index.d.ts +3 -0
  181. package/dist/role/dto/index.js +19 -0
  182. package/dist/role/dto/response-roles.dto.d.ts +15 -0
  183. package/dist/role/dto/response-roles.dto.js +62 -0
  184. package/dist/role/dto/update-role.dto.d.ts +6 -0
  185. package/dist/role/dto/update-role.dto.js +9 -0
  186. package/dist/role/index.d.ts +3 -0
  187. package/dist/role/index.js +19 -0
  188. package/dist/role/role.module.d.ts +2 -0
  189. package/dist/role/role.module.js +23 -0
  190. package/dist/role/role.service.d.ts +17 -0
  191. package/dist/role/role.service.js +144 -0
  192. package/dist/services/file.service.d.ts +55 -0
  193. package/dist/services/file.service.js +82 -0
  194. package/dist/services/index.d.ts +2 -0
  195. package/dist/services/index.js +18 -0
  196. package/dist/services/message-template.service.d.ts +15 -0
  197. package/dist/services/message-template.service.js +1 -0
  198. package/dist/services/permission-checker.service.d.ts +38 -0
  199. package/dist/services/permission-checker.service.js +65 -0
  200. package/dist/shared/error-codes.d.ts +5 -0
  201. package/dist/shared/error-codes.js +9 -0
  202. package/dist/utils/common.utils.d.ts +2 -0
  203. package/dist/utils/common.utils.js +11 -1
  204. package/dist/utils/index.d.ts +1 -0
  205. package/dist/utils/index.js +1 -0
  206. package/dist/utils/object-diff.d.ts +1 -0
  207. package/dist/utils/object-diff.js +33 -0
  208. package/package.json +61 -16
  209. package/eslint.config.js +0 -31
  210. package/tsconfig.build.json +0 -19
  211. package/tsconfig.json +0 -18
@@ -0,0 +1,18 @@
1
+ import { NotificationOptions } from '../../notifications';
2
+ export interface UserEvent {
3
+ user_id?: number;
4
+ ip_address?: string;
5
+ user_agent?: string;
6
+ }
7
+ export interface BaseEvent {
8
+ readonly uid?: string;
9
+ readonly name: string;
10
+ readonly user?: UserEvent;
11
+ readonly timestamp?: Date;
12
+ readonly notification?: NotificationOptions;
13
+ readonly db?: boolean;
14
+ readonly log?: boolean;
15
+ readonly before?: Record<string, any>;
16
+ readonly after?: Record<string, any>;
17
+ }
18
+ export * from './audit-events.type';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./audit-events.type"), exports);
@@ -1,4 +1,8 @@
1
1
  import { ExceptionFilter, ArgumentsHost, HttpException } from '@nestjs/common';
2
+ import { EventEmitter2 } from '@nestjs/event-emitter';
2
3
  export declare class HttpExceptionFilter implements ExceptionFilter {
4
+ private readonly eventEmitter;
5
+ constructor(eventEmitter: EventEmitter2);
6
+ private readonly logger;
3
7
  catch(exception: HttpException, host: ArgumentsHost): void;
4
8
  }
@@ -5,15 +5,26 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
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 HttpExceptionFilter_1;
8
12
  Object.defineProperty(exports, "__esModule", { value: true });
9
13
  exports.HttpExceptionFilter = void 0;
10
14
  const common_1 = require("@nestjs/common");
11
- let HttpExceptionFilter = class HttpExceptionFilter {
15
+ const event_emitter_1 = require("@nestjs/event-emitter");
16
+ let HttpExceptionFilter = HttpExceptionFilter_1 = class HttpExceptionFilter {
17
+ constructor(eventEmitter) {
18
+ this.eventEmitter = eventEmitter;
19
+ this.logger = new common_1.Logger(HttpExceptionFilter_1.name);
20
+ }
12
21
  catch(exception, host) {
13
22
  var _a, _b;
14
23
  const ctx = host.switchToHttp();
15
24
  const response = ctx.getResponse();
16
25
  const request = ctx.getRequest();
26
+ if (exception instanceof common_1.ForbiddenException) {
27
+ }
17
28
  const httpStatus = exception instanceof common_1.HttpException
18
29
  ? exception.getStatus()
19
30
  : common_1.HttpStatus.INTERNAL_SERVER_ERROR;
@@ -22,9 +33,11 @@ let HttpExceptionFilter = class HttpExceptionFilter {
22
33
  error = exception.getResponse();
23
34
  }
24
35
  else {
36
+ this.logger.error(`Unhandled exception: ${request.method} ${request.url}`);
25
37
  console.error(exception);
26
38
  error = {
27
39
  error: 'Internal Server Error',
40
+ message: 'An unexpected error occurred',
28
41
  };
29
42
  }
30
43
  if (typeof error === 'string') {
@@ -37,17 +50,26 @@ let HttpExceptionFilter = class HttpExceptionFilter {
37
50
  });
38
51
  }
39
52
  else {
53
+ let message = (_a = error.message) !== null && _a !== void 0 ? _a : error.error;
54
+ if (Array.isArray(message) &&
55
+ message.length > 0 &&
56
+ typeof message[0] === 'object') {
57
+ message = message
58
+ .map((err) => err.constraints ? Object.values(err.constraints) : 'Invalid input')
59
+ .flat();
60
+ }
40
61
  response.status(httpStatus).json({
41
62
  success: false,
42
63
  status: httpStatus,
43
64
  path: request.url,
44
- message: (_a = error.message) !== null && _a !== void 0 ? _a : error.error,
65
+ message,
45
66
  code: (_b = error.code) !== null && _b !== void 0 ? _b : undefined,
46
67
  });
47
68
  }
48
69
  }
49
70
  };
50
71
  exports.HttpExceptionFilter = HttpExceptionFilter;
51
- exports.HttpExceptionFilter = HttpExceptionFilter = __decorate([
52
- (0, common_1.Catch)()
72
+ exports.HttpExceptionFilter = HttpExceptionFilter = HttpExceptionFilter_1 = __decorate([
73
+ (0, common_1.Catch)(),
74
+ __metadata("design:paramtypes", [event_emitter_1.EventEmitter2])
53
75
  ], HttpExceptionFilter);
@@ -1,8 +1,10 @@
1
1
  import { CanActivate, ExecutionContext } from '@nestjs/common';
2
2
  import { Reflector } from '@nestjs/core';
3
3
  import { Observable } from 'rxjs';
4
+ import { PermissionCheckerService } from '../services/permission-checker.service';
4
5
  export declare class AuthGuard implements CanActivate {
5
6
  private reflector;
6
- constructor(reflector: Reflector);
7
+ private permissionChecker;
8
+ constructor(reflector: Reflector, permissionChecker: PermissionCheckerService);
7
9
  canActivate(ctx: ExecutionContext): boolean | Promise<boolean> | Observable<boolean>;
8
10
  }
@@ -12,27 +12,49 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AuthGuard = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const core_1 = require("@nestjs/core");
15
+ const permission_checker_service_1 = require("../services/permission-checker.service");
15
16
  let AuthGuard = class AuthGuard {
16
- constructor(reflector) {
17
+ constructor(reflector, permissionChecker) {
17
18
  this.reflector = reflector;
19
+ this.permissionChecker = permissionChecker;
18
20
  }
19
21
  canActivate(ctx) {
20
- var _a;
21
- const roles = this.reflector.get('roles', ctx.getHandler()) ||
22
- this.reflector.get('roles', ctx.getClass());
23
- if (!roles.length)
24
- return true;
25
22
  const request = ctx.switchToHttp().getRequest();
26
- if (roles.includes((_a = request.user) === null || _a === void 0 ? void 0 : _a.role)) {
27
- return true;
23
+ const user = request.user;
24
+ if (!user) {
25
+ throw new common_1.UnauthorizedException('User not found');
28
26
  }
29
- else {
30
- throw new common_1.UnauthorizedException('Unauthorized (AuthGuard)');
27
+ const roles = this.reflector.getAllAndOverride('roles', [
28
+ ctx.getHandler(),
29
+ ctx.getClass(),
30
+ ]);
31
+ if (roles === null || roles === void 0 ? void 0 : roles.length) {
32
+ if (roles.includes(user.role)) {
33
+ return true;
34
+ }
35
+ else {
36
+ request.audit = {
37
+ roles: roles.join(','),
38
+ user_role: user.role,
39
+ };
40
+ throw new common_1.ForbiddenException('Insufficient role privileges');
41
+ }
31
42
  }
43
+ const permissions = this.reflector.getAllAndOverride('permissions', [ctx.getHandler(), ctx.getClass()]);
44
+ if (permissions === null || permissions === void 0 ? void 0 : permissions.length) {
45
+ if (this.permissionChecker.hasAnyPermission(user, permissions)) {
46
+ return true;
47
+ }
48
+ else {
49
+ throw new common_1.ForbiddenException('Insufficient permissions');
50
+ }
51
+ }
52
+ return true;
32
53
  }
33
54
  };
34
55
  exports.AuthGuard = AuthGuard;
35
56
  exports.AuthGuard = AuthGuard = __decorate([
36
57
  (0, common_1.Injectable)(),
37
- __metadata("design:paramtypes", [core_1.Reflector])
58
+ __metadata("design:paramtypes", [core_1.Reflector,
59
+ permission_checker_service_1.PermissionCheckerService])
38
60
  ], AuthGuard);
package/dist/index.d.ts CHANGED
@@ -1,8 +1,20 @@
1
- export * from "./enums.common";
2
- export * from "./decorators";
3
- export * from "./dto";
4
- export * from "./filters";
5
- export * from "./interceptors";
6
- export * from "./utils";
7
- export * from "./setup-swagger";
8
- export * from "./passport/jwt.strategy";
1
+ export * from './enums.common';
2
+ export * from './decorators';
3
+ export * from './dto';
4
+ export * from './filters';
5
+ export * from './interceptors';
6
+ export * from './utils';
7
+ export * from './setup-swagger';
8
+ export * from './logger';
9
+ export * from './redis';
10
+ export * from './passport/jwt.strategy';
11
+ export * from './events';
12
+ export * from './notifications';
13
+ export * from './aws';
14
+ export * from './library.module';
15
+ export * from './category';
16
+ export * from './comment';
17
+ export * from './like';
18
+ export * from './role';
19
+ export * from './services';
20
+ export * from './logger';
package/dist/index.js CHANGED
@@ -21,4 +21,16 @@ __exportStar(require("./filters"), exports);
21
21
  __exportStar(require("./interceptors"), exports);
22
22
  __exportStar(require("./utils"), exports);
23
23
  __exportStar(require("./setup-swagger"), exports);
24
+ __exportStar(require("./logger"), exports);
25
+ __exportStar(require("./redis"), exports);
24
26
  __exportStar(require("./passport/jwt.strategy"), exports);
27
+ __exportStar(require("./events"), exports);
28
+ __exportStar(require("./notifications"), exports);
29
+ __exportStar(require("./aws"), exports);
30
+ __exportStar(require("./library.module"), exports);
31
+ __exportStar(require("./category"), exports);
32
+ __exportStar(require("./comment"), exports);
33
+ __exportStar(require("./like"), exports);
34
+ __exportStar(require("./role"), exports);
35
+ __exportStar(require("./services"), exports);
36
+ __exportStar(require("./logger"), exports);
@@ -0,0 +1,2 @@
1
+ export declare class LibraryModule {
2
+ }
@@ -0,0 +1,20 @@
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.LibraryModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ let LibraryModule = class LibraryModule {
12
+ };
13
+ exports.LibraryModule = LibraryModule;
14
+ exports.LibraryModule = LibraryModule = __decorate([
15
+ (0, common_1.Global)(),
16
+ (0, common_1.Module)({
17
+ providers: [],
18
+ exports: [],
19
+ })
20
+ ], LibraryModule);
@@ -0,0 +1,7 @@
1
+ import { LIKE_TYPE } from '../../enums.common';
2
+ export declare class CreateLikeBaseDto<T = string> {
3
+ target: T;
4
+ target_id?: number;
5
+ target_uid?: string;
6
+ type: LIKE_TYPE;
7
+ }
@@ -0,0 +1,47 @@
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.CreateLikeBaseDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ const enums_common_1 = require("../../enums.common");
16
+ class CreateLikeBaseDto {
17
+ }
18
+ exports.CreateLikeBaseDto = CreateLikeBaseDto;
19
+ __decorate([
20
+ (0, swagger_1.ApiProperty)({
21
+ type: Number,
22
+ description: 'Target ID',
23
+ required: false,
24
+ }),
25
+ (0, class_validator_1.IsNumber)(),
26
+ (0, class_validator_1.IsOptional)(),
27
+ __metadata("design:type", Number)
28
+ ], CreateLikeBaseDto.prototype, "target_id", void 0);
29
+ __decorate([
30
+ (0, swagger_1.ApiProperty)({
31
+ type: String,
32
+ description: 'Target UID',
33
+ required: false,
34
+ }),
35
+ (0, class_validator_1.IsString)(),
36
+ (0, class_validator_1.IsOptional)(),
37
+ __metadata("design:type", String)
38
+ ], CreateLikeBaseDto.prototype, "target_uid", void 0);
39
+ __decorate([
40
+ (0, swagger_1.ApiProperty)({
41
+ enum: enums_common_1.LIKE_TYPE,
42
+ description: 'Like type',
43
+ example: enums_common_1.LIKE_TYPE.LIKE,
44
+ }),
45
+ (0, class_validator_1.IsEnum)(enums_common_1.LIKE_TYPE),
46
+ __metadata("design:type", String)
47
+ ], CreateLikeBaseDto.prototype, "type", void 0);
@@ -0,0 +1,2 @@
1
+ export * from './create-like.dto';
2
+ export * from './response-like.dto';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./create-like.dto"), exports);
18
+ __exportStar(require("./response-like.dto"), exports);
@@ -0,0 +1,19 @@
1
+ import { LIKE_TYPE } from '../../enums.common';
2
+ declare class ResponseUserDto {
3
+ uid: string;
4
+ name: string;
5
+ cnt_likes: number;
6
+ }
7
+ export declare class ResponseLikeBaseDto {
8
+ id: number;
9
+ type: LIKE_TYPE;
10
+ user: ResponseUserDto;
11
+ created_at: Date;
12
+ updated_at: Date;
13
+ }
14
+ export declare class ResponseLikeStatsBaseDto {
15
+ cnt_likes: number;
16
+ cnt_dislikes: number;
17
+ user_like_type?: LIKE_TYPE;
18
+ }
19
+ export {};
@@ -0,0 +1,79 @@
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.ResponseLikeStatsBaseDto = exports.ResponseLikeBaseDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const enums_common_1 = require("../../enums.common");
16
+ class ResponseUserDto {
17
+ }
18
+ __decorate([
19
+ (0, swagger_1.ApiProperty)({ type: String, example: 'U0000001' }),
20
+ (0, class_transformer_1.Expose)(),
21
+ __metadata("design:type", String)
22
+ ], ResponseUserDto.prototype, "uid", void 0);
23
+ __decorate([
24
+ (0, swagger_1.ApiProperty)({ type: String, example: 'John Doe' }),
25
+ (0, class_transformer_1.Expose)(),
26
+ __metadata("design:type", String)
27
+ ], ResponseUserDto.prototype, "name", void 0);
28
+ __decorate([
29
+ (0, swagger_1.ApiProperty)({ type: Number, example: 1 }),
30
+ (0, class_transformer_1.Expose)(),
31
+ __metadata("design:type", Number)
32
+ ], ResponseUserDto.prototype, "cnt_likes", void 0);
33
+ class ResponseLikeBaseDto {
34
+ }
35
+ exports.ResponseLikeBaseDto = ResponseLikeBaseDto;
36
+ __decorate([
37
+ (0, swagger_1.ApiProperty)({ type: Number, example: 1 }),
38
+ (0, class_transformer_1.Expose)(),
39
+ __metadata("design:type", Number)
40
+ ], ResponseLikeBaseDto.prototype, "id", void 0);
41
+ __decorate([
42
+ (0, swagger_1.ApiProperty)({ enum: enums_common_1.LIKE_TYPE, example: enums_common_1.LIKE_TYPE.LIKE }),
43
+ (0, class_transformer_1.Expose)(),
44
+ __metadata("design:type", String)
45
+ ], ResponseLikeBaseDto.prototype, "type", void 0);
46
+ __decorate([
47
+ (0, swagger_1.ApiProperty)({ type: ResponseUserDto }),
48
+ (0, class_transformer_1.Expose)(),
49
+ (0, class_transformer_1.Type)(() => ResponseUserDto),
50
+ __metadata("design:type", ResponseUserDto)
51
+ ], ResponseLikeBaseDto.prototype, "user", void 0);
52
+ __decorate([
53
+ (0, swagger_1.ApiProperty)({ type: Date, example: '2023-01-01T00:00:00.000Z' }),
54
+ (0, class_transformer_1.Expose)(),
55
+ __metadata("design:type", Date)
56
+ ], ResponseLikeBaseDto.prototype, "created_at", void 0);
57
+ __decorate([
58
+ (0, swagger_1.ApiProperty)({ type: Date, example: '2023-01-01T00:00:00.000Z' }),
59
+ (0, class_transformer_1.Expose)(),
60
+ __metadata("design:type", Date)
61
+ ], ResponseLikeBaseDto.prototype, "updated_at", void 0);
62
+ class ResponseLikeStatsBaseDto {
63
+ }
64
+ exports.ResponseLikeStatsBaseDto = ResponseLikeStatsBaseDto;
65
+ __decorate([
66
+ (0, swagger_1.ApiProperty)({ type: Number, example: 10 }),
67
+ (0, class_transformer_1.Expose)(),
68
+ __metadata("design:type", Number)
69
+ ], ResponseLikeStatsBaseDto.prototype, "cnt_likes", void 0);
70
+ __decorate([
71
+ (0, swagger_1.ApiProperty)({ type: Number, example: 2 }),
72
+ (0, class_transformer_1.Expose)(),
73
+ __metadata("design:type", Number)
74
+ ], ResponseLikeStatsBaseDto.prototype, "cnt_dislikes", void 0);
75
+ __decorate([
76
+ (0, swagger_1.ApiProperty)({ enum: enums_common_1.LIKE_TYPE, example: enums_common_1.LIKE_TYPE.LIKE, required: false }),
77
+ (0, class_transformer_1.Expose)(),
78
+ __metadata("design:type", String)
79
+ ], ResponseLikeStatsBaseDto.prototype, "user_like_type", void 0);
@@ -0,0 +1,3 @@
1
+ export * from './like.module';
2
+ export * from './like.service';
3
+ export * from './dto';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./like.module"), exports);
18
+ __exportStar(require("./like.service"), exports);
19
+ __exportStar(require("./dto"), exports);
@@ -0,0 +1,2 @@
1
+ export declare class LikeModule {
2
+ }
@@ -0,0 +1,23 @@
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.LikeModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const typeorm_1 = require("@nestjs/typeorm");
12
+ const entities_1 = require("../database/entities");
13
+ const like_service_1 = require("./like.service");
14
+ let LikeModule = class LikeModule {
15
+ };
16
+ exports.LikeModule = LikeModule;
17
+ exports.LikeModule = LikeModule = __decorate([
18
+ (0, common_1.Module)({
19
+ imports: [typeorm_1.TypeOrmModule.forFeature([entities_1.Like])],
20
+ providers: [like_service_1.LikeService],
21
+ exports: [like_service_1.LikeService],
22
+ })
23
+ ], LikeModule);
@@ -0,0 +1,13 @@
1
+ import { DataSource, EntityManager, Repository } from 'typeorm';
2
+ import { Like } from '../database/entities';
3
+ import { CreateLikeBaseDto, ResponseLikeBaseDto, ResponseLikeStatsBaseDto } from './dto';
4
+ export declare class LikeService<T = string> {
5
+ protected readonly repository: Repository<Like>;
6
+ protected readonly dataSource: DataSource;
7
+ constructor(repository: Repository<Like>, dataSource: DataSource);
8
+ protected resolveTargetId(target: T, target_id?: number, target_uid?: string): Promise<number>;
9
+ protected validateTarget(target: T, target_id: number): Promise<void>;
10
+ protected updateTargetLikeCount(manager: EntityManager, target: T, target_id: number, increment: number): Promise<void>;
11
+ toggleLike(user_id: number, _body: CreateLikeBaseDto<T>): Promise<ResponseLikeBaseDto>;
12
+ getStats(target: T, target_id?: number, target_uid?: string, user_id?: number): Promise<ResponseLikeStatsBaseDto>;
13
+ }