sitero-server 0.2.0 → 0.3.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.
- package/README.md +15 -0
- package/dist/export/index.js +3 -2
- package/dist/src/application/features/authentication/admin/operations/sign-in/admin-sign-in.js +1 -1
- package/dist/src/application/features/inquiry/operations/submit/inquiry-submit.js +13 -15
- package/dist/src/application/features/uploads/constraints/create-storage-file-schema.js +1 -1
- package/dist/src/application/features/uploads/operations/upload-files/upload-files.js +33 -15
- package/dist/src/application/resources/admin/errors/operation-errors.js +1 -0
- package/dist/src/application/resources/admin-refresh-token/operations/commands/delete/admin-refresh-token-delete-command.js +3 -0
- package/dist/src/application/resources/config/operations/commands/update/cache.js +0 -1
- package/dist/src/application/resources/config/operations/commands/update/validation/schema.js +1 -1
- package/dist/src/application/resources/config/operations/queries/find-detail/cache.js +0 -1
- package/dist/src/application/resources/config/operations/queries/find-detail/config-find-detail-query.js +1 -3
- package/dist/src/application/resources/config/operations/queries/find-many/cache.js +0 -1
- package/dist/src/application/resources/file/operations/commands/create/file-create-command.js +1 -1
- package/dist/src/application/resources/file/operations/commands/create/validation/schema.js +3 -9
- package/dist/src/application/resources/file/operations/commands/create-many/file-create-many-command.js +10 -1
- package/dist/src/application/resources/file/operations/commands/create-many/validation/schema.js +1 -1
- package/dist/src/application/resources/file/operations/commands/purge-many/file-purge-many-command.js +2 -2
- package/dist/src/application/resources/file/operations/commands/restore-many/file-restore-many-command.js +2 -2
- package/dist/src/application/resources/file/operations/commands/update/validation/schema.js +3 -9
- package/dist/src/application/resources/file/operations/queries/find-list-cards/cache.js +1 -1
- package/dist/src/application/resources/file/operations/queries/find-list-cards/validation/schema.js +1 -1
- package/dist/src/application/resources/file/operations/queries/find-relations/cache.js +7 -0
- package/dist/src/application/resources/file/operations/queries/find-relations/file-find-relations-query.js +36 -0
- package/dist/src/application/resources/file/operations/queries/validate-create/file-validate-create-query.js +17 -0
- package/dist/src/application/resources/file/operations/queries/validate-create/validation/schema.js +6 -0
- package/dist/src/application/resources/file/operations/queries/validate-create/validation/validate-input.js +7 -0
- package/dist/src/application/resources/file/operations/queries/validate-update/file-validate-update-query.js +17 -0
- package/dist/src/application/resources/file/validation/file-translations-schema.js +13 -0
- package/dist/src/application/resources/inquiry/operations/queries/find/inquiry-find-query.js +1 -3
- package/dist/src/application/resources/post/operations/commands/create/validation/schema.js +16 -3
- package/dist/src/application/resources/post/operations/commands/update/validation/validate-input.js +1 -2
- package/dist/src/application/resources/post/operations/queries/find-list-cards/cache.js +1 -0
- package/dist/src/application/resources/post/operations/queries/find-list-cards/validation/schema.js +1 -0
- package/dist/src/application/resources/post/operations/queries/find-relations/cache.js +12 -0
- package/dist/src/application/resources/post/operations/queries/find-relations/post-find-relations-query.js +32 -0
- package/dist/src/application/resources/seo-metadata/operations/commands/upsert/validation/schema.js +3 -3
- package/dist/src/application/sessions/admin/authenticate/admin-session-authenticate.js +43 -19
- package/dist/src/composition/create-sitero-server.js +18 -1
- package/dist/src/kernel/executor/executor.js +1 -1
- package/dist/src/kernel/operation/error/normalize-operation-error.js +25 -0
- package/dist/src/kernel/operation/error/zod.js +56 -0
- package/dist/src/kernel/operation/result.js +1 -1
- package/dist/types/src/application/conventions/cache/constants.d.ts +1 -1
- package/dist/types/src/application/conventions/cache/constants.d.ts.map +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/change-password/types.d.ts +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/change-password/types.d.ts.map +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/me/types.d.ts +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/me/types.d.ts.map +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/reset-password/types.d.ts +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/reset-password/types.d.ts.map +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/verify-email/types.d.ts +1 -1
- package/dist/types/src/application/features/authentication/admin/operations/verify-email/types.d.ts.map +1 -1
- package/dist/types/src/application/features/email-preview/operations/render-template/types.d.ts +1 -1
- package/dist/types/src/application/features/email-preview/operations/render-template/types.d.ts.map +1 -1
- package/dist/types/src/application/features/inquiry/operations/submit/inquiry-submit.d.ts.map +1 -1
- package/dist/types/src/application/features/uploads/constraints/create-storage-file-schema.d.ts.map +1 -1
- package/dist/types/src/application/features/uploads/operations/upload-file/upload-file.d.ts +1 -1
- package/dist/types/src/application/features/uploads/operations/upload-file/upload-file.d.ts.map +1 -1
- package/dist/types/src/application/features/uploads/operations/upload-files/types.d.ts +7 -1
- package/dist/types/src/application/features/uploads/operations/upload-files/types.d.ts.map +1 -1
- package/dist/types/src/application/features/uploads/operations/upload-files/upload-files.d.ts +1 -1
- package/dist/types/src/application/features/uploads/operations/upload-files/upload-files.d.ts.map +1 -1
- package/dist/types/src/application/resources/admin/errors/operation-errors.d.ts.map +1 -1
- package/dist/types/src/application/resources/admin-refresh-token/operations/commands/delete/admin-refresh-token-delete-command.d.ts.map +1 -1
- package/dist/types/src/application/resources/admin-refresh-token/ports.d.ts +17 -0
- package/dist/types/src/application/resources/admin-refresh-token/ports.d.ts.map +1 -1
- package/dist/types/src/application/resources/config/index.d.ts +1 -1
- package/dist/types/src/application/resources/config/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/config/operations/commands/update/cache.d.ts.map +1 -1
- package/dist/types/src/application/resources/config/operations/commands/update/validation/schema.d.ts +20 -20
- package/dist/types/src/application/resources/config/operations/queries/find-detail/cache.d.ts.map +1 -1
- package/dist/types/src/application/resources/config/operations/queries/find-detail/config-find-detail-query.d.ts.map +1 -1
- package/dist/types/src/application/resources/config/operations/queries/find-many/cache.d.ts.map +1 -1
- package/dist/types/src/application/resources/config/operations/queries/find-many/types.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/index.d.ts +3 -3
- package/dist/types/src/application/resources/file/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/create/file-create-command.d.ts +1 -1
- package/dist/types/src/application/resources/file/operations/commands/create/file-create-command.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/create/validation/schema.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/create-many/file-create-many-command.d.ts +1 -1
- package/dist/types/src/application/resources/file/operations/commands/create-many/file-create-many-command.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/create-many/types.d.ts +2 -0
- package/dist/types/src/application/resources/file/operations/commands/create-many/types.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/purge-many/file-purge-many-command.d.ts +1 -1
- package/dist/types/src/application/resources/file/operations/commands/purge-many/file-purge-many-command.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/replace-content/file-replace-content-command.d.ts +1 -1
- package/dist/types/src/application/resources/file/operations/commands/replace-content/file-replace-content-command.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/replace-content/validation/validate-input.d.ts +1 -1
- package/dist/types/src/application/resources/file/operations/commands/replace-content/validation/validate-input.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/commands/update/validation/schema.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/index.d.ts +1 -1
- package/dist/types/src/application/resources/file/operations/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/queries/find-list-cards/types.d.ts +2 -1
- package/dist/types/src/application/resources/file/operations/queries/find-list-cards/types.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/queries/find-list-cards/validation/schema.d.ts +1 -1
- package/dist/types/src/application/resources/file/operations/queries/find-relations/cache.d.ts +4 -0
- package/dist/types/src/application/resources/file/operations/queries/find-relations/cache.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/find-relations/file-find-relations-query.d.ts +8 -0
- package/dist/types/src/application/resources/file/operations/queries/find-relations/file-find-relations-query.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/find-relations/index.d.ts +3 -0
- package/dist/types/src/application/resources/file/operations/queries/find-relations/index.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/find-relations/types.d.ts +11 -0
- package/dist/types/src/application/resources/file/operations/queries/find-relations/types.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/index.d.ts +3 -0
- package/dist/types/src/application/resources/file/operations/queries/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/operations/queries/validate-create/file-validate-create-query.d.ts +12 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/file-validate-create-query.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/index.d.ts +3 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/index.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/types.d.ts +16 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/types.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/validation/schema.d.ts +9 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/validation/schema.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/validation/validate-input.d.ts +3 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-create/validation/validate-input.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-update/file-validate-update-query.d.ts +14 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-update/file-validate-update-query.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-update/index.d.ts +3 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-update/index.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-update/types.d.ts +9 -0
- package/dist/types/src/application/resources/file/operations/queries/validate-update/types.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/ports.d.ts +9 -2
- package/dist/types/src/application/resources/file/ports.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/projections/detail.d.ts +1 -1
- package/dist/types/src/application/resources/file/projections/detail.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/projections/index.d.ts +1 -0
- package/dist/types/src/application/resources/file/projections/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/file/projections/relations.d.ts +12 -0
- package/dist/types/src/application/resources/file/projections/relations.d.ts.map +1 -0
- package/dist/types/src/application/resources/file/validation/file-translations-schema.d.ts +8 -0
- package/dist/types/src/application/resources/file/validation/file-translations-schema.d.ts.map +1 -0
- package/dist/types/src/application/resources/inquiry/operations/queries/find/inquiry-find-query.d.ts.map +1 -1
- package/dist/types/src/application/resources/inquiry/operations/queries/find-list-cards/types.d.ts +2 -2
- package/dist/types/src/application/resources/inquiry/operations/queries/find-list-cards/types.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/index.d.ts +3 -3
- package/dist/types/src/application/resources/post/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/commands/create/validation/schema.d.ts +8 -2
- package/dist/types/src/application/resources/post/operations/commands/create/validation/schema.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/commands/delete/cache.d.ts +1 -1
- package/dist/types/src/application/resources/post/operations/commands/delete/cache.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/commands/delete/types.d.ts +1 -1
- package/dist/types/src/application/resources/post/operations/commands/delete/types.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/commands/update/post-update-command.d.ts +1 -1
- package/dist/types/src/application/resources/post/operations/commands/update/post-update-command.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/commands/update/validation/schema.d.ts +8 -2
- package/dist/types/src/application/resources/post/operations/commands/update/validation/schema.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/commands/update/validation/validate-input.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/index.d.ts +1 -1
- package/dist/types/src/application/resources/post/operations/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/queries/find-detail/validation/validate-input.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/queries/find-list-cards/cache.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/queries/find-list-cards/validation/schema.d.ts +1 -0
- package/dist/types/src/application/resources/post/operations/queries/find-list-cards/validation/schema.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/operations/queries/find-relations/cache.d.ts +4 -0
- package/dist/types/src/application/resources/post/operations/queries/find-relations/cache.d.ts.map +1 -0
- package/dist/types/src/application/resources/post/operations/queries/find-relations/index.d.ts +3 -0
- package/dist/types/src/application/resources/post/operations/queries/find-relations/index.d.ts.map +1 -0
- package/dist/types/src/application/resources/post/operations/queries/find-relations/post-find-relations-query.d.ts +6 -0
- package/dist/types/src/application/resources/post/operations/queries/find-relations/post-find-relations-query.d.ts.map +1 -0
- package/dist/types/src/application/resources/post/operations/queries/find-relations/types.d.ts +11 -0
- package/dist/types/src/application/resources/post/operations/queries/find-relations/types.d.ts.map +1 -0
- package/dist/types/src/application/resources/post/operations/queries/index.d.ts +1 -0
- package/dist/types/src/application/resources/post/operations/queries/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/ports.d.ts +8 -1
- package/dist/types/src/application/resources/post/ports.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/projections/index.d.ts +1 -0
- package/dist/types/src/application/resources/post/projections/index.d.ts.map +1 -1
- package/dist/types/src/application/resources/post/projections/relations.d.ts +10 -0
- package/dist/types/src/application/resources/post/projections/relations.d.ts.map +1 -0
- package/dist/types/src/application/resources/seo-metadata/operations/commands/upsert/validation/schema.d.ts.map +1 -1
- package/dist/types/src/application/sessions/admin/authenticate/admin-session-authenticate.d.ts.map +1 -1
- package/dist/types/src/composition/create-sitero-server.d.ts.map +1 -1
- package/dist/types/src/composition/policies.d.ts +1 -0
- package/dist/types/src/composition/policies.d.ts.map +1 -1
- package/dist/types/src/composition/types.d.ts +8 -2
- package/dist/types/src/composition/types.d.ts.map +1 -1
- package/dist/types/src/contracts/email/template.d.ts +2 -0
- package/dist/types/src/contracts/email/template.d.ts.map +1 -1
- package/dist/types/src/contracts/operation/index.d.ts +1 -1
- package/dist/types/src/contracts/operation/index.d.ts.map +1 -1
- package/dist/types/src/contracts/operation/result.d.ts +11 -1
- package/dist/types/src/contracts/operation/result.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +5 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/kernel/index.d.ts +1 -1
- package/dist/types/src/kernel/index.d.ts.map +1 -1
- package/dist/types/src/kernel/operation/error/index.d.ts +2 -0
- package/dist/types/src/kernel/operation/error/index.d.ts.map +1 -0
- package/dist/types/src/kernel/operation/{error.d.ts → error/normalize-operation-error.d.ts} +2 -2
- package/dist/types/src/kernel/operation/error/normalize-operation-error.d.ts.map +1 -0
- package/dist/types/src/kernel/operation/error/zod.d.ts +17 -0
- package/dist/types/src/kernel/operation/error/zod.d.ts.map +1 -0
- package/dist/types/src/kernel/operation/index.d.ts +1 -1
- package/dist/types/src/kernel/operation/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/src/kernel/operation/error.js +0 -33
- package/dist/types/src/kernel/operation/error.d.ts.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# sitero-server
|
|
2
|
+
|
|
3
|
+
`sitero-server` is Sitero's framework-neutral application core. It owns
|
|
4
|
+
resource operations, policies, execution contracts, and cache semantics; it
|
|
5
|
+
does not depend on Next.js, HTTP, Prisma, Redis, or UI code.
|
|
6
|
+
|
|
7
|
+
Use it directly when composing a custom host or delivery adapter. Next.js
|
|
8
|
+
applications using Sitero normally use the higher-level `sitero` package.
|
|
9
|
+
|
|
10
|
+
````bash
|
|
11
|
+
pnpm add sitero-server@0.2.0 sitero-domain@0.2.0
|
|
12
|
+
````
|
|
13
|
+
|
|
14
|
+
Keep `sitero-domain`, `sitero-server`, and `sitero` on the same version. The
|
|
15
|
+
source repository documents resource boundaries in `docs/sitero-server/`.
|
package/dist/export/index.js
CHANGED
|
@@ -2,12 +2,13 @@ export { createSiteroServer } from '../src/composition/create-sitero-server.js';
|
|
|
2
2
|
export { createNoopRateLimiterPort } from '../src/contracts/rate-limiter/port.js';
|
|
3
3
|
export { OperationError } from '../src/contracts/operation/error.js';
|
|
4
4
|
export { operationResult } from '../src/contracts/operation/result.js';
|
|
5
|
-
export { AUTH_ADMIN_FIELD_ERROR_CODES } from '../src/application/features/authentication/admin/errors/codes.js';
|
|
6
5
|
export { createOperation } from '../src/kernel/operation/operation.js';
|
|
7
|
-
|
|
6
|
+
export { normalizeOperationError } from '../src/kernel/operation/error/normalize-operation-error.js';
|
|
8
7
|
export { ExecutorError, RateLimitedExecutorError, UnauthenticatedExecutorError, UnauthorizedExecutorError, executorError } from '../src/kernel/executor/error.js';
|
|
9
8
|
export { createOperationExecutor } from '../src/kernel/executor/executor.js';
|
|
9
|
+
export { AUTH_ADMIN_FIELD_ERROR_CODES } from '../src/application/features/authentication/admin/errors/codes.js';
|
|
10
10
|
export { ADMIN_SIGN_IN_ERROR_CODES } from '../src/application/features/authentication/admin/operations/sign-in/errors.js';
|
|
11
|
+
import 'zod';
|
|
11
12
|
import 'sitero-domain';
|
|
12
13
|
import 'p-limit';
|
|
13
14
|
export { ADMIN_ME_ERROR_CODES } from '../src/application/features/authentication/admin/operations/me/errors.js';
|
|
@@ -25,28 +25,26 @@ function createInquirySubmitOperation(input) {
|
|
|
25
25
|
async (input2, context) => {
|
|
26
26
|
const inquiry = await inquiryCommandPort.create(input2.formData);
|
|
27
27
|
if (newInquiryEmail) {
|
|
28
|
-
const
|
|
29
|
-
|
|
28
|
+
const reportEmailError = (error) => notifyObserverSafely(
|
|
29
|
+
observer,
|
|
30
|
+
(observer2) => observer2.onEffectError?.({ context, effect: "email", error })
|
|
31
|
+
);
|
|
32
|
+
void (async () => {
|
|
30
33
|
try {
|
|
34
|
+
const recipients = await adminInquiryNotificationRecipientQueryPort.findInquiryNotificationRecipients();
|
|
31
35
|
await Promise.all(
|
|
32
36
|
recipients.map(async ({ email, preferredLocale }) => {
|
|
33
|
-
|
|
34
|
-
email,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
try {
|
|
38
|
+
await newInquiryEmail({ email, locale: preferredLocale });
|
|
39
|
+
} catch (error) {
|
|
40
|
+
await reportEmailError(error);
|
|
41
|
+
}
|
|
37
42
|
})
|
|
38
43
|
);
|
|
39
44
|
} catch (error) {
|
|
40
|
-
await
|
|
41
|
-
observer,
|
|
42
|
-
(observer2) => observer2.onEffectError?.({
|
|
43
|
-
context,
|
|
44
|
-
effect: "email",
|
|
45
|
-
error
|
|
46
|
-
})
|
|
47
|
-
);
|
|
45
|
+
await reportEmailError(error);
|
|
48
46
|
}
|
|
49
|
-
}
|
|
47
|
+
})();
|
|
50
48
|
}
|
|
51
49
|
return operationResult.success({ inquiry });
|
|
52
50
|
}
|
|
@@ -3,7 +3,7 @@ import { isStorageFile } from '../../../../contracts/storage/file.js';
|
|
|
3
3
|
import { UPLOAD_FIELD_ERROR_CODES } from '../validation-codes.js';
|
|
4
4
|
|
|
5
5
|
function createStorageFileSchema(policy) {
|
|
6
|
-
return z.custom(isStorageFile).refine(
|
|
6
|
+
return z.custom(isStorageFile).refine((file) => file.size > 0, { message: "validation.file.required" }).refine(
|
|
7
7
|
(file) => policy?.maxFileSizeInBytes === void 0 || file.size <= policy.maxFileSizeInBytes,
|
|
8
8
|
{ message: UPLOAD_FIELD_ERROR_CODES.FILE_TOO_LARGE }
|
|
9
9
|
).refine(
|
|
@@ -22,25 +22,43 @@ function createUploadFilesOperation(input) {
|
|
|
22
22
|
},
|
|
23
23
|
async (input2) => {
|
|
24
24
|
const limit = pLimit(concurrency);
|
|
25
|
-
const
|
|
25
|
+
const outcomes = await Promise.all(
|
|
26
26
|
input2.files.map(
|
|
27
|
-
(file) => limit(async () => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
(file, index) => limit(async () => {
|
|
28
|
+
try {
|
|
29
|
+
const key = await storageUploadPort.upload({ file });
|
|
30
|
+
return {
|
|
31
|
+
status: "uploaded",
|
|
32
|
+
file: {
|
|
33
|
+
index,
|
|
34
|
+
key,
|
|
35
|
+
fileMeta: {
|
|
36
|
+
name: file.name,
|
|
37
|
+
size: file.size,
|
|
38
|
+
type: file.type
|
|
39
|
+
},
|
|
40
|
+
width: file.width,
|
|
41
|
+
height: file.height,
|
|
42
|
+
duration: file.duration
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
} catch {
|
|
46
|
+
return {
|
|
47
|
+
status: "failed",
|
|
48
|
+
failure: { index, code: "INTERNAL_ERROR" }
|
|
49
|
+
};
|
|
50
|
+
}
|
|
40
51
|
})
|
|
41
52
|
)
|
|
42
53
|
);
|
|
43
|
-
return operationResult.success({
|
|
54
|
+
return operationResult.success({
|
|
55
|
+
uploadedFiles: outcomes.flatMap(
|
|
56
|
+
(outcome) => outcome.status === "uploaded" ? [outcome.file] : []
|
|
57
|
+
),
|
|
58
|
+
failed: outcomes.flatMap(
|
|
59
|
+
(outcome) => outcome.status === "failed" ? [outcome.failure] : []
|
|
60
|
+
)
|
|
61
|
+
});
|
|
44
62
|
}
|
|
45
63
|
);
|
|
46
64
|
}
|
|
@@ -27,6 +27,9 @@ function createAdminRefreshTokenDeleteCommand(input) {
|
|
|
27
27
|
if (!adminRefreshToken) {
|
|
28
28
|
throw new AdminRefreshTokenNotFoundError();
|
|
29
29
|
}
|
|
30
|
+
if (input2.id === context.session?.id) {
|
|
31
|
+
throw new AdminRefreshTokenDeleteForbiddenError();
|
|
32
|
+
}
|
|
30
33
|
const isSelf = actor.id === adminRefreshToken.adminId;
|
|
31
34
|
const canModifyOthers = actor.role === ADMIN_ROLES.SUPER_ADMIN;
|
|
32
35
|
if (!isSelf && !canModifyOthers) {
|
|
@@ -12,7 +12,6 @@ const createConfigUpdateInvalidationTags = (input, result) => {
|
|
|
12
12
|
...configs.flatMap((config) => [
|
|
13
13
|
createResourceTag("config", { id: config.id }),
|
|
14
14
|
createResourceTag("config", { slug: config.slug }),
|
|
15
|
-
createRelationTag("config", "translation", { id: config.id }),
|
|
16
15
|
// Relation: [File] files1, files2, file1, file2, file3, file4
|
|
17
16
|
createRelationTag("config", "file", { id: config.id })
|
|
18
17
|
]),
|
package/dist/src/application/resources/config/operations/commands/update/validation/schema.js
CHANGED
|
@@ -5,7 +5,7 @@ import { textSchema, requiredTextSchema, singleItemSchema, multiItemsSchema, idS
|
|
|
5
5
|
const nullableText = textSchema().nullable();
|
|
6
6
|
const nullableDecimal = z.number().nullable();
|
|
7
7
|
const nullableInteger = z.number().int().nullable();
|
|
8
|
-
const data = z.array(
|
|
8
|
+
const data = z.array(textSchema());
|
|
9
9
|
const configUpdateInputSchema = () => z.object({
|
|
10
10
|
id: idSchema(),
|
|
11
11
|
config: z.object({
|
|
@@ -11,7 +11,6 @@ const createConfigFindDetailCacheTags = (_, result) => {
|
|
|
11
11
|
return [
|
|
12
12
|
createResourceTag("config", { id: config.id }),
|
|
13
13
|
createResourceTag("config", { slug: config.slug }),
|
|
14
|
-
createRelationTag("config", "translation", { id: config.id }),
|
|
15
14
|
// Relation: [File] files1, files2, file1, file2, file3, file4
|
|
16
15
|
...fileIds.map((fileId) => createResourceTag("file", { id: fileId })),
|
|
17
16
|
createRelationTag("config", "file", { id: config.id })
|
|
@@ -25,9 +25,7 @@ function createConfigFindDetailQuery(input) {
|
|
|
25
25
|
slug: input2.slug
|
|
26
26
|
});
|
|
27
27
|
if (!config) {
|
|
28
|
-
return operationResult.failure(
|
|
29
|
-
new ConfigNotFoundError()
|
|
30
|
-
);
|
|
28
|
+
return operationResult.failure(new ConfigNotFoundError());
|
|
31
29
|
}
|
|
32
30
|
return operationResult.success({
|
|
33
31
|
config
|
|
@@ -19,7 +19,6 @@ const createConfigFindManyCacheTags = (input, result) => {
|
|
|
19
19
|
...configs.flatMap((config) => [
|
|
20
20
|
createResourceTag("config", { id: config.id }),
|
|
21
21
|
createResourceTag("config", { slug: config.slug }),
|
|
22
|
-
createRelationTag("config", "translation", { id: config.id }),
|
|
23
22
|
// Relation: [File] files1, files2, file1, file2, file3, file4
|
|
24
23
|
...collectConfigFileIds(config).map(
|
|
25
24
|
(fileId) => createResourceTag("file", { id: fileId })
|
package/dist/src/application/resources/file/operations/commands/create/file-create-command.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createOperation } from '../../../../../../kernel/operation/operation.js';
|
|
2
2
|
import 'zod';
|
|
3
3
|
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
4
|
-
import { createFileCreateInvalidationTags } from './cache.js';
|
|
5
4
|
import { registerUploadedFile } from '../register-uploaded-file.js';
|
|
5
|
+
import { createFileCreateInvalidationTags } from './cache.js';
|
|
6
6
|
import { validateInput } from './validation/validate-input.js';
|
|
7
7
|
|
|
8
8
|
function createFileCreateCommand(input) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { requiredTextSchema } from '../../../../../../conventions/validation/schema.js';
|
|
3
|
+
import { fileTranslationsSchema } from '../../../../validation/file-translations-schema.js';
|
|
4
4
|
|
|
5
5
|
const fileCreateInputSchema = () => z.object({
|
|
6
6
|
key: requiredTextSchema(),
|
|
@@ -10,13 +10,7 @@ const fileCreateInputSchema = () => z.object({
|
|
|
10
10
|
width: z.number().int().nonnegative().nullable(),
|
|
11
11
|
height: z.number().int().nonnegative().nullable(),
|
|
12
12
|
duration: z.number().nonnegative().nullable(),
|
|
13
|
-
translations:
|
|
14
|
-
z.object({
|
|
15
|
-
locale: requiredTextSchema(),
|
|
16
|
-
name: textSchema().nullable(),
|
|
17
|
-
alt: textSchema().nullable()
|
|
18
|
-
})
|
|
19
|
-
).min(1).superRefine(addDuplicateLocaleIssues)
|
|
13
|
+
translations: fileTranslationsSchema()
|
|
20
14
|
});
|
|
21
15
|
|
|
22
16
|
export { fileCreateInputSchema };
|
|
@@ -43,9 +43,18 @@ function createFileCreateManyCommand(input) {
|
|
|
43
43
|
});
|
|
44
44
|
return { status: "created", file: created2 };
|
|
45
45
|
} catch (error) {
|
|
46
|
+
let retryable = false;
|
|
47
|
+
try {
|
|
48
|
+
const existing = await fileLookupPort.find({ key: file.key });
|
|
49
|
+
if (existing)
|
|
50
|
+
return { status: "created", file: existing };
|
|
51
|
+
retryable = true;
|
|
52
|
+
} catch {
|
|
53
|
+
}
|
|
46
54
|
const failure = {
|
|
47
55
|
key: file.key,
|
|
48
|
-
code: "INTERNAL_ERROR"
|
|
56
|
+
code: "INTERNAL_ERROR",
|
|
57
|
+
retryable
|
|
49
58
|
};
|
|
50
59
|
await notifyObserverSafely(
|
|
51
60
|
observer,
|
package/dist/src/application/resources/file/operations/commands/create-many/validation/schema.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { fileCreateInputSchema } from '../../create/validation/schema.js';
|
|
3
2
|
import { FILE_FIELD_ERROR_CODES } from '../../../../errors/codes.js';
|
|
3
|
+
import { fileCreateInputSchema } from '../../create/validation/schema.js';
|
|
4
4
|
|
|
5
5
|
const fileCreateManyInputSchema = () => z.object({
|
|
6
6
|
files: z.array(fileCreateInputSchema()).min(1).superRefine((files, context) => {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { FILE_ERROR_CODES } from '../../../errors/codes.js';
|
|
2
|
-
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
3
1
|
import pLimit from 'p-limit';
|
|
4
2
|
import { createOperation } from '../../../../../../kernel/operation/operation.js';
|
|
5
3
|
import 'zod';
|
|
4
|
+
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
6
5
|
import { notifyObserverSafely } from '../../../../../../kernel/observer/notify-observer-safely.js';
|
|
6
|
+
import { FILE_ERROR_CODES } from '../../../errors/codes.js';
|
|
7
7
|
import { createFilePurgeManyInvalidationTags } from './cache.js';
|
|
8
8
|
import { validateInput } from './validation/validate-input.js';
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { FILE_ERROR_CODES } from '../../../errors/codes.js';
|
|
2
|
-
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
3
1
|
import pLimit from 'p-limit';
|
|
4
2
|
import { createOperation } from '../../../../../../kernel/operation/operation.js';
|
|
5
3
|
import 'zod';
|
|
4
|
+
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
6
5
|
import { notifyObserverSafely } from '../../../../../../kernel/observer/notify-observer-safely.js';
|
|
6
|
+
import { FILE_ERROR_CODES } from '../../../errors/codes.js';
|
|
7
7
|
import { createFileRestoreManyInvalidationTags } from './cache.js';
|
|
8
8
|
import { validateInput } from './validation/validate-input.js';
|
|
9
9
|
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { idSchema } from '../../../../../../conventions/validation/schema.js';
|
|
3
|
+
import { fileTranslationsSchema } from '../../../../validation/file-translations-schema.js';
|
|
4
4
|
|
|
5
5
|
const fileUpdateInputSchema = () => z.object({
|
|
6
6
|
id: idSchema(),
|
|
7
|
-
translations:
|
|
8
|
-
z.object({
|
|
9
|
-
locale: requiredTextSchema(),
|
|
10
|
-
name: textSchema().nullable(),
|
|
11
|
-
alt: textSchema().nullable()
|
|
12
|
-
})
|
|
13
|
-
).min(1).superRefine(addDuplicateLocaleIssues)
|
|
7
|
+
translations: fileTranslationsSchema()
|
|
14
8
|
});
|
|
15
9
|
|
|
16
10
|
export { fileUpdateInputSchema };
|
|
@@ -4,7 +4,7 @@ import { createResourceTag } from '../../../../../conventions/cache/cache-tag.js
|
|
|
4
4
|
const createFileFindListCardsCacheKey = (input) => createCacheKey("file", "find-list-cards", {
|
|
5
5
|
locale: input.locale,
|
|
6
6
|
searchString: input.searchString,
|
|
7
|
-
|
|
7
|
+
types: normalizeSelection(input.types),
|
|
8
8
|
isDeleted: input.isDeleted,
|
|
9
9
|
isLocked: input.isLocked,
|
|
10
10
|
isInUse: input.isInUse,
|
package/dist/src/application/resources/file/operations/queries/find-list-cards/validation/schema.js
CHANGED
|
@@ -5,7 +5,7 @@ import { idSchema, textSchema, requiredTextSchema } from '../../../../../../conv
|
|
|
5
5
|
const fileFindListCardsInputSchema = () => z.object({
|
|
6
6
|
locale: requiredTextSchema(),
|
|
7
7
|
searchString: textSchema().optional(),
|
|
8
|
-
|
|
8
|
+
types: z.array(z.enum(FILE_TYPES)).optional(),
|
|
9
9
|
isDeleted: z.boolean().optional(),
|
|
10
10
|
isLocked: z.boolean().nullable().optional(),
|
|
11
11
|
isInUse: z.boolean().nullable().optional(),
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createCacheKey } from '../../../../../conventions/cache/cache-key.js';
|
|
2
|
+
import { createResourceTag } from '../../../../../conventions/cache/cache-tag.js';
|
|
3
|
+
|
|
4
|
+
const createFileFindRelationsCacheKey = (input) => createCacheKey("file", "find-relations", { id: input.id });
|
|
5
|
+
const createFileFindRelationsCacheTags = (input) => [createResourceTag("file", { id: input.id })].flat();
|
|
6
|
+
|
|
7
|
+
export { createFileFindRelationsCacheKey, createFileFindRelationsCacheTags };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createOperation } from '../../../../../../kernel/operation/operation.js';
|
|
2
|
+
import 'zod';
|
|
3
|
+
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
4
|
+
import { FileNotFoundError } from '../../../errors/operation-errors.js';
|
|
5
|
+
import { fileFindDetailInputSchema } from '../find-detail/validation/schema.js';
|
|
6
|
+
import { createFileFindRelationsCacheTags, createFileFindRelationsCacheKey } from './cache.js';
|
|
7
|
+
|
|
8
|
+
function createFileFindRelationsQuery(input) {
|
|
9
|
+
const { authorization, fileRelationsQueryPort } = input;
|
|
10
|
+
return createOperation(
|
|
11
|
+
{
|
|
12
|
+
authorization,
|
|
13
|
+
behavior: {
|
|
14
|
+
kind: "query",
|
|
15
|
+
cache: {
|
|
16
|
+
key: createFileFindRelationsCacheKey,
|
|
17
|
+
tags: createFileFindRelationsCacheTags
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
validate(input2) {
|
|
21
|
+
return fileFindDetailInputSchema().parse(input2);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
async (input2) => {
|
|
25
|
+
const relations = await fileRelationsQueryPort.findRelations({
|
|
26
|
+
id: input2.id
|
|
27
|
+
});
|
|
28
|
+
if (!relations) {
|
|
29
|
+
return operationResult.failure(new FileNotFoundError());
|
|
30
|
+
}
|
|
31
|
+
return operationResult.success({ relations });
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { createFileFindRelationsQuery };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createOperation } from '../../../../../../kernel/operation/operation.js';
|
|
2
|
+
import 'zod';
|
|
3
|
+
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
4
|
+
import { validateInput } from './validation/validate-input.js';
|
|
5
|
+
|
|
6
|
+
function createFileValidateCreateQuery(input) {
|
|
7
|
+
return createOperation(
|
|
8
|
+
{
|
|
9
|
+
authorization: input.authorization,
|
|
10
|
+
behavior: { kind: "query" },
|
|
11
|
+
validate: validateInput
|
|
12
|
+
},
|
|
13
|
+
() => Promise.resolve(operationResult.success({ valid: true }))
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { createFileValidateCreateQuery };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createOperation } from '../../../../../../kernel/operation/operation.js';
|
|
2
|
+
import 'zod';
|
|
3
|
+
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
4
|
+
import { validateInput } from '../../commands/update/validation/validate-input.js';
|
|
5
|
+
|
|
6
|
+
function createFileValidateUpdateQuery(input) {
|
|
7
|
+
return createOperation(
|
|
8
|
+
{
|
|
9
|
+
authorization: input.authorization,
|
|
10
|
+
behavior: { kind: "query" },
|
|
11
|
+
validate: (rawInput) => validateInput({ input: rawInput, fileQueryPort: input.fileQueryPort })
|
|
12
|
+
},
|
|
13
|
+
() => Promise.resolve(operationResult.success({ valid: true }))
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { createFileValidateUpdateQuery };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { addDuplicateLocaleIssues } from '../../../conventions/validation/add-duplicate-locale-issues.js';
|
|
3
|
+
import { textSchema, requiredTextSchema } from '../../../conventions/validation/schema.js';
|
|
4
|
+
|
|
5
|
+
const fileTranslationsSchema = () => z.array(
|
|
6
|
+
z.object({
|
|
7
|
+
locale: requiredTextSchema(),
|
|
8
|
+
name: textSchema().nullable(),
|
|
9
|
+
alt: textSchema().nullable()
|
|
10
|
+
})
|
|
11
|
+
).min(1).superRefine(addDuplicateLocaleIssues);
|
|
12
|
+
|
|
13
|
+
export { fileTranslationsSchema };
|
package/dist/src/application/resources/inquiry/operations/queries/find/inquiry-find-query.js
CHANGED
|
@@ -24,9 +24,7 @@ function createInquiryFindQuery(input) {
|
|
|
24
24
|
async (input2) => {
|
|
25
25
|
const inquiry = await inquiryQueryPort.find(input2);
|
|
26
26
|
if (!inquiry) {
|
|
27
|
-
return operationResult.failure(
|
|
28
|
-
new InquiryNotFoundError()
|
|
29
|
-
);
|
|
27
|
+
return operationResult.failure(new InquiryNotFoundError());
|
|
30
28
|
}
|
|
31
29
|
return operationResult.success({ inquiry });
|
|
32
30
|
}
|
|
@@ -6,7 +6,20 @@ import { textSchema, requiredTextSchema, singleItemSchema, multiItemsSchema } fr
|
|
|
6
6
|
const nullableText = textSchema().nullable();
|
|
7
7
|
const nullableNumber = z.number().nullable();
|
|
8
8
|
const nullableInteger = z.number().int().nullable();
|
|
9
|
+
const nullableReadTime = z.number().nonnegative().max(2147483647).multipleOf(1).nullable();
|
|
9
10
|
const data = z.array(z.any());
|
|
11
|
+
const externalLinks = z.array(
|
|
12
|
+
z.object({
|
|
13
|
+
name: textSchema(),
|
|
14
|
+
href: textSchema()
|
|
15
|
+
}).strict()
|
|
16
|
+
);
|
|
17
|
+
const faq = z.array(
|
|
18
|
+
z.object({
|
|
19
|
+
question: textSchema(),
|
|
20
|
+
answer: textSchema()
|
|
21
|
+
}).strict()
|
|
22
|
+
);
|
|
10
23
|
const postCreateInputSchema = () => z.object({
|
|
11
24
|
type: z.enum(POST_TYPES),
|
|
12
25
|
isActive: z.boolean(),
|
|
@@ -69,10 +82,10 @@ const postCreateInputSchema = () => z.object({
|
|
|
69
82
|
summary: nullableText,
|
|
70
83
|
description: nullableText,
|
|
71
84
|
content: nullableText,
|
|
72
|
-
externalLinks
|
|
73
|
-
faq
|
|
85
|
+
externalLinks,
|
|
86
|
+
faq,
|
|
74
87
|
toc: data,
|
|
75
|
-
readTime:
|
|
88
|
+
readTime: nullableReadTime,
|
|
76
89
|
wordCount: z.number().int().nonnegative(),
|
|
77
90
|
text1: nullableText,
|
|
78
91
|
text2: nullableText,
|
package/dist/src/application/resources/post/operations/commands/update/validation/validate-input.js
CHANGED
|
@@ -14,8 +14,7 @@ async function validateInput(input) {
|
|
|
14
14
|
const previousResult = await postQueryPort.findDetail({
|
|
15
15
|
id: validatedInput.id
|
|
16
16
|
});
|
|
17
|
-
if (!previousResult.post)
|
|
18
|
-
throw new PostNotFoundError();
|
|
17
|
+
if (!previousResult.post) throw new PostNotFoundError();
|
|
19
18
|
const normalizeItems = (items) => normalizeStringSelection(items.map((item) => item.id)).map((id2) => ({
|
|
20
19
|
id: id2
|
|
21
20
|
}));
|
|
@@ -24,6 +24,7 @@ const createPostFindListCardsCacheKey = (input) => createCacheKey("post", "find-
|
|
|
24
24
|
topicSlug: input.topicSlug,
|
|
25
25
|
parentId: input.parentId,
|
|
26
26
|
parentSlug: input.parentSlug,
|
|
27
|
+
authorId: input.authorId,
|
|
27
28
|
postIds: normalizeSelection(input.postIds),
|
|
28
29
|
excludeIds: normalizeSelection(input.excludeIds),
|
|
29
30
|
page: input.page,
|
package/dist/src/application/resources/post/operations/queries/find-list-cards/validation/schema.js
CHANGED
|
@@ -25,6 +25,7 @@ const postFindListCardsInputSchema = () => z.object({
|
|
|
25
25
|
topicSlug: textSchema().optional(),
|
|
26
26
|
parentId: idSchema().optional(),
|
|
27
27
|
parentSlug: textSchema().optional(),
|
|
28
|
+
authorId: idSchema().optional(),
|
|
28
29
|
postIds: z.array(idSchema()).optional(),
|
|
29
30
|
excludeIds: z.array(idSchema()).optional(),
|
|
30
31
|
page: z.number().int().positive().optional(),
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createCacheKey } from '../../../../../conventions/cache/cache-key.js';
|
|
2
|
+
import { createResourceTag, createRelationTag } from '../../../../../conventions/cache/cache-tag.js';
|
|
3
|
+
|
|
4
|
+
const createPostFindRelationsCacheKey = (input) => createCacheKey("post", "find-relations", { id: input.id });
|
|
5
|
+
const createPostFindRelationsCacheTags = (input) => [
|
|
6
|
+
createResourceTag("post", { id: input.id }),
|
|
7
|
+
createRelationTag("post", "child", { id: input.id }),
|
|
8
|
+
createRelationTag("post", "tagged-post", { id: input.id }),
|
|
9
|
+
createRelationTag("post", "referencing-post", { id: input.id })
|
|
10
|
+
].flat();
|
|
11
|
+
|
|
12
|
+
export { createPostFindRelationsCacheKey, createPostFindRelationsCacheTags };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createOperation } from '../../../../../../kernel/operation/operation.js';
|
|
3
|
+
import { operationResult } from '../../../../../../contracts/operation/result.js';
|
|
4
|
+
import { idSchema } from '../../../../../conventions/validation/schema.js';
|
|
5
|
+
import { PostNotFoundError } from '../../../errors/operation-errors.js';
|
|
6
|
+
import { createPostFindRelationsCacheTags, createPostFindRelationsCacheKey } from './cache.js';
|
|
7
|
+
|
|
8
|
+
function createPostFindRelationsQuery(input) {
|
|
9
|
+
const { postRelationsQueryPort } = input;
|
|
10
|
+
return createOperation(
|
|
11
|
+
{
|
|
12
|
+
behavior: {
|
|
13
|
+
kind: "query",
|
|
14
|
+
cache: {
|
|
15
|
+
key: createPostFindRelationsCacheKey,
|
|
16
|
+
tags: createPostFindRelationsCacheTags
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
validate(input2) {
|
|
20
|
+
return z.object({ id: idSchema() }).parse(input2);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
async (input2) => {
|
|
24
|
+
const relations = await postRelationsQueryPort.findRelations({
|
|
25
|
+
id: input2.id
|
|
26
|
+
});
|
|
27
|
+
return relations ? operationResult.success({ relations }) : operationResult.failure(new PostNotFoundError());
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { createPostFindRelationsQuery };
|
package/dist/src/application/resources/seo-metadata/operations/commands/upsert/validation/schema.js
CHANGED
|
@@ -27,7 +27,7 @@ const bcp47Schema = () => requiredTextSchema().regex(
|
|
|
27
27
|
);
|
|
28
28
|
const ogLocaleSchema = () => requiredTextSchema().regex(/^[a-z]{2}_[A-Z]{2}$/);
|
|
29
29
|
const nullableText = textSchema().nullable();
|
|
30
|
-
const
|
|
30
|
+
const nullableNonNegativeInt = z.number().nonnegative().max(2147483647).multipleOf(1).nullable();
|
|
31
31
|
const nullableDatetime = z.iso.datetime().nullable();
|
|
32
32
|
const jsonLd = z.array(z.object({}).passthrough());
|
|
33
33
|
const seoMetadataUpsertInputSchema = () => z.object({
|
|
@@ -51,8 +51,8 @@ const seoMetadataUpsertInputSchema = () => z.object({
|
|
|
51
51
|
ogImage: nullableText,
|
|
52
52
|
ogImageAlt: nullableText,
|
|
53
53
|
ogImageType: nullableText,
|
|
54
|
-
ogImageWidth:
|
|
55
|
-
ogImageHeight:
|
|
54
|
+
ogImageWidth: nullableNonNegativeInt,
|
|
55
|
+
ogImageHeight: nullableNonNegativeInt,
|
|
56
56
|
ogLocale: ogLocaleSchema().nullable(),
|
|
57
57
|
ogLocaleAlternate: z.array(ogLocaleSchema()),
|
|
58
58
|
ogArticlePublishedTime: nullableDatetime,
|