Files
2026-07-26 18:25:37 +09:00

68 lines
1.8 KiB
JavaScript

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;
});