refactor(db/models): update populatedDoc types

- remove `& Document` qualifier
- cast `T | number` to T with the `as` keyword
This commit is contained in:
parent 02ed969132
commit 1447960b1a
Signed by: tablet
GPG Key ID: 924A5F6AF051E87C
17 changed files with 56 additions and 46 deletions

@ -2,6 +2,7 @@ import { SingleChapterResult } from "./types/slightlyDifferentStory";
import { IChapter } from "@models/stories/chapter";
import { IStory } from "@models/stories";
import { messages } from "@server/constants";
import { IUser } from "@models/user";
export const storyMiddleware = defineNuxtRouteMiddleware(async (to, from) => {
const { getSession } = useAuth();
@ -33,8 +34,8 @@ export const storyEditMiddleware = defineNuxtRouteMiddleware(
return showError({ statusCode: 404, message: messages[404] });
}
if (
curU.value?.user?._id !== storyInfo.value?.author._id &&
curU.value?.user?._id !== storyInfo.value?.coAuthor?._id
curU.value?.user?._id !== (storyInfo.value?.author as IUser)._id &&
curU.value?.user?._id !== (storyInfo.value?.coAuthor as IUser)?._id
) {
return showError({
statusCode: 403,

@ -5,8 +5,9 @@ import { resolve } from "path";
import { GridFSBucketReadStream } from "mongodb";
import { stripHtml } from "string-strip-html";
import { IStory } from "@models/stories";
import { ficsHidden } from "./server/ficmas";
import { ficsHidden } from "@server/ficmas";
import { PreMiddlewareFunction, Query } from "mongoose";
import { IFicmas } from "@models/challenges/ficmas";
// const { encode, decode } = iconv;
@ -36,11 +37,11 @@ export function populateSelected<T>(
export function isFicmasHidden(story: IStory): boolean {
return (
(story.ficmas.year == new Date().getFullYear() &&
story.ficmas.anniversary &&
((story.ficmas as IFicmas)?.year == new Date().getFullYear() &&
(story.ficmas as IFicmas)?.anniversary &&
new Date() < new Date(Date.parse("Aug 1 " + new Date().getFullYear()))) ||
(story.ficmas.year == new Date().getFullYear() &&
!story.ficmas.anniversary &&
((story.ficmas as IFicmas)?.year == new Date().getFullYear() &&
!(story.ficmas as IFicmas)?.anniversary &&
ficsHidden(Date.now()))
);
}

@ -4,6 +4,7 @@ import { IStory } from "@models/stories";
import { isFicmasHidden } from "@functions";
import { IDraft } from "@models/stories/draft";
import axios from "axios";
import { IUser } from "@models/user";
export function isIdNan(ev: H3Event<EventHandlerRequest>) {
const id = parseInt(getRouterParam(ev, "id")!);
if (Number.isNaN(id)) {
@ -50,7 +51,7 @@ export async function storyCheck(
}
} else if (
story.chapters[idx]?.hidden &&
event.context.currentUser?._id !== story.author._id &&
event.context.currentUser?._id !== (story.author as IUser)._id &&
!event.context.currentUser?.profile.isAdmin
) {
ret.statusCode = 403;

@ -2,11 +2,12 @@ import type { H3Event, EventHandlerRequest } from "h3";
import { IStory } from "@models/stories";
import { isLoggedIn } from "@server/middlewareButNotReally";
import { IDraft } from "@models/stories/draft";
import { IUser } from "@models/user";
export function canDelete(event: H3Event<EventHandlerRequest>, story: IStory) {
isLoggedIn(event);
return (
event.context.currentUser?.profile.isAdmin ||
story.author._id === event.context.currentUser?._id
(story.author as IUser)._id === event.context.currentUser?._id
);
}
export function canDeleteDraft(
@ -22,7 +23,7 @@ export function canModify(
) {
isLoggedIn(event);
return (
event.context.currentUser?._id === story.author._id ||
story.coAuthor?._id === event.context.currentUser?._id
event.context.currentUser?._id === (story.author as IUser)._id ||
(story.coAuthor as IUser)?._id === event.context.currentUser?._id
);
}

@ -16,7 +16,7 @@ export interface IBiffno {
genre: string;
cover: string;
year: number;
author: PopulatedDoc<IUser & Document>;
author: PopulatedDoc<IUser>;
}
const biffnoschema = new mongoose.Schema<IBiffno>({

@ -16,10 +16,10 @@ const AutoIncrement = SequenceFactory(mongoose);
export interface IFicmas {
_id: number;
kink: string;
year: string;
bands: PopulatedDoc<IBand & Document>[];
year: number;
bands: PopulatedDoc<IBand>[];
relationship: string;
wisher: PopulatedDoc<IUser & Document>;
wisher: PopulatedDoc<IUser>;
anniversary: boolean;
}
@ -30,7 +30,7 @@ export const FicmasSchema = new mongoose.Schema<IFicmas>({
kink: {
type: String,
},
year: { type: String },
year: { type: Number },
bands: [
{
type: Number,

@ -10,10 +10,10 @@ import SequenceFactory from "mongoose-sequence";
import { IPrivMsg } from "./privMsg";
import { IUser } from "./user";
export interface IInbox {
owningUser: PopulatedDoc<IUser & Document>;
saved: PopulatedDoc<IPrivMsg & Document>[];
received: PopulatedDoc<IPrivMsg & Document>[];
sent: PopulatedDoc<IPrivMsg & Document>[];
owningUser: PopulatedDoc<IUser>;
saved: PopulatedDoc<IPrivMsg>[];
received: PopulatedDoc<IPrivMsg>[];
sent: PopulatedDoc<IPrivMsg>[];
}
const InboxSchema = new Schema<IInbox>({

@ -7,8 +7,8 @@ const AutoIncrement = SequenceFactory(mongoose);
export interface IPrivMsg {
_id: number;
from: PopulatedDoc<IUser & Document>;
to: PopulatedDoc<IUser & Document>;
from: PopulatedDoc<IUser>;
to: PopulatedDoc<IUser>;
subject: string;
content: string;
sentAt: Date;

@ -8,7 +8,7 @@ export interface IChapter {
words?: number;
notes: string;
genre: string[];
bands: PopulatedDoc<IBand & Document>[];
bands: PopulatedDoc<IBand>[];
characters: string[];
relationships: string[][];
nsfw: boolean;

@ -12,19 +12,19 @@ import { hasMigrated } from "@dbconfig";
export interface IStory {
_id?: number;
title: string;
author: PopulatedDoc<IUser & Document>;
author: PopulatedDoc<IUser>;
chapters: IChapter[];
recs: number;
favs: number;
reviews: number;
views: number;
completed: boolean;
challenge: PopulatedDoc<IChallenge & Document> | null;
ficmas: PopulatedDoc<IFicmas & Document> | null;
challenge: PopulatedDoc<IChallenge> | null;
ficmas: PopulatedDoc<IFicmas> | null;
downloads: number;
lastUpdate: Date;
posted: Date;
coAuthor: PopulatedDoc<IUser & Document> | null;
coAuthor: PopulatedDoc<IUser> | null;
}
const StorySchema = new mongoose.Schema<IStory>({

@ -11,10 +11,10 @@ export interface IReview {
text: string;
leftOn: number;
whichChapter: number;
author: PopulatedDoc<IUser & Document>;
author: PopulatedDoc<IUser>;
datePosted: Date;
replyingTo: PopulatedDoc<IReview & Document> | null;
replies: PopulatedDoc<IReview & Document>[];
replyingTo: PopulatedDoc<IReview> | null;
replies: PopulatedDoc<IReview>[];
}
const CommentSchema = new mongoose.Schema<IReview>({
_id: {

@ -57,19 +57,19 @@ export interface IUser extends Document {
wins: number;
};
favs: {
authors: PopulatedDoc<IUser & Document>[];
stories: PopulatedDoc<IStory & Document>[];
authors: PopulatedDoc<IUser>[];
stories: PopulatedDoc<IStory>[];
};
subscriptions: {
authors: PopulatedDoc<IUser & Document>[];
bands: PopulatedDoc<IBand & Document>[];
stories: PopulatedDoc<IStory & Document>[];
authors: PopulatedDoc<IUser>[];
bands: PopulatedDoc<IBand>[];
stories: PopulatedDoc<IStory>[];
};
//@ts-ignore SHUT UP
hiddenAuthors: PopulatedDoc<IUser & Document>[];
hiddenBands: PopulatedDoc<IBand & Document>[];
hiddenAuthors: PopulatedDoc<IUser>[];
hiddenBands: PopulatedDoc<IBand>[];
//@ts-ignore SHUT UP
blocked: PopulatedDoc<IUser & Document>[];
blocked: PopulatedDoc<IUser>[];
sessionId: string | null;
banned: boolean;
quickMenuConfig: QuickMenuItem[];

@ -3,6 +3,7 @@ import { messages } from "@server/constants";
import { log } from "@server/logger";
import { isLoggedIn } from "@server/middlewareButNotReally";
import { Review } from "@models/stories/review";
import { IUser } from "@models/user";
export default eventHandler(async (ev) => {
isLoggedIn(ev);
@ -17,7 +18,7 @@ export default eventHandler(async (ev) => {
log.silly(`${ev.context.currentUser!._id!} || ${c.author}`, {
label: "what the fuck",
});
if (c?.author._id != ev.context.currentUser?._id) {
if ((c?.author as IUser)?._id != ev.context.currentUser?._id) {
throw createError({
message: messages[403],
statusCode: 403,
@ -32,7 +33,7 @@ export default eventHandler(async (ev) => {
return {
success: true,
data: await Review.findById(revid)
.populate("author", "username _id")
.populate("author", "username profile _id")
.exec(),
};
});

@ -3,6 +3,7 @@ import { messages } from "@server/constants";
import { isLoggedIn } from "@server/middlewareButNotReally";
import { Story } from "@models/stories";
import { Review } from "@models/stories/review";
import { IUser } from "@models/user";
export default eventHandler(async (ev) => {
isLoggedIn(ev);
@ -19,8 +20,10 @@ export default eventHandler(async (ev) => {
});
}
if (
replyingTo?.author.blocked.includes(ev.context.currentUser!._id) ||
ev.context.currentUser!.blocked.includes(replyingTo?.author._id)
(replyingTo?.author as IUser).blocked.includes(
ev.context.currentUser!._id,
) ||
ev.context.currentUser!.blocked.includes((replyingTo?.author as IUser)._id)
) {
throw createError({
statusCode: 403,

@ -34,11 +34,11 @@ export default eventHandler(async (ev) => {
"chapters.$.characters": cc.characters,
"chapters.$.relationships": Array.from(new Set(cc.relationships)),
"chapters.$.bands": cc.bands,
"chapters.$.nsfw": !!cc.nsfw,
"chapters.$.nsfw": cc.nsfw,
"chapters.$.notes": cc.notes,
"chapters.$.words": countWords(content),
"chapters.$.genre": cc.genre,
"chapters.$.loggedInOnly": !!cc.loggedInOnly,
"chapters.$.loggedInOnly": cc.loggedInOnly,
},
},
{ new: true },

@ -2,6 +2,7 @@ import { storyQuerier } from "@server/dbHelpers";
import { chapterTransformer } from "@server/dbHelpers";
import { isLoggedIn } from "@server/middlewareButNotReally";
import { messages } from "@server/constants";
import { IUser } from "@models/user";
export default eventHandler(async (ev) => {
isLoggedIn(ev);
@ -9,7 +10,7 @@ export default eventHandler(async (ev) => {
const hidden = s.chapters.some((a) => a.hidden);
if (
hidden &&
ev.context.currentUser?._id !== s.author._id &&
ev.context.currentUser?._id !== (s.author as IUser)._id &&
!ev.context.currentUser?.profile.isAdmin
) {
throw createError({

@ -2,6 +2,7 @@
"extends": "../.nuxt/tsconfig.server.json",
"compilerOptions": {
"allowJs": true,
"outDir": "../out"
"outDir": "../out",
"noImplicitAny": false
}
}