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,79 @@
import define from "../../../define.js";
import { ApiError } from "../../../error.js";
import { Notes, PromoNotes } from "../../../../../models/index.js";
export const meta = {
tags: [
"admin"
],
requireCredential: true,
requireModerator: true,
errors: {
noSuchNote: {
message: "No such note.",
code: "NO_SUCH_NOTE",
id: "ee449fbe-af2a-453b-9cae-cf2fe7c895fc"
},
alreadyPromoted: {
message: "The note has already promoted.",
code: "ALREADY_PROMOTED",
id: "ae427aa2-7a41-484f-a18c-2c1104051604"
},
notAdService: {
message: "The note must have #AdService.",
code: "NOT_AD_SERVICE",
id: "970a4d57-7b67-4540-80ea-f210041724ef"
}
}
};
export const paramDef = {
type: "object",
properties: {
noteId: {
type: "string",
format: "misskey:id"
},
expiresAt: {
type: "integer"
},
credits: {
type: "integer",
minimum: 1,
maximum: 100000,
default: 1
}
},
required: [
"noteId"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const note = await Notes.findOneBy({
id: ps.noteId
});
if (note == null) {
throw new ApiError(meta.errors.noSuchNote);
}
if (!note.tags.includes("adservice")) {
throw new ApiError(meta.errors.notAdService);
}
const expiresAt = ps.expiresAt ? new Date(ps.expiresAt) : new Date(Date.now() + 30 * 86400000);
const credits = ps.credits ?? 1;
const exist = await PromoNotes.findOneBy({
noteId: note.id
});
if (exist) {
await PromoNotes.update(note.id, {
expiresAt: exist.expiresAt.getTime() > expiresAt.getTime() ? exist.expiresAt : expiresAt,
totalCredits: exist.totalCredits + credits,
remainingCredits: exist.remainingCredits + credits
});
return;
}
await PromoNotes.insert({
noteId: note.id,
expiresAt,
totalCredits: credits,
remainingCredits: credits,
userId: note.userId
});
});
@@ -0,0 +1,52 @@
import rndstr from "rndstr";
import { Notes, PromoNotes } from "../../../../../models/index.js";
import define from "../../../define.js";
import { makePaginationQuery } from "../../../common/make-pagination-query.js";
export const meta = {
tags: [
"admin"
],
requireCredential: true,
requireModerator: true
};
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, user)=>{
const query = makePaginationQuery(Notes.createQueryBuilder("note"), ps.sinceId, ps.untilId).andWhere(`'adservice' = ANY(note.tags)`).innerJoinAndSelect("note.user", "user").leftJoinAndSelect("note.reply", "reply").leftJoinAndSelect("note.renote", "renote").leftJoinAndSelect("reply.user", "replyUser").leftJoinAndSelect("renote.user", "renoteUser");
const notes = await query.take(ps.limit).getMany();
if (notes.length === 0) return [];
const promos = await PromoNotes.findBy(notes.map((note)=>({
noteId: note.id
})));
return Promise.all(notes.map(async (note)=>{
const promo = promos.find((item)=>item.noteId === note.id);
const expiredCredits = promo && promo.expiresAt.getTime() <= Date.now() ? promo.remainingCredits : 0;
note._prId_ = rndstr("a-z0-9", 8);
return {
id: note.id,
note: await Notes.pack(note, user),
expiresAt: promo?.expiresAt.toISOString() ?? null,
totalCredits: promo?.totalCredits ?? 0,
remainingCredits: promo?.remainingCredits ?? 0,
expiredCredits
};
}));
});