import create from "../../../../services/following/create.js"; import define from "../../define.js"; import { ApiError } from "../../error.js"; import { getUser } from "../../common/getters.js"; import { Followings, Users } from "../../../../models/index.js"; import { IdentifiableError } from "../../../../misc/identifiable-error.js"; import { HOUR } from "../../../../const.js"; export const meta = { tags: [ "following", "users" ], limit: { duration: HOUR, max: 100 }, requireCredential: true, kind: "write:following", errors: { noSuchUser: { message: "No such user.", code: "NO_SUCH_USER", id: "fcd2eef9-a9b2-4c4f-8624-038099e90aa5" }, followeeIsYourself: { message: "Followee is yourself.", code: "FOLLOWEE_IS_YOURSELF", id: "26fbe7bb-a331-4857-af17-205b426669a9" }, alreadyFollowing: { message: "You are already following that user.", code: "ALREADY_FOLLOWING", id: "35387507-38c7-4cb9-9197-300b93783fa0" }, blocking: { message: "You are blocking that user.", code: "BLOCKING", id: "4e2206ec-aa4f-4960-b865-6c23ac38e2d9" }, blocked: { message: "You are blocked by that user.", code: "BLOCKED", id: "c4ab57cc-4e41-45e9-bfd9-584f61e35ce0" } }, res: { type: "object", optional: false, nullable: false, ref: "UserLite" } }; export const paramDef = { type: "object", properties: { userId: { type: "string", format: "misskey:id" } }, required: [ "userId" ] }; export default define(meta, paramDef, async (ps, user)=>{ const follower = user; // 自分自身 if (user.id === ps.userId) { throw new ApiError(meta.errors.followeeIsYourself); } // Get followee const followee = await getUser(ps.userId).catch((e)=>{ if (e.id === "15348ddd-432d-49c2-8a5a-8069753becff") throw new ApiError(meta.errors.noSuchUser); throw e; }); // Check if already following const exist = await Followings.exist({ where: { followerId: follower.id, followeeId: followee.id } }); if (exist) { throw new ApiError(meta.errors.alreadyFollowing); } try { await create(follower, followee); } catch (e) { if (e instanceof IdentifiableError) { if (e.id === "710e8fb0-b8c3-4922-be49-d5d93d8e6a6e") throw new ApiError(meta.errors.blocking); if (e.id === "3338392a-f764-498d-8855-db939dcf8c48") throw new ApiError(meta.errors.blocked); } throw e; } return await Users.pack(followee.id, user); });