Fixed 267U.pre2
This commit is contained in:
@@ -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
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user