109 lines
2.8 KiB
JavaScript
109 lines
2.8 KiB
JavaScript
import define from "../../../define.js";
|
|
import { Announcements } from "../../../../../models/index.js";
|
|
import { genId } from "../../../../../misc/gen-id.js";
|
|
import { publishBroadcastStream } from "../../../../../services/stream.js";
|
|
export const meta = {
|
|
tags: [
|
|
"admin"
|
|
],
|
|
requireCredential: true,
|
|
requireModerator: true,
|
|
res: {
|
|
type: "object",
|
|
optional: false,
|
|
nullable: false,
|
|
properties: {
|
|
id: {
|
|
type: "string",
|
|
optional: false,
|
|
nullable: false,
|
|
format: "id",
|
|
example: "xxxxxxxxxx"
|
|
},
|
|
createdAt: {
|
|
type: "string",
|
|
optional: false,
|
|
nullable: false,
|
|
format: "date-time"
|
|
},
|
|
updatedAt: {
|
|
type: "string",
|
|
optional: false,
|
|
nullable: true,
|
|
format: "date-time"
|
|
},
|
|
title: {
|
|
type: "string",
|
|
optional: false,
|
|
nullable: false
|
|
},
|
|
text: {
|
|
type: "string",
|
|
optional: false,
|
|
nullable: false
|
|
},
|
|
imageUrl: {
|
|
type: "string",
|
|
optional: false,
|
|
nullable: true
|
|
},
|
|
showPopup: {
|
|
type: "boolean",
|
|
optional: true,
|
|
nullable: false
|
|
},
|
|
isGoodNews: {
|
|
type: "boolean",
|
|
optional: true,
|
|
nullable: false
|
|
}
|
|
}
|
|
}
|
|
};
|
|
export const paramDef = {
|
|
type: "object",
|
|
properties: {
|
|
title: {
|
|
type: "string",
|
|
minLength: 1
|
|
},
|
|
text: {
|
|
type: "string",
|
|
minLength: 1
|
|
},
|
|
imageUrl: {
|
|
type: "string",
|
|
nullable: true,
|
|
minLength: 1
|
|
},
|
|
showPopup: {
|
|
type: "boolean"
|
|
},
|
|
isGoodNews: {
|
|
type: "boolean"
|
|
}
|
|
},
|
|
required: [
|
|
"title",
|
|
"text",
|
|
"imageUrl"
|
|
]
|
|
};
|
|
export default define(meta, paramDef, async (ps)=>{
|
|
const announcement = await Announcements.insert({
|
|
id: genId(),
|
|
createdAt: new Date(),
|
|
updatedAt: null,
|
|
title: ps.title,
|
|
text: ps.text,
|
|
imageUrl: ps.imageUrl,
|
|
showPopup: ps.showPopup ?? false,
|
|
isGoodNews: ps.isGoodNews ?? false
|
|
}).then((x)=>Announcements.findOneByOrFail(x.identifiers[0]));
|
|
publishBroadcastStream("announcementAdded", announcement);
|
|
return Object.assign({}, announcement, {
|
|
createdAt: announcement.createdAt.toISOString(),
|
|
updatedAt: null
|
|
});
|
|
});
|