import mongoose from "mongoose" ; import Counter from "./counter" ; export interface ArticleModel extends mongoose . Document { id : number ; title : string ; alias : string ; authorId : number ; abstract ? : string ; image ? : string ; content : string ; views : number ; likers : number [ ] ; tags : string [ ] ; visible : boolean ; createdAt : Date ; createdBy : number ; updatedAt : Date ; updatedBy : number ; } const articleSchema = new mongoose . Schema < ArticleModel > ( { id : { type : Number , unique : true } , title : { type : String , required : true } , alias : { type : String , required : true } , authorId : { type : Number , required : true } , abstract : String , image : String , content : { type : String , required : true } , views : { type : Number , default : 0 } , likers : [ Number ] , tags : [ String ] , visible : { type : Boolean , default : false } , createdAt : { type : Date , default : Date . now } , createdBy : Number , updatedAt : { type : Date , default : Date . now } , updatedBy : Number , } , { collection : "articles" , } ) ; articleSchema . pre < ArticleModel > ( "save" , function ( next ) { Counter . findByIdAndUpdate ( "article" , { $inc : { count : 1 } } , { new : true , upsert : true } , ( err , counter ) => { if ( err ) { return next ( err ) ; } this . id = counter . count ; next ( ) ; } ) ; } ) ; export default mongoose . model < ArticleModel > ( "Article" , articleSchema ) ;