From 3efab424fba87d7247ba7aa30dc947a8fc1195ea Mon Sep 17 00:00:00 2001 From: Kornel Javor Date: Tue, 12 Sep 2023 09:04:30 +0200 Subject: [PATCH] introduced createFolderWithId and get all folders --- server/graph/resolvers/asset.js | 40 +++++++++++++++++++++++++++++- server/graph/schemas/asset.graphql | 19 +++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/server/graph/resolvers/asset.js b/server/graph/resolvers/asset.js index 91efbdda..463324bd 100644 --- a/server/graph/resolvers/asset.js +++ b/server/graph/resolvers/asset.js @@ -31,6 +31,13 @@ module.exports = { kind: a.kind.toUpperCase() })) }, + async allFolders(obj, args, context) { + const results = await WIKI.models.assetFolders.query(); + return results.filter(folder => { + const path = folder.slug; + return WIKI.auth.checkAccess(context.req.user, ['read:assets'], { path }); + }); + }, async folders(obj, args, context) { const results = await WIKI.models.assetFolders.query().where({ parentId: args.parentFolderId === 0 ? null : args.parentFolderId @@ -71,6 +78,37 @@ module.exports = { return graphHelper.generateError(err) } }, + // new one + async createFolderWithId(obj, args, context) { + try { + const folderSlug = sanitize(args.slug).toLowerCase(); + const parentFolderId = args.parentFolderId === 0 ? null : args.parentFolderId; + const result = await WIKI.models.assetFolders.query().where({ + parentId: parentFolderId, + slug: folderSlug + }).first(); + if (!result) { + const newFolder = await WIKI.models.assetFolders.query().insert({ + slug: folderSlug, + name: folderSlug, + parentId: parentFolderId + }); + + return { + folderId: newFolder.id, + parentId: newFolder.parentId, + response: graphHelper.generateSuccess('Asset Folder has been created successfully.') + }; + } else { + throw new WIKI.Error.AssetFolderExists(); + } + } catch (err) { + return { + folderId: null, + response: graphHelper.generateError(err) + }; + } + }, /** * Rename an Asset */ @@ -208,4 +246,4 @@ module.exports = { // return fl.getFolder() // } // } -} +} \ No newline at end of file diff --git a/server/graph/schemas/asset.graphql b/server/graph/schemas/asset.graphql index f07f1307..064af8d4 100644 --- a/server/graph/schemas/asset.graphql +++ b/server/graph/schemas/asset.graphql @@ -23,6 +23,8 @@ type AssetQuery { folders( parentFolderId: Int! ): [AssetFolder] @auth(requires: ["manage:system", "read:assets"]) + + allFolders: [AssetFolder] @auth(requires: ["manage:system", "read:assets"]) } # ----------------------------------------------- @@ -30,12 +32,20 @@ type AssetQuery { # ----------------------------------------------- type AssetMutation { - createFolder( +createFolder( parentFolderId: Int! slug: String! name: String ): DefaultResponse @auth(requires: ["manage:system", "write:assets"]) + createFolderWithId( + parentFolderId: Int! + slug: String! + name: String + ): FolderCreationResponse @auth(requires: ["manage:system", "write:assets"]) + + # DefaultResponse @auth(requires: ["manage:system", "write:assets"]) + renameAsset( id: Int! filename: String! @@ -70,6 +80,7 @@ type AssetFolder { id: Int! slug: String! name: String + parentId: Int } enum AssetKind { @@ -77,3 +88,9 @@ enum AssetKind { BINARY ALL } + +type FolderCreationResponse { + folderId: Int + response: DefaultResponse + parentId: Int +}