@flusys/nestjs-storage 7.0.2 → 8.0.0-beta.1

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 (202) hide show
  1. package/config/index.d.ts +3 -3
  2. package/controllers/file-manager.controller.d.ts +4 -4
  3. package/controllers/folder.controller.d.ts +2 -2
  4. package/controllers/index.d.ts +4 -4
  5. package/controllers/storage-config.controller.d.ts +2 -2
  6. package/controllers/upload.controller.d.ts +3 -3
  7. package/docs/index.d.ts +1 -1
  8. package/docs/storage-swagger.config.d.ts +2 -2
  9. package/dtos/index.d.ts +4 -4
  10. package/entities/file-manager-with-company.entity.d.ts +2 -2
  11. package/entities/file-manager.entity.d.ts +1 -1
  12. package/entities/folder-with-company.entity.d.ts +1 -1
  13. package/entities/index.d.ts +15 -15
  14. package/entities/storage-config-with-company.entity.d.ts +1 -1
  15. package/enums/index.d.ts +1 -1
  16. package/fesm/493.js +2768 -0
  17. package/fesm/537.js +1157 -0
  18. package/fesm/562.js +786 -0
  19. package/fesm/{providers/azure-provider.optional.js → chunks/190.js} +33 -30
  20. package/fesm/chunks/252.js +12 -0
  21. package/fesm/chunks/327.js +12 -0
  22. package/fesm/chunks/385.js +12 -0
  23. package/fesm/{providers/s3-provider.optional.js → chunks/591.js} +37 -34
  24. package/fesm/chunks/746.js +12 -0
  25. package/fesm/chunks/798.js +12 -0
  26. package/fesm/{providers/sftp-provider.optional.js → chunks/918.js} +35 -31
  27. package/fesm/config/index.js +119 -3
  28. package/fesm/controllers/index.js +16 -4
  29. package/fesm/docs/index.js +206 -1
  30. package/fesm/dtos/index.js +879 -4
  31. package/fesm/entities/index.js +463 -18
  32. package/fesm/enums/index.js +36 -1
  33. package/fesm/index.js +398 -12
  34. package/fesm/interfaces/index.js +19 -5
  35. package/fesm/modules/index.js +16 -1
  36. package/fesm/providers/index.js +364 -3
  37. package/fesm/runtime.js +252 -0
  38. package/fesm/services/index.js +16 -6
  39. package/fesm/utils/index.js +149 -1
  40. package/index.d.ts +11 -11
  41. package/interfaces/file-manager.interface.d.ts +1 -1
  42. package/interfaces/folder.interface.d.ts +1 -1
  43. package/interfaces/index.d.ts +5 -5
  44. package/interfaces/storage-config.interface.d.ts +1 -1
  45. package/interfaces/storage-module-options.interface.d.ts +3 -3
  46. package/interfaces/storage-provider.interface.d.ts +1 -1
  47. package/middlewares/file-serve.middleware.d.ts +4 -3
  48. package/middlewares/index.d.ts +1 -1
  49. package/modules/index.d.ts +1 -1
  50. package/modules/storage.module.d.ts +2 -2
  51. package/package.json +30 -41
  52. package/providers/azure-provider.optional.d.ts +2 -2
  53. package/providers/index.d.ts +3 -3
  54. package/providers/local-provider.d.ts +2 -2
  55. package/providers/s3-provider.optional.d.ts +2 -2
  56. package/providers/sftp-provider.optional.d.ts +2 -2
  57. package/providers/storage-factory.service.d.ts +3 -3
  58. package/providers/storage-provider.registry.d.ts +2 -2
  59. package/services/file-manager.service.d.ts +9 -8
  60. package/services/folder.service.d.ts +6 -6
  61. package/services/index.d.ts +6 -6
  62. package/services/storage-config.service.d.ts +3 -3
  63. package/services/storage-datasource.provider.d.ts +3 -3
  64. package/services/storage-provider-config.service.d.ts +7 -7
  65. package/services/upload.service.d.ts +6 -6
  66. package/utils/image-compressor.util.d.ts +1 -1
  67. package/utils/index.d.ts +1 -1
  68. package/cjs/config/event-actions.js +0 -34
  69. package/cjs/config/index.js +0 -20
  70. package/cjs/config/message-keys.js +0 -46
  71. package/cjs/config/storage.constants.js +0 -28
  72. package/cjs/controllers/file-manager.controller.js +0 -152
  73. package/cjs/controllers/file-manager.controller.spec.js +0 -135
  74. package/cjs/controllers/folder.controller.js +0 -102
  75. package/cjs/controllers/folder.controller.spec.js +0 -86
  76. package/cjs/controllers/index.js +0 -21
  77. package/cjs/controllers/storage-config.controller.js +0 -102
  78. package/cjs/controllers/storage-config.controller.spec.js +0 -85
  79. package/cjs/controllers/upload.controller.js +0 -234
  80. package/cjs/controllers/upload.controller.spec.js +0 -132
  81. package/cjs/docs/index.js +0 -11
  82. package/cjs/docs/storage-swagger.config.js +0 -188
  83. package/cjs/docs/storage-swagger.config.spec.js +0 -72
  84. package/cjs/dtos/file-manager.dto.js +0 -327
  85. package/cjs/dtos/folder.dto.js +0 -105
  86. package/cjs/dtos/index.js +0 -21
  87. package/cjs/dtos/storage-config.dto.js +0 -170
  88. package/cjs/dtos/upload.dto.js +0 -272
  89. package/cjs/entities/file-manager-with-company.entity.js +0 -61
  90. package/cjs/entities/file-manager.entity.js +0 -122
  91. package/cjs/entities/folder-with-company.entity.js +0 -55
  92. package/cjs/entities/folder.entity.js +0 -64
  93. package/cjs/entities/index.js +0 -63
  94. package/cjs/entities/index.spec.js +0 -18
  95. package/cjs/entities/storage-config-with-company.entity.js +0 -51
  96. package/cjs/entities/storage-config.entity.js +0 -96
  97. package/cjs/enums/file-location.enum.js +0 -17
  98. package/cjs/enums/index.js +0 -18
  99. package/cjs/index.js +0 -29
  100. package/cjs/interfaces/file-manager.interface.js +0 -4
  101. package/cjs/interfaces/folder.interface.js +0 -4
  102. package/cjs/interfaces/index.js +0 -22
  103. package/cjs/interfaces/storage-config.interface.js +0 -4
  104. package/cjs/interfaces/storage-module-options.interface.js +0 -4
  105. package/cjs/interfaces/storage-provider.interface.js +0 -4
  106. package/cjs/middlewares/file-serve.middleware.js +0 -241
  107. package/cjs/middlewares/file-serve.middleware.spec.js +0 -211
  108. package/cjs/middlewares/index.js +0 -18
  109. package/cjs/modules/index.js +0 -18
  110. package/cjs/modules/storage.module.js +0 -165
  111. package/cjs/modules/storage.module.spec.js +0 -184
  112. package/cjs/providers/azure-provider.optional.js +0 -155
  113. package/cjs/providers/azure-provider.optional.spec.js +0 -228
  114. package/cjs/providers/index.js +0 -26
  115. package/cjs/providers/local-provider.js +0 -230
  116. package/cjs/providers/local-provider.spec.js +0 -239
  117. package/cjs/providers/s3-provider.optional.js +0 -175
  118. package/cjs/providers/s3-provider.optional.spec.js +0 -243
  119. package/cjs/providers/sftp-provider.optional.js +0 -203
  120. package/cjs/providers/sftp-provider.optional.spec.js +0 -217
  121. package/cjs/providers/storage-factory.service.js +0 -175
  122. package/cjs/providers/storage-factory.service.spec.js +0 -253
  123. package/cjs/providers/storage-provider.registry.js +0 -41
  124. package/cjs/providers/storage-provider.registry.spec.js +0 -67
  125. package/cjs/services/file-manager.service.js +0 -387
  126. package/cjs/services/file-manager.service.spec.js +0 -580
  127. package/cjs/services/folder.service.js +0 -101
  128. package/cjs/services/folder.service.spec.js +0 -167
  129. package/cjs/services/index.js +0 -23
  130. package/cjs/services/storage-config.service.js +0 -129
  131. package/cjs/services/storage-config.service.spec.js +0 -257
  132. package/cjs/services/storage-datasource.provider.js +0 -137
  133. package/cjs/services/storage-datasource.provider.spec.js +0 -217
  134. package/cjs/services/storage-provider-config.service.js +0 -171
  135. package/cjs/services/storage-provider-config.service.spec.js +0 -265
  136. package/cjs/services/upload.service.js +0 -376
  137. package/cjs/services/upload.service.spec.js +0 -426
  138. package/cjs/utils/file-validator.util.js +0 -440
  139. package/cjs/utils/file-validator.util.spec.js +0 -259
  140. package/cjs/utils/image-compressor.util.js +0 -162
  141. package/cjs/utils/image-compressor.util.spec.js +0 -166
  142. package/cjs/utils/index.js +0 -18
  143. package/fesm/config/event-actions.js +0 -13
  144. package/fesm/config/message-keys.js +0 -22
  145. package/fesm/config/storage.constants.js +0 -7
  146. package/fesm/controllers/file-manager.controller.js +0 -142
  147. package/fesm/controllers/file-manager.controller.spec.js +0 -131
  148. package/fesm/controllers/folder.controller.js +0 -92
  149. package/fesm/controllers/folder.controller.spec.js +0 -82
  150. package/fesm/controllers/storage-config.controller.js +0 -92
  151. package/fesm/controllers/storage-config.controller.spec.js +0 -81
  152. package/fesm/controllers/upload.controller.js +0 -224
  153. package/fesm/controllers/upload.controller.spec.js +0 -128
  154. package/fesm/docs/storage-swagger.config.js +0 -181
  155. package/fesm/docs/storage-swagger.config.spec.js +0 -68
  156. package/fesm/dtos/file-manager.dto.js +0 -300
  157. package/fesm/dtos/folder.dto.js +0 -84
  158. package/fesm/dtos/storage-config.dto.js +0 -149
  159. package/fesm/dtos/upload.dto.js +0 -245
  160. package/fesm/entities/file-manager-with-company.entity.js +0 -51
  161. package/fesm/entities/file-manager.entity.js +0 -112
  162. package/fesm/entities/folder-with-company.entity.js +0 -45
  163. package/fesm/entities/folder.entity.js +0 -54
  164. package/fesm/entities/index.spec.js +0 -14
  165. package/fesm/entities/storage-config-with-company.entity.js +0 -41
  166. package/fesm/entities/storage-config.entity.js +0 -86
  167. package/fesm/enums/file-location.enum.js +0 -7
  168. package/fesm/interfaces/file-manager.interface.js +0 -1
  169. package/fesm/interfaces/folder.interface.js +0 -1
  170. package/fesm/interfaces/storage-config.interface.js +0 -1
  171. package/fesm/interfaces/storage-module-options.interface.js +0 -3
  172. package/fesm/interfaces/storage-provider.interface.js +0 -4
  173. package/fesm/middlewares/file-serve.middleware.js +0 -190
  174. package/fesm/middlewares/file-serve.middleware.spec.js +0 -207
  175. package/fesm/middlewares/index.js +0 -1
  176. package/fesm/modules/storage.module.js +0 -156
  177. package/fesm/modules/storage.module.spec.js +0 -180
  178. package/fesm/providers/azure-provider.optional.spec.js +0 -224
  179. package/fesm/providers/local-provider.js +0 -182
  180. package/fesm/providers/local-provider.spec.js +0 -194
  181. package/fesm/providers/s3-provider.optional.spec.js +0 -239
  182. package/fesm/providers/sftp-provider.optional.spec.js +0 -213
  183. package/fesm/providers/storage-factory.service.js +0 -124
  184. package/fesm/providers/storage-factory.service.spec.js +0 -249
  185. package/fesm/providers/storage-provider.registry.js +0 -34
  186. package/fesm/providers/storage-provider.registry.spec.js +0 -63
  187. package/fesm/services/file-manager.service.js +0 -336
  188. package/fesm/services/file-manager.service.spec.js +0 -576
  189. package/fesm/services/folder.service.js +0 -91
  190. package/fesm/services/folder.service.spec.js +0 -163
  191. package/fesm/services/storage-config.service.js +0 -119
  192. package/fesm/services/storage-config.service.spec.js +0 -253
  193. package/fesm/services/storage-datasource.provider.js +0 -86
  194. package/fesm/services/storage-datasource.provider.spec.js +0 -172
  195. package/fesm/services/storage-provider-config.service.js +0 -161
  196. package/fesm/services/storage-provider-config.service.spec.js +0 -261
  197. package/fesm/services/upload.service.js +0 -366
  198. package/fesm/services/upload.service.spec.js +0 -422
  199. package/fesm/utils/file-validator.util.js +0 -433
  200. package/fesm/utils/file-validator.util.spec.js +0 -255
  201. package/fesm/utils/image-compressor.util.js +0 -114
  202. package/fesm/utils/image-compressor.util.spec.js +0 -162
@@ -1,92 +0,0 @@
1
- function _define_property(obj, key, value) {
2
- if (key in obj) {
3
- Object.defineProperty(obj, key, {
4
- value: value,
5
- enumerable: true,
6
- configurable: true,
7
- writable: true
8
- });
9
- } else {
10
- obj[key] = value;
11
- }
12
- return obj;
13
- }
14
- function _ts_decorate(decorators, target, key, desc) {
15
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
- 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;
18
- return c > 3 && r && Object.defineProperty(target, key, r), r;
19
- }
20
- function _ts_metadata(k, v) {
21
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
- }
23
- function _ts_param(paramIndex, decorator) {
24
- return function(target, key) {
25
- decorator(target, key, paramIndex);
26
- };
27
- }
28
- import { createApiController, FOLDER_PERMISSIONS } from '@flusys/nestjs-shared/classes';
29
- import { CreateFolderDto, FolderResponseDto, UpdateFolderDto } from '../dtos';
30
- import { Controller, Inject } from '@nestjs/common';
31
- import { ApiTags } from '@nestjs/swagger';
32
- import { FolderService } from '../services/folder.service';
33
- export class FolderController extends createApiController(CreateFolderDto, UpdateFolderDto, FolderResponseDto, {
34
- entityName: 'folder',
35
- security: {
36
- insert: {
37
- level: 'permission',
38
- permissions: [
39
- FOLDER_PERMISSIONS.CREATE
40
- ]
41
- },
42
- insertMany: {
43
- level: 'permission',
44
- permissions: [
45
- FOLDER_PERMISSIONS.CREATE
46
- ]
47
- },
48
- getById: {
49
- level: 'permission',
50
- permissions: [
51
- FOLDER_PERMISSIONS.READ
52
- ]
53
- },
54
- getAll: {
55
- level: 'permission',
56
- permissions: [
57
- FOLDER_PERMISSIONS.READ
58
- ]
59
- },
60
- update: {
61
- level: 'permission',
62
- permissions: [
63
- FOLDER_PERMISSIONS.UPDATE
64
- ]
65
- },
66
- updateMany: {
67
- level: 'permission',
68
- permissions: [
69
- FOLDER_PERMISSIONS.UPDATE
70
- ]
71
- },
72
- delete: {
73
- level: 'permission',
74
- permissions: [
75
- FOLDER_PERMISSIONS.DELETE
76
- ]
77
- }
78
- }
79
- }) {
80
- constructor(folderService){
81
- super(folderService), _define_property(this, "folderService", void 0), this.folderService = folderService;
82
- }
83
- }
84
- FolderController = _ts_decorate([
85
- ApiTags('Folders'),
86
- Controller('storage/folder'),
87
- _ts_param(0, Inject(FolderService)),
88
- _ts_metadata("design:type", Function),
89
- _ts_metadata("design:paramtypes", [
90
- typeof FolderService === "undefined" ? Object : FolderService
91
- ])
92
- ], FolderController);
@@ -1,82 +0,0 @@
1
- import { buildMockUser } from '@test-utils/mocks/logged-user.mock';
2
- import { FolderController } from './folder.controller';
3
- function buildFolder(overrides = {}) {
4
- return {
5
- id: 'folder-1',
6
- name: 'Documents',
7
- parentId: null,
8
- isActive: true,
9
- readOnly: false,
10
- createdAt: new Date(),
11
- updatedAt: new Date(),
12
- ...overrides
13
- };
14
- }
15
- describe('FolderController', ()=>{
16
- let controller;
17
- let mockFolderService;
18
- beforeEach(()=>{
19
- mockFolderService = {
20
- insert: jest.fn(),
21
- findById: jest.fn(),
22
- getAll: jest.fn(),
23
- update: jest.fn(),
24
- delete: jest.fn()
25
- };
26
- controller = new FolderController(mockFolderService);
27
- });
28
- it('wires the injected service onto the generated controller base', ()=>{
29
- expect(controller.folderService).toBe(mockFolderService);
30
- expect(controller.service).toBe(mockFolderService);
31
- });
32
- describe('insert', ()=>{
33
- it('creates a folder and returns the mapped response', async ()=>{
34
- const user = buildMockUser();
35
- mockFolderService.insert.mockResolvedValue(buildFolder());
36
- const result = await controller.insert({
37
- name: 'Documents'
38
- }, user);
39
- expect(mockFolderService.insert).toHaveBeenCalledWith({
40
- name: 'Documents'
41
- }, user);
42
- expect(result.success).toBe(true);
43
- expect(result.data).toEqual(expect.objectContaining({
44
- id: 'folder-1',
45
- name: 'Documents'
46
- }));
47
- });
48
- });
49
- describe('getAll', ()=>{
50
- it('paginates folders and maps the response list', async ()=>{
51
- mockFolderService.getAll.mockResolvedValue({
52
- data: [
53
- buildFolder()
54
- ],
55
- total: 1
56
- });
57
- const result = await controller.getAll({}, buildMockUser(), '');
58
- expect(mockFolderService.getAll).toHaveBeenCalledWith('', {}, buildMockUser());
59
- expect(result.data).toHaveLength(1);
60
- });
61
- });
62
- describe('delete', ()=>{
63
- it('delegates soft-delete to the service', async ()=>{
64
- mockFolderService.delete.mockResolvedValue({
65
- count: 1
66
- });
67
- const result = await controller.delete({
68
- id: [
69
- 'folder-1'
70
- ],
71
- type: 'delete'
72
- }, buildMockUser());
73
- expect(mockFolderService.delete).toHaveBeenCalledWith({
74
- id: [
75
- 'folder-1'
76
- ],
77
- type: 'delete'
78
- }, buildMockUser());
79
- expect(result.success).toBe(true);
80
- });
81
- });
82
- });
@@ -1,92 +0,0 @@
1
- function _define_property(obj, key, value) {
2
- if (key in obj) {
3
- Object.defineProperty(obj, key, {
4
- value: value,
5
- enumerable: true,
6
- configurable: true,
7
- writable: true
8
- });
9
- } else {
10
- obj[key] = value;
11
- }
12
- return obj;
13
- }
14
- function _ts_decorate(decorators, target, key, desc) {
15
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
- 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;
18
- return c > 3 && r && Object.defineProperty(target, key, r), r;
19
- }
20
- function _ts_metadata(k, v) {
21
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
- }
23
- function _ts_param(paramIndex, decorator) {
24
- return function(target, key) {
25
- decorator(target, key, paramIndex);
26
- };
27
- }
28
- import { createApiController, STORAGE_CONFIG_PERMISSIONS } from '@flusys/nestjs-shared/classes';
29
- import { Controller, Inject } from '@nestjs/common';
30
- import { ApiTags } from '@nestjs/swagger';
31
- import { CreateStorageConfigDto, StorageConfigResponseDto, UpdateStorageConfigDto } from '../dtos';
32
- import { StorageProviderConfigService } from '../services/storage-provider-config.service';
33
- export class StorageConfigController extends createApiController(CreateStorageConfigDto, UpdateStorageConfigDto, StorageConfigResponseDto, {
34
- entityName: 'storage.config',
35
- security: {
36
- insert: {
37
- level: 'permission',
38
- permissions: [
39
- STORAGE_CONFIG_PERMISSIONS.CREATE
40
- ]
41
- },
42
- insertMany: {
43
- level: 'permission',
44
- permissions: [
45
- STORAGE_CONFIG_PERMISSIONS.CREATE
46
- ]
47
- },
48
- getById: {
49
- level: 'permission',
50
- permissions: [
51
- STORAGE_CONFIG_PERMISSIONS.READ
52
- ]
53
- },
54
- getAll: {
55
- level: 'permission',
56
- permissions: [
57
- STORAGE_CONFIG_PERMISSIONS.READ
58
- ]
59
- },
60
- update: {
61
- level: 'permission',
62
- permissions: [
63
- STORAGE_CONFIG_PERMISSIONS.UPDATE
64
- ]
65
- },
66
- updateMany: {
67
- level: 'permission',
68
- permissions: [
69
- STORAGE_CONFIG_PERMISSIONS.UPDATE
70
- ]
71
- },
72
- delete: {
73
- level: 'permission',
74
- permissions: [
75
- STORAGE_CONFIG_PERMISSIONS.DELETE
76
- ]
77
- }
78
- }
79
- }) {
80
- constructor(storageConfigService){
81
- super(storageConfigService), _define_property(this, "storageConfigService", void 0), this.storageConfigService = storageConfigService;
82
- }
83
- }
84
- StorageConfigController = _ts_decorate([
85
- ApiTags('Storage Config'),
86
- Controller('storage/storage-config'),
87
- _ts_param(0, Inject(StorageProviderConfigService)),
88
- _ts_metadata("design:type", Function),
89
- _ts_metadata("design:paramtypes", [
90
- typeof StorageProviderConfigService === "undefined" ? Object : StorageProviderConfigService
91
- ])
92
- ], StorageConfigController);
@@ -1,81 +0,0 @@
1
- import { buildMockUser } from '@test-utils/mocks/logged-user.mock';
2
- import { StorageConfigController } from './storage-config.controller';
3
- function buildStorageConfig(overrides = {}) {
4
- return {
5
- id: 'storage-config-1',
6
- provider: 'local',
7
- isActive: true,
8
- isDefault: true,
9
- readOnly: false,
10
- createdAt: new Date(),
11
- updatedAt: new Date(),
12
- ...overrides
13
- };
14
- }
15
- describe('StorageConfigController', ()=>{
16
- let controller;
17
- let mockStorageConfigService;
18
- beforeEach(()=>{
19
- mockStorageConfigService = {
20
- insert: jest.fn(),
21
- findById: jest.fn(),
22
- getAll: jest.fn(),
23
- update: jest.fn(),
24
- delete: jest.fn()
25
- };
26
- controller = new StorageConfigController(mockStorageConfigService);
27
- });
28
- it('wires the injected service onto the generated controller base', ()=>{
29
- expect(controller.storageConfigService).toBe(mockStorageConfigService);
30
- expect(controller.service).toBe(mockStorageConfigService);
31
- });
32
- describe('insert', ()=>{
33
- it('creates a storage config and returns the mapped response', async ()=>{
34
- const user = buildMockUser();
35
- mockStorageConfigService.insert.mockResolvedValue(buildStorageConfig());
36
- const result = await controller.insert({
37
- provider: 'local'
38
- }, user);
39
- expect(mockStorageConfigService.insert).toHaveBeenCalledWith({
40
- provider: 'local'
41
- }, user);
42
- expect(result.success).toBe(true);
43
- expect(result.data).toEqual(expect.objectContaining({
44
- id: 'storage-config-1'
45
- }));
46
- });
47
- });
48
- describe('getAll', ()=>{
49
- it('paginates storage configs and maps the response list', async ()=>{
50
- mockStorageConfigService.getAll.mockResolvedValue({
51
- data: [
52
- buildStorageConfig()
53
- ],
54
- total: 1
55
- });
56
- const result = await controller.getAll({}, buildMockUser(), '');
57
- expect(mockStorageConfigService.getAll).toHaveBeenCalledWith('', {}, buildMockUser());
58
- expect(result.data).toHaveLength(1);
59
- });
60
- });
61
- describe('delete', ()=>{
62
- it('delegates soft-delete to the service', async ()=>{
63
- mockStorageConfigService.delete.mockResolvedValue({
64
- count: 1
65
- });
66
- const result = await controller.delete({
67
- id: [
68
- 'storage-config-1'
69
- ],
70
- type: 'delete'
71
- }, buildMockUser());
72
- expect(mockStorageConfigService.delete).toHaveBeenCalledWith({
73
- id: [
74
- 'storage-config-1'
75
- ],
76
- type: 'delete'
77
- }, buildMockUser());
78
- expect(result.success).toBe(true);
79
- });
80
- });
81
- });
@@ -1,224 +0,0 @@
1
- function _define_property(obj, key, value) {
2
- if (key in obj) {
3
- Object.defineProperty(obj, key, {
4
- value: value,
5
- enumerable: true,
6
- configurable: true,
7
- writable: true
8
- });
9
- } else {
10
- obj[key] = value;
11
- }
12
- return obj;
13
- }
14
- function _ts_decorate(decorators, target, key, desc) {
15
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
- 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;
18
- return c > 3 && r && Object.defineProperty(target, key, r), r;
19
- }
20
- function _ts_metadata(k, v) {
21
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
- }
23
- function _ts_param(paramIndex, decorator) {
24
- return function(target, key) {
25
- decorator(target, key, paramIndex);
26
- };
27
- }
28
- /// <reference types="multer" />
29
- import { UPLOAD_CONFIG_PERMISSIONS } from '@flusys/nestjs-shared';
30
- import { ApiResponseDto, CurrentUser, RequirePermission } from '@flusys/nestjs-shared/decorators';
31
- import { JwtAuthGuard, PermissionGuard } from '@flusys/nestjs-shared/guards';
32
- import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
33
- import { Body, Controller, Inject, Post, Query, UploadedFile, UploadedFiles, UseGuards, UseInterceptors } from '@nestjs/common';
34
- import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';
35
- import { ApiBearerAuth, ApiBody, ApiConsumes, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
36
- import { FILE_MESSAGES, UPLOAD_MESSAGES } from '../config';
37
- import { DeleteMultipleFileDto, DeleteSingleFileDto, FileUploadResponsePayloadDto, UploadOptionsDto } from '../dtos';
38
- import { UploadService } from '../services/upload.service';
39
- export class UploadController {
40
- buildFileResponse(file) {
41
- return {
42
- size: this.uploadService.bytesToKb(file.size),
43
- name: file.name,
44
- key: file.key,
45
- contentType: file.contentType,
46
- location: file.location || 'local',
47
- storageConfigId: file.storageConfigId || ''
48
- };
49
- }
50
- async uploadSingleFile(file, options, user) {
51
- const result = await this.uploadService.uploadSingleFile(file, options, user);
52
- return {
53
- success: true,
54
- message: 'File uploaded successfully',
55
- messageKey: UPLOAD_MESSAGES.SUCCESS,
56
- data: this.buildFileResponse(result)
57
- };
58
- }
59
- async uploadMultipleFiles(files, options, user) {
60
- const uploadResponses = await this.uploadService.uploadMultipleFiles(files, options, user);
61
- return {
62
- success: true,
63
- message: 'Files uploaded successfully',
64
- messageKey: UPLOAD_MESSAGES.MANY_SUCCESS,
65
- data: uploadResponses.map((file)=>this.buildFileResponse(file))
66
- };
67
- }
68
- async deleteSingleFile(dto, user) {
69
- const data = await this.uploadService.deleteSingleFile(dto.key, dto.storageConfigId, user);
70
- return {
71
- success: true,
72
- message: 'File deleted successfully',
73
- messageKey: FILE_MESSAGES.DELETE_SUCCESS,
74
- data
75
- };
76
- }
77
- async deleteMultipleFile(dto, user) {
78
- const data = await this.uploadService.deleteMultipleFile(dto.keys, dto.storageConfigId, user);
79
- return {
80
- success: true,
81
- message: 'Files deleted successfully',
82
- messageKey: FILE_MESSAGES.DELETE_SUCCESS,
83
- data
84
- };
85
- }
86
- constructor(uploadService){
87
- _define_property(this, "uploadService", void 0);
88
- this.uploadService = uploadService;
89
- }
90
- }
91
- _ts_decorate([
92
- Post('single-file'),
93
- ApiResponseDto(FileUploadResponsePayloadDto, false),
94
- ApiOperation({
95
- summary: 'Upload a single file'
96
- }),
97
- ApiConsumes('multipart/form-data'),
98
- ApiQuery({
99
- name: 'folderPath',
100
- type: String,
101
- required: false,
102
- description: 'Optional folder path to store the file'
103
- }),
104
- ApiBody({
105
- description: 'File upload form data',
106
- schema: {
107
- type: 'object',
108
- properties: {
109
- file: {
110
- type: 'string',
111
- format: 'binary',
112
- description: 'File to be uploaded'
113
- }
114
- },
115
- required: [
116
- 'file'
117
- ]
118
- }
119
- }),
120
- UseInterceptors(FileInterceptor('file')),
121
- _ts_param(0, UploadedFile()),
122
- _ts_param(1, Query()),
123
- _ts_param(2, CurrentUser()),
124
- _ts_metadata("design:type", Function),
125
- _ts_metadata("design:paramtypes", [
126
- typeof Express === "undefined" || typeof Express.Multer === "undefined" || typeof Express.Multer.File === "undefined" ? Object : Express.Multer.File,
127
- typeof UploadOptionsDto === "undefined" ? Object : UploadOptionsDto,
128
- typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
129
- ]),
130
- _ts_metadata("design:returntype", Promise)
131
- ], UploadController.prototype, "uploadSingleFile", null);
132
- _ts_decorate([
133
- Post('multiple-file'),
134
- ApiOperation({
135
- summary: 'Upload multiple files (up to 50)'
136
- }),
137
- ApiConsumes('multipart/form-data'),
138
- ApiQuery({
139
- name: 'folderPath',
140
- type: String,
141
- required: false,
142
- description: 'Optional folder path to store uploaded files'
143
- }),
144
- ApiBody({
145
- description: 'Form data for multiple file uploads',
146
- schema: {
147
- type: 'object',
148
- properties: {
149
- files: {
150
- type: 'array',
151
- items: {
152
- type: 'string',
153
- format: 'binary'
154
- },
155
- description: 'List of files to be uploaded'
156
- }
157
- },
158
- required: [
159
- 'files'
160
- ]
161
- }
162
- }),
163
- ApiResponseDto(FileUploadResponsePayloadDto, false),
164
- UseInterceptors(FilesInterceptor('files', 50)),
165
- _ts_param(0, UploadedFiles()),
166
- _ts_param(1, Query()),
167
- _ts_param(2, CurrentUser()),
168
- _ts_metadata("design:type", Function),
169
- _ts_metadata("design:paramtypes", [
170
- Array,
171
- typeof UploadOptionsDto === "undefined" ? Object : UploadOptionsDto,
172
- typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
173
- ]),
174
- _ts_metadata("design:returntype", Promise)
175
- ], UploadController.prototype, "uploadMultipleFiles", null);
176
- _ts_decorate([
177
- Post('delete-single-file'),
178
- UseGuards(PermissionGuard),
179
- RequirePermission(UPLOAD_CONFIG_PERMISSIONS.DELETE),
180
- ApiOperation({
181
- summary: 'Delete a single file'
182
- }),
183
- ApiBody({
184
- type: DeleteSingleFileDto
185
- }),
186
- _ts_param(0, Body()),
187
- _ts_param(1, CurrentUser()),
188
- _ts_metadata("design:type", Function),
189
- _ts_metadata("design:paramtypes", [
190
- typeof DeleteSingleFileDto === "undefined" ? Object : DeleteSingleFileDto,
191
- typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
192
- ]),
193
- _ts_metadata("design:returntype", Promise)
194
- ], UploadController.prototype, "deleteSingleFile", null);
195
- _ts_decorate([
196
- Post('delete-multiple-file'),
197
- UseGuards(PermissionGuard),
198
- RequirePermission(UPLOAD_CONFIG_PERMISSIONS.DELETE),
199
- ApiOperation({
200
- summary: 'Delete multiple files'
201
- }),
202
- ApiBody({
203
- type: DeleteMultipleFileDto
204
- }),
205
- _ts_param(0, Body()),
206
- _ts_param(1, CurrentUser()),
207
- _ts_metadata("design:type", Function),
208
- _ts_metadata("design:paramtypes", [
209
- typeof DeleteMultipleFileDto === "undefined" ? Object : DeleteMultipleFileDto,
210
- typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
211
- ]),
212
- _ts_metadata("design:returntype", Promise)
213
- ], UploadController.prototype, "deleteMultipleFile", null);
214
- UploadController = _ts_decorate([
215
- ApiTags('Upload'),
216
- ApiBearerAuth(),
217
- Controller('storage/upload'),
218
- UseGuards(JwtAuthGuard),
219
- _ts_param(0, Inject(UploadService)),
220
- _ts_metadata("design:type", Function),
221
- _ts_metadata("design:paramtypes", [
222
- typeof UploadService === "undefined" ? Object : UploadService
223
- ])
224
- ], UploadController);