import Member from "./Member" ; import { User } from "./User" ; import { ObjectID } from "mongodb" ; import { GraphQLJSONObject } from "graphql-type-json" ; import { Field , registerEnumType , ID , ObjectType } from "type-graphql" ; import { prop , Ref , getModelForClass , modelOptions , index , Severity , } from "@typegoose/typegoose" ; export enum NOTIFICATION_TYPE { INVITATION = "INVITATION" , MENTION = "MENTION" } registerEnumType ( NOTIFICATION_TYPE , { name : "NOTIFICATION_TYPE" , description : "Notification types enums" , } ) ; @ ObjectType ( ) @ modelOptions ( { options : { allowMixed : Severity . ALLOW , customName : "notification" , } , schemaOptions : { timestamps : true , collection : "notifications" , } , } ) @ index ( { createdAt : 1 } , { expireAfterSeconds : 604800 } ) export class Notification { @ Field ( type => ID , { name : "id" } ) _id ! : ObjectID ; @ Field ( ) createdAt ! : Date ; @ Field ( type => Member ) @ prop ( { ref : "user" , required : true } ) public sender ! : Ref < User > ; @ Field ( type => ID ) @ prop ( { ref : "user" , required : true } ) public receiver ! : Ref < User > ; @ Field ( ) @ prop ( { default : false } ) public seen ? : boolean ; @ Field ( type => NOTIFICATION_TYPE ) @ prop ( { enum : NOTIFICATION_TYPE , required : true } ) public type ! : string ; @ Field ( type => GraphQLJSONObject ) @ prop ( { default : { } } ) public payload ? : Object ; } const NotificationModel = getModelForClass ( Notification ) ; export default NotificationModel ;