@comasoft/nestjs 0.1.0 → 0.1.3
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/README.md +2 -0
- package/dist/aws/aws-s3.service.js +158 -1
- package/dist/aws/aws.module.js +25 -1
- package/dist/aws/aws.service.js +21 -1
- package/dist/aws/constants/storage.constant.js +25 -1
- package/dist/aws/dto/create-s3-presigned.dto.js +78 -1
- package/dist/aws/dto/index.js +18 -1
- package/dist/aws/dto/response-s3-presigned.dto.js +110 -1
- package/dist/aws/index.js +20 -1
- package/dist/aws/types/s3.interface.js +2 -1
- package/dist/aws/types/storage.interface.js +2 -1
- package/dist/category/category.module.js +23 -1
- package/dist/category/category.service.js +124 -1
- package/dist/category/dto/create-category.dto.js +34 -1
- package/dist/category/dto/delete-category.dto.js +6 -1
- package/dist/category/dto/index.js +21 -1
- package/dist/category/dto/response-categories.dto.js +52 -1
- package/dist/category/dto/update-category-sort.dto.js +33 -1
- package/dist/category/dto/update-category.dto.js +9 -1
- package/dist/category/index.js +19 -1
- package/dist/comment/comment.module.js +23 -1
- package/dist/comment/comment.service.js +240 -1
- package/dist/comment/dto/create-comment.dto.js +41 -1
- package/dist/comment/dto/index.js +19 -1
- package/dist/comment/dto/response-comment.dto.js +97 -1
- package/dist/comment/dto/update-comment.dto.js +22 -1
- package/dist/comment/index.js +19 -1
- package/dist/database/entities/category.entity.js +70 -1
- package/dist/database/entities/comment.entity.js +77 -1
- package/dist/database/entities/config.entity.js +44 -1
- package/dist/database/entities/file.entity.js +91 -1
- package/dist/database/entities/index.js +26 -1
- package/dist/database/entities/like.entity.js +49 -1
- package/dist/database/entities/logs-audit.entity.js +72 -1
- package/dist/database/entities/logs-event.entity.js +72 -1
- package/dist/database/entities/notification-recipient.entity.js +74 -1
- package/dist/database/entities/notification.entity.js +69 -1
- package/dist/database/entities/role.entity.js +54 -1
- package/dist/decorators/api-custom-params.decorator.js +35 -1
- package/dist/decorators/auth.decorator.factory.js +33 -1
- package/dist/decorators/cookies.decorator.js +9 -1
- package/dist/decorators/custom-params.decorator.js +16 -1
- package/dist/decorators/index.js +24 -1
- package/dist/decorators/patch-body.decorator.js +38 -1
- package/dist/decorators/soft-delete.decorator.js +10 -1
- package/dist/decorators/timestamps.decorator.js +23 -1
- package/dist/decorators/user.decorator.js +8 -1
- package/dist/dto/auth-user-local.dto.js +26 -1
- package/dist/dto/auth-user-sso.dto.js +21 -1
- package/dist/dto/custom-params.dto.js +46 -1
- package/dist/dto/file.dto.js +70 -1
- package/dist/dto/index.js +26 -1
- package/dist/dto/jwt-user.dto.js +6 -1
- package/dist/dto/pagination.dto.js +36 -1
- package/dist/dto/remove-ids.dto.js +23 -1
- package/dist/dto/response-access-token.dto.js +24 -1
- package/dist/dto/response-id.dto.js +35 -1
- package/dist/dto/response-uid.dto.js +35 -1
- package/dist/dto/update-ids.dto.js +45 -1
- package/dist/dto/update-sort.dto.js +50 -1
- package/dist/enums.common.js +62 -1
- package/dist/events/event-bus.module.js +44 -1
- package/dist/events/index.js +20 -1
- package/dist/events/listeners/audit-event.listener.js +58 -1
- package/dist/events/listeners/index.js +17 -1
- package/dist/events/listeners/system-event.listener.js +58 -1
- package/dist/events/services/event-logger.service.js +34 -1
- package/dist/events/services/event-notification.service.js +104 -1
- package/dist/events/services/event-storage.service.js +79 -1
- package/dist/events/services/index.js +20 -1
- package/dist/events/services/token.service.js +88 -1
- package/dist/events/types/audit-events.type.js +2 -1
- package/dist/events/types/index.js +17 -1
- package/dist/filters/http-exception.filter.d.ts +1 -1
- package/dist/filters/http-exception.filter.js +78 -1
- package/dist/filters/index.js +17 -1
- package/dist/guards/auth.guard.js +60 -1
- package/dist/guards/jwt.guard.js +17 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +36 -1
- package/dist/interceptors/error.interceptor.js +26 -1
- package/dist/interceptors/index.js +18 -1
- package/dist/interceptors/success.interceptor.js +30 -1
- package/dist/library.module.js +20 -1
- package/dist/like/dto/create-like.dto.js +47 -1
- package/dist/like/dto/index.js +18 -1
- package/dist/like/dto/response-like.dto.js +79 -1
- package/dist/like/index.js +19 -1
- package/dist/like/like.module.js +23 -1
- package/dist/like/like.service.js +155 -1
- package/dist/logger/index.js +18 -1
- package/dist/logger/pino-options.js +77 -1
- package/dist/logger/pino-pretty-transport.js +155 -1
- package/dist/notifications/index.js +18 -1
- package/dist/notifications/notification.module.js +32 -1
- package/dist/notifications/services/email.service.js +69 -1
- package/dist/notifications/services/index.js +23 -1
- package/dist/notifications/services/kakao.service.js +94 -1
- package/dist/notifications/services/message-template.service.js +74 -1
- package/dist/notifications/services/notification-send.service.js +146 -1
- package/dist/notifications/services/notification.service.js +125 -1
- package/dist/notifications/services/slack.service.js +53 -1
- package/dist/notifications/services/sms.service.js +62 -1
- package/{untitled folder/package/dist/passport/kakao.strategy.d.ts → dist/passport/google.strategy.d.ts} +4 -3
- package/{untitled folder/package/dist/passport/kakao.strategy.js → dist/passport/google.strategy.js} +20 -13
- package/dist/passport/index.d.ts +4 -0
- package/{package/dist/aws → dist/passport}/index.js +4 -4
- package/dist/passport/jwt.strategy.js +55 -1
- package/dist/passport/kakao.strategy.d.ts +2 -1
- package/dist/passport/kakao.strategy.js +43 -1
- package/dist/passport/local.strategy.js +41 -1
- package/dist/redis/index.js +18 -1
- package/dist/redis/redis-constraint.js +4 -1
- package/dist/redis/redis.module.js +62 -1
- package/dist/redis/redis.service.js +76 -1
- package/dist/role/dto/create-role.dto.js +41 -1
- package/dist/role/dto/index.js +19 -1
- package/dist/role/dto/response-roles.dto.js +62 -1
- package/dist/role/dto/update-role.dto.js +9 -1
- package/dist/role/index.js +19 -1
- package/dist/role/role.module.js +23 -1
- package/dist/role/role.service.js +144 -1
- package/dist/services/file.service.js +82 -1
- package/dist/services/index.js +18 -1
- package/dist/services/permission-checker.service.js +65 -1
- package/dist/setup-swagger.js +32 -1
- package/dist/shared/error-codes.js +9 -1
- package/dist/utils/common.utils.js +42 -1
- package/dist/utils/enum.utils.js +8 -1
- package/dist/utils/index.js +21 -1
- package/dist/utils/object-diff.js +33 -1
- package/dist/utils/pagination-qb.utils.js +154 -1
- package/dist/utils/pagination.utils.js +32 -1
- package/package.json +2 -1
- package/eslint.config.js +0 -31
- package/jest.config.js +0 -11
- package/package/dist/aws/dto/index.d.ts +0 -2
- package/package/dist/aws/dto/index.js +0 -18
- package/package/dist/aws/index.d.ts +0 -4
- package/package/dist/database/entities/index.d.ts +0 -7
- package/package/dist/database/entities/index.js +0 -23
- package/package/dist/decorators/index.d.ts +0 -8
- package/package/dist/decorators/index.js +0 -24
- package/package/dist/dto/index.d.ts +0 -10
- package/package/dist/dto/index.js +0 -26
- package/package/dist/events/index.d.ts +0 -4
- package/package/dist/events/index.js +0 -20
- package/package/dist/events/listeners/index.d.ts +0 -1
- package/package/dist/events/listeners/index.js +0 -17
- package/package/dist/events/services/index.d.ts +0 -3
- package/package/dist/events/services/index.js +0 -19
- package/package/dist/events/types/index.d.ts +0 -18
- package/package/dist/events/types/index.js +0 -17
- package/package/dist/filters/index.d.ts +0 -1
- package/package/dist/filters/index.js +0 -17
- package/package/dist/index.d.ts +0 -16
- package/package/dist/index.js +0 -32
- package/package/dist/interceptors/index.d.ts +0 -2
- package/package/dist/interceptors/index.js +0 -18
- package/package/dist/logger/index.d.ts +0 -2
- package/package/dist/logger/index.js +0 -18
- package/package/dist/modules/index.d.ts +0 -1
- package/package/dist/modules/index.js +0 -17
- package/package/dist/notifications/index.d.ts +0 -53
- package/package/dist/notifications/index.js +0 -18
- package/package/dist/notifications/services/index.d.ts +0 -5
- package/package/dist/notifications/services/index.js +0 -21
- package/package/dist/redis/index.d.ts +0 -2
- package/package/dist/redis/index.js +0 -18
- package/package/dist/services/index.d.ts +0 -2
- package/package/dist/services/index.js +0 -18
- package/package/dist/utils/index.d.ts +0 -5
- package/package/dist/utils/index.js +0 -21
- package/package/index.d.ts +0 -1
- package/package/index.js +0 -17
- package/tsconfig.build.json +0 -19
- package/tsconfig.json +0 -18
- package/untitled folder/package/README.md +0 -29
- package/untitled folder/package/dist/aws/aws-s3.service.d.ts +0 -17
- package/untitled folder/package/dist/aws/aws-s3.service.js +0 -158
- package/untitled folder/package/dist/aws/aws.module.d.ts +0 -2
- package/untitled folder/package/dist/aws/aws.module.js +0 -25
- package/untitled folder/package/dist/aws/aws.service.d.ts +0 -3
- package/untitled folder/package/dist/aws/aws.service.js +0 -21
- package/untitled folder/package/dist/aws/constants/storage.constant.d.ts +0 -4
- package/untitled folder/package/dist/aws/constants/storage.constant.js +0 -25
- package/untitled folder/package/dist/aws/dto/create-s3-presigned.dto.d.ts +0 -12
- package/untitled folder/package/dist/aws/dto/create-s3-presigned.dto.js +0 -78
- package/untitled folder/package/dist/aws/dto/index.d.ts +0 -2
- package/untitled folder/package/dist/aws/dto/index.js +0 -18
- package/untitled folder/package/dist/aws/dto/response-s3-presigned.dto.d.ts +0 -30
- package/untitled folder/package/dist/aws/dto/response-s3-presigned.dto.js +0 -110
- package/untitled folder/package/dist/aws/index.d.ts +0 -4
- package/untitled folder/package/dist/aws/index.js +0 -20
- package/untitled folder/package/dist/aws/types/s3.interface.d.ts +0 -14
- package/untitled folder/package/dist/aws/types/s3.interface.js +0 -2
- package/untitled folder/package/dist/aws/types/storage.interface.d.ts +0 -19
- package/untitled folder/package/dist/aws/types/storage.interface.js +0 -2
- package/untitled folder/package/dist/database/entities/category.entity.d.ts +0 -13
- package/untitled folder/package/dist/database/entities/category.entity.js +0 -66
- package/untitled folder/package/dist/database/entities/config.entity.d.ts +0 -8
- package/untitled folder/package/dist/database/entities/config.entity.js +0 -44
- package/untitled folder/package/dist/database/entities/file.entity.d.ts +0 -20
- package/untitled folder/package/dist/database/entities/file.entity.js +0 -91
- package/untitled folder/package/dist/database/entities/index.d.ts +0 -7
- package/untitled folder/package/dist/database/entities/index.js +0 -23
- package/untitled folder/package/dist/database/entities/like.entity.d.ts +0 -10
- package/untitled folder/package/dist/database/entities/like.entity.js +0 -49
- package/untitled folder/package/dist/database/entities/logs-audit.entity.d.ts +0 -16
- package/untitled folder/package/dist/database/entities/logs-audit.entity.js +0 -72
- package/untitled folder/package/dist/database/entities/logs-event.entity.d.ts +0 -16
- package/untitled folder/package/dist/database/entities/logs-event.entity.js +0 -72
- package/untitled folder/package/dist/database/entities/notification.entity.d.ts +0 -16
- package/untitled folder/package/dist/database/entities/notification.entity.js +0 -75
- package/untitled folder/package/dist/database/entities/roles.entity.d.ts +0 -12
- package/untitled folder/package/dist/database/entities/roles.entity.js +0 -50
- package/untitled folder/package/dist/decorators/api-custom-params.decorator.d.ts +0 -7
- package/untitled folder/package/dist/decorators/api-custom-params.decorator.js +0 -35
- package/untitled folder/package/dist/decorators/auth.decorator.factory.d.ts +0 -1
- package/untitled folder/package/dist/decorators/auth.decorator.factory.js +0 -33
- package/untitled folder/package/dist/decorators/cookies.decorator.d.ts +0 -1
- package/untitled folder/package/dist/decorators/cookies.decorator.js +0 -9
- package/untitled folder/package/dist/decorators/custom-params.decorator.d.ts +0 -1
- package/untitled folder/package/dist/decorators/custom-params.decorator.js +0 -16
- package/untitled folder/package/dist/decorators/delete-columns.decorator.d.ts +0 -1
- package/untitled folder/package/dist/decorators/delete-columns.decorator.js +0 -33
- package/untitled folder/package/dist/decorators/index.d.ts +0 -8
- package/untitled folder/package/dist/decorators/index.js +0 -24
- package/untitled folder/package/dist/decorators/patch-body.decorator.d.ts +0 -1
- package/untitled folder/package/dist/decorators/patch-body.decorator.js +0 -38
- package/untitled folder/package/dist/decorators/soft-delete.decorator.d.ts +0 -1
- package/untitled folder/package/dist/decorators/soft-delete.decorator.js +0 -10
- package/untitled folder/package/dist/decorators/timestamps.decorator.d.ts +0 -6
- package/untitled folder/package/dist/decorators/timestamps.decorator.js +0 -23
- package/untitled folder/package/dist/decorators/user.decorator.d.ts +0 -1
- package/untitled folder/package/dist/decorators/user.decorator.js +0 -8
- package/untitled folder/package/dist/dto/auth-user-local.dto.d.ts +0 -4
- package/untitled folder/package/dist/dto/auth-user-local.dto.js +0 -26
- package/untitled folder/package/dist/dto/auth-user-sso.dto.d.ts +0 -3
- package/untitled folder/package/dist/dto/auth-user-sso.dto.js +0 -21
- package/untitled folder/package/dist/dto/custom-params.dto.d.ts +0 -7
- package/untitled folder/package/dist/dto/custom-params.dto.js +0 -46
- package/untitled folder/package/dist/dto/file.dto.d.ts +0 -18
- package/untitled folder/package/dist/dto/file.dto.js +0 -67
- package/untitled folder/package/dist/dto/index.d.ts +0 -10
- package/untitled folder/package/dist/dto/index.js +0 -26
- package/untitled folder/package/dist/dto/jwt-user.dto.d.ts +0 -6
- package/untitled folder/package/dist/dto/jwt-user.dto.js +0 -6
- package/untitled folder/package/dist/dto/pagination.dto.d.ts +0 -8
- package/untitled folder/package/dist/dto/pagination.dto.js +0 -36
- package/untitled folder/package/dist/dto/remove-ids.dto.d.ts +0 -3
- package/untitled folder/package/dist/dto/remove-ids.dto.js +0 -23
- package/untitled folder/package/dist/dto/response-access-token.dto.d.ts +0 -3
- package/untitled folder/package/dist/dto/response-access-token.dto.js +0 -24
- package/untitled folder/package/dist/dto/response-id.dto.d.ts +0 -8
- package/untitled folder/package/dist/dto/response-id.dto.js +0 -35
- package/untitled folder/package/dist/dto/response-uid.dto.d.ts +0 -6
- package/untitled folder/package/dist/dto/response-uid.dto.js +0 -27
- package/untitled folder/package/dist/dto/update-ids.dto.d.ts +0 -5
- package/untitled folder/package/dist/dto/update-ids.dto.js +0 -31
- package/untitled folder/package/dist/dto/update-sort.dto.d.ts +0 -9
- package/untitled folder/package/dist/dto/update-sort.dto.js +0 -50
- package/untitled folder/package/dist/enums.common.d.ts +0 -52
- package/untitled folder/package/dist/enums.common.js +0 -62
- package/untitled folder/package/dist/events/event-bus.module.d.ts +0 -2
- package/untitled folder/package/dist/events/event-bus.module.js +0 -44
- package/untitled folder/package/dist/events/index.d.ts +0 -4
- package/untitled folder/package/dist/events/index.js +0 -20
- package/untitled folder/package/dist/events/listeners/audit-event.listener.d.ts +0 -9
- package/untitled folder/package/dist/events/listeners/audit-event.listener.js +0 -58
- package/untitled folder/package/dist/events/listeners/index.d.ts +0 -1
- package/untitled folder/package/dist/events/listeners/index.js +0 -17
- package/untitled folder/package/dist/events/listeners/system-event.listener.d.ts +0 -9
- package/untitled folder/package/dist/events/listeners/system-event.listener.js +0 -58
- package/untitled folder/package/dist/events/services/event-logger.service.d.ts +0 -5
- package/untitled folder/package/dist/events/services/event-logger.service.js +0 -34
- package/untitled folder/package/dist/events/services/event-notification.service.d.ts +0 -6
- package/untitled folder/package/dist/events/services/event-notification.service.js +0 -74
- package/untitled folder/package/dist/events/services/event-storage.service.d.ts +0 -11
- package/untitled folder/package/dist/events/services/event-storage.service.js +0 -79
- package/untitled folder/package/dist/events/services/index.d.ts +0 -3
- package/untitled folder/package/dist/events/services/index.js +0 -19
- package/untitled folder/package/dist/events/types/audit-events.type.d.ts +0 -12
- package/untitled folder/package/dist/events/types/audit-events.type.js +0 -2
- package/untitled folder/package/dist/events/types/index.d.ts +0 -18
- package/untitled folder/package/dist/events/types/index.js +0 -17
- package/untitled folder/package/dist/filters/http-exception.filter.d.ts +0 -8
- package/untitled folder/package/dist/filters/http-exception.filter.js +0 -71
- package/untitled folder/package/dist/filters/index.d.ts +0 -1
- package/untitled folder/package/dist/filters/index.js +0 -17
- package/untitled folder/package/dist/guards/auth.guard.d.ts +0 -10
- package/untitled folder/package/dist/guards/auth.guard.js +0 -63
- package/untitled folder/package/dist/guards/jwt.guard.d.ts +0 -4
- package/untitled folder/package/dist/guards/jwt.guard.js +0 -17
- package/untitled folder/package/dist/index.d.ts +0 -16
- package/untitled folder/package/dist/index.js +0 -32
- package/untitled folder/package/dist/interceptors/error.interceptor.d.ts +0 -5
- package/untitled folder/package/dist/interceptors/error.interceptor.js +0 -26
- package/untitled folder/package/dist/interceptors/index.d.ts +0 -2
- package/untitled folder/package/dist/interceptors/index.js +0 -18
- package/untitled folder/package/dist/interceptors/success.interceptor.d.ts +0 -5
- package/untitled folder/package/dist/interceptors/success.interceptor.js +0 -30
- package/untitled folder/package/dist/library.module.d.ts +0 -2
- package/untitled folder/package/dist/library.module.js +0 -20
- package/untitled folder/package/dist/logger/index.d.ts +0 -2
- package/untitled folder/package/dist/logger/index.js +0 -18
- package/untitled folder/package/dist/logger/pino-options.d.ts +0 -31
- package/untitled folder/package/dist/logger/pino-options.js +0 -77
- package/untitled folder/package/dist/logger/pino-pretty-transport.d.ts +0 -1
- package/untitled folder/package/dist/logger/pino-pretty-transport.js +0 -155
- package/untitled folder/package/dist/modules/index.d.ts +0 -1
- package/untitled folder/package/dist/modules/index.js +0 -17
- package/untitled folder/package/dist/modules/redis.module.d.ts +0 -9
- package/untitled folder/package/dist/modules/redis.module.js +0 -60
- package/untitled folder/package/dist/notifications/index.d.ts +0 -53
- package/untitled folder/package/dist/notifications/index.js +0 -18
- package/untitled folder/package/dist/notifications/notification.module.d.ts +0 -2
- package/untitled folder/package/dist/notifications/notification.module.js +0 -36
- package/untitled folder/package/dist/notifications/services/email.service.d.ts +0 -7
- package/untitled folder/package/dist/notifications/services/email.service.js +0 -49
- package/untitled folder/package/dist/notifications/services/index.d.ts +0 -5
- package/untitled folder/package/dist/notifications/services/index.js +0 -21
- package/untitled folder/package/dist/notifications/services/kakao.service.d.ts +0 -8
- package/untitled folder/package/dist/notifications/services/kakao.service.js +0 -57
- package/untitled folder/package/dist/notifications/services/notification.service.d.ts +0 -15
- package/untitled folder/package/dist/notifications/services/notification.service.js +0 -83
- package/untitled folder/package/dist/notifications/services/slack.service.d.ts +0 -6
- package/untitled folder/package/dist/notifications/services/slack.service.js +0 -41
- package/untitled folder/package/dist/notifications/services/sms.service.d.ts +0 -6
- package/untitled folder/package/dist/notifications/services/sms.service.js +0 -41
- package/untitled folder/package/dist/passport/jwt.strategy.d.ts +0 -6
- package/untitled folder/package/dist/passport/jwt.strategy.js +0 -55
- package/untitled folder/package/dist/passport/local.strategy.d.ts +0 -6
- package/untitled folder/package/dist/passport/local.strategy.js +0 -41
- package/untitled folder/package/dist/redis/index.d.ts +0 -2
- package/untitled folder/package/dist/redis/index.js +0 -18
- package/untitled folder/package/dist/redis/redis-constraint.d.ts +0 -1
- package/untitled folder/package/dist/redis/redis-constraint.js +0 -4
- package/untitled folder/package/dist/redis/redis.module.d.ts +0 -8
- package/untitled folder/package/dist/redis/redis.module.js +0 -62
- package/untitled folder/package/dist/redis/redis.service.d.ts +0 -12
- package/untitled folder/package/dist/redis/redis.service.js +0 -76
- package/untitled folder/package/dist/services/file.service.d.ts +0 -55
- package/untitled folder/package/dist/services/file.service.js +0 -76
- package/untitled folder/package/dist/services/index.d.ts +0 -2
- package/untitled folder/package/dist/services/index.js +0 -18
- package/untitled folder/package/dist/services/message-template.service.d.ts +0 -15
- package/untitled folder/package/dist/services/message-template.service.js +0 -74
- package/untitled folder/package/dist/services/permission-checker.service.d.ts +0 -38
- package/untitled folder/package/dist/services/permission-checker.service.js +0 -64
- package/untitled folder/package/dist/setup-swagger.d.ts +0 -9
- package/untitled folder/package/dist/setup-swagger.js +0 -32
- package/untitled folder/package/dist/utils/common.utils.d.ts +0 -5
- package/untitled folder/package/dist/utils/common.utils.js +0 -42
- package/untitled folder/package/dist/utils/enum.utils.d.ts +0 -1
- package/untitled folder/package/dist/utils/enum.utils.js +0 -8
- package/untitled folder/package/dist/utils/index.d.ts +0 -5
- package/untitled folder/package/dist/utils/index.js +0 -21
- package/untitled folder/package/dist/utils/object-diff.d.ts +0 -1
- package/untitled folder/package/dist/utils/object-diff.js +0 -30
- package/untitled folder/package/dist/utils/pagination-qb.utils.d.ts +0 -9
- package/untitled folder/package/dist/utils/pagination-qb.utils.js +0 -150
- package/untitled folder/package/dist/utils/pagination.utils.d.ts +0 -21
- package/untitled folder/package/dist/utils/pagination.utils.js +0 -32
- package/untitled folder/package/eslint.config.js +0 -31
- package/untitled folder/package/index.d.ts +0 -1
- package/untitled folder/package/index.js +0 -17
- package/untitled folder/package/jest.config.js +0 -11
- package/untitled folder/package/package.json +0 -86
- package/untitled folder/package/tsconfig.build.json +0 -19
- package/untitled folder/package/tsconfig.json +0 -18
|
@@ -1 +1,82 @@
|
|
|
1
|
-
|
|
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.FileService = void 0;
|
|
25
|
+
const common_1 = require("@nestjs/common");
|
|
26
|
+
const typeorm_1 = require("typeorm");
|
|
27
|
+
const aws_s3_service_1 = require("../aws/aws-s3.service");
|
|
28
|
+
const enums_common_1 = require("../enums.common");
|
|
29
|
+
const entities_1 = require("../database/entities");
|
|
30
|
+
let FileService = class FileService {
|
|
31
|
+
constructor(dataSource, s3Service) {
|
|
32
|
+
this.dataSource = dataSource;
|
|
33
|
+
this.s3Service = s3Service;
|
|
34
|
+
}
|
|
35
|
+
findAll(_a) {
|
|
36
|
+
return __awaiter(this, arguments, void 0, function* ({ target, target_id, group_number, }) {
|
|
37
|
+
const repo = this.dataSource.getRepository(entities_1.File);
|
|
38
|
+
return repo.find({ where: { target, target_id, group_number } });
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
createPending(_a) {
|
|
42
|
+
return __awaiter(this, arguments, void 0, function* ({ target, user_id, files, manager, group_number, }) {
|
|
43
|
+
const repo = manager
|
|
44
|
+
? manager.getRepository(entities_1.File)
|
|
45
|
+
: this.dataSource.getRepository(entities_1.File);
|
|
46
|
+
const createdFiles = yield repo.save(files.map((file, index) => {
|
|
47
|
+
var _a;
|
|
48
|
+
return (Object.assign(Object.assign({ status: enums_common_1.FILE_STATUS.PENDING, target, target_id: 0, user_id }, file), { sort: (_a = file.sort) !== null && _a !== void 0 ? _a : index + 1, group_number }));
|
|
49
|
+
}));
|
|
50
|
+
return createdFiles;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
statusCompleted(_a) {
|
|
54
|
+
return __awaiter(this, arguments, void 0, function* ({ target, target_id, user_id, file_ids, manager, }) {
|
|
55
|
+
const repo = manager
|
|
56
|
+
? manager.getRepository(entities_1.File)
|
|
57
|
+
: this.dataSource.getRepository(entities_1.File);
|
|
58
|
+
yield repo.update({ target, user_id, id: (0, typeorm_1.In)(file_ids) }, { status: enums_common_1.FILE_STATUS.COMPLETED, target_id });
|
|
59
|
+
return;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
softDelete(_a) {
|
|
63
|
+
return __awaiter(this, arguments, void 0, function* ({ target, target_id, user_id, delete_file_ids, manager, }) {
|
|
64
|
+
const repo = manager
|
|
65
|
+
? manager.getRepository(entities_1.File)
|
|
66
|
+
: this.dataSource.getRepository(entities_1.File);
|
|
67
|
+
const files = yield repo.find({
|
|
68
|
+
where: { target, user_id, target_id, id: (0, typeorm_1.In)(delete_file_ids) },
|
|
69
|
+
});
|
|
70
|
+
yield this.s3Service.deleteObjectsByKeys(files.map((file) => this.s3Service.getFileKey(file)));
|
|
71
|
+
yield repo.update({ id: (0, typeorm_1.In)(files.map((file) => file.id)) }, { status: enums_common_1.FILE_STATUS.DELETED, deleted_at: new Date(), is_active: false });
|
|
72
|
+
return;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.FileService = FileService;
|
|
77
|
+
exports.FileService = FileService = __decorate([
|
|
78
|
+
(0, common_1.Injectable)(),
|
|
79
|
+
__param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => aws_s3_service_1.S3Service))),
|
|
80
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource,
|
|
81
|
+
aws_s3_service_1.S3Service])
|
|
82
|
+
], FileService);
|
package/dist/services/index.js
CHANGED
|
@@ -1 +1,18 @@
|
|
|
1
|
-
|
|
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("./permission-checker.service"), exports);
|
|
18
|
+
__exportStar(require("./file.service"), exports);
|
|
@@ -1 +1,65 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PermissionCheckerService = exports.WILDCARD_PERMISSIONS = exports.PERMISSIONS = void 0;
|
|
4
|
+
exports.PERMISSIONS = {
|
|
5
|
+
USER_LIST: 'user:list',
|
|
6
|
+
USER_READ: 'user:read',
|
|
7
|
+
USER_EDIT: 'user:edit',
|
|
8
|
+
USER_DELETE: 'user:delete',
|
|
9
|
+
USER_CREATE: 'user:create',
|
|
10
|
+
USER_LIST_DOWNLOAD: 'user:list:download',
|
|
11
|
+
USER_ROLE_ASSIGN: 'user:role:assign',
|
|
12
|
+
ADMIN: 'admin:manage',
|
|
13
|
+
PROGRAM: 'program:manage',
|
|
14
|
+
PROGRAM_COURSE: 'program:course',
|
|
15
|
+
PROGRAM_REQUEST_DOWNLOAD: 'program:request:download',
|
|
16
|
+
TEAM: 'team:manage',
|
|
17
|
+
TEAM_SUBMISSION: 'team:submission',
|
|
18
|
+
TEAM_USER_DOWNLOAD: 'team:user:list:download',
|
|
19
|
+
BLOG: 'blog',
|
|
20
|
+
};
|
|
21
|
+
exports.WILDCARD_PERMISSIONS = {
|
|
22
|
+
ALL: '*',
|
|
23
|
+
USER_ALL: 'user:*',
|
|
24
|
+
ADMIN_ALL: 'admin:*',
|
|
25
|
+
PROGRAM_ALL: 'program:*',
|
|
26
|
+
TEAM_ALL: 'team:*',
|
|
27
|
+
BLOG_ALL: 'blog:*',
|
|
28
|
+
};
|
|
29
|
+
class PermissionCheckerService {
|
|
30
|
+
hasPermission(user, requiredPermission) {
|
|
31
|
+
const userPermissions = this.getUserPermissions(user);
|
|
32
|
+
return this.checkPermissionMatch(userPermissions, requiredPermission);
|
|
33
|
+
}
|
|
34
|
+
hasAnyPermission(user, requiredPermissions) {
|
|
35
|
+
const userPermissions = this.getUserPermissions(user);
|
|
36
|
+
return requiredPermissions.some((permission) => this.checkPermissionMatch(userPermissions, permission));
|
|
37
|
+
}
|
|
38
|
+
hasAllPermissions(user, requiredPermissions) {
|
|
39
|
+
const userPermissions = this.getUserPermissions(user);
|
|
40
|
+
return requiredPermissions.every((permission) => this.checkPermissionMatch(userPermissions, permission));
|
|
41
|
+
}
|
|
42
|
+
checkPermissionMatch(userPermissions, requiredPermission) {
|
|
43
|
+
if (userPermissions.includes(requiredPermission)) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
for (const userPermission of userPermissions) {
|
|
47
|
+
if (this.matchesWildcard(userPermission, requiredPermission)) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
matchesWildcard(wildcardPermission, requiredPermission) {
|
|
54
|
+
if (wildcardPermission === '*') {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (wildcardPermission.endsWith(':*')) {
|
|
58
|
+
const wildcardPrefix = wildcardPermission.slice(0, -2);
|
|
59
|
+
return (requiredPermission === wildcardPrefix ||
|
|
60
|
+
requiredPermission.startsWith(wildcardPrefix + ':'));
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.PermissionCheckerService = PermissionCheckerService;
|
package/dist/setup-swagger.js
CHANGED
|
@@ -1 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupSwagger = setupSwagger;
|
|
4
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
5
|
+
function setupSwagger(app, config) {
|
|
6
|
+
const swaggerConfig = new swagger_1.DocumentBuilder()
|
|
7
|
+
.setTitle(config.title)
|
|
8
|
+
.setDescription(config.description)
|
|
9
|
+
.setVersion(config.version)
|
|
10
|
+
.addBearerAuth({
|
|
11
|
+
type: 'http',
|
|
12
|
+
bearerFormat: 'Bearer',
|
|
13
|
+
scheme: 'Bearer',
|
|
14
|
+
name: 'Authorization',
|
|
15
|
+
in: 'header',
|
|
16
|
+
}, 'access_token')
|
|
17
|
+
.addCookieAuth('refresh_token', {
|
|
18
|
+
type: 'apiKey',
|
|
19
|
+
in: 'cookie',
|
|
20
|
+
name: 'refresh_token',
|
|
21
|
+
})
|
|
22
|
+
.build();
|
|
23
|
+
const document = swagger_1.SwaggerModule.createDocument(app, swaggerConfig);
|
|
24
|
+
swagger_1.SwaggerModule.setup(config.uri, app, document, {
|
|
25
|
+
swaggerOptions: {
|
|
26
|
+
persistAuthorization: true,
|
|
27
|
+
defaultModelsExpandDepth: -1,
|
|
28
|
+
defaultModelExpandDepth: -1,
|
|
29
|
+
docExpansion: 'none',
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
@@ -1 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorCode = void 0;
|
|
4
|
+
var ErrorCode;
|
|
5
|
+
(function (ErrorCode) {
|
|
6
|
+
ErrorCode["ROLE_HAS_ASSIGNED_USERS"] = "ROLE_HAS_ASSIGNED_USERS";
|
|
7
|
+
ErrorCode["ROLE_COUNT_LIMIT"] = "ROLE_COUNT_LIMIT";
|
|
8
|
+
ErrorCode["CATEGORY_NAME_ALREADY_EXISTS"] = "CATEGORY_NAME_ALREADY_EXISTS";
|
|
9
|
+
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
|
|
@@ -1 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._sleep = exports._randomRange = exports.convertExpirationToSeconds = exports.generateOrderId = void 0;
|
|
4
|
+
exports.isSameArray = isSameArray;
|
|
5
|
+
const date_fns_1 = require("date-fns");
|
|
6
|
+
const generateOrderId = () => {
|
|
7
|
+
const date_part = (0, date_fns_1.format)(new Date(), 'yyMMdd');
|
|
8
|
+
const full_timestamp = Date.now().toString();
|
|
9
|
+
const short_timestamp = full_timestamp.slice(-7);
|
|
10
|
+
return `${date_part}-${short_timestamp}`;
|
|
11
|
+
};
|
|
12
|
+
exports.generateOrderId = generateOrderId;
|
|
13
|
+
const convertExpirationToSeconds = (expiration) => {
|
|
14
|
+
const unit = expiration.slice(-1);
|
|
15
|
+
const value = parseInt(expiration.slice(0, -1), 10);
|
|
16
|
+
switch (unit) {
|
|
17
|
+
case 'd':
|
|
18
|
+
return value * 24 * 60 * 60;
|
|
19
|
+
case 'h':
|
|
20
|
+
return value * 60 * 60;
|
|
21
|
+
case 'm':
|
|
22
|
+
return value * 60;
|
|
23
|
+
case 's':
|
|
24
|
+
return value;
|
|
25
|
+
default:
|
|
26
|
+
throw new Error('Invalid expiration format');
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.convertExpirationToSeconds = convertExpirationToSeconds;
|
|
30
|
+
function isSameArray(a, b) {
|
|
31
|
+
if (a.length !== b.length)
|
|
32
|
+
return false;
|
|
33
|
+
const aSorted = [...a].sort();
|
|
34
|
+
const bSorted = [...b].sort();
|
|
35
|
+
return aSorted.every((val, idx) => val === bSorted[idx]);
|
|
36
|
+
}
|
|
37
|
+
const _randomRange = (min, max) => {
|
|
38
|
+
return Math.floor(min + Math.random() * (max - min + 1));
|
|
39
|
+
};
|
|
40
|
+
exports._randomRange = _randomRange;
|
|
41
|
+
const _sleep = (time) => new Promise((res) => setTimeout(res, time));
|
|
42
|
+
exports._sleep = _sleep;
|
package/dist/utils/enum.utils.js
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.valueToEnum = void 0;
|
|
4
|
+
const valueToEnum = (enumObj, value) => {
|
|
5
|
+
const enumKey = Object.keys(enumObj).find((key) => enumObj[key] === value);
|
|
6
|
+
return enumKey ? enumObj[enumKey] : undefined;
|
|
7
|
+
};
|
|
8
|
+
exports.valueToEnum = valueToEnum;
|
package/dist/utils/index.js
CHANGED
|
@@ -1 +1,21 @@
|
|
|
1
|
-
|
|
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("./common.utils"), exports);
|
|
18
|
+
__exportStar(require("./object-diff"), exports);
|
|
19
|
+
__exportStar(require("./enum.utils"), exports);
|
|
20
|
+
__exportStar(require("./pagination.utils"), exports);
|
|
21
|
+
__exportStar(require("./pagination-qb.utils"), exports);
|
|
@@ -1 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getObjectDiff = getObjectDiff;
|
|
4
|
+
function getObjectDiff(before, after, sensitiveFields = []) {
|
|
5
|
+
const diff = {};
|
|
6
|
+
const keys = new Set([
|
|
7
|
+
...Object.keys(before || {}),
|
|
8
|
+
...Object.keys(after || {}),
|
|
9
|
+
]);
|
|
10
|
+
keys.forEach((key) => {
|
|
11
|
+
if (sensitiveFields.includes(key))
|
|
12
|
+
return;
|
|
13
|
+
const beforeVal = before === null || before === void 0 ? void 0 : before[key];
|
|
14
|
+
const afterVal = after === null || after === void 0 ? void 0 : after[key];
|
|
15
|
+
if ((beforeVal === undefined || beforeVal === null) &&
|
|
16
|
+
(afterVal === undefined || afterVal === null)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (typeof beforeVal === 'object' &&
|
|
20
|
+
beforeVal !== null &&
|
|
21
|
+
typeof afterVal === 'object' &&
|
|
22
|
+
afterVal !== null) {
|
|
23
|
+
const nestedDiff = getObjectDiff(beforeVal, afterVal, sensitiveFields);
|
|
24
|
+
if (Object.keys(nestedDiff).length > 0) {
|
|
25
|
+
diff[key] = nestedDiff;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (beforeVal !== afterVal) {
|
|
29
|
+
diff[key] = { before: beforeVal, after: afterVal };
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return diff;
|
|
33
|
+
}
|
|
@@ -1 +1,154 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyFiltersAndSorting = applyFiltersAndSorting;
|
|
4
|
+
function applyFiltersAndSorting(queryBuilder, options) {
|
|
5
|
+
const { _keyword, _group, _sort, aliasName = 'a', keywordFields = ['name'], groupFields = [], } = options;
|
|
6
|
+
applyKeywordFilter(queryBuilder, _keyword, aliasName, keywordFields);
|
|
7
|
+
applyGroupFilter(queryBuilder, _group, aliasName, groupFields);
|
|
8
|
+
applySorting(queryBuilder, _sort, aliasName);
|
|
9
|
+
return queryBuilder;
|
|
10
|
+
}
|
|
11
|
+
function applyKeywordFilter(queryBuilder, keyword, aliasName, keywordFields) {
|
|
12
|
+
if (keyword) {
|
|
13
|
+
const keywordConditions = keywordFields.map((field) => `${aliasName}.${field} LIKE :keyword`);
|
|
14
|
+
queryBuilder.andWhere(`(${keywordConditions.join(' OR ')})`, {
|
|
15
|
+
keyword: `%${keyword}%`,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function validateAndParseDate(dateStr) {
|
|
20
|
+
if (!/^\d{8}T\d{6}Z$/.test(dateStr)) {
|
|
21
|
+
throw new Error('Invalid date format. Use YYYYMMDDTHHMMSSZ (e.g., 20250122T150000Z)');
|
|
22
|
+
}
|
|
23
|
+
const year = dateStr.substring(0, 4);
|
|
24
|
+
const month = dateStr.substring(4, 6);
|
|
25
|
+
const day = dateStr.substring(6, 8);
|
|
26
|
+
const hour = dateStr.substring(9, 11);
|
|
27
|
+
const minute = dateStr.substring(11, 13);
|
|
28
|
+
const second = dateStr.substring(13, 15);
|
|
29
|
+
const isoString = `${year}-${month}-${day}T${hour}:${minute}:${second}Z`;
|
|
30
|
+
const date = new Date(isoString);
|
|
31
|
+
if (isNaN(date.getTime())) {
|
|
32
|
+
throw new Error('Invalid date');
|
|
33
|
+
}
|
|
34
|
+
return date;
|
|
35
|
+
}
|
|
36
|
+
const filterHandlers = {
|
|
37
|
+
handleEquals(field, value, index) {
|
|
38
|
+
return {
|
|
39
|
+
condition: `${field} = :${field}${index}`,
|
|
40
|
+
parameters: { [`${field}${index}`]: value },
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
handleNumberRange(field, value, index) {
|
|
44
|
+
const [minValue, maxValue] = value
|
|
45
|
+
.split('__')
|
|
46
|
+
.map((v) => (v === '' ? null : Number(v)));
|
|
47
|
+
const conditions = [];
|
|
48
|
+
const parameters = {};
|
|
49
|
+
if (minValue !== null && maxValue !== null) {
|
|
50
|
+
conditions.push(`${field} BETWEEN :${field}Min${index} AND :${field}Max${index}`);
|
|
51
|
+
parameters[`${field}Min${index}`] = minValue;
|
|
52
|
+
parameters[`${field}Max${index}`] = maxValue;
|
|
53
|
+
}
|
|
54
|
+
else if (minValue !== null) {
|
|
55
|
+
conditions.push(`${field} >= :${field}Min${index}`);
|
|
56
|
+
parameters[`${field}Min${index}`] = minValue;
|
|
57
|
+
}
|
|
58
|
+
else if (maxValue !== null) {
|
|
59
|
+
conditions.push(`${field} <= :${field}Max${index}`);
|
|
60
|
+
parameters[`${field}Max${index}`] = maxValue;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
condition: conditions.join(' AND '),
|
|
64
|
+
parameters,
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
handleDateRange(field, value, index) {
|
|
68
|
+
const [minValue, maxValue] = value
|
|
69
|
+
.split('__')
|
|
70
|
+
.map((v) => (v === '' ? null : v));
|
|
71
|
+
const conditions = [];
|
|
72
|
+
const parameters = {};
|
|
73
|
+
if (minValue !== null && maxValue !== null) {
|
|
74
|
+
conditions.push(`${field} BETWEEN :${field}Min${index} AND :${field}Max${index}`);
|
|
75
|
+
parameters[`${field}Min${index}`] = validateAndParseDate(minValue);
|
|
76
|
+
parameters[`${field}Max${index}`] = validateAndParseDate(maxValue);
|
|
77
|
+
}
|
|
78
|
+
else if (minValue !== null) {
|
|
79
|
+
conditions.push(`${field} >= :${field}Min${index}`);
|
|
80
|
+
parameters[`${field}Min${index}`] = validateAndParseDate(minValue);
|
|
81
|
+
}
|
|
82
|
+
else if (maxValue !== null) {
|
|
83
|
+
conditions.push(`${field} <= :${field}Max${index}`);
|
|
84
|
+
parameters[`${field}Max${index}`] = validateAndParseDate(maxValue);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
condition: conditions.join(' AND '),
|
|
88
|
+
parameters,
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
function applyGroupFilter(queryBuilder, group, aliasName, groupFields) {
|
|
93
|
+
if (!group)
|
|
94
|
+
return;
|
|
95
|
+
if (groupFields.length === 0)
|
|
96
|
+
return;
|
|
97
|
+
const groups = group.split('|');
|
|
98
|
+
const hasInvalidField = groups.some((g) => {
|
|
99
|
+
const [field] = g.split('-');
|
|
100
|
+
return !groupFields.includes(field);
|
|
101
|
+
});
|
|
102
|
+
if (hasInvalidField) {
|
|
103
|
+
throw new Error('Invalid field detected in group filter');
|
|
104
|
+
}
|
|
105
|
+
const allConditions = [];
|
|
106
|
+
const allParameters = {};
|
|
107
|
+
groups.forEach((g, index) => {
|
|
108
|
+
const [field, value] = g.split(/-(.+)/);
|
|
109
|
+
const fullField = field.includes('.') ? field : `${aliasName}.${field}`;
|
|
110
|
+
let handler;
|
|
111
|
+
if (value.includes('__')) {
|
|
112
|
+
if (field.includes('_at') || field.includes('_date')) {
|
|
113
|
+
handler = filterHandlers.handleDateRange(fullField, value, index);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
handler = filterHandlers.handleNumberRange(fullField, value, index);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
handler = filterHandlers.handleEquals(fullField, value, index);
|
|
121
|
+
}
|
|
122
|
+
if (handler.condition) {
|
|
123
|
+
allConditions.push(handler.condition);
|
|
124
|
+
Object.assign(allParameters, handler.parameters);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
if (allConditions.length > 0) {
|
|
128
|
+
queryBuilder.andWhere(`(${allConditions.join(' AND ')})`, allParameters);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function applySorting(queryBuilder, sort, aliasName) {
|
|
132
|
+
if (sort) {
|
|
133
|
+
const sorts = sort.split('|');
|
|
134
|
+
sorts.forEach((s, index) => {
|
|
135
|
+
const [field, order] = s.split('-');
|
|
136
|
+
const normalizedOrder = order.toUpperCase();
|
|
137
|
+
if (normalizedOrder !== 'ASC' && normalizedOrder !== 'DESC') {
|
|
138
|
+
throw new Error(`Invalid sort order: ${order}`);
|
|
139
|
+
}
|
|
140
|
+
if (index === 0) {
|
|
141
|
+
queryBuilder.orderBy(`${aliasName}.${field}`, normalizedOrder);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
queryBuilder.addOrderBy(`${aliasName}.${field}`, normalizedOrder);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
const hasExistingOrderBy = Object.keys(queryBuilder.expressionMap.orderBys).length > 0;
|
|
150
|
+
if (!hasExistingOrderBy) {
|
|
151
|
+
queryBuilder.orderBy(`${aliasName}.id`, 'DESC');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -1 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.paginate = paginate;
|
|
13
|
+
function paginate(queryBuilder, options) {
|
|
14
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
const { page, limit } = options;
|
|
16
|
+
const [items, total] = yield queryBuilder
|
|
17
|
+
.skip((page - 1) * limit)
|
|
18
|
+
.take(limit)
|
|
19
|
+
.getManyAndCount();
|
|
20
|
+
const totalPages = Math.ceil(total / limit);
|
|
21
|
+
return {
|
|
22
|
+
items,
|
|
23
|
+
pagination: {
|
|
24
|
+
page,
|
|
25
|
+
limit,
|
|
26
|
+
count: items.length,
|
|
27
|
+
count_total: total,
|
|
28
|
+
count_page: totalPages,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comasoft/nestjs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"private": false,
|
|
6
6
|
"exports": {
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"date-fns-tz": "^3.2.0",
|
|
39
39
|
"express": "4.21.2",
|
|
40
40
|
"ioredis": "^5.6.1",
|
|
41
|
+
"passport-google-oauth20": "^2.0.0",
|
|
41
42
|
"passport-jwt": "4.0.1",
|
|
42
43
|
"passport-kakao": "1.0.1",
|
|
43
44
|
"passport-local": "1.0.0",
|
package/eslint.config.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
const typescript = require("@typescript-eslint/eslint-plugin");
|
|
2
|
-
const typescriptParser = require("@typescript-eslint/parser");
|
|
3
|
-
|
|
4
|
-
module.exports = [
|
|
5
|
-
{
|
|
6
|
-
files: ["lib/**/*.ts"],
|
|
7
|
-
languageOptions: {
|
|
8
|
-
parser: typescriptParser,
|
|
9
|
-
parserOptions: {
|
|
10
|
-
project: "./tsconfig.json",
|
|
11
|
-
sourceType: "module",
|
|
12
|
-
},
|
|
13
|
-
globals: {
|
|
14
|
-
node: true,
|
|
15
|
-
jest: true,
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
plugins: {
|
|
19
|
-
"@typescript-eslint": typescript,
|
|
20
|
-
},
|
|
21
|
-
rules: {
|
|
22
|
-
"@typescript-eslint/interface-name-prefix": "off",
|
|
23
|
-
"@typescript-eslint/explicit-function-return-type": "off",
|
|
24
|
-
"@typescript-eslint/no-explicit-any": "off",
|
|
25
|
-
"@typescript-eslint/no-use-before-define": "off",
|
|
26
|
-
"@typescript-eslint/no-unused-vars": "off",
|
|
27
|
-
"@typescript-eslint/explicit-module-boundary-types": "off",
|
|
28
|
-
"@typescript-eslint/ban-types": "off",
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
];
|
package/jest.config.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
preset: 'ts-jest',
|
|
3
|
-
testEnvironment: 'node',
|
|
4
|
-
moduleFileExtensions: ['ts', 'js', 'json'],
|
|
5
|
-
testMatch: ['**/*.spec.ts'],
|
|
6
|
-
transform: {
|
|
7
|
-
'^.+\\.ts$': 'ts-jest',
|
|
8
|
-
},
|
|
9
|
-
// 필요시 아래 옵션 추가
|
|
10
|
-
// transformIgnorePatterns: ['/node_modules/(?!패키지명)'],
|
|
11
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
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-s3-presigned.dto"), exports);
|
|
18
|
-
__exportStar(require("./response-s3-presigned.dto"), exports);
|