64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import AbstractModel from './abstractModel'
|
|
import {parseDateOrNull} from '@/helpers/parseDateOrNull'
|
|
import UserModel from '@/models/user'
|
|
import TaskModel from '@/models/task'
|
|
import TaskCommentModel from '@/models/taskComment'
|
|
import ListModel from '@/models/list'
|
|
import TeamModel from '@/models/team'
|
|
|
|
import {NOTIFICATION_NAMES, type INotification} from '@/modelTypes/INotification'
|
|
|
|
export default class NotificationModel extends AbstractModel<INotification> implements INotification {
|
|
id = 0
|
|
name = ''
|
|
notification: INotification['notification'] = null
|
|
read = false
|
|
readAt: Date | null = null
|
|
|
|
created: Date
|
|
|
|
constructor(data: Partial<INotification>) {
|
|
super()
|
|
this.assignData(data)
|
|
|
|
switch (this.name) {
|
|
case NOTIFICATION_NAMES.TASK_COMMENT:
|
|
this.notification = {
|
|
doer: new UserModel(this.notification.doer),
|
|
task: new TaskModel(this.notification.task),
|
|
comment: new TaskCommentModel(this.notification.comment),
|
|
}
|
|
break
|
|
case NOTIFICATION_NAMES.TASK_ASSIGNED:
|
|
this.notification = {
|
|
doer: new UserModel(this.notification.doer),
|
|
task: new TaskModel(this.notification.task),
|
|
assignee: new UserModel(this.notification.assignee),
|
|
}
|
|
break
|
|
case NOTIFICATION_NAMES.TASK_DELETED:
|
|
this.notification = {
|
|
doer: new UserModel(this.notification.doer),
|
|
task: new TaskModel(this.notification.task),
|
|
}
|
|
break
|
|
case NOTIFICATION_NAMES.LIST_CREATED:
|
|
this.notification = {
|
|
doer: new UserModel(this.notification.doer),
|
|
list: new ListModel(this.notification.list),
|
|
}
|
|
break
|
|
case NOTIFICATION_NAMES.TEAM_MEMBER_ADDED:
|
|
this.notification = {
|
|
doer: new UserModel(this.notification.doer),
|
|
member: new UserModel(this.notification.member),
|
|
team: new TeamModel(this.notification.team),
|
|
}
|
|
break
|
|
}
|
|
|
|
this.created = new Date(this.created)
|
|
this.readAt = parseDateOrNull(this.readAt)
|
|
}
|
|
}
|