@volontariapp/domain-storage 0.5.0 → 0.6.0-snap-4a3c339

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 (76) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/exceptions/index.d.ts +1 -0
  3. package/dist/exceptions/index.d.ts.map +1 -1
  4. package/dist/exceptions/index.js +1 -0
  5. package/dist/exceptions/index.js.map +1 -1
  6. package/dist/exceptions/invalid-entity-type.exception.d.ts +5 -0
  7. package/dist/exceptions/invalid-entity-type.exception.d.ts.map +1 -0
  8. package/dist/exceptions/invalid-entity-type.exception.js +7 -0
  9. package/dist/exceptions/invalid-entity-type.exception.js.map +1 -0
  10. package/dist/helpers/object-key.helpers.d.ts.map +1 -1
  11. package/dist/helpers/object-key.helpers.js +2 -7
  12. package/dist/helpers/object-key.helpers.js.map +1 -1
  13. package/dist/models/file.model.d.ts +30 -0
  14. package/dist/models/file.model.d.ts.map +1 -0
  15. package/dist/models/file.model.js +146 -0
  16. package/dist/models/file.model.js.map +1 -0
  17. package/dist/models/index.d.ts +4 -0
  18. package/dist/models/index.d.ts.map +1 -0
  19. package/dist/models/index.js +4 -0
  20. package/dist/models/index.js.map +1 -0
  21. package/dist/models/released-entity.model.d.ts +7 -0
  22. package/dist/models/released-entity.model.d.ts.map +1 -0
  23. package/dist/models/released-entity.model.js +33 -0
  24. package/dist/models/released-entity.model.js.map +1 -0
  25. package/dist/models/transformers/bigint-number.transformer.d.ts +3 -0
  26. package/dist/models/transformers/bigint-number.transformer.d.ts.map +1 -0
  27. package/dist/models/transformers/bigint-number.transformer.js +5 -0
  28. package/dist/models/transformers/bigint-number.transformer.js.map +1 -0
  29. package/dist/policies/get-validation-policy.d.ts +4 -0
  30. package/dist/policies/get-validation-policy.d.ts.map +1 -0
  31. package/dist/policies/get-validation-policy.js +9 -0
  32. package/dist/policies/get-validation-policy.js.map +1 -0
  33. package/dist/policies/index.d.ts +1 -0
  34. package/dist/policies/index.d.ts.map +1 -1
  35. package/dist/policies/index.js +1 -0
  36. package/dist/policies/index.js.map +1 -1
  37. package/dist/policies/resolve-validation-mode.js +2 -2
  38. package/dist/policies/resolve-validation-mode.js.map +1 -1
  39. package/dist/test/bigint-number.transformer.unit.spec.d.ts +2 -0
  40. package/dist/test/bigint-number.transformer.unit.spec.d.ts.map +1 -0
  41. package/dist/test/bigint-number.transformer.unit.spec.js +18 -0
  42. package/dist/test/bigint-number.transformer.unit.spec.js.map +1 -0
  43. package/dist/test/data-source.d.ts +6 -0
  44. package/dist/test/data-source.d.ts.map +1 -0
  45. package/dist/test/data-source.js +36 -0
  46. package/dist/test/data-source.js.map +1 -0
  47. package/dist/test/domain-storage.unit.spec.js +10 -0
  48. package/dist/test/domain-storage.unit.spec.js.map +1 -1
  49. package/dist/test/factories/file.factory.d.ts +4 -0
  50. package/dist/test/factories/file.factory.d.ts.map +1 -0
  51. package/dist/test/factories/file.factory.js +20 -0
  52. package/dist/test/factories/file.factory.js.map +1 -0
  53. package/dist/test/integration/file.model.int.spec.d.ts +2 -0
  54. package/dist/test/integration/file.model.int.spec.d.ts.map +1 -0
  55. package/dist/test/integration/file.model.int.spec.js +176 -0
  56. package/dist/test/integration/file.model.int.spec.js.map +1 -0
  57. package/dist/test/migrations/domain/1791300000000-InitialStorageSchema.d.ts +7 -0
  58. package/dist/test/migrations/domain/1791300000000-InitialStorageSchema.d.ts.map +1 -0
  59. package/dist/test/migrations/domain/1791300000000-InitialStorageSchema.js +55 -0
  60. package/dist/test/migrations/domain/1791300000000-InitialStorageSchema.js.map +1 -0
  61. package/dist/test/object-key.helpers.unit.spec.js +20 -13
  62. package/dist/test/object-key.helpers.unit.spec.js.map +1 -1
  63. package/dist/test/root-entrypoint.unit.spec.d.ts +2 -0
  64. package/dist/test/root-entrypoint.unit.spec.d.ts.map +1 -0
  65. package/dist/test/root-entrypoint.unit.spec.js +37 -0
  66. package/dist/test/root-entrypoint.unit.spec.js.map +1 -0
  67. package/dist/test/setup.d.ts +2 -0
  68. package/dist/test/setup.d.ts.map +1 -0
  69. package/dist/test/setup.js +2 -0
  70. package/dist/test/setup.js.map +1 -0
  71. package/dist/test/validation-policy.unit.spec.js +18 -1
  72. package/dist/test/validation-policy.unit.spec.js.map +1 -1
  73. package/dist/value-objects/file-id.vo.d.ts.map +1 -1
  74. package/dist/value-objects/file-id.vo.js +2 -2
  75. package/dist/value-objects/file-id.vo.js.map +1 -1
  76. package/package.json +28 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - feat(domain-storage): add FileModel and ReleasedEntityModel (TypeORM)
8
+
9
+ Add the `FileModel` (table `files`) and `ReleasedEntityModel` (table `released_entities`) mapped on the `ms_storage` schema, with explicit snake_case column names, the partial indexes used by the purge jobs, and a `bigint` to number transformer for the file sizes.
10
+ Add the integration test setup (`test:integration`, `migration:run`, a test migration and a data source) so that `ms-storage`, `worker-storage` and `post-processor-storage` share a single persistence model.
11
+ The models are exposed on the `@volontariapp/domain-storage/models` subpath only: the root entry point no longer loads `typeorm`, so consumers that do not persist files (for example `api-gateway`, for `buildPublicFileUrl`) do not need it. `typeorm` and `reflect-metadata` are optional peer dependencies, required only by consumers of `./models`.
12
+ Add `getValidationPolicy` and `InvalidEntityTypeException` (`BadRequestError`, code `INVALID_ENTITY_TYPE`): `resolveValidationMode` and the object key helpers now reject an unknown entity type with this typed error instead of a `TypeError`.
13
+ `FileId.create` now normalizes the UUID to lowercase, so the object key helpers produce a single key per file and `equals` ignores the input case.
14
+
3
15
  ## 0.5.0
4
16
 
5
17
  ### Minor Changes
@@ -1,4 +1,5 @@
1
1
  export * from './file-not-found.exception.js';
2
2
  export * from './file-size-not-allowed.exception.js';
3
+ export * from './invalid-entity-type.exception.js';
3
4
  export * from './invalid-file-extension.exception.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './file-not-found.exception.js';
2
2
  export * from './file-size-not-allowed.exception.js';
3
+ export * from './invalid-entity-type.exception.js';
3
4
  export * from './invalid-file-extension.exception.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { BadRequestError } from '@volontariapp/errors';
2
+ export declare class InvalidEntityTypeException extends BadRequestError {
3
+ constructor(entityType: string);
4
+ }
5
+ //# sourceMappingURL=invalid-entity-type.exception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalid-entity-type.exception.d.ts","sourceRoot":"","sources":["../../src/exceptions/invalid-entity-type.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,qBAAa,0BAA2B,SAAQ,eAAe;gBACjD,UAAU,EAAE,MAAM;CAG/B"}
@@ -0,0 +1,7 @@
1
+ import { BadRequestError } from '@volontariapp/errors';
2
+ export class InvalidEntityTypeException extends BadRequestError {
3
+ constructor(entityType) {
4
+ super(`Unknown entity type: '${entityType}'`, 'INVALID_ENTITY_TYPE', { entityType });
5
+ }
6
+ }
7
+ //# sourceMappingURL=invalid-entity-type.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalid-entity-type.exception.js","sourceRoot":"","sources":["../../src/exceptions/invalid-entity-type.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,OAAO,0BAA2B,SAAQ,eAAe;IAC7D,YAAY,UAAkB;QAC5B,KAAK,CAAC,yBAAyB,UAAU,GAAG,EAAE,qBAAqB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACvF,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"object-key.helpers.d.ts","sourceRoot":"","sources":["../../src/helpers/object-key.helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI/D,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAiBlD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAMD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAInF;AAMD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAQR"}
1
+ {"version":3,"file":"object-key.helpers.d.ts","sourceRoot":"","sources":["../../src/helpers/object-key.helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI/D,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAYlD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAMD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAInF;AAMD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAQR"}
@@ -1,24 +1,19 @@
1
1
  import { BadRequestError } from '@volontariapp/errors';
2
- import { VALIDATION_POLICY_BY_ENTITY } from '../policies/validation-policy.constants.js';
2
+ import { getValidationPolicy } from '../policies/get-validation-policy.js';
3
3
  import { FileId } from '../value-objects/file-id.vo.js';
4
4
  export const QUARANTINE_KEY_PREFIX = 'quarantine';
5
5
  function resolveFileId(fileId) {
6
6
  return FileId.create(fileId).getValue();
7
7
  }
8
8
  function toEntityFolder(entityType) {
9
- if (!Object.hasOwn(VALIDATION_POLICY_BY_ENTITY, entityType)) {
10
- throw new BadRequestError(`Unknown entity type: '${entityType}'`, 'INVALID_ENTITY_TYPE', {
11
- entityType,
12
- });
13
- }
14
9
  return entityType.toLowerCase().replaceAll('_', '-');
15
10
  }
16
11
  export function buildQuarantineObjectKey(fileId) {
17
12
  return `${QUARANTINE_KEY_PREFIX}/${resolveFileId(fileId)}`;
18
13
  }
19
14
  export function buildPublicObjectKey(entityType, fileId) {
15
+ const { format } = getValidationPolicy(entityType).output;
20
16
  const folder = toEntityFolder(entityType);
21
- const { format } = VALIDATION_POLICY_BY_ENTITY[entityType].output;
22
17
  return `${folder}/${resolveFileId(fileId)}.${format}`;
23
18
  }
24
19
  export function buildPublicFileUrl(entityType, fileId, baseUrl) {
@@ -1 +1 @@
1
- {"version":3,"file":"object-key.helpers.js","sourceRoot":"","sources":["../../src/helpers/object-key.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAGD,SAAS,cAAc,CAAC,UAAsB;IAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,eAAe,CAAC,yBAAyB,UAAU,GAAG,EAAE,qBAAqB,EAAE;YACvF,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAGD,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,OAAO,GAAG,qBAAqB,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7D,CAAC;AAMD,MAAM,UAAU,oBAAoB,CAAC,UAAsB,EAAE,MAAc;IACzE,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAClE,OAAO,GAAG,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;AACxD,CAAC;AAMD,MAAM,UAAU,kBAAkB,CAChC,UAAsB,EACtB,MAAc,EACd,OAAe;IAEf,MAAM,iBAAiB,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,IAAI,iBAAiB,KAAK,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE,yBAAyB,EAAE;YACxF,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,iBAAiB,IAAI,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"object-key.helpers.js","sourceRoot":"","sources":["../../src/helpers/object-key.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAGD,SAAS,cAAc,CAAC,UAAsB;IAC5C,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAGD,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,OAAO,GAAG,qBAAqB,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7D,CAAC;AAMD,MAAM,UAAU,oBAAoB,CAAC,UAAsB,EAAE,MAAc;IACzE,MAAM,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,GAAG,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;AACxD,CAAC;AAMD,MAAM,UAAU,kBAAkB,CAChC,UAAsB,EACtB,MAAc,EACd,OAAe;IAEf,MAAM,iBAAiB,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,IAAI,iBAAiB,KAAK,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE,yBAAyB,EAAE;YACxF,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,iBAAiB,IAAI,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { EntityType } from '../enums/entity-type.enum.js';
2
+ import { FileStatus } from '../enums/file-status.enum.js';
3
+ import { RejectionReason } from '../enums/rejection-reason.enum.js';
4
+ import { ScanStatus } from '../enums/scan-status.enum.js';
5
+ import { ValidationMode } from '../enums/validation-mode.enum.js';
6
+ export declare class FileModel {
7
+ id: string;
8
+ ownerId: string;
9
+ entityType: EntityType;
10
+ entityId: string | null;
11
+ status: FileStatus;
12
+ scanStatus: ScanStatus;
13
+ rejectionReason: RejectionReason | null;
14
+ declaredMimeType: string;
15
+ declaredSize: number;
16
+ actualSize: number | null;
17
+ quarantineKey: string;
18
+ publicKey: string | null;
19
+ scanAttempts: number;
20
+ rescanScheduledAt: Date | null;
21
+ validationMode: ValidationMode;
22
+ uploadExpiresAt: Date;
23
+ confirmedAt: Date | null;
24
+ scannedAt: Date | null;
25
+ reservedAt: Date | null;
26
+ attachedAt: Date | null;
27
+ createdAt: Date;
28
+ updatedAt: Date;
29
+ }
30
+ //# sourceMappingURL=file.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.model.d.ts","sourceRoot":"","sources":["../../src/models/file.model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAGlE,qBAUa,SAAS;IAGpB,EAAE,EAAG,MAAM,CAAC;IAGZ,OAAO,EAAG,MAAM,CAAC;IAGjB,UAAU,EAAG,UAAU,CAAC;IAGxB,QAAQ,EAAG,MAAM,GAAG,IAAI,CAAC;IAGzB,MAAM,EAAG,UAAU,CAAC;IAGpB,UAAU,EAAG,UAAU,CAAC;IAGxB,eAAe,EAAG,eAAe,GAAG,IAAI,CAAC;IAGzC,gBAAgB,EAAG,MAAM,CAAC;IAG1B,YAAY,EAAG,MAAM,CAAC;IAQtB,UAAU,EAAG,MAAM,GAAG,IAAI,CAAC;IAI3B,aAAa,EAAG,MAAM,CAAC;IAIvB,SAAS,EAAG,MAAM,GAAG,IAAI,CAAC;IAI1B,YAAY,EAAG,MAAM,CAAC;IAItB,iBAAiB,EAAG,IAAI,GAAG,IAAI,CAAC;IAIhC,cAAc,EAAG,cAAc,CAAC;IAGhC,eAAe,EAAG,IAAI,CAAC;IAGvB,WAAW,EAAG,IAAI,GAAG,IAAI,CAAC;IAG1B,SAAS,EAAG,IAAI,GAAG,IAAI,CAAC;IAGxB,UAAU,EAAG,IAAI,GAAG,IAAI,CAAC;IAGzB,UAAU,EAAG,IAAI,GAAG,IAAI,CAAC;IAGzB,SAAS,EAAG,IAAI,CAAC;IASjB,SAAS,EAAG,IAAI,CAAC;CAClB"}
@@ -0,0 +1,146 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Column, CreateDateColumn, Entity, Index, PrimaryColumn, UpdateDateColumn } from 'typeorm';
11
+ import { EntityType } from '../enums/entity-type.enum.js';
12
+ import { FileStatus } from '../enums/file-status.enum.js';
13
+ import { ScanStatus } from '../enums/scan-status.enum.js';
14
+ import { ValidationMode } from '../enums/validation-mode.enum.js';
15
+ import { bigintNumberTransformer } from './transformers/bigint-number.transformer.js';
16
+ let FileModel = class FileModel {
17
+ id;
18
+ ownerId;
19
+ entityType;
20
+ entityId;
21
+ status;
22
+ scanStatus;
23
+ rejectionReason;
24
+ declaredMimeType;
25
+ declaredSize;
26
+ actualSize;
27
+ quarantineKey;
28
+ publicKey;
29
+ scanAttempts;
30
+ rescanScheduledAt;
31
+ validationMode;
32
+ uploadExpiresAt;
33
+ confirmedAt;
34
+ scannedAt;
35
+ reservedAt;
36
+ attachedAt;
37
+ createdAt;
38
+ updatedAt;
39
+ };
40
+ __decorate([
41
+ PrimaryColumn({ type: 'uuid' }),
42
+ __metadata("design:type", String)
43
+ ], FileModel.prototype, "id", void 0);
44
+ __decorate([
45
+ Column({ name: 'owner_id', type: 'uuid' }),
46
+ __metadata("design:type", String)
47
+ ], FileModel.prototype, "ownerId", void 0);
48
+ __decorate([
49
+ Column({ name: 'entity_type', type: 'varchar' }),
50
+ __metadata("design:type", String)
51
+ ], FileModel.prototype, "entityType", void 0);
52
+ __decorate([
53
+ Column({ name: 'entity_id', type: 'uuid', nullable: true }),
54
+ __metadata("design:type", Object)
55
+ ], FileModel.prototype, "entityId", void 0);
56
+ __decorate([
57
+ Column({ type: 'varchar', default: FileStatus.PENDING }),
58
+ __metadata("design:type", String)
59
+ ], FileModel.prototype, "status", void 0);
60
+ __decorate([
61
+ Column({ name: 'scan_status', type: 'varchar', default: ScanStatus.AWAITING_UPLOAD }),
62
+ __metadata("design:type", String)
63
+ ], FileModel.prototype, "scanStatus", void 0);
64
+ __decorate([
65
+ Column({ name: 'rejection_reason', type: 'varchar', nullable: true }),
66
+ __metadata("design:type", Object)
67
+ ], FileModel.prototype, "rejectionReason", void 0);
68
+ __decorate([
69
+ Column({ name: 'declared_mime_type', type: 'varchar' }),
70
+ __metadata("design:type", String)
71
+ ], FileModel.prototype, "declaredMimeType", void 0);
72
+ __decorate([
73
+ Column({ name: 'declared_size', type: 'bigint', transformer: bigintNumberTransformer }),
74
+ __metadata("design:type", Number)
75
+ ], FileModel.prototype, "declaredSize", void 0);
76
+ __decorate([
77
+ Column({
78
+ name: 'actual_size',
79
+ type: 'bigint',
80
+ nullable: true,
81
+ transformer: bigintNumberTransformer,
82
+ }),
83
+ __metadata("design:type", Object)
84
+ ], FileModel.prototype, "actualSize", void 0);
85
+ __decorate([
86
+ Column({ name: 'quarantine_key', type: 'varchar' }),
87
+ __metadata("design:type", String)
88
+ ], FileModel.prototype, "quarantineKey", void 0);
89
+ __decorate([
90
+ Column({ name: 'public_key', type: 'varchar', nullable: true }),
91
+ __metadata("design:type", Object)
92
+ ], FileModel.prototype, "publicKey", void 0);
93
+ __decorate([
94
+ Column({ name: 'scan_attempts', type: 'int', default: 0 }),
95
+ __metadata("design:type", Number)
96
+ ], FileModel.prototype, "scanAttempts", void 0);
97
+ __decorate([
98
+ Column({ name: 'rescan_scheduled_at', type: 'timestamptz', nullable: true }),
99
+ __metadata("design:type", Object)
100
+ ], FileModel.prototype, "rescanScheduledAt", void 0);
101
+ __decorate([
102
+ Column({ name: 'validation_mode', type: 'varchar' }),
103
+ __metadata("design:type", String)
104
+ ], FileModel.prototype, "validationMode", void 0);
105
+ __decorate([
106
+ Column({ name: 'upload_expires_at', type: 'timestamptz' }),
107
+ __metadata("design:type", Date)
108
+ ], FileModel.prototype, "uploadExpiresAt", void 0);
109
+ __decorate([
110
+ Column({ name: 'confirmed_at', type: 'timestamptz', nullable: true }),
111
+ __metadata("design:type", Object)
112
+ ], FileModel.prototype, "confirmedAt", void 0);
113
+ __decorate([
114
+ Column({ name: 'scanned_at', type: 'timestamptz', nullable: true }),
115
+ __metadata("design:type", Object)
116
+ ], FileModel.prototype, "scannedAt", void 0);
117
+ __decorate([
118
+ Column({ name: 'reserved_at', type: 'timestamptz', nullable: true }),
119
+ __metadata("design:type", Object)
120
+ ], FileModel.prototype, "reservedAt", void 0);
121
+ __decorate([
122
+ Column({ name: 'attached_at', type: 'timestamptz', nullable: true }),
123
+ __metadata("design:type", Object)
124
+ ], FileModel.prototype, "attachedAt", void 0);
125
+ __decorate([
126
+ CreateDateColumn({ name: 'created_at', type: 'timestamptz' }),
127
+ __metadata("design:type", Date)
128
+ ], FileModel.prototype, "createdAt", void 0);
129
+ __decorate([
130
+ UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' }),
131
+ __metadata("design:type", Date)
132
+ ], FileModel.prototype, "updatedAt", void 0);
133
+ FileModel = __decorate([
134
+ Entity('files'),
135
+ Index('idx_files_entity', ['entityType', 'entityId']),
136
+ Index('idx_files_owner', ['ownerId']),
137
+ Index('idx_files_awaiting', ['uploadExpiresAt'], {
138
+ where: `"scan_status" = 'AWAITING_UPLOAD'`,
139
+ }),
140
+ Index('idx_files_scanning', ['confirmedAt'], { where: `"scan_status" = 'SCANNING'` }),
141
+ Index('idx_files_unused', ['confirmedAt'], { where: `"status" = 'PENDING'` }),
142
+ Index('idx_files_reserved', ['reservedAt'], { where: `"status" = 'RESERVED'` }),
143
+ Index('idx_files_orphaned', ['updatedAt'], { where: `"status" = 'ORPHANED'` })
144
+ ], FileModel);
145
+ export { FileModel };
146
+ //# sourceMappingURL=file.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.model.js","sourceRoot":"","sources":["../../src/models/file.model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './file.model.js';
2
+ export * from './released-entity.model.js';
3
+ export * from './transformers/bigint-number.transformer.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6CAA6C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './file.model.js';
2
+ export * from './released-entity.model.js';
3
+ export * from './transformers/bigint-number.transformer.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6CAA6C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { EntityType } from '../enums/entity-type.enum.js';
2
+ export declare class ReleasedEntityModel {
3
+ entityType: EntityType;
4
+ entityId: string;
5
+ releasedAt: Date;
6
+ }
7
+ //# sourceMappingURL=released-entity.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"released-entity.model.d.ts","sourceRoot":"","sources":["../../src/models/released-entity.model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAM1D,qBACa,mBAAmB;IAE9B,UAAU,EAAG,UAAU,CAAC;IAGxB,QAAQ,EAAG,MAAM,CAAC;IAGlB,UAAU,EAAG,IAAI,CAAC;CACnB"}
@@ -0,0 +1,33 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { CreateDateColumn, Entity, PrimaryColumn } from 'typeorm';
11
+ import { EntityType } from '../enums/entity-type.enum.js';
12
+ let ReleasedEntityModel = class ReleasedEntityModel {
13
+ entityType;
14
+ entityId;
15
+ releasedAt;
16
+ };
17
+ __decorate([
18
+ PrimaryColumn({ name: 'entity_type', type: 'varchar' }),
19
+ __metadata("design:type", String)
20
+ ], ReleasedEntityModel.prototype, "entityType", void 0);
21
+ __decorate([
22
+ PrimaryColumn({ name: 'entity_id', type: 'uuid' }),
23
+ __metadata("design:type", String)
24
+ ], ReleasedEntityModel.prototype, "entityId", void 0);
25
+ __decorate([
26
+ CreateDateColumn({ name: 'released_at', type: 'timestamptz' }),
27
+ __metadata("design:type", Date)
28
+ ], ReleasedEntityModel.prototype, "releasedAt", void 0);
29
+ ReleasedEntityModel = __decorate([
30
+ Entity('released_entities')
31
+ ], ReleasedEntityModel);
32
+ export { ReleasedEntityModel };
33
+ //# sourceMappingURL=released-entity.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"released-entity.model.js","sourceRoot":"","sources":["../../src/models/released-entity.model.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAOnD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAE9B,UAAU,CAAc;IAGxB,QAAQ,CAAU;IAGlB,UAAU,CAAQ;CACnB,CAAA;AAPC;IADC,aAAa,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;uDAChC;AAGxB;IADC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;qDACjC;AAGlB;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAClD,IAAI;uDAAC;AARP,mBAAmB;IAD/B,MAAM,CAAC,mBAAmB,CAAC;GACf,mBAAmB,CAS/B"}
@@ -0,0 +1,3 @@
1
+ import type { ValueTransformer } from 'typeorm';
2
+ export declare const bigintNumberTransformer: ValueTransformer;
3
+ //# sourceMappingURL=bigint-number.transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint-number.transformer.d.ts","sourceRoot":"","sources":["../../../src/models/transformers/bigint-number.transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAOhD,eAAO,MAAM,uBAAuB,EAAE,gBAIrC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const bigintNumberTransformer = {
2
+ to: (value) => value,
3
+ from: (value) => value === null || value === undefined ? null : Number(value),
4
+ };
5
+ //# sourceMappingURL=bigint-number.transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint-number.transformer.js","sourceRoot":"","sources":["../../../src/models/transformers/bigint-number.transformer.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,EAAE,EAAE,CAAC,KAAgC,EAA6B,EAAE,CAAC,KAAK;IAC1E,IAAI,EAAE,CAAC,KAAgC,EAAiB,EAAE,CACxD,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;CAC/D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { EntityType } from '../enums/entity-type.enum.js';
2
+ import type { ValidationPolicy } from './validation-policy.constants.js';
3
+ export declare function getValidationPolicy(entityType: EntityType): ValidationPolicy;
4
+ //# sourceMappingURL=get-validation-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-validation-policy.d.ts","sourceRoot":"","sources":["../../src/policies/get-validation-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAOzE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAK5E"}
@@ -0,0 +1,9 @@
1
+ import { InvalidEntityTypeException } from '../exceptions/invalid-entity-type.exception.js';
2
+ import { VALIDATION_POLICY_BY_ENTITY } from './validation-policy.constants.js';
3
+ export function getValidationPolicy(entityType) {
4
+ if (!Object.hasOwn(VALIDATION_POLICY_BY_ENTITY, entityType)) {
5
+ throw new InvalidEntityTypeException(entityType);
6
+ }
7
+ return VALIDATION_POLICY_BY_ENTITY[entityType];
8
+ }
9
+ //# sourceMappingURL=get-validation-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-validation-policy.js","sourceRoot":"","sources":["../../src/policies/get-validation-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAQ/E,MAAM,UAAU,mBAAmB,CAAC,UAAsB;IACxD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,0BAA0B,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,2BAA2B,CAAC,UAAU,CAAC,CAAC;AACjD,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './validation-policy.constants.js';
2
2
  export * from './resolve-validation-mode.js';
3
+ export * from './get-validation-policy.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policies/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policies/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './validation-policy.constants.js';
2
2
  export * from './resolve-validation-mode.js';
3
+ export * from './get-validation-policy.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policies/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policies/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { ValidationMode } from '../enums/validation-mode.enum.js';
2
2
  import { FileSizeNotAllowedException } from '../exceptions/file-size-not-allowed.exception.js';
3
- import { VALIDATION_POLICY_BY_ENTITY } from './validation-policy.constants.js';
3
+ import { getValidationPolicy } from './get-validation-policy.js';
4
4
  export function resolveValidationMode(entityType, declaredSizeBytes) {
5
5
  if (!Number.isSafeInteger(declaredSizeBytes) || declaredSizeBytes <= 0) {
6
6
  throw new FileSizeNotAllowedException(entityType, declaredSizeBytes);
7
7
  }
8
- const policy = VALIDATION_POLICY_BY_ENTITY[entityType];
8
+ const policy = getValidationPolicy(entityType);
9
9
  if (declaredSizeBytes > policy.maxSizeBytes) {
10
10
  throw new FileSizeNotAllowedException(entityType, declaredSizeBytes, policy.maxSizeBytes);
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-validation-mode.js","sourceRoot":"","sources":["../../src/policies/resolve-validation-mode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAS/E,MAAM,UAAU,qBAAqB,CACnC,UAAsB,EACtB,iBAAyB;IAEzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAEvD,IAAI,iBAAiB,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,iBAAiB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjD,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAChG,CAAC"}
1
+ {"version":3,"file":"resolve-validation-mode.js","sourceRoot":"","sources":["../../src/policies/resolve-validation-mode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AASjE,MAAM,UAAU,qBAAqB,CACnC,UAAsB,EACtB,iBAAyB;IAEzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,iBAAiB,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,iBAAiB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjD,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAChG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bigint-number.transformer.unit.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint-number.transformer.unit.spec.d.ts","sourceRoot":"","sources":["../../src/test/bigint-number.transformer.unit.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from '@jest/globals';
2
+ import { bigintNumberTransformer } from '../models/index.js';
3
+ describe('bigintNumberTransformer', () => {
4
+ it('converts the string returned by pg into a number', () => {
5
+ expect(bigintNumberTransformer.from('10485760')).toBe(10485760);
6
+ });
7
+ it('keeps null as null when reading', () => {
8
+ expect(bigintNumberTransformer.from(null)).toBeNull();
9
+ });
10
+ it('treats an undefined database value as null', () => {
11
+ expect(bigintNumberTransformer.from(undefined)).toBeNull();
12
+ });
13
+ it('writes numbers and null unchanged', () => {
14
+ expect(bigintNumberTransformer.to(1024)).toBe(1024);
15
+ expect(bigintNumberTransformer.to(null)).toBeNull();
16
+ });
17
+ });
18
+ //# sourceMappingURL=bigint-number.transformer.unit.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint-number.transformer.unit.spec.js","sourceRoot":"","sources":["../../src/test/bigint-number.transformer.unit.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { DataSource } from 'typeorm';
2
+ export declare const testDataSource: DataSource;
3
+ export declare const initializeTestDb: () => Promise<void>;
4
+ export declare const closeTestDb: () => Promise<void>;
5
+ export declare const truncateAll: () => Promise<void>;
6
+ //# sourceMappingURL=data-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source.d.ts","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAQrC,eAAO,MAAM,cAAc,YAWzB,CAAC;AAMH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAYrD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAIhD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAEhD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { FileModel, ReleasedEntityModel } from '../models/index.js';
3
+ import { InitialStorageSchema1791300000000 } from './migrations/domain/1791300000000-InitialStorageSchema.js';
4
+ const LOCAL_HOSTS = ['localhost', '127.0.0.1'];
5
+ const host = process.env.TEST_DB_HOST ?? 'localhost';
6
+ export const testDataSource = new DataSource({
7
+ type: 'postgres',
8
+ host,
9
+ port: Number(process.env.TEST_DB_PORT ?? 5437),
10
+ username: process.env.TEST_DB_USER ?? 'user',
11
+ password: process.env.TEST_DB_PASSWORD ?? 'password',
12
+ database: process.env.TEST_DB_NAME ?? 'ms_storage',
13
+ entities: [FileModel, ReleasedEntityModel],
14
+ migrations: [InitialStorageSchema1791300000000],
15
+ synchronize: false,
16
+ logging: false,
17
+ });
18
+ export const initializeTestDb = async () => {
19
+ if (!LOCAL_HOSTS.includes(host)) {
20
+ throw new Error(`Refusing to drop the database on '${host}': integration tests only run against a local database.`);
21
+ }
22
+ if (!testDataSource.isInitialized) {
23
+ await testDataSource.initialize();
24
+ await testDataSource.dropDatabase();
25
+ await testDataSource.runMigrations();
26
+ }
27
+ };
28
+ export const closeTestDb = async () => {
29
+ if (testDataSource.isInitialized) {
30
+ await testDataSource.destroy();
31
+ }
32
+ };
33
+ export const truncateAll = async () => {
34
+ await testDataSource.query('TRUNCATE TABLE files, released_entities RESTART IDENTITY CASCADE');
35
+ };
36
+ //# sourceMappingURL=data-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2DAA2D,CAAC;AAE9G,MAAM,WAAW,GAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAElE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,WAAW,CAAC;AAErD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;IAC3C,IAAI,EAAE,UAAU;IAChB,IAAI;IACJ,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;IAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;IAC5C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU;IACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY;IAClD,QAAQ,EAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC;IAC1C,UAAU,EAAE,CAAC,iCAAiC,CAAC;IAC/C,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;CACf,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAmB,EAAE;IACxD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,yDAAyD,CACnG,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;QACjC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,cAAc,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;AACjG,CAAC,CAAC"}
@@ -58,6 +58,16 @@ describe('Domain Storage Unit Tests', () => {
58
58
  expect(fileId1.equals(fileId2)).toBe(true);
59
59
  expect(fileId1.equals(fileId3)).toBe(false);
60
60
  });
61
+ it('should normalize an uppercase UUID to lowercase', () => {
62
+ const fileId = FileId.create('123E4567-E89B-42D3-A456-426614174000');
63
+ expect(fileId.getValue()).toBe('123e4567-e89b-42d3-a456-426614174000');
64
+ });
65
+ it('should compare FileId instances regardless of the input case', () => {
66
+ const lower = FileId.create('123e4567-e89b-42d3-a456-426614174000');
67
+ const upper = FileId.create('123E4567-E89B-42D3-A456-426614174000');
68
+ expect(lower.equals(upper)).toBe(true);
69
+ expect(upper.equals(lower)).toBe(true);
70
+ });
61
71
  });
62
72
  describe('MimeType Value Object & Constants', () => {
63
73
  it('should define correct common and entity allowed MIME types', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"domain-storage.unit.spec.js","sourceRoot":"","sources":["../../src/test/domain-storage.unit.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domain-storage.unit.spec.js","sourceRoot":"","sources":["../../src/test/domain-storage.unit.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FileModel } from '../../models/file.model.js';
2
+ export type FileData = Pick<FileModel, keyof FileModel>;
3
+ export declare const buildFileData: (overrides?: Partial<FileData>) => Partial<FileData>;
4
+ //# sourceMappingURL=file.factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.factory.d.ts","sourceRoot":"","sources":["../../../src/test/factories/file.factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAM5D,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC,CAAC;AAGxD,eAAO,MAAM,aAAa,eAAe,OAAO,CAAC,QAAQ,CAAC,KAAQ,OAAO,CAAC,QAAQ,CAcjF,CAAC"}