1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- const Errors = require('../lib/errors')
- module.exports = (sequelize, DataTypes) => {
- let Notification = sequelize.define('Notification', {
- interacted: {
- type: DataTypes.BOOLEAN,
- defaultValue: false
- },
- read: {
- type: DataTypes.BOOLEAN,
- defaultValue: false
- },
- type: DataTypes.ENUM('mention', 'thread update', 'reply')
- }, {
- classMethods: {
- associate (models) {
- Notification.hasOne(models.PostNotification)
- Notification.belongsTo(models.User)
- },
- filterMentions (mentions) {
- //If mentions is not an array of strings
- if(!Array.isArray(mentions) || mentions.filter(m => typeof m !== 'string').length) {
- throw Errors.sequelizeValidation(sequelize, {
- error: 'mentions must be an array of strings',
- value: mentions
- })
- }
- return mentions.filter((mention, pos, self) => {
- return self.indexOf(mention) === pos
- })
- },
- //Props fields: userFrom, usernameTo, post, type
- async createPostNotification (props) {
- let { PostNotification, User, Post } = sequelize.models
- let userTo = await User.findOne({ where: { username: props.usernameTo } })
- if(!userTo) return null
-
- let notification = await Notification.create({ type: props.type })
- let postNotification = await PostNotification.create()
- await postNotification.setUser(props.userFrom)
- await postNotification.setPost(props.post)
- await notification.setPostNotification(postNotification)
- await notification.setUser(userTo)
- let reloadedNotification = await notification.reload({
- include: [{
- model: PostNotification,
- include: [Post, { model: User, attributes: ['createdAt', 'username', 'color'] }]
- }]
- })
- return reloadedNotification
- }
- },
- instanceMethods: {
- async emitNotificationMessage (ioUsers, io) {
- let User = sequelize.models.User
- let user = await User.findById(this.UserId)
-
- if(ioUsers[user.username]) {
- console.log(ioUsers)
- io.to(ioUsers[user.username])
- .emit('notification', this.toJSON())
- }
- }
- }
- })
- return Notification
- }
|