Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat:introduced graphql createFolderWithId, get all folders and deleteFolder #6727

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
69 changes: 64 additions & 5 deletions server/graph/resolvers/asset.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
*/
Expand Down Expand Up @@ -201,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()
// }
// }
}
24 changes: 23 additions & 1 deletion server/graph/schemas/asset.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,29 @@ type AssetQuery {
folders(
parentFolderId: Int!
): [AssetFolder] @auth(requires: ["manage:system", "read:assets"])

allFolders: [AssetFolder] @auth(requires: ["manage:system", "read:assets"])
}

# -----------------------------------------------
# MUTATIONS
# -----------------------------------------------

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!
Expand All @@ -45,6 +55,11 @@ type AssetMutation {
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"])
}

Expand All @@ -70,10 +85,17 @@ type AssetFolder {
id: Int!
slug: String!
name: String
parentId: Int
}

enum AssetKind {
IMAGE
BINARY
ALL
}

type FolderCreationResponse {
folderId: Int
response: DefaultResponse
parentId: Int
}