Add system announcements interface
This commit is contained in:
@@ -40,6 +40,26 @@ class MessageController extends Controller {
|
||||
await message.dismiss()
|
||||
return res.api()
|
||||
}
|
||||
|
||||
async create_banner(req, res, next) {
|
||||
// expires, display_type = info, message, user_id?
|
||||
const expires = req.body.expires
|
||||
const display_type = req.body.display_type || 'info'
|
||||
const message = req.body.message
|
||||
const user_ids = req.body.user_ids
|
||||
|
||||
if ( !expires )
|
||||
return res.status(400)
|
||||
.message(`${req.T('api.missing_field')} expires`)
|
||||
.api()
|
||||
|
||||
if ( !message )
|
||||
return res.status(400)
|
||||
.message(`${req.T('api.missing_field')} message`)
|
||||
.api()
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = exports = MessageController
|
||||
|
||||
84
app/controllers/api/v1/System.controller.js
Normal file
84
app/controllers/api/v1/System.controller.js
Normal file
@@ -0,0 +1,84 @@
|
||||
const { Controller } = require('libflitter')
|
||||
|
||||
class ReflectController extends Controller {
|
||||
static get services() {
|
||||
return [...super.services, 'routers', 'models', 'activity']
|
||||
}
|
||||
|
||||
async get_announcements(req, res, next) {
|
||||
const Announcement = this.models.get('system:Announcement')
|
||||
const announcements = await Announcement.find()
|
||||
|
||||
const data = []
|
||||
for ( const announcement of announcements ) {
|
||||
data.push(await announcement.to_api())
|
||||
}
|
||||
|
||||
return res.api(data)
|
||||
}
|
||||
|
||||
async get_announcement(req, res, next) {
|
||||
const Announcement = this.models.get('system:Announcement')
|
||||
const announcement = await Announcement.findById(req.params.id)
|
||||
|
||||
if ( !announcement )
|
||||
return res.status(404)
|
||||
.message(req.T('api.announcement_not_found'))
|
||||
.api()
|
||||
|
||||
return res.api(await announcement.to_api())
|
||||
}
|
||||
|
||||
async create_announcement(req, res, next) {
|
||||
const Announcement = this.models.get('system:Announcement')
|
||||
|
||||
const required_fields = ['title', 'message', 'user_ids', 'group_ids', 'type']
|
||||
for ( const field of required_fields ) {
|
||||
if ( !req.body[field] )
|
||||
return res.status(400)
|
||||
.message(`${req.T('api.missing_field')} ${field}`)
|
||||
.api()
|
||||
}
|
||||
|
||||
if ( !Array.isArray(req.body.user_ids) )
|
||||
return res.status(400)
|
||||
.message(`${req.T('api.improper_field')} user_ids`)
|
||||
.api()
|
||||
|
||||
if ( !Array.isArray(req.body.group_ids) )
|
||||
return res.status(400)
|
||||
.message(`${req.T('api.improper_field')} group_ids`)
|
||||
.api()
|
||||
|
||||
if ( !['email', 'login', 'banner'].includes(req.body.type) )
|
||||
return res.status(400)
|
||||
.message(`${req.T('api.improper_field')} type`)
|
||||
.api()
|
||||
|
||||
const announcement = new Announcement({
|
||||
title: req.body.title,
|
||||
message: req.body.message,
|
||||
user_ids: req.body.user_ids,
|
||||
group_ids: req.body.group_ids,
|
||||
type: req.body.type,
|
||||
})
|
||||
|
||||
await announcement.save()
|
||||
return res.api(await announcement.to_api())
|
||||
}
|
||||
|
||||
async delete_announcement(req, res, next) {
|
||||
const Announcement = this.models.get('system:Announcement')
|
||||
const announcement = await Announcement.findById(req.params.id)
|
||||
|
||||
if ( !announcement )
|
||||
return res.status(404)
|
||||
.message(req.T('api.announcement_not_found'))
|
||||
.api()
|
||||
|
||||
await announcement.delete()
|
||||
return res.api()
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = exports = ReflectController
|
||||
Reference in New Issue
Block a user