From 3efab424fba87d7247ba7aa30dc947a8fc1195ea Mon Sep 17 00:00:00 2001 From: Kornel Javor Date: Tue, 12 Sep 2023 09:04:30 +0200 Subject: [PATCH 1/2] 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 +} From 59fad3a1bd5c58c5e5cb5f991c4bb4f6471e05d8 Mon Sep 17 00:00:00 2001 From: Kornel Javor Date: Thu, 14 Sep 2023 10:07:56 +0200 Subject: [PATCH 2/2] delete folder --- server/graph/resolvers/asset.js | 87 ++++++++++++++++++------------ server/graph/schemas/asset.graphql | 11 ++-- 2 files changed, 62 insertions(+), 36 deletions(-) diff --git a/server/graph/resolvers/asset.js b/server/graph/resolvers/asset.js index 463324bd..28a5e6dc 100644 --- a/server/graph/resolvers/asset.js +++ b/server/graph/resolvers/asset.js @@ -33,7 +33,7 @@ module.exports = { }, async allFolders(obj, args, context) { const results = await WIKI.models.assetFolders.query(); - return results.filter(folder => { + return results.filter(folder => { const path = folder.slug; return WIKI.auth.checkAccess(context.req.user, ['read:assets'], { path }); }); @@ -80,35 +80,35 @@ module.exports = { }, // 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) { + 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: null, - response: graphHelper.generateError(err) + 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 */ @@ -239,11 +239,32 @@ module.exports = { } catch (err) { return graphHelper.generateError(err) } + }, + async deleteFolder(obj, args, context) { + try { + const folderId = args.id; + + // Check if the folder exists + const folder = await WIKI.models.assetFolders.query().findById(folderId); + if (!folder) { + throw new WIKI.Error.AssetFolderInvalid(); + } + + // Check permissions + const folderPath = folder.slug; + if (!WIKI.auth.checkAccess(context.req.user, ['manage:assets'], { path: folderPath })) { + throw new WIKI.Error.AssetFolderDeleteForbidden(); + } + + // Delete the folder (must be empty) + await WIKI.models.assetFolders.query().deleteById(folderId); + + return { + responseResult: graphHelper.generateSuccess('Asset Folder has been deleted successfully.') + }; + } catch (err) { + return graphHelper.generateError(err); + } } } - // File: { - // folder(fl) { - // return fl.getFolder() - // } - // } -} \ No newline at end of file +} diff --git a/server/graph/schemas/asset.graphql b/server/graph/schemas/asset.graphql index 064af8d4..2e79dbfb 100644 --- a/server/graph/schemas/asset.graphql +++ b/server/graph/schemas/asset.graphql @@ -42,8 +42,8 @@ createFolder( parentFolderId: Int! slug: String! name: String - ): FolderCreationResponse @auth(requires: ["manage:system", "write:assets"]) - + ): FolderCreationResponse @auth(requires: ["manage:system", "write:assets"]) + # DefaultResponse @auth(requires: ["manage:system", "write:assets"]) renameAsset( @@ -55,6 +55,11 @@ createFolder( id: Int! ): DefaultResponse @auth(requires: ["manage:system", "manage:assets"]) + deleteFolder( + id: Int! + ): DefaultResponse @auth(requires: ["manage:system", "manage:assets"]) + + flushTempUploads: DefaultResponse @auth(requires: ["manage:system"]) } @@ -89,7 +94,7 @@ enum AssetKind { ALL } -type FolderCreationResponse { +type FolderCreationResponse { folderId: Int response: DefaultResponse parentId: Int