import { publishDriveStream } from "../../../../../services/stream.js"; import define from "../../../define.js"; import { ApiError } from "../../../error.js"; import { DriveFolders } from "../../../../../models/index.js"; import { genId } from "../../../../../misc/gen-id.js"; export const meta = { tags: [ "drive" ], requireCredential: true, kind: "write:drive", errors: { noSuchFolder: { message: "No such folder.", code: "NO_SUCH_FOLDER", id: "53326628-a00d-40a6-a3cd-8975105c0f95" } }, res: { type: "object", optional: false, nullable: false, ref: "DriveFolder" } }; export const paramDef = { type: "object", properties: { name: { type: "string", default: "Untitled", maxLength: 200 }, parentId: { type: "string", format: "misskey:id", nullable: true } }, required: [] }; export default define(meta, paramDef, async (ps, user)=>{ // If the parent folder is specified let parent = null; if (ps.parentId) { // Fetch parent folder parent = await DriveFolders.findOneBy({ id: ps.parentId, userId: user.id }); if (parent == null) { throw new ApiError(meta.errors.noSuchFolder); } } // Create folder const folder = await DriveFolders.insert({ id: genId(), createdAt: new Date(), name: ps.name, parentId: parent !== null ? parent.id : null, userId: user.id }).then((x)=>DriveFolders.findOneByOrFail(x.identifiers[0])); const folderObj = await DriveFolders.pack(folder); // Publish folderCreated event publishDriveStream(user.id, "folderCreated", folderObj); return folderObj; });