Fixed 267U.pre2

This commit is contained in:
2026-07-26 18:25:37 +09:00
parent 50bfaeafdf
commit 317d00a284
1286 changed files with 80222 additions and 1 deletions
@@ -0,0 +1,32 @@
import define from "../../define.js";
import { GalleryPosts } from "../../../../models/index.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: false,
requireCredentialPrivateMode: true,
res: {
type: "array",
optional: false,
nullable: false,
items: {
type: "object",
optional: false,
nullable: false,
ref: "GalleryPost"
}
}
};
export const paramDef = {
type: "object",
properties: {},
required: []
};
export default define(meta, paramDef, async (ps, me)=>{
const query = GalleryPosts.createQueryBuilder("post").andWhere("post.createdAt > :date", {
date: new Date(Date.now() - 1000 * 60 * 60 * 24 * 3)
}).andWhere("post.likedCount > 0").orderBy("post.likedCount", "DESC");
const posts = await query.take(10).getMany();
return await GalleryPosts.packMany(posts, me);
});
@@ -0,0 +1,30 @@
import define from "../../define.js";
import { GalleryPosts } from "../../../../models/index.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: false,
requireCredentialPrivateMode: true,
res: {
type: "array",
optional: false,
nullable: false,
items: {
type: "object",
optional: false,
nullable: false,
ref: "GalleryPost"
}
}
};
export const paramDef = {
type: "object",
properties: {},
required: []
};
export default define(meta, paramDef, async (ps, me)=>{
const query = GalleryPosts.createQueryBuilder("post").andWhere("post.likedCount > 0").orderBy("post.likedCount", "DESC");
const posts = await query.take(10).getMany();
return await GalleryPosts.packMany(posts, me);
});
@@ -0,0 +1,45 @@
import define from "../../define.js";
import { makePaginationQuery } from "../../common/make-pagination-query.js";
import { GalleryPosts } from "../../../../models/index.js";
export const meta = {
tags: [
"gallery"
],
requireCredentialPrivateMode: true,
res: {
type: "array",
optional: false,
nullable: false,
items: {
type: "object",
optional: false,
nullable: false,
ref: "GalleryPost"
}
}
};
export const paramDef = {
type: "object",
properties: {
limit: {
type: "integer",
minimum: 1,
maximum: 100,
default: 10
},
sinceId: {
type: "string",
format: "misskey:id"
},
untilId: {
type: "string",
format: "misskey:id"
}
},
required: []
};
export default define(meta, paramDef, async (ps, me)=>{
const query = makePaginationQuery(GalleryPosts.createQueryBuilder("post"), ps.sinceId, ps.untilId).innerJoinAndSelect("post.user", "user");
const posts = await query.take(ps.limit).getMany();
return await GalleryPosts.packMany(posts, me);
});
@@ -0,0 +1,74 @@
import define from "../../../define.js";
import { DriveFiles, GalleryPosts } from "../../../../../models/index.js";
import { genId } from "../../../../../misc/gen-id.js";
import { GalleryPost } from "../../../../../models/entities/gallery-post.js";
import { HOUR } from "../../../../../const.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: true,
kind: "write:gallery",
limit: {
duration: HOUR,
max: 300
},
res: {
type: "object",
optional: false,
nullable: false,
ref: "GalleryPost"
},
errors: {}
};
export const paramDef = {
type: "object",
properties: {
title: {
type: "string",
minLength: 1
},
description: {
type: "string",
nullable: true
},
fileIds: {
type: "array",
uniqueItems: true,
minItems: 1,
maxItems: 32,
items: {
type: "string",
format: "misskey:id"
}
},
isSensitive: {
type: "boolean",
default: false
}
},
required: [
"title",
"fileIds"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const files = (await Promise.all(ps.fileIds.map((fileId)=>DriveFiles.findOneBy({
id: fileId,
userId: user.id
})))).filter((file)=>file != null);
if (files.length === 0) {
throw new Error();
}
const post = await GalleryPosts.insert(new GalleryPost({
id: genId(),
createdAt: new Date(),
updatedAt: new Date(),
title: ps.title,
description: ps.description,
userId: user.id,
isSensitive: ps.isSensitive,
fileIds: files.map((file)=>file.id)
})).then((x)=>GalleryPosts.findOneByOrFail(x.identifiers[0]));
return await GalleryPosts.pack(post, user);
});
@@ -0,0 +1,39 @@
import define from "../../../define.js";
import { ApiError } from "../../../error.js";
import { GalleryPosts } from "../../../../../models/index.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: true,
kind: "write:gallery",
errors: {
noSuchPost: {
message: "No such post.",
code: "NO_SUCH_POST",
id: "ae52f367-4bd7-4ecd-afc6-5672fff427f5"
}
}
};
export const paramDef = {
type: "object",
properties: {
postId: {
type: "string",
format: "misskey:id"
}
},
required: [
"postId"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const post = await GalleryPosts.findOneBy({
id: ps.postId,
userId: user.id
});
if (post == null) {
throw new ApiError(meta.errors.noSuchPost);
}
await GalleryPosts.delete(post.id);
});
@@ -0,0 +1,63 @@
import define from "../../../define.js";
import { ApiError } from "../../../error.js";
import { GalleryPosts, GalleryLikes } from "../../../../../models/index.js";
import { genId } from "../../../../../misc/gen-id.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: true,
kind: "write:gallery-likes",
errors: {
noSuchPost: {
message: "No such post.",
code: "NO_SUCH_POST",
id: "56c06af3-1287-442f-9701-c93f7c4a62ff"
},
alreadyLiked: {
message: "The post has already been liked.",
code: "ALREADY_LIKED",
id: "40e9ed56-a59c-473a-bf3f-f289c54fb5a7"
}
}
};
export const paramDef = {
type: "object",
properties: {
postId: {
type: "string",
format: "misskey:id"
}
},
required: [
"postId"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const post = await GalleryPosts.findOneBy({
id: ps.postId
});
if (post == null) {
throw new ApiError(meta.errors.noSuchPost);
}
// if already liked
const exist = await GalleryLikes.exist({
where: {
postId: post.id,
userId: user.id
}
});
if (exist) {
throw new ApiError(meta.errors.alreadyLiked);
}
// Create like
await GalleryLikes.insert({
id: genId(),
createdAt: new Date(),
postId: post.id,
userId: user.id
});
GalleryPosts.increment({
id: post.id
}, "likedCount", 1);
});
@@ -0,0 +1,44 @@
import define from "../../../define.js";
import { ApiError } from "../../../error.js";
import { GalleryPosts } from "../../../../../models/index.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: false,
requireCredentialPrivateMode: true,
errors: {
noSuchPost: {
message: "No such post.",
code: "NO_SUCH_POST",
id: "1137bf14-c5b0-4604-85bb-5b5371b1cd45"
}
},
res: {
type: "object",
optional: false,
nullable: false,
ref: "GalleryPost"
}
};
export const paramDef = {
type: "object",
properties: {
postId: {
type: "string",
format: "misskey:id"
}
},
required: [
"postId"
]
};
export default define(meta, paramDef, async (ps, me)=>{
const post = await GalleryPosts.findOneBy({
id: ps.postId
});
if (post == null) {
throw new ApiError(meta.errors.noSuchPost);
}
return await GalleryPosts.pack(post, me);
});
@@ -0,0 +1,54 @@
import define from "../../../define.js";
import { ApiError } from "../../../error.js";
import { GalleryPosts, GalleryLikes } from "../../../../../models/index.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: true,
kind: "write:gallery-likes",
errors: {
noSuchPost: {
message: "No such post.",
code: "NO_SUCH_POST",
id: "c32e6dd0-b555-4413-925e-b3757d19ed84"
},
notLiked: {
message: "You have not liked that post.",
code: "NOT_LIKED",
id: "e3e8e06e-be37-41f7-a5b4-87a8250288f0"
}
}
};
export const paramDef = {
type: "object",
properties: {
postId: {
type: "string",
format: "misskey:id"
}
},
required: [
"postId"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const post = await GalleryPosts.findOneBy({
id: ps.postId
});
if (post == null) {
throw new ApiError(meta.errors.noSuchPost);
}
const like = await GalleryLikes.findOneBy({
postId: post.id,
userId: user.id
});
if (like == null) {
throw new ApiError(meta.errors.notLiked);
}
// Delete like
await GalleryLikes.delete(like.id);
GalleryPosts.decrement({
id: post.id
}, "likedCount", 1);
});
@@ -0,0 +1,80 @@
import define from "../../../define.js";
import { DriveFiles, GalleryPosts } from "../../../../../models/index.js";
import { HOUR } from "../../../../../const.js";
export const meta = {
tags: [
"gallery"
],
requireCredential: true,
kind: "write:gallery",
limit: {
duration: HOUR,
max: 300
},
res: {
type: "object",
optional: false,
nullable: false,
ref: "GalleryPost"
},
errors: {}
};
export const paramDef = {
type: "object",
properties: {
postId: {
type: "string",
format: "misskey:id"
},
title: {
type: "string",
minLength: 1
},
description: {
type: "string",
nullable: true
},
fileIds: {
type: "array",
uniqueItems: true,
minItems: 1,
maxItems: 32,
items: {
type: "string",
format: "misskey:id"
}
},
isSensitive: {
type: "boolean",
default: false
}
},
required: [
"postId",
"title",
"fileIds"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const files = (await Promise.all(ps.fileIds.map((fileId)=>DriveFiles.findOneBy({
id: fileId,
userId: user.id
})))).filter((file)=>file != null);
if (files.length === 0) {
throw new Error();
}
await GalleryPosts.update({
id: ps.postId,
userId: user.id
}, {
updatedAt: new Date(),
title: ps.title,
description: ps.description,
isSensitive: ps.isSensitive,
fileIds: files.map((file)=>file.id)
});
const post = await GalleryPosts.findOneByOrFail({
id: ps.postId
});
return await GalleryPosts.pack(post, user);
});