@flusys/nestjs-storage 7.1.0 → 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.
- package/config/index.d.ts +3 -3
- package/controllers/file-manager.controller.d.ts +4 -4
- package/controllers/folder.controller.d.ts +2 -2
- package/controllers/index.d.ts +4 -4
- package/controllers/storage-config.controller.d.ts +2 -2
- package/controllers/upload.controller.d.ts +3 -3
- package/docs/index.d.ts +1 -1
- package/docs/storage-swagger.config.d.ts +2 -2
- package/dtos/index.d.ts +4 -4
- package/entities/file-manager-with-company.entity.d.ts +2 -2
- package/entities/file-manager.entity.d.ts +1 -1
- package/entities/folder-with-company.entity.d.ts +1 -1
- package/entities/index.d.ts +15 -15
- package/entities/storage-config-with-company.entity.d.ts +1 -1
- package/enums/index.d.ts +1 -1
- package/fesm/493.js +2768 -0
- package/fesm/537.js +1157 -0
- package/fesm/562.js +786 -0
- package/fesm/{providers/azure-provider.optional.js → chunks/190.js} +33 -30
- package/fesm/chunks/252.js +12 -0
- package/fesm/chunks/327.js +12 -0
- package/fesm/chunks/385.js +12 -0
- package/fesm/{providers/s3-provider.optional.js → chunks/591.js} +37 -34
- package/fesm/chunks/746.js +12 -0
- package/fesm/chunks/798.js +12 -0
- package/fesm/{providers/sftp-provider.optional.js → chunks/918.js} +35 -31
- package/fesm/config/index.js +119 -3
- package/fesm/controllers/index.js +16 -4
- package/fesm/docs/index.js +206 -1
- package/fesm/dtos/index.js +879 -4
- package/fesm/entities/index.js +463 -18
- package/fesm/enums/index.js +36 -1
- package/fesm/index.js +398 -12
- package/fesm/interfaces/index.js +19 -5
- package/fesm/modules/index.js +16 -1
- package/fesm/providers/index.js +364 -3
- package/fesm/runtime.js +252 -0
- package/fesm/services/index.js +16 -6
- package/fesm/utils/index.js +149 -1
- package/index.d.ts +11 -11
- package/interfaces/file-manager.interface.d.ts +1 -1
- package/interfaces/folder.interface.d.ts +1 -1
- package/interfaces/index.d.ts +5 -5
- package/interfaces/storage-config.interface.d.ts +1 -1
- package/interfaces/storage-module-options.interface.d.ts +3 -3
- package/interfaces/storage-provider.interface.d.ts +1 -1
- package/middlewares/file-serve.middleware.d.ts +4 -3
- package/middlewares/index.d.ts +1 -1
- package/modules/index.d.ts +1 -1
- package/modules/storage.module.d.ts +2 -2
- package/package.json +30 -41
- package/providers/azure-provider.optional.d.ts +2 -2
- package/providers/index.d.ts +3 -3
- package/providers/local-provider.d.ts +2 -2
- package/providers/s3-provider.optional.d.ts +2 -2
- package/providers/sftp-provider.optional.d.ts +2 -2
- package/providers/storage-factory.service.d.ts +3 -3
- package/providers/storage-provider.registry.d.ts +2 -2
- package/services/file-manager.service.d.ts +9 -8
- package/services/folder.service.d.ts +6 -6
- package/services/index.d.ts +6 -6
- package/services/storage-config.service.d.ts +3 -3
- package/services/storage-datasource.provider.d.ts +3 -3
- package/services/storage-provider-config.service.d.ts +7 -7
- package/services/upload.service.d.ts +6 -6
- package/utils/image-compressor.util.d.ts +1 -1
- package/utils/index.d.ts +1 -1
- package/cjs/config/event-actions.js +0 -34
- package/cjs/config/index.js +0 -20
- package/cjs/config/message-keys.js +0 -46
- package/cjs/config/storage.constants.js +0 -28
- package/cjs/controllers/file-manager.controller.js +0 -152
- package/cjs/controllers/file-manager.controller.spec.js +0 -135
- package/cjs/controllers/folder.controller.js +0 -102
- package/cjs/controllers/folder.controller.spec.js +0 -86
- package/cjs/controllers/index.js +0 -21
- package/cjs/controllers/storage-config.controller.js +0 -102
- package/cjs/controllers/storage-config.controller.spec.js +0 -85
- package/cjs/controllers/upload.controller.js +0 -234
- package/cjs/controllers/upload.controller.spec.js +0 -132
- package/cjs/docs/index.js +0 -11
- package/cjs/docs/storage-swagger.config.js +0 -188
- package/cjs/docs/storage-swagger.config.spec.js +0 -72
- package/cjs/dtos/file-manager.dto.js +0 -327
- package/cjs/dtos/folder.dto.js +0 -105
- package/cjs/dtos/index.js +0 -21
- package/cjs/dtos/storage-config.dto.js +0 -170
- package/cjs/dtos/upload.dto.js +0 -272
- package/cjs/entities/file-manager-with-company.entity.js +0 -61
- package/cjs/entities/file-manager.entity.js +0 -122
- package/cjs/entities/folder-with-company.entity.js +0 -55
- package/cjs/entities/folder.entity.js +0 -64
- package/cjs/entities/index.js +0 -63
- package/cjs/entities/index.spec.js +0 -18
- package/cjs/entities/storage-config-with-company.entity.js +0 -51
- package/cjs/entities/storage-config.entity.js +0 -96
- package/cjs/enums/file-location.enum.js +0 -17
- package/cjs/enums/index.js +0 -18
- package/cjs/index.js +0 -29
- package/cjs/interfaces/file-manager.interface.js +0 -4
- package/cjs/interfaces/folder.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -22
- package/cjs/interfaces/storage-config.interface.js +0 -4
- package/cjs/interfaces/storage-module-options.interface.js +0 -4
- package/cjs/interfaces/storage-provider.interface.js +0 -4
- package/cjs/middlewares/file-serve.middleware.js +0 -241
- package/cjs/middlewares/file-serve.middleware.spec.js +0 -211
- package/cjs/middlewares/index.js +0 -18
- package/cjs/modules/index.js +0 -18
- package/cjs/modules/storage.module.js +0 -165
- package/cjs/modules/storage.module.spec.js +0 -184
- package/cjs/providers/azure-provider.optional.js +0 -155
- package/cjs/providers/azure-provider.optional.spec.js +0 -228
- package/cjs/providers/index.js +0 -26
- package/cjs/providers/local-provider.js +0 -230
- package/cjs/providers/local-provider.spec.js +0 -239
- package/cjs/providers/s3-provider.optional.js +0 -175
- package/cjs/providers/s3-provider.optional.spec.js +0 -243
- package/cjs/providers/sftp-provider.optional.js +0 -203
- package/cjs/providers/sftp-provider.optional.spec.js +0 -217
- package/cjs/providers/storage-factory.service.js +0 -175
- package/cjs/providers/storage-factory.service.spec.js +0 -253
- package/cjs/providers/storage-provider.registry.js +0 -41
- package/cjs/providers/storage-provider.registry.spec.js +0 -67
- package/cjs/services/file-manager.service.js +0 -387
- package/cjs/services/file-manager.service.spec.js +0 -580
- package/cjs/services/folder.service.js +0 -101
- package/cjs/services/folder.service.spec.js +0 -167
- package/cjs/services/index.js +0 -23
- package/cjs/services/storage-config.service.js +0 -129
- package/cjs/services/storage-config.service.spec.js +0 -257
- package/cjs/services/storage-datasource.provider.js +0 -137
- package/cjs/services/storage-datasource.provider.spec.js +0 -217
- package/cjs/services/storage-provider-config.service.js +0 -171
- package/cjs/services/storage-provider-config.service.spec.js +0 -265
- package/cjs/services/upload.service.js +0 -376
- package/cjs/services/upload.service.spec.js +0 -426
- package/cjs/utils/file-validator.util.js +0 -440
- package/cjs/utils/file-validator.util.spec.js +0 -259
- package/cjs/utils/image-compressor.util.js +0 -162
- package/cjs/utils/image-compressor.util.spec.js +0 -166
- package/cjs/utils/index.js +0 -18
- package/fesm/config/event-actions.js +0 -13
- package/fesm/config/message-keys.js +0 -22
- package/fesm/config/storage.constants.js +0 -7
- package/fesm/controllers/file-manager.controller.js +0 -142
- package/fesm/controllers/file-manager.controller.spec.js +0 -131
- package/fesm/controllers/folder.controller.js +0 -92
- package/fesm/controllers/folder.controller.spec.js +0 -82
- package/fesm/controllers/storage-config.controller.js +0 -92
- package/fesm/controllers/storage-config.controller.spec.js +0 -81
- package/fesm/controllers/upload.controller.js +0 -224
- package/fesm/controllers/upload.controller.spec.js +0 -128
- package/fesm/docs/storage-swagger.config.js +0 -181
- package/fesm/docs/storage-swagger.config.spec.js +0 -68
- package/fesm/dtos/file-manager.dto.js +0 -300
- package/fesm/dtos/folder.dto.js +0 -84
- package/fesm/dtos/storage-config.dto.js +0 -149
- package/fesm/dtos/upload.dto.js +0 -245
- package/fesm/entities/file-manager-with-company.entity.js +0 -51
- package/fesm/entities/file-manager.entity.js +0 -112
- package/fesm/entities/folder-with-company.entity.js +0 -45
- package/fesm/entities/folder.entity.js +0 -54
- package/fesm/entities/index.spec.js +0 -14
- package/fesm/entities/storage-config-with-company.entity.js +0 -41
- package/fesm/entities/storage-config.entity.js +0 -86
- package/fesm/enums/file-location.enum.js +0 -7
- package/fesm/interfaces/file-manager.interface.js +0 -1
- package/fesm/interfaces/folder.interface.js +0 -1
- package/fesm/interfaces/storage-config.interface.js +0 -1
- package/fesm/interfaces/storage-module-options.interface.js +0 -3
- package/fesm/interfaces/storage-provider.interface.js +0 -4
- package/fesm/middlewares/file-serve.middleware.js +0 -190
- package/fesm/middlewares/file-serve.middleware.spec.js +0 -207
- package/fesm/middlewares/index.js +0 -1
- package/fesm/modules/storage.module.js +0 -156
- package/fesm/modules/storage.module.spec.js +0 -180
- package/fesm/providers/azure-provider.optional.spec.js +0 -224
- package/fesm/providers/local-provider.js +0 -182
- package/fesm/providers/local-provider.spec.js +0 -194
- package/fesm/providers/s3-provider.optional.spec.js +0 -239
- package/fesm/providers/sftp-provider.optional.spec.js +0 -213
- package/fesm/providers/storage-factory.service.js +0 -124
- package/fesm/providers/storage-factory.service.spec.js +0 -249
- package/fesm/providers/storage-provider.registry.js +0 -34
- package/fesm/providers/storage-provider.registry.spec.js +0 -63
- package/fesm/services/file-manager.service.js +0 -336
- package/fesm/services/file-manager.service.spec.js +0 -576
- package/fesm/services/folder.service.js +0 -91
- package/fesm/services/folder.service.spec.js +0 -163
- package/fesm/services/storage-config.service.js +0 -119
- package/fesm/services/storage-config.service.spec.js +0 -253
- package/fesm/services/storage-datasource.provider.js +0 -86
- package/fesm/services/storage-datasource.provider.spec.js +0 -172
- package/fesm/services/storage-provider-config.service.js +0 -161
- package/fesm/services/storage-provider-config.service.spec.js +0 -261
- package/fesm/services/upload.service.js +0 -366
- package/fesm/services/upload.service.spec.js +0 -422
- package/fesm/utils/file-validator.util.js +0 -433
- package/fesm/utils/file-validator.util.spec.js +0 -255
- package/fesm/utils/image-compressor.util.js +0 -114
- package/fesm/utils/image-compressor.util.spec.js +0 -162
|
@@ -1,580 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _testing = require("@nestjs/testing");
|
|
6
|
-
const _modules = require("@flusys/nestjs-shared/modules");
|
|
7
|
-
const _repositorymock = require("@test-utils/mocks/repository.mock");
|
|
8
|
-
const _loggedusermock = require("@test-utils/mocks/logged-user.mock");
|
|
9
|
-
const _filemanagerservice = require("./file-manager.service");
|
|
10
|
-
const _storageconfigservice = require("./storage-config.service");
|
|
11
|
-
const _storagedatasourceprovider = require("./storage-datasource.provider");
|
|
12
|
-
const _uploadservice = require("./upload.service");
|
|
13
|
-
const _entities = require("../entities");
|
|
14
|
-
const _filelocationenum = require("../enums/file-location.enum");
|
|
15
|
-
function buildFile(overrides = {}) {
|
|
16
|
-
return {
|
|
17
|
-
id: 'file-uuid-1',
|
|
18
|
-
name: 'photo.jpg',
|
|
19
|
-
contentType: 'image/jpeg',
|
|
20
|
-
size: '1024',
|
|
21
|
-
key: 'uploads/photo.jpg',
|
|
22
|
-
url: null,
|
|
23
|
-
location: _filelocationenum.FileLocationEnum.LOCAL,
|
|
24
|
-
storageConfigId: null,
|
|
25
|
-
expiresAt: null,
|
|
26
|
-
isPrivate: false,
|
|
27
|
-
folder: null,
|
|
28
|
-
createdAt: new Date(),
|
|
29
|
-
updatedAt: new Date(),
|
|
30
|
-
deletedAt: null,
|
|
31
|
-
createdById: null,
|
|
32
|
-
updatedById: null,
|
|
33
|
-
deletedById: null,
|
|
34
|
-
...overrides
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
describe('FileManagerService', ()=>{
|
|
38
|
-
let service;
|
|
39
|
-
let module;
|
|
40
|
-
let mockFileRepo;
|
|
41
|
-
let mockFolderRepo;
|
|
42
|
-
let mockStorageConfigRepo;
|
|
43
|
-
let mockStorageConfig;
|
|
44
|
-
let mockUploadService;
|
|
45
|
-
let mockCacheManager;
|
|
46
|
-
let mockSharedPermissionCacheService;
|
|
47
|
-
const mockUtilsService = {
|
|
48
|
-
clearCache: jest.fn(),
|
|
49
|
-
getCacheKey: jest.fn().mockReturnValue('cache-key'),
|
|
50
|
-
trackCacheKey: jest.fn()
|
|
51
|
-
};
|
|
52
|
-
// Call history is shared across tests in this file; reset it so each cache assertion is exact.
|
|
53
|
-
beforeEach(()=>{
|
|
54
|
-
mockUtilsService.clearCache.mockClear();
|
|
55
|
-
});
|
|
56
|
-
beforeEach(async ()=>{
|
|
57
|
-
mockFileRepo = (0, _repositorymock.createMockRepository)();
|
|
58
|
-
mockFileRepo.findBy = jest.fn();
|
|
59
|
-
mockFolderRepo = (0, _repositorymock.createMockRepository)();
|
|
60
|
-
mockStorageConfigRepo = (0, _repositorymock.createMockRepository)();
|
|
61
|
-
const mockDataSourceProvider = {
|
|
62
|
-
getRepository: jest.fn((entity)=>{
|
|
63
|
-
if (entity === _entities.Folder || entity === _entities.FolderWithCompany) {
|
|
64
|
-
return Promise.resolve(mockFolderRepo);
|
|
65
|
-
}
|
|
66
|
-
if (entity === _entities.StorageConfig || entity === _entities.StorageConfigWithCompany) {
|
|
67
|
-
return Promise.resolve(mockStorageConfigRepo);
|
|
68
|
-
}
|
|
69
|
-
return Promise.resolve(mockFileRepo);
|
|
70
|
-
}),
|
|
71
|
-
getDataSource: jest.fn()
|
|
72
|
-
};
|
|
73
|
-
mockStorageConfig = {
|
|
74
|
-
isCompanyFeatureEnabled: jest.fn().mockReturnValue(false),
|
|
75
|
-
getAppUrl: jest.fn().mockReturnValue('http://localhost:2002')
|
|
76
|
-
};
|
|
77
|
-
mockUploadService = {
|
|
78
|
-
deleteMultipleFile: jest.fn().mockResolvedValue(true),
|
|
79
|
-
makeFileUrl: jest.fn().mockResolvedValue('https://signed.example.com/photo.jpg')
|
|
80
|
-
};
|
|
81
|
-
mockCacheManager = {
|
|
82
|
-
get: jest.fn(),
|
|
83
|
-
set: jest.fn()
|
|
84
|
-
};
|
|
85
|
-
mockSharedPermissionCacheService = {
|
|
86
|
-
hasPermission: jest.fn().mockResolvedValue(false)
|
|
87
|
-
};
|
|
88
|
-
module = await _testing.Test.createTestingModule({
|
|
89
|
-
providers: [
|
|
90
|
-
_filemanagerservice.FileManagerService,
|
|
91
|
-
{
|
|
92
|
-
provide: 'CACHE_INSTANCE',
|
|
93
|
-
useValue: mockCacheManager
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
provide: _modules.UtilsService,
|
|
97
|
-
useValue: mockUtilsService
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
provide: _uploadservice.UploadService,
|
|
101
|
-
useValue: mockUploadService
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
provide: _storageconfigservice.StorageConfigService,
|
|
105
|
-
useValue: mockStorageConfig
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
provide: _storagedatasourceprovider.StorageDataSourceProvider,
|
|
109
|
-
useValue: mockDataSourceProvider
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
provide: _modules.SharedPermissionCacheService,
|
|
113
|
-
useValue: mockSharedPermissionCacheService
|
|
114
|
-
}
|
|
115
|
-
]
|
|
116
|
-
}).compile();
|
|
117
|
-
service = await module.resolve(_filemanagerservice.FileManagerService);
|
|
118
|
-
await service.ensureDataSourceRepository();
|
|
119
|
-
});
|
|
120
|
-
describe('entity selection', ()=>{
|
|
121
|
-
it('uses FileManager when the company feature is disabled', async ()=>{
|
|
122
|
-
mockStorageConfig.isCompanyFeatureEnabled.mockReturnValue(false);
|
|
123
|
-
const built = await module.resolve(_filemanagerservice.FileManagerService);
|
|
124
|
-
expect(built['_entity']).toBe(_entities.FileManager);
|
|
125
|
-
});
|
|
126
|
-
it('uses FileManagerWithCompany when the company feature is enabled', async ()=>{
|
|
127
|
-
mockStorageConfig.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
128
|
-
const built = await module.resolve(_filemanagerservice.FileManagerService);
|
|
129
|
-
expect(built['_entity']).toBe(_entities.FileManagerWithCompany);
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
describe('convertSingleDtoToEntity', ()=>{
|
|
133
|
-
it('creates a new entity with location LOCAL by default when no folder/storageConfig given', async ()=>{
|
|
134
|
-
const entity = await service.convertSingleDtoToEntity({
|
|
135
|
-
name: 'a.jpg',
|
|
136
|
-
key: 'k',
|
|
137
|
-
size: '10',
|
|
138
|
-
contentType: 'image/jpeg',
|
|
139
|
-
isPrivate: false
|
|
140
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
141
|
-
expect(entity.location).toBe(_filelocationenum.FileLocationEnum.LOCAL);
|
|
142
|
-
expect(entity.folder).toBeNull();
|
|
143
|
-
});
|
|
144
|
-
it('preserves an explicitly provided location when no storageConfigId is given', async ()=>{
|
|
145
|
-
const entity = await service.convertSingleDtoToEntity({
|
|
146
|
-
name: 'a.jpg',
|
|
147
|
-
key: 'k',
|
|
148
|
-
size: '10',
|
|
149
|
-
contentType: 'image/jpeg',
|
|
150
|
-
isPrivate: false,
|
|
151
|
-
location: _filelocationenum.FileLocationEnum.AWS
|
|
152
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
153
|
-
expect(entity.location).toBe(_filelocationenum.FileLocationEnum.AWS);
|
|
154
|
-
});
|
|
155
|
-
it('resolves the storage location from the referenced storage config', async ()=>{
|
|
156
|
-
mockStorageConfigRepo.findOne.mockResolvedValue({
|
|
157
|
-
id: 'cfg-1',
|
|
158
|
-
storage: 'aws'
|
|
159
|
-
});
|
|
160
|
-
const entity = await service.convertSingleDtoToEntity({
|
|
161
|
-
name: 'a.jpg',
|
|
162
|
-
key: 'k',
|
|
163
|
-
size: '10',
|
|
164
|
-
contentType: 'image/jpeg',
|
|
165
|
-
isPrivate: false,
|
|
166
|
-
storageConfigId: 'cfg-1'
|
|
167
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
168
|
-
expect(entity.location).toBe('aws');
|
|
169
|
-
});
|
|
170
|
-
it('falls back to dto.location when the storage config lookup throws', async ()=>{
|
|
171
|
-
mockStorageConfigRepo.findOne.mockRejectedValue(new Error('db down'));
|
|
172
|
-
const entity = await service.convertSingleDtoToEntity({
|
|
173
|
-
name: 'a.jpg',
|
|
174
|
-
key: 'k',
|
|
175
|
-
size: '10',
|
|
176
|
-
contentType: 'image/jpeg',
|
|
177
|
-
isPrivate: false,
|
|
178
|
-
storageConfigId: 'cfg-1',
|
|
179
|
-
location: _filelocationenum.FileLocationEnum.AZURE
|
|
180
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
181
|
-
expect(entity.location).toBe(_filelocationenum.FileLocationEnum.AZURE);
|
|
182
|
-
});
|
|
183
|
-
it('attaches the validated folder when folderId is provided', async ()=>{
|
|
184
|
-
const folder = {
|
|
185
|
-
id: 'folder-1',
|
|
186
|
-
name: 'Docs'
|
|
187
|
-
};
|
|
188
|
-
mockFolderRepo.findOne.mockResolvedValue(folder);
|
|
189
|
-
const entity = await service.convertSingleDtoToEntity({
|
|
190
|
-
name: 'a.jpg',
|
|
191
|
-
key: 'k',
|
|
192
|
-
size: '10',
|
|
193
|
-
contentType: 'image/jpeg',
|
|
194
|
-
isPrivate: false,
|
|
195
|
-
folderId: 'folder-1'
|
|
196
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
197
|
-
expect(entity.folder).toEqual(folder);
|
|
198
|
-
});
|
|
199
|
-
it('throws BadRequestException when the referenced folder does not exist or access is denied', async ()=>{
|
|
200
|
-
mockFolderRepo.findOne.mockResolvedValue(null);
|
|
201
|
-
await expect(service.convertSingleDtoToEntity({
|
|
202
|
-
name: 'a.jpg',
|
|
203
|
-
key: 'k',
|
|
204
|
-
size: '10',
|
|
205
|
-
contentType: 'image/jpeg',
|
|
206
|
-
isPrivate: false,
|
|
207
|
-
folderId: 'missing-folder'
|
|
208
|
-
}, (0, _loggedusermock.buildMockUser)())).rejects.toThrow();
|
|
209
|
-
});
|
|
210
|
-
it('scopes folder lookup by companyId when company feature is enabled', async ()=>{
|
|
211
|
-
mockStorageConfig.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
212
|
-
mockFolderRepo.findOne.mockResolvedValue({
|
|
213
|
-
id: 'folder-1'
|
|
214
|
-
});
|
|
215
|
-
await service.convertSingleDtoToEntity({
|
|
216
|
-
name: 'a.jpg',
|
|
217
|
-
key: 'k',
|
|
218
|
-
size: '10',
|
|
219
|
-
contentType: 'image/jpeg',
|
|
220
|
-
isPrivate: false,
|
|
221
|
-
folderId: 'folder-1'
|
|
222
|
-
}, (0, _loggedusermock.buildMockUser)({
|
|
223
|
-
companyId: 'company-9'
|
|
224
|
-
}));
|
|
225
|
-
expect(mockFolderRepo.findOne).toHaveBeenCalledWith({
|
|
226
|
-
where: {
|
|
227
|
-
id: 'folder-1',
|
|
228
|
-
companyId: 'company-9'
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
it('attaches companyId to the entity when company feature is enabled', async ()=>{
|
|
233
|
-
mockStorageConfig.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
234
|
-
const entity = await service.convertSingleDtoToEntity({
|
|
235
|
-
name: 'a.jpg',
|
|
236
|
-
key: 'k',
|
|
237
|
-
size: '10',
|
|
238
|
-
contentType: 'image/jpeg',
|
|
239
|
-
isPrivate: false
|
|
240
|
-
}, (0, _loggedusermock.buildMockUser)({
|
|
241
|
-
companyId: 'company-9'
|
|
242
|
-
}));
|
|
243
|
-
expect(entity.companyId).toBe('company-9');
|
|
244
|
-
});
|
|
245
|
-
it('loads and merges the existing entity when updating (dto has an id)', async ()=>{
|
|
246
|
-
const existing = buildFile({
|
|
247
|
-
id: 'file-1',
|
|
248
|
-
name: 'old.jpg'
|
|
249
|
-
});
|
|
250
|
-
mockFileRepo.findOne.mockResolvedValue(existing);
|
|
251
|
-
const entity = await service.convertSingleDtoToEntity({
|
|
252
|
-
id: 'file-1',
|
|
253
|
-
name: 'new.jpg'
|
|
254
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
255
|
-
expect(entity.name).toBe('new.jpg');
|
|
256
|
-
});
|
|
257
|
-
it('throws NotFoundException when updating a file that does not exist', async ()=>{
|
|
258
|
-
mockFileRepo.findOne.mockResolvedValue(null);
|
|
259
|
-
await expect(service.convertSingleDtoToEntity({
|
|
260
|
-
id: 'missing-id',
|
|
261
|
-
name: 'x'
|
|
262
|
-
}, (0, _loggedusermock.buildMockUser)())).rejects.toThrow();
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
describe('getSelectQuery', ()=>{
|
|
266
|
-
it('selects the default field set and left-joins the folder relation', async ()=>{
|
|
267
|
-
const query = {
|
|
268
|
-
select: jest.fn().mockReturnThis(),
|
|
269
|
-
leftJoinAndSelect: jest.fn().mockReturnThis()
|
|
270
|
-
};
|
|
271
|
-
await service.getSelectQuery(query, (0, _loggedusermock.buildMockUser)());
|
|
272
|
-
expect(query.leftJoinAndSelect).toHaveBeenCalledWith('file_manager.folder', 'folder');
|
|
273
|
-
const selectArg = query.select.mock.calls[0][0];
|
|
274
|
-
expect(selectArg).toEqual(expect.arrayContaining([
|
|
275
|
-
'file_manager.id',
|
|
276
|
-
'file_manager.name',
|
|
277
|
-
'file_manager.key',
|
|
278
|
-
'folder.id',
|
|
279
|
-
'folder.name'
|
|
280
|
-
]));
|
|
281
|
-
});
|
|
282
|
-
it('appends companyId to the field set when company feature is enabled', async ()=>{
|
|
283
|
-
mockStorageConfig.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
284
|
-
const query = {
|
|
285
|
-
select: jest.fn().mockReturnThis(),
|
|
286
|
-
leftJoinAndSelect: jest.fn().mockReturnThis()
|
|
287
|
-
};
|
|
288
|
-
await service.getSelectQuery(query, (0, _loggedusermock.buildMockUser)());
|
|
289
|
-
const selectArg = query.select.mock.calls[0][0];
|
|
290
|
-
expect(selectArg).toContain('file_manager.companyId');
|
|
291
|
-
});
|
|
292
|
-
it('uses a custom select list when explicitly provided', async ()=>{
|
|
293
|
-
const query = {
|
|
294
|
-
select: jest.fn().mockReturnThis(),
|
|
295
|
-
leftJoinAndSelect: jest.fn().mockReturnThis()
|
|
296
|
-
};
|
|
297
|
-
await service.getSelectQuery(query, (0, _loggedusermock.buildMockUser)(), [
|
|
298
|
-
'id',
|
|
299
|
-
'name'
|
|
300
|
-
]);
|
|
301
|
-
const selectArg = query.select.mock.calls[0][0];
|
|
302
|
-
expect(selectArg).toEqual(expect.arrayContaining([
|
|
303
|
-
'file_manager.id',
|
|
304
|
-
'file_manager.name'
|
|
305
|
-
]));
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
describe('getFilterQuery', ()=>{
|
|
309
|
-
it('applies a LIKE-based bracket filter for contentType with wildcard support', async ()=>{
|
|
310
|
-
const query = {
|
|
311
|
-
where: jest.fn().mockReturnThis(),
|
|
312
|
-
andWhere: jest.fn().mockReturnThis()
|
|
313
|
-
};
|
|
314
|
-
await service.getFilterQuery(query, {
|
|
315
|
-
contentType: 'image/*,application/pdf'
|
|
316
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
317
|
-
expect(query.where).toHaveBeenCalled();
|
|
318
|
-
});
|
|
319
|
-
it('applies a plain equality filter for non-contentType fields', async ()=>{
|
|
320
|
-
const query = {
|
|
321
|
-
where: jest.fn().mockReturnThis(),
|
|
322
|
-
andWhere: jest.fn().mockReturnThis()
|
|
323
|
-
};
|
|
324
|
-
await service.getFilterQuery(query, {
|
|
325
|
-
isPrivate: true
|
|
326
|
-
}, (0, _loggedusermock.buildMockUser)());
|
|
327
|
-
expect(query.andWhere).toHaveBeenCalledWith('file_manager.isPrivate = :value', {
|
|
328
|
-
value: true
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
});
|
|
332
|
-
describe('getExtraManipulateQuery', ()=>{
|
|
333
|
-
it('applies the company filter when company feature is enabled', async ()=>{
|
|
334
|
-
mockStorageConfig.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
335
|
-
const query = {
|
|
336
|
-
andWhere: jest.fn().mockReturnThis()
|
|
337
|
-
};
|
|
338
|
-
await service.getExtraManipulateQuery(query, {}, (0, _loggedusermock.buildMockUser)({
|
|
339
|
-
companyId: 'company-3'
|
|
340
|
-
}));
|
|
341
|
-
expect(query.andWhere).toHaveBeenCalledWith('file_manager.companyId = :companyId', {
|
|
342
|
-
companyId: 'company-3'
|
|
343
|
-
});
|
|
344
|
-
});
|
|
345
|
-
it('hides private files from anonymous (unauthenticated) requests', async ()=>{
|
|
346
|
-
const query = {
|
|
347
|
-
andWhere: jest.fn().mockReturnThis()
|
|
348
|
-
};
|
|
349
|
-
await service.getExtraManipulateQuery(query, {}, null);
|
|
350
|
-
expect(query.andWhere).toHaveBeenCalledWith('file_manager.isPrivate = :isPrivate', {
|
|
351
|
-
isPrivate: false
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
it('hides private files from an authenticated user lacking the viewPrivate permission', async ()=>{
|
|
355
|
-
mockSharedPermissionCacheService.hasPermission.mockResolvedValue(false);
|
|
356
|
-
const query = {
|
|
357
|
-
andWhere: jest.fn().mockReturnThis()
|
|
358
|
-
};
|
|
359
|
-
await service.getExtraManipulateQuery(query, {}, (0, _loggedusermock.buildMockUser)());
|
|
360
|
-
expect(query.andWhere).toHaveBeenCalledWith('file_manager.isPrivate = :isPrivate', {
|
|
361
|
-
isPrivate: false
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
it('does not restrict private files for a user holding the viewPrivate permission', async ()=>{
|
|
365
|
-
mockSharedPermissionCacheService.hasPermission.mockResolvedValue(true);
|
|
366
|
-
const query = {
|
|
367
|
-
andWhere: jest.fn().mockReturnThis()
|
|
368
|
-
};
|
|
369
|
-
await service.getExtraManipulateQuery(query, {}, (0, _loggedusermock.buildMockUser)());
|
|
370
|
-
expect(query.andWhere).not.toHaveBeenCalledWith('file_manager.isPrivate = :isPrivate', expect.anything());
|
|
371
|
-
});
|
|
372
|
-
});
|
|
373
|
-
describe('beforeDeleteOperation', ()=>{
|
|
374
|
-
it('does nothing for a soft delete (type=delete)', async ()=>{
|
|
375
|
-
await service.beforeDeleteOperation({
|
|
376
|
-
id: [
|
|
377
|
-
'file-1'
|
|
378
|
-
],
|
|
379
|
-
type: 'delete'
|
|
380
|
-
}, (0, _loggedusermock.buildMockUser)(), {});
|
|
381
|
-
expect(mockUploadService.deleteMultipleFile).not.toHaveBeenCalled();
|
|
382
|
-
});
|
|
383
|
-
it('deletes underlying storage objects when permanently deleting files', async ()=>{
|
|
384
|
-
const file = buildFile({
|
|
385
|
-
id: 'file-1',
|
|
386
|
-
key: 'uploads/photo.jpg',
|
|
387
|
-
storageConfigId: null,
|
|
388
|
-
location: _filelocationenum.FileLocationEnum.LOCAL
|
|
389
|
-
});
|
|
390
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
391
|
-
file
|
|
392
|
-
]);
|
|
393
|
-
await service.beforeDeleteOperation({
|
|
394
|
-
id: [
|
|
395
|
-
'file-1'
|
|
396
|
-
],
|
|
397
|
-
type: 'permanent'
|
|
398
|
-
}, (0, _loggedusermock.buildMockUser)(), {});
|
|
399
|
-
expect(mockUploadService.deleteMultipleFile).toHaveBeenCalledWith([
|
|
400
|
-
'uploads/photo.jpg'
|
|
401
|
-
], undefined, (0, _loggedusermock.buildMockUser)(), _filelocationenum.FileLocationEnum.LOCAL);
|
|
402
|
-
});
|
|
403
|
-
it('groups files by storageConfigId before issuing delete calls', async ()=>{
|
|
404
|
-
const fileA = buildFile({
|
|
405
|
-
id: 'a',
|
|
406
|
-
key: 'a.jpg',
|
|
407
|
-
storageConfigId: 'cfg-1',
|
|
408
|
-
location: _filelocationenum.FileLocationEnum.AWS
|
|
409
|
-
});
|
|
410
|
-
const fileB = buildFile({
|
|
411
|
-
id: 'b',
|
|
412
|
-
key: 'b.jpg',
|
|
413
|
-
storageConfigId: 'cfg-2',
|
|
414
|
-
location: _filelocationenum.FileLocationEnum.AZURE
|
|
415
|
-
});
|
|
416
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
417
|
-
fileA,
|
|
418
|
-
fileB
|
|
419
|
-
]);
|
|
420
|
-
await service.beforeDeleteOperation({
|
|
421
|
-
id: [
|
|
422
|
-
'a',
|
|
423
|
-
'b'
|
|
424
|
-
],
|
|
425
|
-
type: 'permanent'
|
|
426
|
-
}, (0, _loggedusermock.buildMockUser)(), {});
|
|
427
|
-
expect(mockUploadService.deleteMultipleFile).toHaveBeenCalledTimes(2);
|
|
428
|
-
expect(mockUploadService.deleteMultipleFile).toHaveBeenCalledWith([
|
|
429
|
-
'a.jpg'
|
|
430
|
-
], 'cfg-1', (0, _loggedusermock.buildMockUser)(), _filelocationenum.FileLocationEnum.AWS);
|
|
431
|
-
expect(mockUploadService.deleteMultipleFile).toHaveBeenCalledWith([
|
|
432
|
-
'b.jpg'
|
|
433
|
-
], 'cfg-2', (0, _loggedusermock.buildMockUser)(), _filelocationenum.FileLocationEnum.AZURE);
|
|
434
|
-
});
|
|
435
|
-
it('prefixes local keys with the resolved storage config basePath when not already nested', async ()=>{
|
|
436
|
-
const file = buildFile({
|
|
437
|
-
id: 'a',
|
|
438
|
-
key: 'plain-key.jpg',
|
|
439
|
-
storageConfigId: 'cfg-1',
|
|
440
|
-
location: _filelocationenum.FileLocationEnum.LOCAL
|
|
441
|
-
});
|
|
442
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
443
|
-
file
|
|
444
|
-
]);
|
|
445
|
-
mockStorageConfigRepo.findOne.mockResolvedValue({
|
|
446
|
-
id: 'cfg-1',
|
|
447
|
-
config: {
|
|
448
|
-
basePath: './custom-uploads'
|
|
449
|
-
}
|
|
450
|
-
});
|
|
451
|
-
await service.beforeDeleteOperation({
|
|
452
|
-
id: [
|
|
453
|
-
'a'
|
|
454
|
-
],
|
|
455
|
-
type: 'permanent'
|
|
456
|
-
}, (0, _loggedusermock.buildMockUser)(), {});
|
|
457
|
-
expect(mockUploadService.deleteMultipleFile).toHaveBeenCalledWith([
|
|
458
|
-
'custom-uploads/plain-key.jpg'
|
|
459
|
-
], 'cfg-1', (0, _loggedusermock.buildMockUser)(), _filelocationenum.FileLocationEnum.LOCAL);
|
|
460
|
-
});
|
|
461
|
-
});
|
|
462
|
-
describe('getFiles', ()=>{
|
|
463
|
-
it('throws BadRequestException when no valid file ids are provided', async ()=>{
|
|
464
|
-
await expect(service.getFiles([], 'http', 'localhost:2002')).rejects.toThrow();
|
|
465
|
-
});
|
|
466
|
-
it('throws BadRequestException when all provided ids are falsy', async ()=>{
|
|
467
|
-
await expect(service.getFiles([
|
|
468
|
-
{
|
|
469
|
-
id: ''
|
|
470
|
-
},
|
|
471
|
-
{
|
|
472
|
-
id: undefined
|
|
473
|
-
}
|
|
474
|
-
], 'http', 'localhost:2002')).rejects.toThrow();
|
|
475
|
-
});
|
|
476
|
-
it('returns file metadata for the requested ids', async ()=>{
|
|
477
|
-
const file = buildFile({
|
|
478
|
-
id: 'file-1',
|
|
479
|
-
url: 'http://localhost:2002/storage/upload/file/uploads/photo.jpg'
|
|
480
|
-
});
|
|
481
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
482
|
-
file
|
|
483
|
-
]);
|
|
484
|
-
const result = await service.getFiles([
|
|
485
|
-
{
|
|
486
|
-
id: 'file-1'
|
|
487
|
-
}
|
|
488
|
-
], 'http', 'localhost:2002');
|
|
489
|
-
expect(result).toHaveLength(1);
|
|
490
|
-
expect(result[0].id).toBe('file-1');
|
|
491
|
-
expect(result[0].name).toBe('photo.jpg');
|
|
492
|
-
});
|
|
493
|
-
it('refreshes and persists file URLs that changed during the request', async ()=>{
|
|
494
|
-
const file = buildFile({
|
|
495
|
-
id: 'file-1',
|
|
496
|
-
url: null,
|
|
497
|
-
storageConfigId: 'cfg-1'
|
|
498
|
-
});
|
|
499
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
500
|
-
file
|
|
501
|
-
]);
|
|
502
|
-
mockUploadService.makeFileUrl.mockResolvedValue('https://cdn.example.com/photo.jpg');
|
|
503
|
-
await service.getFiles([
|
|
504
|
-
{
|
|
505
|
-
id: 'file-1'
|
|
506
|
-
}
|
|
507
|
-
], 'http', 'localhost:2002');
|
|
508
|
-
expect(mockFileRepo.save).toHaveBeenCalled();
|
|
509
|
-
});
|
|
510
|
-
it('invalidates cached file responses for the files whose URL was refreshed', async ()=>{
|
|
511
|
-
const file = buildFile({
|
|
512
|
-
id: 'file-1',
|
|
513
|
-
url: null,
|
|
514
|
-
storageConfigId: 'cfg-1'
|
|
515
|
-
});
|
|
516
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
517
|
-
file
|
|
518
|
-
]);
|
|
519
|
-
mockUploadService.makeFileUrl.mockResolvedValue('https://cdn.example.com/photo.jpg');
|
|
520
|
-
await service.getFiles([
|
|
521
|
-
{
|
|
522
|
-
id: 'file-1'
|
|
523
|
-
}
|
|
524
|
-
], 'http', 'localhost:2002');
|
|
525
|
-
expect(mockUtilsService.clearCache).toHaveBeenCalledWith('file_manager', expect.anything());
|
|
526
|
-
expect(mockUtilsService.clearCache).toHaveBeenCalledWith('file_manager', expect.anything(), 'file-1');
|
|
527
|
-
});
|
|
528
|
-
it('does not persist when no file URL needed refreshing', async ()=>{
|
|
529
|
-
const file = buildFile({
|
|
530
|
-
id: 'file-1',
|
|
531
|
-
url: 'http://localhost:2002/storage/upload/file/uploads/photo.jpg',
|
|
532
|
-
location: _filelocationenum.FileLocationEnum.LOCAL,
|
|
533
|
-
storageConfigId: null
|
|
534
|
-
});
|
|
535
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
536
|
-
file
|
|
537
|
-
]);
|
|
538
|
-
await service.getFiles([
|
|
539
|
-
{
|
|
540
|
-
id: 'file-1'
|
|
541
|
-
}
|
|
542
|
-
], 'http', 'localhost:2002');
|
|
543
|
-
expect(mockFileRepo.save).not.toHaveBeenCalled();
|
|
544
|
-
});
|
|
545
|
-
it('silently continues if persisting refreshed URLs fails (non-critical)', async ()=>{
|
|
546
|
-
const file = buildFile({
|
|
547
|
-
id: 'file-1',
|
|
548
|
-
url: null,
|
|
549
|
-
storageConfigId: 'cfg-1'
|
|
550
|
-
});
|
|
551
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
552
|
-
file
|
|
553
|
-
]);
|
|
554
|
-
mockFileRepo.save.mockRejectedValue(new Error('db write failed'));
|
|
555
|
-
await expect(service.getFiles([
|
|
556
|
-
{
|
|
557
|
-
id: 'file-1'
|
|
558
|
-
}
|
|
559
|
-
], 'http', 'localhost:2002')).resolves.toBeDefined();
|
|
560
|
-
});
|
|
561
|
-
it('falls back to the direct file-serve URL when makeFileUrl throws (e.g. missing storage config)', async ()=>{
|
|
562
|
-
const file = buildFile({
|
|
563
|
-
id: 'file-1',
|
|
564
|
-
url: null,
|
|
565
|
-
storageConfigId: 'cfg-missing',
|
|
566
|
-
location: _filelocationenum.FileLocationEnum.AWS
|
|
567
|
-
});
|
|
568
|
-
mockFileRepo.findBy.mockResolvedValue([
|
|
569
|
-
file
|
|
570
|
-
]);
|
|
571
|
-
mockUploadService.makeFileUrl.mockRejectedValue(new Error('config not found'));
|
|
572
|
-
const result = await service.getFiles([
|
|
573
|
-
{
|
|
574
|
-
id: 'file-1'
|
|
575
|
-
}
|
|
576
|
-
], 'http', 'localhost:2002');
|
|
577
|
-
expect(result[0].url).toContain('/storage/upload/file/');
|
|
578
|
-
});
|
|
579
|
-
});
|
|
580
|
-
});
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "FolderService", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return FolderService;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _classes = require("@flusys/nestjs-shared/classes");
|
|
12
|
-
const _modules = require("@flusys/nestjs-shared/modules");
|
|
13
|
-
const _utils = require("@flusys/nestjs-shared/utils");
|
|
14
|
-
const _common = require("@nestjs/common");
|
|
15
|
-
const _config = require("../config");
|
|
16
|
-
const _entities = require("../entities");
|
|
17
|
-
const _storageconfigservice = require("./storage-config.service");
|
|
18
|
-
const _storagedatasourceprovider = require("./storage-datasource.provider");
|
|
19
|
-
function _define_property(obj, key, value) {
|
|
20
|
-
if (key in obj) {
|
|
21
|
-
Object.defineProperty(obj, key, {
|
|
22
|
-
value: value,
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true
|
|
26
|
-
});
|
|
27
|
-
} else {
|
|
28
|
-
obj[key] = value;
|
|
29
|
-
}
|
|
30
|
-
return obj;
|
|
31
|
-
}
|
|
32
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
33
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
34
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
35
|
-
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;
|
|
36
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
37
|
-
}
|
|
38
|
-
function _ts_metadata(k, v) {
|
|
39
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
40
|
-
}
|
|
41
|
-
function _ts_param(paramIndex, decorator) {
|
|
42
|
-
return function(target, key) {
|
|
43
|
-
decorator(target, key, paramIndex);
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
let FolderService = class FolderService extends _classes.ApiService {
|
|
47
|
-
// ─── Override Methods ───────────────────────────────────────────────────────
|
|
48
|
-
async convertSingleDtoToEntity(dto, user) {
|
|
49
|
-
const entity = await super.convertSingleDtoToEntity(dto, user);
|
|
50
|
-
if (this.storageConfig.isCompanyFeatureEnabled()) {
|
|
51
|
-
entity.companyId = user?.companyId ?? null;
|
|
52
|
-
}
|
|
53
|
-
return entity;
|
|
54
|
-
}
|
|
55
|
-
async getSelectQuery(query, _user, select) {
|
|
56
|
-
if (!select?.length) {
|
|
57
|
-
select = [
|
|
58
|
-
'id',
|
|
59
|
-
'name',
|
|
60
|
-
'slug',
|
|
61
|
-
'createdAt',
|
|
62
|
-
'deletedAt'
|
|
63
|
-
];
|
|
64
|
-
if (this.storageConfig.isCompanyFeatureEnabled()) {
|
|
65
|
-
select.push('companyId');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
query.select(select.map((f)=>`${this.entityName}.${f}`));
|
|
69
|
-
return {
|
|
70
|
-
query,
|
|
71
|
-
isRaw: false
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
async getExtraManipulateQuery(query, filterDto, user) {
|
|
75
|
-
const result = await super.getExtraManipulateQuery(query, filterDto, user);
|
|
76
|
-
(0, _utils.applyCompanyFilter)(query, {
|
|
77
|
-
isCompanyFeatureEnabled: this.storageConfig.isCompanyFeatureEnabled(),
|
|
78
|
-
entityAlias: 'folder'
|
|
79
|
-
}, user);
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
constructor(cacheManager, utilsService, storageConfig, dataSourceProvider){
|
|
83
|
-
super(_config.STORAGE_EVENT_ENTITIES.FOLDER, cacheManager, utilsService, FolderService.name, true, _config.STORAGE_EVENT_MODULE, dataSourceProvider, storageConfig.isCompanyFeatureEnabled() ? _entities.FolderWithCompany : _entities.Folder), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "storageConfig", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.storageConfig = storageConfig;
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
FolderService = _ts_decorate([
|
|
87
|
-
(0, _common.Injectable)({
|
|
88
|
-
scope: _common.Scope.REQUEST
|
|
89
|
-
}),
|
|
90
|
-
_ts_param(0, (0, _common.Inject)('CACHE_INSTANCE')),
|
|
91
|
-
_ts_param(1, (0, _common.Inject)(_modules.UtilsService)),
|
|
92
|
-
_ts_param(2, (0, _common.Inject)(_storageconfigservice.StorageConfigService)),
|
|
93
|
-
_ts_param(3, (0, _common.Inject)(_storagedatasourceprovider.StorageDataSourceProvider)),
|
|
94
|
-
_ts_metadata("design:type", Function),
|
|
95
|
-
_ts_metadata("design:paramtypes", [
|
|
96
|
-
typeof _classes.HybridCache === "undefined" ? Object : _classes.HybridCache,
|
|
97
|
-
typeof _modules.UtilsService === "undefined" ? Object : _modules.UtilsService,
|
|
98
|
-
typeof _storageconfigservice.StorageConfigService === "undefined" ? Object : _storageconfigservice.StorageConfigService,
|
|
99
|
-
typeof _storagedatasourceprovider.StorageDataSourceProvider === "undefined" ? Object : _storagedatasourceprovider.StorageDataSourceProvider
|
|
100
|
-
])
|
|
101
|
-
], FolderService);
|