refactor(db/models): add new story models
This commit is contained in:
		
							parent
							
								
									0f825c0e0c
								
							
						
					
					
						commit
						1db9bdec9c
					
				
							
								
								
									
										65
									
								
								models/stories/chapter.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								models/stories/chapter.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | ||||
| import mongoose, {Schema, PopulatedDoc, Document, Model} from "mongoose"; | ||||
| import { IBand } from "../band"; | ||||
| export interface IChapter { | ||||
| 	title: string; | ||||
| 	summary: string; | ||||
| 	id?: number; | ||||
| 	// index: number;
 | ||||
| 	words?: number; | ||||
| 	notes: string; | ||||
| 	genre: string[]; | ||||
| 	bands: PopulatedDoc<IBand & Document>[]; | ||||
| 	characters: string[]; | ||||
| 	relationships: string[][]; | ||||
| 	nsfw: boolean; | ||||
| 	loggedInOnly: boolean; | ||||
| 	hidden: boolean; | ||||
| 	posted: Date; | ||||
| 	reviews: number | ||||
| } | ||||
| 
 | ||||
| export const Chapter = new mongoose.Schema<IChapter>({ | ||||
| 	title: { | ||||
| 		type: String, | ||||
| 		default: "" | ||||
| 	}, | ||||
| 	id: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	summary: { | ||||
| 		type: String | ||||
| 	}, | ||||
| 	words: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	notes: { | ||||
| 		type: String | ||||
| 	}, | ||||
| 	genre: [{ | ||||
| 		type: String | ||||
| 	}], | ||||
| 	bands: [{ | ||||
| 		type: Number, | ||||
| 		ref: "Band" | ||||
| 	}], | ||||
| 	reviews: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	characters: [{ type: String }], | ||||
| 	relationships: [{ type: String }], | ||||
| 	nsfw: { | ||||
| 		type: Boolean | ||||
| 	}, | ||||
| 	loggedInOnly: { | ||||
| 		type: Boolean, | ||||
| 		default: true | ||||
| 	}, | ||||
| 	hidden: { | ||||
| 		type: Boolean, | ||||
| 		default: false | ||||
| 	}, | ||||
| 	posted: { | ||||
| 		type: Date, | ||||
| 		default: new Date() | ||||
| 	} | ||||
| }) | ||||
							
								
								
									
										96
									
								
								models/stories/draft.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								models/stories/draft.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | ||||
| import { hasMigrated } from "../../lib/dbconfig"; | ||||
| import { IBand } from "../../models/band"; | ||||
| import { IFicmas } from "../../models/challenges/ficmas"; | ||||
| import { IChallenge } from "../../models/challenges/gen"; | ||||
| import { IUser } from "../../models/user"; | ||||
| import mongoose, {Schema, PopulatedDoc, Document, Model} from "mongoose"; | ||||
| import SequenceFactory from "mongoose-sequence"; | ||||
| 
 | ||||
| const AutoIncrement = SequenceFactory(mongoose); | ||||
| 
 | ||||
| export interface IDraft { | ||||
| 	_id?: number, | ||||
| 	title: string; | ||||
| 	chaptertitle: string; | ||||
| 	updatedAt: Date; | ||||
| 	author: PopulatedDoc<IUser & Document>; | ||||
| 	notes: string; | ||||
| 	genre: string[]; | ||||
| 	bands: PopulatedDoc<IBand & Document>[]; | ||||
| 	characters: string[]; | ||||
| 	relationships: string[]; | ||||
| 	summary: string; | ||||
| 	nsfw: boolean; | ||||
| 	hidden: boolean; | ||||
| 	loggedInOnly: boolean; | ||||
| 	oneshot: boolean; | ||||
| 	challenge: PopulatedDoc<IChallenge & Document>; | ||||
| 	ficmas: PopulatedDoc<IFicmas & Document>; | ||||
| } | ||||
| 
 | ||||
| const DraftSchema = new Schema<IDraft>({ | ||||
| 	title: { | ||||
| 		type: String | ||||
| 	}, | ||||
| 	_id: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	chaptertitle: { | ||||
| 		type: String, | ||||
| 	}, | ||||
| 	updatedAt: { | ||||
| 		type: Date, | ||||
| 		default: new Date() | ||||
| 	}, | ||||
| 	author: { | ||||
| 		type: Number, | ||||
| 		ref: "User" | ||||
| 	}, | ||||
| 	notes: { | ||||
| 		type: String | ||||
| 	}, | ||||
| 	genre: [{ | ||||
| 		type: String | ||||
| 	}], | ||||
| 	bands: [{ | ||||
| 		type: Number, | ||||
| 		ref: "Band" | ||||
| 	}], | ||||
| 	characters: [{ | ||||
| 		type: String | ||||
| 	}], | ||||
| 	relationships: [{ | ||||
| 		type: String | ||||
| 	}], | ||||
| 	nsfw: { | ||||
| 		type: Boolean | ||||
| 	}, | ||||
| 	summary: { | ||||
| 		type: String | ||||
| 	}, | ||||
| 	hidden: { | ||||
| 		type: Boolean, | ||||
| 		default: false | ||||
| 	}, | ||||
| 	loggedInOnly: { | ||||
| 		type: Boolean | ||||
| 	}, | ||||
| 	oneshot: { | ||||
| 		type: Boolean, | ||||
| 		default: false | ||||
| 	}, | ||||
| 	challenge: { | ||||
| 		type: Number, | ||||
| 		ref: "Challenge", | ||||
| 		default: null | ||||
| 	}, | ||||
| 	ficmas: { | ||||
| 		type: Number, | ||||
| 		ref: "Ficmas", | ||||
| 		default: null | ||||
| 	} | ||||
| }) | ||||
| 
 | ||||
| hasMigrated && DraftSchema.plugin(AutoIncrement, {id: "drafts"}) | ||||
| 
 | ||||
| export const Draft: Model<IDraft> = /* mongoose.models.Draft || */ mongoose.model("Draft", DraftSchema, "drafts") | ||||
							
								
								
									
										86
									
								
								models/stories/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								models/stories/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | ||||
| import mongoose, {Schema, PopulatedDoc, Document, Model} from "mongoose"; | ||||
| import SequenceFactory from "mongoose-sequence"; | ||||
| 
 | ||||
| const AutoIncrement = SequenceFactory(mongoose); | ||||
| 
 | ||||
| import { Chapter, IChapter } from "./chapter"; | ||||
| import {IUser} from "../../models/user"; | ||||
| import { Ficmas, IFicmas } from "../../models/challenges/ficmas"; | ||||
| import { IChallenge, Challenge } from "../../models/challenges/gen"; | ||||
| import { hasMigrated } from "../../lib/dbconfig"; | ||||
| 
 | ||||
| export interface IStory extends Document { | ||||
| 	_id?: number; | ||||
| 	title: string; | ||||
| 	author: PopulatedDoc<IUser & Document>; | ||||
| 	chapters: IChapter[] | ||||
| 	recs: number; | ||||
| 	favs: number; | ||||
| 	reviews: number; | ||||
| 	views: number; | ||||
| 	completed: boolean; | ||||
| 	challenge: PopulatedDoc<IChallenge & Document> | null; | ||||
| 	ficmas: PopulatedDoc<IFicmas & Document> | null; | ||||
| 	downloads: number; | ||||
| 	lastUpdate: Date; | ||||
| 	posted: Date; | ||||
| } | ||||
| 
 | ||||
| const StorySchema = new mongoose.Schema<IStory>({ | ||||
| 	_id: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	title: { | ||||
| 		type: String | ||||
| 	}, | ||||
| 	author: { | ||||
| 		type: Number, | ||||
| 		ref: "User" | ||||
| 	}, | ||||
| 	chapters: [Chapter], | ||||
| 	recs: { | ||||
| 		type: Number, | ||||
| 		default: 0 | ||||
| 	}, | ||||
| 	favs: { | ||||
| 		type: Number, | ||||
| 		default: 0 | ||||
| 	}, | ||||
| 	reviews: { | ||||
| 		type: Number, | ||||
| 		default: 0 | ||||
| 	}, | ||||
| 	views: { | ||||
| 		type: Number, | ||||
| 		default: 0 | ||||
| 	}, | ||||
| 	completed: { | ||||
| 		type: Boolean, | ||||
| 		default: false | ||||
| 	}, | ||||
| 	challenge: { | ||||
| 		type: Number, | ||||
| 		ref: "Challenge", | ||||
| 		default: null | ||||
| 	}, | ||||
| 	ficmas: { | ||||
| 		type: Number, | ||||
| 		ref: "Ficmas", | ||||
| 		default: null | ||||
| 	}, | ||||
| 	downloads: { | ||||
| 		type: Number, | ||||
| 		default: 0 | ||||
| 	}, | ||||
| 	lastUpdate: { | ||||
| 		type: Date, | ||||
| 		default: new Date() | ||||
| 	}, | ||||
| 	posted: { | ||||
| 		type: Date, | ||||
| 		default: new Date() | ||||
| 	} | ||||
| }) | ||||
| hasMigrated && Chapter.plugin(AutoIncrement, {id: "chapterid", inc_field: "id"}) | ||||
| hasMigrated && StorySchema.plugin(AutoIncrement, {id: "storyid"}) | ||||
| export const Story: Model<IStory> = /* mongoose.models.Story || */ mongoose.model("Story", StorySchema, "stories") | ||||
							
								
								
									
										69
									
								
								models/stories/review.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								models/stories/review.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | ||||
| import mongoose, {Schema, PopulatedDoc, Document, Model} from "mongoose"; | ||||
| import SequenceFactory from "mongoose-sequence"; | ||||
| import { hasMigrated } from "~/lib/dbconfig"; | ||||
| import { populate, populateSelected } from "~/lib/functions"; | ||||
| import { IUser } from "~/models/user"; | ||||
| 
 | ||||
| const AutoIncrement = SequenceFactory(mongoose); | ||||
| 
 | ||||
| export interface IReview { | ||||
| 	_id: number; | ||||
| 	text: string; | ||||
| 	leftOn: number; | ||||
| 	whichChapter: number; | ||||
| 	author: PopulatedDoc<IUser & Document>; | ||||
| 	datePosted: Date; | ||||
| 	replyingTo: PopulatedDoc<IReview & Document> | null; | ||||
| 	replies: PopulatedDoc<IReview & Document>[] | ||||
| } | ||||
| const CommentSchema = new mongoose.Schema<IReview>({ | ||||
| 	_id: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	text: { | ||||
| 		type: String | ||||
| 	}, | ||||
| 	leftOn: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	whichChapter: { | ||||
| 		type: Number | ||||
| 	}, | ||||
| 	author: { | ||||
| 		type: Number, | ||||
| 		ref: "User" | ||||
| 	}, | ||||
| 	datePosted: { | ||||
| 		type: Date, | ||||
| 		default: new Date() | ||||
| 	}, | ||||
| 	replyingTo: { | ||||
| 		default: null, | ||||
| 		type: Number, | ||||
| 		ref: "Review" | ||||
| 	}, | ||||
| 	replies: [{ | ||||
| 		default: null, | ||||
| 		type: Number, | ||||
| 		ref: "Review" | ||||
| 	}] | ||||
| }) | ||||
| 
 | ||||
| CommentSchema.virtual('story', { | ||||
| 	ref: 'Story', | ||||
| 	localField: 'leftOn', | ||||
| 	foreignField: '_id', | ||||
| 	justOne: true, | ||||
| }); | ||||
| 
 | ||||
| CommentSchema | ||||
| 	.pre('findOne', populate('replies')) | ||||
| 	.pre('find', populate('replies')) | ||||
| 	.pre("findOne", populate("commentAuthor")) | ||||
| 	.pre("find", populate("commentAuthor")) | ||||
| 	.pre("findOne", populateSelected("replyingTo", "-replies")) | ||||
| 	.pre("find", populateSelected("replyingTo", "-replies")); | ||||
| 
 | ||||
| hasMigrated && CommentSchema.plugin(AutoIncrement, {id: "reviews"}) | ||||
| 
 | ||||
| export const Review: Model<IReview> = /* mongoose.models.Review || */ mongoose.model("Review", CommentSchema, "reviews") | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user