@flusys/nestjs-storage 1.0.0-beta → 1.0.0

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 (118) hide show
  1. package/README.md +174 -13
  2. package/cjs/config/index.js +0 -1
  3. package/cjs/config/storage.constants.js +0 -17
  4. package/cjs/controllers/file-manager.controller.js +44 -1
  5. package/cjs/controllers/folder.controller.js +44 -1
  6. package/cjs/controllers/storage-config.controller.js +44 -1
  7. package/cjs/controllers/upload.controller.js +18 -29
  8. package/cjs/docs/storage-swagger.config.js +24 -136
  9. package/cjs/dtos/file-manager.dto.js +71 -35
  10. package/cjs/dtos/folder.dto.js +15 -9
  11. package/cjs/dtos/storage-config.dto.js +25 -66
  12. package/cjs/dtos/upload.dto.js +24 -17
  13. package/cjs/entities/file-manager-with-company.entity.js +3 -4
  14. package/cjs/entities/file-manager.entity.js +71 -3
  15. package/cjs/entities/folder-with-company.entity.js +3 -4
  16. package/cjs/entities/folder.entity.js +19 -3
  17. package/cjs/entities/index.js +9 -10
  18. package/cjs/entities/storage-config-with-company.entity.js +3 -4
  19. package/cjs/entities/storage-config.entity.js +73 -3
  20. package/cjs/interfaces/index.js +0 -1
  21. package/cjs/middlewares/file-serve.middleware.js +113 -100
  22. package/cjs/modules/storage.module.js +82 -136
  23. package/cjs/providers/azure-provider.optional.js +10 -38
  24. package/cjs/providers/local-provider.js +38 -31
  25. package/cjs/providers/s3-provider.optional.js +19 -40
  26. package/cjs/providers/storage-factory.service.js +54 -99
  27. package/cjs/providers/storage-provider.registry.js +8 -18
  28. package/cjs/services/file-manager.service.js +238 -323
  29. package/cjs/services/folder.service.js +8 -11
  30. package/cjs/services/index.js +1 -0
  31. package/cjs/{config → services}/storage-config.service.js +32 -76
  32. package/cjs/services/storage-datasource.provider.js +16 -26
  33. package/cjs/services/storage-provider-config.service.js +21 -38
  34. package/cjs/services/upload.service.js +72 -88
  35. package/cjs/utils/file-validator.util.js +458 -0
  36. package/cjs/utils/image-compressor.util.js +3 -8
  37. package/config/index.d.ts +0 -1
  38. package/config/storage.constants.d.ts +0 -8
  39. package/controllers/upload.controller.d.ts +3 -6
  40. package/dtos/file-manager.dto.d.ts +13 -7
  41. package/dtos/folder.dto.d.ts +5 -5
  42. package/dtos/storage-config.dto.d.ts +13 -14
  43. package/entities/file-manager-with-company.entity.d.ts +2 -2
  44. package/entities/file-manager.entity.d.ts +11 -2
  45. package/entities/folder-with-company.entity.d.ts +2 -2
  46. package/entities/folder.entity.d.ts +4 -2
  47. package/entities/index.d.ts +3 -4
  48. package/entities/storage-config-with-company.entity.d.ts +2 -2
  49. package/entities/storage-config.entity.d.ts +7 -2
  50. package/fesm/config/index.js +0 -1
  51. package/fesm/config/storage.constants.js +0 -8
  52. package/fesm/controllers/file-manager.controller.js +45 -2
  53. package/fesm/controllers/folder.controller.js +45 -2
  54. package/fesm/controllers/storage-config.controller.js +45 -2
  55. package/fesm/controllers/upload.controller.js +19 -30
  56. package/fesm/docs/storage-swagger.config.js +27 -142
  57. package/fesm/dtos/file-manager.dto.js +72 -36
  58. package/fesm/dtos/folder.dto.js +16 -10
  59. package/fesm/dtos/storage-config.dto.js +29 -76
  60. package/fesm/dtos/upload.dto.js +25 -19
  61. package/fesm/entities/file-manager-with-company.entity.js +3 -4
  62. package/fesm/entities/file-manager.entity.js +72 -4
  63. package/fesm/entities/folder-with-company.entity.js +3 -4
  64. package/fesm/entities/folder.entity.js +20 -4
  65. package/fesm/entities/index.js +5 -13
  66. package/fesm/entities/storage-config-with-company.entity.js +3 -4
  67. package/fesm/entities/storage-config.entity.js +74 -4
  68. package/fesm/interfaces/index.js +0 -1
  69. package/fesm/interfaces/storage-config.interface.js +1 -3
  70. package/fesm/middlewares/file-serve.middleware.js +114 -101
  71. package/fesm/modules/storage.module.js +83 -136
  72. package/fesm/providers/azure-provider.optional.js +11 -42
  73. package/fesm/providers/local-provider.js +38 -31
  74. package/fesm/providers/s3-provider.optional.js +20 -44
  75. package/fesm/providers/storage-factory.service.js +52 -97
  76. package/fesm/providers/storage-provider.registry.js +10 -20
  77. package/fesm/services/file-manager.service.js +237 -322
  78. package/fesm/services/folder.service.js +6 -9
  79. package/fesm/services/index.js +1 -0
  80. package/fesm/{config → services}/storage-config.service.js +32 -76
  81. package/fesm/services/storage-datasource.provider.js +16 -26
  82. package/fesm/services/storage-provider-config.service.js +19 -36
  83. package/fesm/services/upload.service.js +71 -87
  84. package/fesm/utils/file-validator.util.js +451 -0
  85. package/fesm/utils/image-compressor.util.js +3 -8
  86. package/interfaces/file-manager.interface.d.ts +7 -4
  87. package/interfaces/index.d.ts +0 -1
  88. package/interfaces/storage-config.interface.d.ts +3 -22
  89. package/interfaces/storage-module-options.interface.d.ts +0 -5
  90. package/middlewares/file-serve.middleware.d.ts +9 -1
  91. package/modules/storage.module.d.ts +1 -2
  92. package/package.json +6 -6
  93. package/providers/azure-provider.optional.d.ts +8 -6
  94. package/providers/local-provider.d.ts +2 -7
  95. package/providers/s3-provider.optional.d.ts +9 -7
  96. package/providers/storage-factory.service.d.ts +8 -9
  97. package/providers/storage-provider.registry.d.ts +4 -4
  98. package/services/file-manager.service.d.ts +23 -16
  99. package/services/folder.service.d.ts +4 -4
  100. package/services/index.d.ts +1 -0
  101. package/services/storage-config.service.d.ts +24 -0
  102. package/services/storage-datasource.provider.d.ts +3 -4
  103. package/services/storage-provider-config.service.d.ts +5 -6
  104. package/services/upload.service.d.ts +5 -5
  105. package/utils/file-validator.util.d.ts +19 -0
  106. package/cjs/entities/file-manager-base.entity.js +0 -115
  107. package/cjs/entities/folder-base.entity.js +0 -55
  108. package/cjs/entities/storage-config-base.entity.js +0 -64
  109. package/cjs/interfaces/file-upload-response.interface.js +0 -4
  110. package/config/storage-config.service.d.ts +0 -22
  111. package/entities/file-manager-base.entity.d.ts +0 -13
  112. package/entities/folder-base.entity.d.ts +0 -5
  113. package/entities/storage-config-base.entity.d.ts +0 -7
  114. package/fesm/entities/file-manager-base.entity.js +0 -108
  115. package/fesm/entities/folder-base.entity.js +0 -48
  116. package/fesm/entities/storage-config-base.entity.js +0 -57
  117. package/fesm/interfaces/file-upload-response.interface.js +0 -1
  118. package/interfaces/file-upload-response.interface.d.ts +0 -6
@@ -10,8 +10,9 @@ Object.defineProperty(exports, "FolderService", {
10
10
  });
11
11
  const _classes = require("@flusys/nestjs-shared/classes");
12
12
  const _modules = require("@flusys/nestjs-shared/modules");
13
+ const _utils = require("@flusys/nestjs-shared/utils");
13
14
  const _common = require("@nestjs/common");
14
- const _config = require("../config");
15
+ const _storageconfigservice = require("./storage-config.service");
15
16
  const _entities = require("../entities");
16
17
  const _storagedatasourceprovider = require("./storage-datasource.provider");
17
18
  function _define_property(obj, key, value) {
@@ -48,16 +49,13 @@ let FolderService = class FolderService extends _classes.RequestScopedApiService
48
49
  getDataSourceProvider() {
49
50
  return this.dataSourceProvider;
50
51
  }
51
- // Entity Conversion
52
52
  async convertSingleDtoToEntity(dto, user) {
53
53
  const entity = await super.convertSingleDtoToEntity(dto, user);
54
- // Set companyId from user context if company feature enabled
55
54
  if (this.storageConfig.isCompanyFeatureEnabled()) {
56
55
  entity.companyId = user?.companyId ?? null;
57
56
  }
58
57
  return entity;
59
58
  }
60
- // Query Customization
61
59
  async getSelectQuery(query, _user, select) {
62
60
  if (!select?.length) {
63
61
  select = [
@@ -79,11 +77,10 @@ let FolderService = class FolderService extends _classes.RequestScopedApiService
79
77
  }
80
78
  async getExtraManipulateQuery(query, filterDto, user) {
81
79
  const result = await super.getExtraManipulateQuery(query, filterDto, user);
82
- if (this.storageConfig.isCompanyFeatureEnabled() && user?.companyId) {
83
- query.andWhere('folder.companyId = :companyId', {
84
- companyId: user.companyId
85
- });
86
- }
80
+ (0, _utils.applyCompanyFilter)(query, {
81
+ isCompanyFeatureEnabled: this.storageConfig.isCompanyFeatureEnabled(),
82
+ entityAlias: 'folder'
83
+ }, user);
87
84
  return result;
88
85
  }
89
86
  constructor(cacheManager, utilsService, storageConfig, dataSourceProvider){
@@ -96,13 +93,13 @@ FolderService = _ts_decorate([
96
93
  }),
97
94
  _ts_param(0, (0, _common.Inject)('CACHE_INSTANCE')),
98
95
  _ts_param(1, (0, _common.Inject)(_modules.UtilsService)),
99
- _ts_param(2, (0, _common.Inject)(_config.StorageConfigService)),
96
+ _ts_param(2, (0, _common.Inject)(_storageconfigservice.StorageConfigService)),
100
97
  _ts_param(3, (0, _common.Inject)(_storagedatasourceprovider.StorageDataSourceProvider)),
101
98
  _ts_metadata("design:type", Function),
102
99
  _ts_metadata("design:paramtypes", [
103
100
  typeof _classes.HybridCache === "undefined" ? Object : _classes.HybridCache,
104
101
  typeof _modules.UtilsService === "undefined" ? Object : _modules.UtilsService,
105
- typeof _config.StorageConfigService === "undefined" ? Object : _config.StorageConfigService,
102
+ typeof _storageconfigservice.StorageConfigService === "undefined" ? Object : _storageconfigservice.StorageConfigService,
106
103
  typeof _storagedatasourceprovider.StorageDataSourceProvider === "undefined" ? Object : _storagedatasourceprovider.StorageDataSourceProvider
107
104
  ])
108
105
  ], FolderService);
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  _export_star(require("./file-manager.service"), exports);
6
6
  _export_star(require("./folder.service"), exports);
7
+ _export_star(require("./storage-config.service"), exports);
7
8
  _export_star(require("./storage-provider-config.service"), exports);
8
9
  _export_star(require("./storage-datasource.provider"), exports);
9
10
  _export_star(require("./upload.service"), exports);
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "StorageConfigService", {
10
10
  });
11
11
  const _common = require("@nestjs/common");
12
12
  const _interfaces = require("../interfaces");
13
- const _storageconstants = require("./storage.constants");
13
+ const _storageconstants = require("../config/storage.constants");
14
14
  function _define_property(obj, key, value) {
15
15
  if (key in obj) {
16
16
  Object.defineProperty(obj, key, {
@@ -38,114 +38,70 @@ function _ts_param(paramIndex, decorator) {
38
38
  decorator(target, key, paramIndex);
39
39
  };
40
40
  }
41
+ const BYTES_PER_MB = 1024 * 1024;
42
+ const DEFAULT_LOCAL_PATH = './uploads';
43
+ const DEFAULT_PORT = '3000';
41
44
  let StorageConfigService = class StorageConfigService {
42
- /**
43
- * Check if company feature is enabled
44
- */ isCompanyFeatureEnabled() {
45
+ // ─── IModuleConfigService Implementation ────────────────────────────────────
46
+ isCompanyFeatureEnabled() {
45
47
  return this.options.bootstrapAppConfig?.enableCompanyFeature ?? false;
46
48
  }
47
- /**
48
- * Get database mode
49
- */ getDatabaseMode() {
49
+ getDatabaseMode() {
50
50
  return this.options.bootstrapAppConfig?.databaseMode ?? 'single';
51
51
  }
52
- /**
53
- * Get maximum file size in bytes
54
- */ getMaxFileSize() {
52
+ isMultiTenant() {
53
+ return this.getDatabaseMode() === 'multi-tenant';
54
+ }
55
+ // ─── Config Getters ─────────────────────────────────────────────────────────
56
+ getMaxFileSize() {
55
57
  return this.options.config?.maxFileSize ?? _storageconstants.DEFAULT_MAX_FILE_SIZE;
56
58
  }
57
- /**
58
- * Get allowed file types (MIME types or patterns)
59
- */ getAllowedFileTypes() {
59
+ getAllowedFileTypes() {
60
60
  return this.options.config?.allowedFileTypes ?? _storageconstants.DEFAULT_ALLOWED_FILE_TYPES;
61
61
  }
62
- /**
63
- * Check if file type is allowed
64
- */ isFileTypeAllowed(mimeType) {
62
+ getOptions() {
63
+ return this.options;
64
+ }
65
+ getDefaultLocalStoragePath() {
66
+ return this.options.config?.localStoragePath ?? DEFAULT_LOCAL_PATH;
67
+ }
68
+ getAppUrl() {
69
+ return this.options.config?.appUrl ?? process.env.APP_URL ?? `http://localhost:${process.env.PORT ?? DEFAULT_PORT}`;
70
+ }
71
+ // ─── Validation Methods ─────────────────────────────────────────────────────
72
+ isFileTypeAllowed(mimeType) {
65
73
  const allowedTypes = this.getAllowedFileTypes();
66
- // If wildcard, allow all
67
74
  if (allowedTypes.includes('*/*')) {
68
75
  return true;
69
76
  }
70
- // Check exact match or wildcard pattern
71
- return allowedTypes.some((allowedType)=>{
72
- if (allowedType.endsWith('/*')) {
73
- const prefix = allowedType.slice(0, -2);
74
- return mimeType.startsWith(prefix);
75
- }
76
- return allowedType === mimeType;
77
- });
77
+ return allowedTypes.some((type)=>type.endsWith('/*') ? mimeType.startsWith(type.slice(0, -2)) : type === mimeType);
78
78
  }
79
- /**
80
- * Validate file size
81
- */ validateFileSize(fileSize) {
79
+ validateFileSize(fileSize) {
82
80
  const maxSize = this.getMaxFileSize();
83
81
  if (fileSize > maxSize) {
84
- const maxSizeMB = (maxSize / (1024 * 1024)).toFixed(2);
85
- const fileSizeMB = (fileSize / (1024 * 1024)).toFixed(2);
86
82
  return {
87
83
  valid: false,
88
- message: `File size (${fileSizeMB}MB) exceeds the maximum allowed size of ${maxSizeMB}MB`
84
+ message: `File size (${this.toMB(fileSize)}MB) exceeds maximum ${this.toMB(maxSize)}MB`
89
85
  };
90
86
  }
91
87
  return {
92
88
  valid: true
93
89
  };
94
90
  }
95
- /**
96
- * Validate file type
97
- */ validateFileType(mimeType) {
91
+ validateFileType(mimeType) {
98
92
  if (!this.isFileTypeAllowed(mimeType)) {
99
- const allowedTypes = this.getAllowedFileTypes();
100
93
  return {
101
94
  valid: false,
102
- message: `File type "${mimeType}" is not allowed. Allowed types: ${allowedTypes.join(', ')}`
95
+ message: `File type "${mimeType}" not allowed. Allowed: ${this.getAllowedFileTypes().join(', ')}`
103
96
  };
104
97
  }
105
98
  return {
106
99
  valid: true
107
100
  };
108
101
  }
109
- /**
110
- * Get default database config
111
- */ getDefaultDatabaseConfig() {
112
- return this.options.config?.defaultDatabaseConfig;
113
- }
114
- /**
115
- * Get all options
116
- */ getOptions() {
117
- return this.options;
118
- }
119
- /**
120
- * Get default local storage base path
121
- * Used for serving local files without database lookup
122
- * Falls back to './uploads' if not configured
123
- */ getDefaultLocalStoragePath() {
124
- // Check if localStoragePath is configured in module options
125
- const configuredPath = this.options.config?.localStoragePath;
126
- if (configuredPath) {
127
- return configuredPath;
128
- }
129
- // Default to ./uploads in the project root
130
- return './uploads';
131
- }
132
- /**
133
- * Get application base URL for generating file URLs
134
- * - First tries module config
135
- * - Falls back to APP_URL env var
136
- * - Finally constructs from PORT env var
137
- */ getAppUrl() {
138
- // Try from module config first
139
- if (this.options.config?.appUrl) {
140
- return this.options.config.appUrl;
141
- }
142
- // Fallback: read directly from environment
143
- if (process.env.APP_URL) {
144
- return process.env.APP_URL;
145
- }
146
- // Last resort: construct from PORT
147
- const port = process.env.PORT || '3000';
148
- return `http://localhost:${port}`;
102
+ // ─── Private Helpers ────────────────────────────────────────────────────────
103
+ toMB(bytes) {
104
+ return (bytes / BYTES_PER_MB).toFixed(2);
149
105
  }
150
106
  constructor(options){
151
107
  _define_property(this, "options", void 0);
@@ -12,8 +12,7 @@ const _modules = require("@flusys/nestjs-shared/modules");
12
12
  const _common = require("@nestjs/common");
13
13
  const _core = require("@nestjs/core");
14
14
  const _express = require("express");
15
- const _interfaces = require("../interfaces");
16
- const _storageconstants = require("../config/storage.constants");
15
+ const _storageconfigservice = require("./storage-config.service");
17
16
  function _define_property(obj, key, value) {
18
17
  if (key in obj) {
19
18
  Object.defineProperty(obj, key, {
@@ -93,14 +92,11 @@ let StorageDataSourceProvider = class StorageDataSourceProvider extends _modules
93
92
  };
94
93
  }
95
94
  // Feature Flags
96
- /** Get global enable company feature flag */ getEnableCompanyFeature() {
97
- return this.storageOptions.bootstrapAppConfig?.enableCompanyFeature ?? false;
98
- }
99
95
  /**
100
96
  * Get enable company feature for specific tenant
101
97
  * Falls back to global setting if not specified per-tenant
102
98
  */ getEnableCompanyFeatureForTenant(tenant) {
103
- return tenant?.enableCompanyFeature ?? this.getEnableCompanyFeature();
99
+ return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
104
100
  }
105
101
  /**
106
102
  * Get enable company feature for current request context
@@ -113,22 +109,16 @@ let StorageDataSourceProvider = class StorageDataSourceProvider extends _modules
113
109
  * For TypeORM repositories, we always use the base entities (FileManager, etc.)
114
110
  * but for migrations, we need the correct entity based on the feature flag.
115
111
  */ async getStorageEntities(enableCompanyFeature) {
116
- const enable = enableCompanyFeature ?? this.getEnableCompanyFeature();
117
- const { FileManager, Folder, StorageConfig } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")));
118
- // For migrations and schema sync, return the appropriate entity
119
- // Both versions map to the same table, but with different columns
120
- if (enable) {
121
- const { FileManagerWithCompany, FolderWithCompany, StorageConfigWithCompany } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")));
122
- return [
123
- FileManagerWithCompany,
124
- FolderWithCompany,
125
- StorageConfigWithCompany
126
- ];
127
- }
128
- return [
129
- FileManager,
130
- Folder,
131
- StorageConfig
112
+ const enable = enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
113
+ const entities = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")));
114
+ return enable ? [
115
+ entities.FileManagerWithCompany,
116
+ entities.FolderWithCompany,
117
+ entities.StorageConfigWithCompany
118
+ ] : [
119
+ entities.FileManager,
120
+ entities.Folder,
121
+ entities.StorageConfig
132
122
  ];
133
123
  }
134
124
  // Overrides
@@ -189,8 +179,8 @@ let StorageDataSourceProvider = class StorageDataSourceProvider extends _modules
189
179
  StorageDataSourceProvider.connectionLocks.delete(tenant.id);
190
180
  }
191
181
  }
192
- constructor(storageOptions, request){
193
- super(StorageDataSourceProvider.buildParentOptions(storageOptions), request), _define_property(this, "storageOptions", void 0), _define_property(this, "logger", void 0), this.storageOptions = storageOptions, this.logger = new _common.Logger(StorageDataSourceProvider.name);
182
+ constructor(configService, request){
183
+ super(StorageDataSourceProvider.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), _define_property(this, "logger", void 0), this.configService = configService, this.logger = new _common.Logger(StorageDataSourceProvider.name);
194
184
  }
195
185
  };
196
186
  // Override parent's static properties to have Storage-specific cache
@@ -204,12 +194,12 @@ StorageDataSourceProvider = _ts_decorate([
204
194
  (0, _common.Injectable)({
205
195
  scope: _common.Scope.REQUEST
206
196
  }),
207
- _ts_param(0, (0, _common.Inject)(_storageconstants.STORAGE_MODULE_OPTIONS)),
197
+ _ts_param(0, (0, _common.Inject)(_storageconfigservice.StorageConfigService)),
208
198
  _ts_param(1, (0, _common.Optional)()),
209
199
  _ts_param(1, (0, _common.Inject)(_core.REQUEST)),
210
200
  _ts_metadata("design:type", Function),
211
201
  _ts_metadata("design:paramtypes", [
212
- typeof _interfaces.StorageModuleOptions === "undefined" ? Object : _interfaces.StorageModuleOptions,
202
+ typeof _storageconfigservice.StorageConfigService === "undefined" ? Object : _storageconfigservice.StorageConfigService,
213
203
  typeof _express.Request === "undefined" ? Object : _express.Request
214
204
  ])
215
205
  ], StorageDataSourceProvider);
@@ -10,8 +10,9 @@ Object.defineProperty(exports, "StorageProviderConfigService", {
10
10
  });
11
11
  const _classes = require("@flusys/nestjs-shared/classes");
12
12
  const _modules = require("@flusys/nestjs-shared/modules");
13
+ const _utils = require("@flusys/nestjs-shared/utils");
13
14
  const _common = require("@nestjs/common");
14
- const _config = require("../config");
15
+ const _storageconfigservice = require("./storage-config.service");
15
16
  const _entities = require("../entities");
16
17
  const _storagedatasourceprovider = require("./storage-datasource.provider");
17
18
  function _define_property(obj, key, value) {
@@ -48,16 +49,13 @@ let StorageProviderConfigService = class StorageProviderConfigService extends _c
48
49
  getDataSourceProvider() {
49
50
  return this.dataSourceProvider;
50
51
  }
51
- // Entity Conversion
52
52
  async convertSingleDtoToEntity(dto, user) {
53
53
  const entity = await super.convertSingleDtoToEntity(dto, user);
54
- // Set companyId from user context if company feature enabled
55
54
  if (this.storageConfig.isCompanyFeatureEnabled()) {
56
55
  entity.companyId = user?.companyId ?? null;
57
56
  }
58
57
  return entity;
59
58
  }
60
- // Query Customization
61
59
  async getSelectQuery(query, _user, select) {
62
60
  if (!select?.length) {
63
61
  select = [
@@ -65,6 +63,8 @@ let StorageProviderConfigService = class StorageProviderConfigService extends _c
65
63
  'name',
66
64
  'storage',
67
65
  'config',
66
+ 'isActive',
67
+ 'isDefault',
68
68
  'createdAt',
69
69
  'updatedAt'
70
70
  ];
@@ -80,19 +80,14 @@ let StorageProviderConfigService = class StorageProviderConfigService extends _c
80
80
  }
81
81
  async getExtraManipulateQuery(query, filterDto, user) {
82
82
  const result = await super.getExtraManipulateQuery(query, filterDto, user);
83
- if (this.storageConfig.isCompanyFeatureEnabled() && user?.companyId) {
84
- query.andWhere('storageConfig.companyId = :companyId', {
85
- companyId: user.companyId
86
- });
87
- }
83
+ (0, _utils.applyCompanyFilter)(query, {
84
+ isCompanyFeatureEnabled: this.storageConfig.isCompanyFeatureEnabled(),
85
+ entityAlias: 'storageConfig'
86
+ }, user);
88
87
  query.orderBy(`${this.entityName}.createdAt`, 'DESC');
89
88
  return result;
90
89
  }
91
- /**
92
- * Find storage config by ID without throwing (returns null if not found)
93
- * Uses direct repository query - bypasses company filtering
94
- * Use for internal operations like file deletion where config ID is already known
95
- */ async findByIdDirect(id) {
90
+ async findByIdDirect(id) {
96
91
  await this.ensureRepositoryInitialized();
97
92
  return await this.repository.findOne({
98
93
  where: {
@@ -100,21 +95,15 @@ let StorageProviderConfigService = class StorageProviderConfigService extends _c
100
95
  }
101
96
  });
102
97
  }
103
- /**
104
- * Get default storage configuration (scoped to user's company if enabled)
105
- * Falls back to any available config if 'default' not found
106
- */ async getDefaultConfig(user) {
98
+ async getDefaultConfig(user) {
107
99
  await this.ensureRepositoryInitialized();
108
- const baseWhere = {};
109
- // Filter by company only if company feature is enabled and user is provided
110
- if (this.storageConfig.isCompanyFeatureEnabled() && user?.companyId) {
111
- baseWhere.companyId = user.companyId;
112
- }
113
- // First try to find config named 'default'
100
+ const baseWhere = (0, _utils.buildCompanyWhereCondition)({
101
+ isActive: true
102
+ }, this.storageConfig.isCompanyFeatureEnabled(), user);
114
103
  const defaultConfig = await this.repository.findOne({
115
104
  where: {
116
105
  ...baseWhere,
117
- name: 'default'
106
+ isDefault: true
118
107
  },
119
108
  order: {
120
109
  createdAt: 'ASC'
@@ -123,7 +112,6 @@ let StorageProviderConfigService = class StorageProviderConfigService extends _c
123
112
  if (defaultConfig) {
124
113
  return defaultConfig;
125
114
  }
126
- // Fall back to any available config for this company/user
127
115
  return await this.repository.findOne({
128
116
  where: baseWhere,
129
117
  order: {
@@ -131,17 +119,12 @@ let StorageProviderConfigService = class StorageProviderConfigService extends _c
131
119
  }
132
120
  });
133
121
  }
134
- /**
135
- * Get storage configuration by type (scoped to user's company if enabled)
136
- */ async getConfigByType(storage, user) {
122
+ async getConfigByType(storage, user) {
137
123
  await this.ensureRepositoryInitialized();
138
- const where = {
139
- storage
140
- };
141
- // Filter by company only if company feature is enabled and user is provided
142
- if (this.storageConfig.isCompanyFeatureEnabled() && user?.companyId) {
143
- where.companyId = user.companyId;
144
- }
124
+ const where = (0, _utils.buildCompanyWhereCondition)({
125
+ storage,
126
+ isActive: true
127
+ }, this.storageConfig.isCompanyFeatureEnabled(), user);
145
128
  return await this.repository.find({
146
129
  where
147
130
  });
@@ -156,13 +139,13 @@ StorageProviderConfigService = _ts_decorate([
156
139
  }),
157
140
  _ts_param(0, (0, _common.Inject)('CACHE_INSTANCE')),
158
141
  _ts_param(1, (0, _common.Inject)(_modules.UtilsService)),
159
- _ts_param(2, (0, _common.Inject)(_config.StorageConfigService)),
142
+ _ts_param(2, (0, _common.Inject)(_storageconfigservice.StorageConfigService)),
160
143
  _ts_param(3, (0, _common.Inject)(_storagedatasourceprovider.StorageDataSourceProvider)),
161
144
  _ts_metadata("design:type", Function),
162
145
  _ts_metadata("design:paramtypes", [
163
146
  typeof _classes.HybridCache === "undefined" ? Object : _classes.HybridCache,
164
147
  typeof _modules.UtilsService === "undefined" ? Object : _modules.UtilsService,
165
- typeof _config.StorageConfigService === "undefined" ? Object : _config.StorageConfigService,
148
+ typeof _storageconfigservice.StorageConfigService === "undefined" ? Object : _storageconfigservice.StorageConfigService,
166
149
  typeof _storagedatasourceprovider.StorageDataSourceProvider === "undefined" ? Object : _storagedatasourceprovider.StorageDataSourceProvider
167
150
  ])
168
151
  ], StorageProviderConfigService);