47 lines
939 B
TypeScript
47 lines
939 B
TypeScript
import define from "../../define.js";
|
|
import { ApiError } from "../../error.js";
|
|
import { Hashtags } from "@/models/index.js";
|
|
import { normalizeForSearch } from "@/misc/normalize-for-search.js";
|
|
|
|
export const meta = {
|
|
tags: ["hashtags"],
|
|
|
|
requireCredential: false,
|
|
requireCredentialPrivateMode: true,
|
|
|
|
res: {
|
|
type: "object",
|
|
optional: false,
|
|
nullable: false,
|
|
ref: "Hashtag",
|
|
},
|
|
|
|
errors: {
|
|
noSuchHashtag: {
|
|
message: "No such hashtag.",
|
|
code: "NO_SUCH_HASHTAG",
|
|
id: "110ee688-193e-4a3a-9ecf-c167b2e6981e",
|
|
},
|
|
},
|
|
} as const;
|
|
|
|
export const paramDef = {
|
|
type: "object",
|
|
properties: {
|
|
tag: { type: "string" },
|
|
},
|
|
required: ["tag"],
|
|
} as const;
|
|
|
|
|
|
export default define(meta, paramDef, async (ps, user) => {
|
|
const hashtag = await Hashtags.findOneBy({
|
|
name: normalizeForSearch(ps.tag),
|
|
});
|
|
if (hashtag == null) {
|
|
throw new ApiError(meta.errors.noSuchHashtag);
|
|
}
|
|
|
|
return await Hashtags.pack(hashtag);
|
|
});
|