@yimingliao/cms 0.0.56 → 0.0.58
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/dist/server/index.d.ts +102 -4
- package/dist/server/index.js +305 -10
- package/package.json +1 -1
package/dist/server/index.d.ts
CHANGED
|
@@ -414,8 +414,8 @@ interface UpdateParams$1 {
|
|
|
414
414
|
}
|
|
415
415
|
|
|
416
416
|
declare function createFolderCommandRepository(prisma: any): {
|
|
417
|
-
create: ({ parentFolder,
|
|
418
|
-
update: ({ id, parentFolder,
|
|
417
|
+
create: ({ key, name, parentFolder, }: CreateParams$1) => Promise<Folder>;
|
|
418
|
+
update: ({ id, key, name, parentFolder, }: UpdateParams$1) => Promise<Folder>;
|
|
419
419
|
delete: ({ id }: {
|
|
420
420
|
id: string;
|
|
421
421
|
}) => Promise<Folder>;
|
|
@@ -1153,13 +1153,54 @@ declare const fileCreateValidator: (schemas: ReturnType<typeof createSchemas>) =
|
|
|
1153
1153
|
}[]>>;
|
|
1154
1154
|
}, zod_v4_core.$strip>;
|
|
1155
1155
|
|
|
1156
|
-
type FileCreateFormData = zod__default.infer<ReturnType<typeof fileCreateValidator
|
|
1156
|
+
type FileCreateFormData = Omit<zod__default.infer<ReturnType<typeof fileCreateValidator>>, "folder"> & {
|
|
1157
|
+
folder: Folder | null;
|
|
1158
|
+
};
|
|
1157
1159
|
declare function createFileCreateAction(ctx: ActionContext): ({ formData, }: {
|
|
1158
1160
|
formData: FileCreateFormData;
|
|
1159
1161
|
}) => Promise<Result<{
|
|
1160
1162
|
file: FileFull;
|
|
1161
1163
|
}>>;
|
|
1162
1164
|
|
|
1165
|
+
declare const fileUpdateValidator: (schemas: ReturnType<typeof createSchemas>) => zod.ZodObject<{
|
|
1166
|
+
key: zod.ZodOptional<zod.ZodString>;
|
|
1167
|
+
checksum: zod.ZodOptional<zod.ZodString>;
|
|
1168
|
+
fileMeta: zod.ZodObject<{
|
|
1169
|
+
type: zod.ZodString;
|
|
1170
|
+
size: zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>;
|
|
1171
|
+
name: zod.ZodString;
|
|
1172
|
+
}, zod_v4_core.$strip>;
|
|
1173
|
+
width: zod.ZodNullable<zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>>;
|
|
1174
|
+
height: zod.ZodNullable<zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>>;
|
|
1175
|
+
duration: zod.ZodNullable<zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>>;
|
|
1176
|
+
folder: zod.ZodOptional<zod.ZodNullable<zod.ZodObject<{
|
|
1177
|
+
id: zod.ZodString;
|
|
1178
|
+
}, zod_v4_core.$strip>>>;
|
|
1179
|
+
translations: zod.ZodPipe<zod.ZodArray<zod.ZodObject<{
|
|
1180
|
+
locale: zod.ZodString;
|
|
1181
|
+
name: zod.ZodNullable<zod.ZodString>;
|
|
1182
|
+
alt: zod.ZodNullable<zod.ZodString>;
|
|
1183
|
+
}, zod_v4_core.$strip>>, zod.ZodTransform<{
|
|
1184
|
+
locale: string;
|
|
1185
|
+
name: string | null;
|
|
1186
|
+
alt: string | null;
|
|
1187
|
+
}[], {
|
|
1188
|
+
locale: string;
|
|
1189
|
+
name: string | null;
|
|
1190
|
+
alt: string | null;
|
|
1191
|
+
}[]>>;
|
|
1192
|
+
}, zod_v4_core.$strip>;
|
|
1193
|
+
|
|
1194
|
+
type FileUpdateFormData = Omit<zod__default.infer<ReturnType<typeof fileUpdateValidator>>, "folder"> & {
|
|
1195
|
+
folder: Folder | null;
|
|
1196
|
+
};
|
|
1197
|
+
declare function createFileUpdateAction(ctx: ActionContext): ({ id, formData, }: {
|
|
1198
|
+
id: string;
|
|
1199
|
+
formData: FileUpdateFormData;
|
|
1200
|
+
}) => Promise<Result<{
|
|
1201
|
+
file: File$1;
|
|
1202
|
+
}>>;
|
|
1203
|
+
|
|
1163
1204
|
declare const fileCreateManyValidator: (schemas: ReturnType<typeof createSchemas>) => zod.ZodObject<{
|
|
1164
1205
|
uploadResults: zod.ZodPipe<zod.ZodArray<zod.ZodObject<{
|
|
1165
1206
|
key: zod.ZodString;
|
|
@@ -1272,6 +1313,63 @@ declare function createFileFindListCardsAction(ctx: ActionContext): (params: {
|
|
|
1272
1313
|
total: number;
|
|
1273
1314
|
}>>;
|
|
1274
1315
|
|
|
1316
|
+
declare const folderCreateValidator: (schemas: ReturnType<typeof createSchemas>) => zod.ZodObject<{
|
|
1317
|
+
key: zod.ZodString;
|
|
1318
|
+
name: zod.ZodString;
|
|
1319
|
+
parentFolder: zod.ZodNullable<zod.ZodObject<{
|
|
1320
|
+
id: zod.ZodString;
|
|
1321
|
+
}, zod_v4_core.$strip>>;
|
|
1322
|
+
}, zod_v4_core.$strip>;
|
|
1323
|
+
|
|
1324
|
+
type FolderCreateFormData = Pick<zod__default.infer<ReturnType<typeof folderCreateValidator>>, "name"> & {
|
|
1325
|
+
parentFolder: Folder | null;
|
|
1326
|
+
};
|
|
1327
|
+
declare function createFolderCreateAction(ctx: ActionContext): ({ formData, }: {
|
|
1328
|
+
formData: FolderCreateFormData;
|
|
1329
|
+
}) => Promise<Result<{
|
|
1330
|
+
folder: Folder;
|
|
1331
|
+
}>>;
|
|
1332
|
+
|
|
1333
|
+
declare const folderUpdateValidator: (schemas: ReturnType<typeof createSchemas>, id: string) => zod.ZodObject<{
|
|
1334
|
+
key: zod.ZodString;
|
|
1335
|
+
name: zod.ZodString;
|
|
1336
|
+
parentFolder: zod.ZodNullable<zod.ZodObject<{
|
|
1337
|
+
id: zod.ZodString;
|
|
1338
|
+
}, zod_v4_core.$strip>>;
|
|
1339
|
+
}, zod_v4_core.$strip>;
|
|
1340
|
+
|
|
1341
|
+
type FolderUpdateFormData = Pick<zod__default.infer<ReturnType<typeof folderUpdateValidator>>, "name"> & {
|
|
1342
|
+
parentFolder: Folder | null;
|
|
1343
|
+
};
|
|
1344
|
+
declare function createFolderUpdateAction(ctx: ActionContext): ({ id, formData, }: {
|
|
1345
|
+
id: string;
|
|
1346
|
+
formData: FolderUpdateFormData;
|
|
1347
|
+
}) => Promise<Result<{
|
|
1348
|
+
folder: Folder;
|
|
1349
|
+
}>>;
|
|
1350
|
+
|
|
1351
|
+
declare function createFolderDeleteAction(ctx: ActionContext): ({ id }: {
|
|
1352
|
+
id: string;
|
|
1353
|
+
}) => Promise<Result<void>>;
|
|
1354
|
+
|
|
1355
|
+
declare function createFolderFindFullAction(ctx: ActionContext): (params: {
|
|
1356
|
+
id?: string;
|
|
1357
|
+
key?: string;
|
|
1358
|
+
}) => Promise<Result<{
|
|
1359
|
+
folder: FolderFull;
|
|
1360
|
+
}>>;
|
|
1361
|
+
|
|
1362
|
+
declare function createFolderFindListCardsAction(ctx: ActionContext): (params: {
|
|
1363
|
+
searchString?: string;
|
|
1364
|
+
parentFolderId?: string;
|
|
1365
|
+
folderIds?: string[];
|
|
1366
|
+
page: number;
|
|
1367
|
+
pageSize: number;
|
|
1368
|
+
}) => Promise<Result<{
|
|
1369
|
+
items: FolderFull[];
|
|
1370
|
+
total: number;
|
|
1371
|
+
}>>;
|
|
1372
|
+
|
|
1275
1373
|
declare class ServerError extends Error {
|
|
1276
1374
|
readonly i18nKey?: string;
|
|
1277
1375
|
readonly statusCode?: number;
|
|
@@ -1290,4 +1388,4 @@ declare class ServerError extends Error {
|
|
|
1290
1388
|
static internalServerError(): ServerError;
|
|
1291
1389
|
}
|
|
1292
1390
|
|
|
1293
|
-
export { ADMIN_ORDER_BY, type ActionContext, type AdminCreateFormData, type AdminUpdateFormData, type ChangePasswordFormData, type EmailUnverifiedFormData, type FileCreateFormData, type FileCreateManyFormData, type ForgotPasswordFormData, ORDER_BY, POST_ORDER_BY, type RawCacheKey, type ResetPasswordFormData, ServerError, type SignInFormData, type VerifyEmailFormData, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
|
|
1391
|
+
export { ADMIN_ORDER_BY, type ActionContext, type AdminCreateFormData, type AdminUpdateFormData, type ChangePasswordFormData, type EmailUnverifiedFormData, type FileCreateFormData, type FileCreateManyFormData, type FileUpdateFormData, type FolderCreateFormData, type FolderUpdateFormData, type ForgotPasswordFormData, ORDER_BY, POST_ORDER_BY, type RawCacheKey, type ResetPasswordFormData, ServerError, type SignInFormData, type VerifyEmailFormData, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFileUpdateAction, createFolderCommandRepository, createFolderCreateAction, createFolderDeleteAction, createFolderFindFullAction, createFolderFindListCardsAction, createFolderQueryRepository, createFolderUpdateAction, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
|
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ADMIN_ROLES, isFileLocked, ROOT_FOLDER_ID } from '../chunk-FUAJWL2N.js';
|
|
1
|
+
import { ADMIN_ROLES, isFileLocked, isFolderLocked, ROOT_FOLDER_ID, ROOT_FOLDER } from '../chunk-FUAJWL2N.js';
|
|
2
2
|
import { SIZE, result, mimeToExtension, classifyFileType } from '../chunk-YAUBKQVA.js';
|
|
3
3
|
import jwt from 'jsonwebtoken';
|
|
4
4
|
import argon2 from 'argon2';
|
|
@@ -12,6 +12,7 @@ import { readFile } from 'fs/promises';
|
|
|
12
12
|
import path from 'path';
|
|
13
13
|
import { ulid } from 'ulid';
|
|
14
14
|
import { NextResponse } from 'next/server';
|
|
15
|
+
import path2 from 'path/posix';
|
|
15
16
|
|
|
16
17
|
function createJwtService({
|
|
17
18
|
defaultSecret,
|
|
@@ -1303,17 +1304,20 @@ function createFileQueryRepository(prisma) {
|
|
|
1303
1304
|
// src/server/infrastructure/database/folder/command/create-folder-command-repository.ts
|
|
1304
1305
|
function createFolderCommandRepository(prisma) {
|
|
1305
1306
|
async function create({
|
|
1307
|
+
// core
|
|
1308
|
+
key,
|
|
1309
|
+
name,
|
|
1306
1310
|
// ------------------------------------
|
|
1307
1311
|
// relations
|
|
1308
1312
|
// ------------------------------------
|
|
1309
1313
|
// Folder
|
|
1310
|
-
parentFolder
|
|
1311
|
-
// rest
|
|
1312
|
-
...params
|
|
1314
|
+
parentFolder
|
|
1313
1315
|
}) {
|
|
1314
1316
|
const created = await prisma.folder.create({
|
|
1315
1317
|
data: {
|
|
1316
|
-
|
|
1318
|
+
// core
|
|
1319
|
+
key,
|
|
1320
|
+
name,
|
|
1317
1321
|
// ------------------------------------------------------------------------
|
|
1318
1322
|
// relations
|
|
1319
1323
|
// ------------------------------------------------------------------------
|
|
@@ -1325,18 +1329,21 @@ function createFolderCommandRepository(prisma) {
|
|
|
1325
1329
|
}
|
|
1326
1330
|
async function update({
|
|
1327
1331
|
id,
|
|
1332
|
+
// core
|
|
1333
|
+
key,
|
|
1334
|
+
name,
|
|
1328
1335
|
// ------------------------------------
|
|
1329
1336
|
// relations
|
|
1330
1337
|
// ------------------------------------
|
|
1331
1338
|
// Folder
|
|
1332
|
-
parentFolder
|
|
1333
|
-
// rest
|
|
1334
|
-
...params
|
|
1339
|
+
parentFolder
|
|
1335
1340
|
}) {
|
|
1336
1341
|
const updated = await prisma.folder.update({
|
|
1337
1342
|
where: { id },
|
|
1338
1343
|
data: {
|
|
1339
|
-
|
|
1344
|
+
// core
|
|
1345
|
+
key,
|
|
1346
|
+
name,
|
|
1340
1347
|
// ------------------------------------------------------------------------
|
|
1341
1348
|
// relations
|
|
1342
1349
|
// ------------------------------------------------------------------------
|
|
@@ -2557,11 +2564,13 @@ function createAdminDeleteAction(ctx) {
|
|
|
2557
2564
|
function createAdminFindFullAction(ctx) {
|
|
2558
2565
|
const {
|
|
2559
2566
|
repositories: { adminQueryRepository },
|
|
2567
|
+
middlewares: { authMiddleware },
|
|
2560
2568
|
action: { executeAction }
|
|
2561
2569
|
} = ctx;
|
|
2562
2570
|
return async function adminFindFullAction(params) {
|
|
2563
2571
|
return executeAction(
|
|
2564
2572
|
async () => {
|
|
2573
|
+
await authMiddleware.authenticate();
|
|
2565
2574
|
const admin = await adminQueryRepository.findFull(params);
|
|
2566
2575
|
if (!admin) throw ServerError.notFound();
|
|
2567
2576
|
return {
|
|
@@ -2772,6 +2781,94 @@ function createFileCreateAction(ctx) {
|
|
|
2772
2781
|
};
|
|
2773
2782
|
}
|
|
2774
2783
|
|
|
2784
|
+
// src/server/interfaces/actions/resources/file/commands/update/file-update-validator.ts
|
|
2785
|
+
var fileUpdateValidator = (schemas) => schemas.z.object({
|
|
2786
|
+
// core
|
|
2787
|
+
key: schemas.key().optional(),
|
|
2788
|
+
checksum: schemas.sha256Hash().optional(),
|
|
2789
|
+
// file meta
|
|
2790
|
+
fileMeta: schemas.z.object({
|
|
2791
|
+
type: schemas.text(),
|
|
2792
|
+
size: schemas.positiveNumber(),
|
|
2793
|
+
name: schemas.text()
|
|
2794
|
+
}),
|
|
2795
|
+
// media info
|
|
2796
|
+
width: schemas.positiveNumber().nullable(),
|
|
2797
|
+
height: schemas.positiveNumber().nullable(),
|
|
2798
|
+
duration: schemas.positiveNumber().nullable(),
|
|
2799
|
+
// ----------------------------------------------------------------------------
|
|
2800
|
+
// relations
|
|
2801
|
+
// ----------------------------------------------------------------------------
|
|
2802
|
+
folder: schemas.z.object({
|
|
2803
|
+
id: schemas.id().exist({ table: "folders", column: "id" })
|
|
2804
|
+
}).nullable().optional(),
|
|
2805
|
+
// ----------------------------------------------------------------------------
|
|
2806
|
+
// translation
|
|
2807
|
+
// ----------------------------------------------------------------------------
|
|
2808
|
+
translations: schemas.array(
|
|
2809
|
+
schemas.z.object({
|
|
2810
|
+
// core
|
|
2811
|
+
locale: schemas.locale(),
|
|
2812
|
+
// text
|
|
2813
|
+
name: schemas.text().nullable(),
|
|
2814
|
+
alt: schemas.text().nullable()
|
|
2815
|
+
})
|
|
2816
|
+
)
|
|
2817
|
+
});
|
|
2818
|
+
function createFileUpdateAction(ctx) {
|
|
2819
|
+
const {
|
|
2820
|
+
services: { storageService },
|
|
2821
|
+
repositories: { fileQueryRepository, fileCommandRepository },
|
|
2822
|
+
middlewares: { authMiddleware },
|
|
2823
|
+
action: { executeAction },
|
|
2824
|
+
schemas
|
|
2825
|
+
} = ctx;
|
|
2826
|
+
return async function fileUpdateAction({
|
|
2827
|
+
id,
|
|
2828
|
+
formData
|
|
2829
|
+
}) {
|
|
2830
|
+
return executeAction(
|
|
2831
|
+
async () => {
|
|
2832
|
+
await authMiddleware.authenticate();
|
|
2833
|
+
const { checksum, width, height, duration, translations } = await fileUpdateValidator(schemas).parseAsync(formData);
|
|
2834
|
+
const { folder, fileMeta, key: uploadedKey } = formData;
|
|
2835
|
+
const foundFile = await fileQueryRepository.findFull({ id });
|
|
2836
|
+
if (!foundFile) throw ServerError.notFound();
|
|
2837
|
+
const oldKey = foundFile.key;
|
|
2838
|
+
let newKey = oldKey;
|
|
2839
|
+
const folderChanged = folder?.key !== foundFile.folder?.key;
|
|
2840
|
+
if (uploadedKey) {
|
|
2841
|
+
newKey = uploadedKey;
|
|
2842
|
+
} else if (folderChanged) {
|
|
2843
|
+
const folderKey = folder?.key ?? "";
|
|
2844
|
+
newKey = path2.join(folderKey, path2.basename(oldKey));
|
|
2845
|
+
await storageService.move({ fromKey: oldKey, toKey: newKey });
|
|
2846
|
+
}
|
|
2847
|
+
const updatedFile = await fileCommandRepository.update({
|
|
2848
|
+
file: foundFile,
|
|
2849
|
+
id,
|
|
2850
|
+
key: newKey,
|
|
2851
|
+
checksum: checksum ?? foundFile.checksum,
|
|
2852
|
+
fileMeta,
|
|
2853
|
+
width,
|
|
2854
|
+
height,
|
|
2855
|
+
duration,
|
|
2856
|
+
folder,
|
|
2857
|
+
translations
|
|
2858
|
+
});
|
|
2859
|
+
if (uploadedKey) {
|
|
2860
|
+
await storageService.remove({ key: oldKey });
|
|
2861
|
+
}
|
|
2862
|
+
return {
|
|
2863
|
+
i18nKey: "ok.update-ok",
|
|
2864
|
+
data: { file: updatedFile }
|
|
2865
|
+
};
|
|
2866
|
+
},
|
|
2867
|
+
{ type: "command" }
|
|
2868
|
+
);
|
|
2869
|
+
};
|
|
2870
|
+
}
|
|
2871
|
+
|
|
2775
2872
|
// src/server/interfaces/actions/resources/file/commands/create-many/file-create-many-validator.ts
|
|
2776
2873
|
var fileCreateManyValidator = (schemas) => schemas.z.object({
|
|
2777
2874
|
uploadResults: schemas.array(
|
|
@@ -3191,6 +3288,204 @@ function createFileFindListCardsAction(ctx) {
|
|
|
3191
3288
|
};
|
|
3192
3289
|
}
|
|
3193
3290
|
|
|
3291
|
+
// src/server/interfaces/actions/resources/folder/commands/create/folder-create-validator.ts
|
|
3292
|
+
var folderCreateValidator = (schemas) => schemas.z.object({
|
|
3293
|
+
// core
|
|
3294
|
+
key: schemas.key().unique({ table: "folders", column: "key" }),
|
|
3295
|
+
name: schemas.pathSegment(),
|
|
3296
|
+
// ----------------------------------------------------------------------------
|
|
3297
|
+
// relations
|
|
3298
|
+
// ----------------------------------------------------------------------------
|
|
3299
|
+
// Folder
|
|
3300
|
+
parentFolder: schemas.z.object({ id: schemas.id().exist({ table: "folders", column: "id" }) }).nullable()
|
|
3301
|
+
});
|
|
3302
|
+
function createFolderCreateAction(ctx) {
|
|
3303
|
+
const {
|
|
3304
|
+
repositories: { folderCommandRepository },
|
|
3305
|
+
middlewares: { authMiddleware },
|
|
3306
|
+
action: { executeAction },
|
|
3307
|
+
schemas
|
|
3308
|
+
} = ctx;
|
|
3309
|
+
return async function folderCreateAction({
|
|
3310
|
+
formData
|
|
3311
|
+
}) {
|
|
3312
|
+
return executeAction(
|
|
3313
|
+
async () => {
|
|
3314
|
+
await authMiddleware.authenticate();
|
|
3315
|
+
const combinedKey = path2.join(
|
|
3316
|
+
formData.parentFolder?.key ?? "",
|
|
3317
|
+
formData.name
|
|
3318
|
+
);
|
|
3319
|
+
const { name } = await folderCreateValidator(schemas).parseAsync({
|
|
3320
|
+
...formData,
|
|
3321
|
+
key: combinedKey
|
|
3322
|
+
});
|
|
3323
|
+
const createdFolder = await folderCommandRepository.create({
|
|
3324
|
+
key: combinedKey,
|
|
3325
|
+
name,
|
|
3326
|
+
parentFolder: formData.parentFolder
|
|
3327
|
+
});
|
|
3328
|
+
return {
|
|
3329
|
+
i18nKey: "ok.store-ok",
|
|
3330
|
+
data: { folder: createdFolder }
|
|
3331
|
+
};
|
|
3332
|
+
},
|
|
3333
|
+
{ type: "command" }
|
|
3334
|
+
);
|
|
3335
|
+
};
|
|
3336
|
+
}
|
|
3337
|
+
|
|
3338
|
+
// src/server/interfaces/actions/resources/folder/commands/update/folder-update-validator.ts
|
|
3339
|
+
var folderUpdateValidator = (schemas, id) => schemas.z.object({
|
|
3340
|
+
// core
|
|
3341
|
+
key: schemas.key().unique({
|
|
3342
|
+
table: "folders",
|
|
3343
|
+
column: "key",
|
|
3344
|
+
excludeSelf: { name: "id", value: id }
|
|
3345
|
+
}),
|
|
3346
|
+
name: schemas.pathSegment(),
|
|
3347
|
+
// ----------------------------------------------------------------------------
|
|
3348
|
+
// relations
|
|
3349
|
+
// ----------------------------------------------------------------------------
|
|
3350
|
+
// Folder
|
|
3351
|
+
parentFolder: schemas.z.object({ id: schemas.id().exist({ table: "folders", column: "id" }) }).nullable()
|
|
3352
|
+
});
|
|
3353
|
+
function createFolderUpdateAction(ctx) {
|
|
3354
|
+
const {
|
|
3355
|
+
repositories: { folderCommandRepository },
|
|
3356
|
+
middlewares: { authMiddleware },
|
|
3357
|
+
action: { executeAction },
|
|
3358
|
+
schemas
|
|
3359
|
+
} = ctx;
|
|
3360
|
+
return async function folderUpdateAction({
|
|
3361
|
+
id,
|
|
3362
|
+
formData
|
|
3363
|
+
}) {
|
|
3364
|
+
return executeAction(
|
|
3365
|
+
async () => {
|
|
3366
|
+
await authMiddleware.authenticate();
|
|
3367
|
+
const combinedKey = path2.join(
|
|
3368
|
+
formData.parentFolder?.key ?? "",
|
|
3369
|
+
formData.name
|
|
3370
|
+
);
|
|
3371
|
+
const { name } = await folderUpdateValidator(schemas, id).parseAsync({
|
|
3372
|
+
...formData,
|
|
3373
|
+
key: combinedKey
|
|
3374
|
+
});
|
|
3375
|
+
const updateddFolder = await folderCommandRepository.update({
|
|
3376
|
+
id,
|
|
3377
|
+
key: combinedKey,
|
|
3378
|
+
name,
|
|
3379
|
+
parentFolder: formData.parentFolder
|
|
3380
|
+
});
|
|
3381
|
+
return {
|
|
3382
|
+
i18nKey: "ok.update-ok",
|
|
3383
|
+
data: { folder: updateddFolder }
|
|
3384
|
+
};
|
|
3385
|
+
},
|
|
3386
|
+
{ type: "command" }
|
|
3387
|
+
);
|
|
3388
|
+
};
|
|
3389
|
+
}
|
|
3390
|
+
|
|
3391
|
+
// src/server/interfaces/actions/resources/folder/commands/delete/create-folder-delete-action.ts
|
|
3392
|
+
function createFolderDeleteAction(ctx) {
|
|
3393
|
+
const {
|
|
3394
|
+
repositories: { folderQueryRepository, folderCommandRepository },
|
|
3395
|
+
middlewares: { authMiddleware },
|
|
3396
|
+
action: { executeAction }
|
|
3397
|
+
} = ctx;
|
|
3398
|
+
return async function folderDeleteAction({ id }) {
|
|
3399
|
+
return executeAction(
|
|
3400
|
+
async () => {
|
|
3401
|
+
await authMiddleware.authenticate();
|
|
3402
|
+
const foundFolder = await folderQueryRepository.findFull({ id });
|
|
3403
|
+
if (!foundFolder) throw ServerError.notFound();
|
|
3404
|
+
if (isFolderLocked(foundFolder)) {
|
|
3405
|
+
throw ServerError.forbidden();
|
|
3406
|
+
}
|
|
3407
|
+
await folderCommandRepository.delete({ id });
|
|
3408
|
+
return {
|
|
3409
|
+
i18nKey: "ok.destroy-ok"
|
|
3410
|
+
};
|
|
3411
|
+
},
|
|
3412
|
+
{ type: "command" }
|
|
3413
|
+
);
|
|
3414
|
+
};
|
|
3415
|
+
}
|
|
3416
|
+
|
|
3417
|
+
// src/server/interfaces/actions/resources/folder/queries/create-folder-find-full-action.ts
|
|
3418
|
+
function createFolderFindFullAction(ctx) {
|
|
3419
|
+
const {
|
|
3420
|
+
repositories: { folderQueryRepository, fileQueryRepository },
|
|
3421
|
+
middlewares: { authMiddleware },
|
|
3422
|
+
action: { executeAction }
|
|
3423
|
+
} = ctx;
|
|
3424
|
+
return async function folderFindFullAction(params) {
|
|
3425
|
+
return executeAction(
|
|
3426
|
+
async (translator) => {
|
|
3427
|
+
await authMiddleware.authenticate();
|
|
3428
|
+
const resolvedKey = params.key || ROOT_FOLDER_ID;
|
|
3429
|
+
const identity = "id" in params ? params.id : resolvedKey;
|
|
3430
|
+
const isAtRoot = identity === ROOT_FOLDER_ID;
|
|
3431
|
+
let folder = ROOT_FOLDER;
|
|
3432
|
+
if (isAtRoot) {
|
|
3433
|
+
const { items: subFolders } = await folderQueryRepository.findListCards({
|
|
3434
|
+
parentFolderId: ROOT_FOLDER_ID
|
|
3435
|
+
});
|
|
3436
|
+
folder.subFolders = subFolders;
|
|
3437
|
+
const { items: files } = await fileQueryRepository.findListCards({
|
|
3438
|
+
locale: translator.locale,
|
|
3439
|
+
folderId: ROOT_FOLDER_ID
|
|
3440
|
+
});
|
|
3441
|
+
folder.files = files;
|
|
3442
|
+
} else {
|
|
3443
|
+
const found = await folderQueryRepository.findFull(params);
|
|
3444
|
+
if (!found) throw ServerError.notFound();
|
|
3445
|
+
folder = found;
|
|
3446
|
+
}
|
|
3447
|
+
return { data: { folder } };
|
|
3448
|
+
},
|
|
3449
|
+
{
|
|
3450
|
+
type: "query",
|
|
3451
|
+
key: ["file", "findFullAction", params.id, params.key]
|
|
3452
|
+
}
|
|
3453
|
+
);
|
|
3454
|
+
};
|
|
3455
|
+
}
|
|
3456
|
+
|
|
3457
|
+
// src/server/interfaces/actions/resources/folder/queries/create-folder-find-list-cards-action.ts
|
|
3458
|
+
function createFolderFindListCardsAction(ctx) {
|
|
3459
|
+
const {
|
|
3460
|
+
repositories: { folderQueryRepository },
|
|
3461
|
+
middlewares: { authMiddleware },
|
|
3462
|
+
action: { executeAction }
|
|
3463
|
+
} = ctx;
|
|
3464
|
+
return async function folderFindFullAction(params) {
|
|
3465
|
+
return executeAction(
|
|
3466
|
+
async () => {
|
|
3467
|
+
await authMiddleware.authenticate();
|
|
3468
|
+
const { items, total } = await folderQueryRepository.findListCards(params);
|
|
3469
|
+
return {
|
|
3470
|
+
data: { items, total }
|
|
3471
|
+
};
|
|
3472
|
+
},
|
|
3473
|
+
{
|
|
3474
|
+
type: "query",
|
|
3475
|
+
key: [
|
|
3476
|
+
"folder",
|
|
3477
|
+
"findListCardsAction",
|
|
3478
|
+
params.searchString,
|
|
3479
|
+
params.parentFolderId,
|
|
3480
|
+
...params.folderIds ?? [],
|
|
3481
|
+
params.page,
|
|
3482
|
+
params.pageSize
|
|
3483
|
+
]
|
|
3484
|
+
}
|
|
3485
|
+
);
|
|
3486
|
+
};
|
|
3487
|
+
}
|
|
3488
|
+
|
|
3194
3489
|
// src/server/applications/auth/create-auth-use-cases.ts
|
|
3195
3490
|
function createAuthUseCases({
|
|
3196
3491
|
prisma,
|
|
@@ -3370,4 +3665,4 @@ function createForgotPasswordEmail({
|
|
|
3370
3665
|
};
|
|
3371
3666
|
}
|
|
3372
3667
|
|
|
3373
|
-
export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
|
|
3668
|
+
export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFileUpdateAction, createFolderCommandRepository, createFolderCreateAction, createFolderDeleteAction, createFolderFindFullAction, createFolderFindListCardsAction, createFolderQueryRepository, createFolderUpdateAction, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
|