annonce @home / admin / controller / route / api
This commit is contained in:
57
server/api/controller/announce.js
Normal file
57
server/api/controller/announce.js
Normal file
@@ -0,0 +1,57 @@
|
||||
const { announcement: Announcement } = require('../models')
|
||||
const debug = require('debug')('announcement:controller')
|
||||
|
||||
const announceController = {
|
||||
async getAll (req, res) {
|
||||
const announces = await Announcement.findAll({ raw: true })
|
||||
return res.json(announces)
|
||||
},
|
||||
|
||||
_getVisible () {
|
||||
return Announcement.findAll({ where: { visible: true }, raw: true })
|
||||
},
|
||||
|
||||
async add (req, res) {
|
||||
const announcementDetail = {
|
||||
title: req.body.title,
|
||||
announcement: req.body.announcement,
|
||||
visible: true
|
||||
}
|
||||
debug('Create announcement ', req.body.title)
|
||||
const announce = await Announcement.create(announcementDetail)
|
||||
res.json(announce)
|
||||
},
|
||||
|
||||
async update (req, res) {
|
||||
const announceDetails = {
|
||||
title: req.body.title,
|
||||
announcement: req.body.announcement,
|
||||
visible: req.body.visible
|
||||
}
|
||||
const announce_id = req.params.announce_id
|
||||
try {
|
||||
let announce = await Announcement.findByPk(announce_id)
|
||||
announce = await announce.update(announceDetails)
|
||||
res.json(announce)
|
||||
} catch (e) {
|
||||
debug('Toggle announcement failed ', e)
|
||||
res.sendStatus(404)
|
||||
}
|
||||
},
|
||||
|
||||
async remove (req, res) {
|
||||
debug('Remove announcement ', req.params.announce_id)
|
||||
const announce_id = req.params.announce_id
|
||||
try {
|
||||
const announce = await Announcement.findByPk(announce_id)
|
||||
await announce.destroy()
|
||||
res.sendStatus(200)
|
||||
} catch (e) {
|
||||
debug('Remove announcement failed ', e)
|
||||
res.sendStatus(404)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = announceController
|
||||
@@ -11,6 +11,7 @@ const instanceController = require('./controller/instance')
|
||||
const apUserController = require('./controller/ap_user')
|
||||
const resourceController = require('./controller/resource')
|
||||
const oauthController = require('./controller/oauth')
|
||||
const announceController = require('./controller/announce')
|
||||
|
||||
const storage = require('./storage')
|
||||
const upload = multer({ storage })
|
||||
@@ -126,6 +127,12 @@ api.put('/resources/:resource_id', isAdmin, resourceController.hide)
|
||||
api.delete('/resources/:resource_id', isAdmin, resourceController.remove)
|
||||
api.get('/resources', isAdmin, resourceController.getAll)
|
||||
|
||||
// - ADMIN ANNOUNCEMENTS
|
||||
api.get('/announcements', isAdmin, announceController.getAll)
|
||||
api.post('/announcements', isAdmin, announceController.add)
|
||||
api.put('/announcements/:announce_id', isAdmin, announceController.update)
|
||||
api.delete('/announcements/:announce_id', isAdmin, announceController.remove)
|
||||
|
||||
api.get('/clients', hasPerm('oauth:read'), oauthController.getClients)
|
||||
api.get('/client/:client_id', hasPerm('oauth:read'), oauthController.getClient)
|
||||
api.post('/client', oauthController.createClient)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
module.exports = (sequelize, DataTypes) => {
|
||||
const announcement = sequelize.define('announcement', {
|
||||
announce: DataTypes.STRING,
|
||||
until: DataTypes.DATE,
|
||||
title: DataTypes.STRING,
|
||||
announcement: DataTypes.STRING,
|
||||
visible: DataTypes.BOOLEAN
|
||||
}, {})
|
||||
|
||||
|
||||
@@ -54,6 +54,12 @@ module.exports = {
|
||||
// add default notification
|
||||
consola.info('Add default notification')
|
||||
|
||||
// await db.announcement.create({
|
||||
// visible: true,
|
||||
// title: 'Welcome to Gancio',
|
||||
// announcement: 'TODO: HTML First presentation post'
|
||||
// })
|
||||
|
||||
// send confirmed event to mastodon
|
||||
await db.notification.create({ action: 'Create', type: 'ap', filters: { is_visible: true } })
|
||||
await db.notification.create({ action: 'Update', type: 'ap', filters: { is_visible: true } })
|
||||
|
||||
@@ -7,12 +7,10 @@ module.exports = {
|
||||
primaryKey: true,
|
||||
type: Sequelize.INTEGER
|
||||
},
|
||||
announce: {
|
||||
title: Sequelize.STRING,
|
||||
announcement: {
|
||||
type: Sequelize.STRING
|
||||
},
|
||||
until: {
|
||||
type: Sequelize.DATE
|
||||
},
|
||||
visible: Sequelize.BOOLEAN,
|
||||
createdAt: {
|
||||
allowNull: false,
|
||||
|
||||
@@ -12,6 +12,7 @@ const { spamFilter } = require('./federation/helpers')
|
||||
const debug = require('debug')('routes')
|
||||
const exportController = require('./api/controller/export')
|
||||
const eventController = require('./api/controller/event')
|
||||
const announceController = require('./api/controller/announce')
|
||||
|
||||
const helpers = require('./helpers')
|
||||
const { startOfMonth, startOfWeek, getUnixTime } = require('date-fns')
|
||||
@@ -59,11 +60,12 @@ app.use((error, req, res, next) => {
|
||||
|
||||
// remaining request goes to nuxt
|
||||
// first nuxt component is ./pages/index.vue (with ./layouts/default.vue)
|
||||
// prefill current events, tags, places (used in every path)
|
||||
// prefill current events, tags, places and announcements (used in every path)
|
||||
app.use(async (req, res, next) => {
|
||||
const start_datetime = getUnixTime(startOfWeek(startOfMonth(new Date())))
|
||||
req.events = await eventController._select(start_datetime, 100)
|
||||
req.meta = await eventController._getMeta()
|
||||
req.announcements = await announceController._getVisible()
|
||||
next()
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user