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
@ -2,6 +2,7 @@ import { SingleChapterResult } from "./types/slightlyDifferentStory";
|
|||||||
import { IChapter } from "@models/stories/chapter";
|
import { IChapter } from "@models/stories/chapter";
|
||||||
import { IStory } from "@models/stories";
|
import { IStory } from "@models/stories";
|
||||||
import { messages } from "@server/constants";
|
import { messages } from "@server/constants";
|
||||||
|
import { IUser } from "@models/user";
|
||||||
|
|
||||||
export const storyMiddleware = defineNuxtRouteMiddleware(async (to, from) => {
|
export const storyMiddleware = defineNuxtRouteMiddleware(async (to, from) => {
|
||||||
const { getSession } = useAuth();
|
const { getSession } = useAuth();
|
||||||
@ -33,8 +34,8 @@ export const storyEditMiddleware = defineNuxtRouteMiddleware(
|
|||||||
return showError({ statusCode: 404, message: messages[404] });
|
return showError({ statusCode: 404, message: messages[404] });
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
curU.value?.user?._id !== storyInfo.value?.author._id &&
|
curU.value?.user?._id !== (storyInfo.value?.author as IUser)._id &&
|
||||||
curU.value?.user?._id !== storyInfo.value?.coAuthor?._id
|
curU.value?.user?._id !== (storyInfo.value?.coAuthor as IUser)?._id
|
||||||
) {
|
) {
|
||||||
return showError({
|
return showError({
|
||||||
statusCode: 403,
|
statusCode: 403,
|
||||||
|
@ -5,8 +5,9 @@ import { resolve } from "path";
|
|||||||
import { GridFSBucketReadStream } from "mongodb";
|
import { GridFSBucketReadStream } from "mongodb";
|
||||||
import { stripHtml } from "string-strip-html";
|
import { stripHtml } from "string-strip-html";
|
||||||
import { IStory } from "@models/stories";
|
import { IStory } from "@models/stories";
|
||||||
import { ficsHidden } from "./server/ficmas";
|
import { ficsHidden } from "@server/ficmas";
|
||||||
import { PreMiddlewareFunction, Query } from "mongoose";
|
import { PreMiddlewareFunction, Query } from "mongoose";
|
||||||
|
import { IFicmas } from "@models/challenges/ficmas";
|
||||||
|
|
||||||
// const { encode, decode } = iconv;
|
// const { encode, decode } = iconv;
|
||||||
|
|
||||||
@ -36,11 +37,11 @@ export function populateSelected<T>(
|
|||||||
|
|
||||||
export function isFicmasHidden(story: IStory): boolean {
|
export function isFicmasHidden(story: IStory): boolean {
|
||||||
return (
|
return (
|
||||||
(story.ficmas.year == new Date().getFullYear() &&
|
((story.ficmas as IFicmas)?.year == new Date().getFullYear() &&
|
||||||
story.ficmas.anniversary &&
|
(story.ficmas as IFicmas)?.anniversary &&
|
||||||
new Date() < new Date(Date.parse("Aug 1 " + new Date().getFullYear()))) ||
|
new Date() < new Date(Date.parse("Aug 1 " + new Date().getFullYear()))) ||
|
||||||
(story.ficmas.year == new Date().getFullYear() &&
|
((story.ficmas as IFicmas)?.year == new Date().getFullYear() &&
|
||||||
!story.ficmas.anniversary &&
|
!(story.ficmas as IFicmas)?.anniversary &&
|
||||||
ficsHidden(Date.now()))
|
ficsHidden(Date.now()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import { IStory } from "@models/stories";
|
|||||||
import { isFicmasHidden } from "@functions";
|
import { isFicmasHidden } from "@functions";
|
||||||
import { IDraft } from "@models/stories/draft";
|
import { IDraft } from "@models/stories/draft";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
import { IUser } from "@models/user";
|
||||||
export function isIdNan(ev: H3Event<EventHandlerRequest>) {
|
export function isIdNan(ev: H3Event<EventHandlerRequest>) {
|
||||||
const id = parseInt(getRouterParam(ev, "id")!);
|
const id = parseInt(getRouterParam(ev, "id")!);
|
||||||
if (Number.isNaN(id)) {
|
if (Number.isNaN(id)) {
|
||||||
@ -50,7 +51,7 @@ export async function storyCheck(
|
|||||||
}
|
}
|
||||||
} else if (
|
} else if (
|
||||||
story.chapters[idx]?.hidden &&
|
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
|
!event.context.currentUser?.profile.isAdmin
|
||||||
) {
|
) {
|
||||||
ret.statusCode = 403;
|
ret.statusCode = 403;
|
||||||
|
@ -2,11 +2,12 @@ import type { H3Event, EventHandlerRequest } from "h3";
|
|||||||
import { IStory } from "@models/stories";
|
import { IStory } from "@models/stories";
|
||||||
import { isLoggedIn } from "@server/middlewareButNotReally";
|
import { isLoggedIn } from "@server/middlewareButNotReally";
|
||||||
import { IDraft } from "@models/stories/draft";
|
import { IDraft } from "@models/stories/draft";
|
||||||
|
import { IUser } from "@models/user";
|
||||||
export function canDelete(event: H3Event<EventHandlerRequest>, story: IStory) {
|
export function canDelete(event: H3Event<EventHandlerRequest>, story: IStory) {
|
||||||
isLoggedIn(event);
|
isLoggedIn(event);
|
||||||
return (
|
return (
|
||||||
event.context.currentUser?.profile.isAdmin ||
|
event.context.currentUser?.profile.isAdmin ||
|
||||||
story.author._id === event.context.currentUser?._id
|
(story.author as IUser)._id === event.context.currentUser?._id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
export function canDeleteDraft(
|
export function canDeleteDraft(
|
||||||
@ -22,7 +23,7 @@ export function canModify(
|
|||||||
) {
|
) {
|
||||||
isLoggedIn(event);
|
isLoggedIn(event);
|
||||||
return (
|
return (
|
||||||
event.context.currentUser?._id === story.author._id ||
|
event.context.currentUser?._id === (story.author as IUser)._id ||
|
||||||
story.coAuthor?._id === event.context.currentUser?._id
|
(story.coAuthor as IUser)?._id === event.context.currentUser?._id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ export interface IBiffno {
|
|||||||
genre: string;
|
genre: string;
|
||||||
cover: string;
|
cover: string;
|
||||||
year: number;
|
year: number;
|
||||||
author: PopulatedDoc<IUser & Document>;
|
author: PopulatedDoc<IUser>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const biffnoschema = new mongoose.Schema<IBiffno>({
|
const biffnoschema = new mongoose.Schema<IBiffno>({
|
||||||
|
@ -16,10 +16,10 @@ const AutoIncrement = SequenceFactory(mongoose);
|
|||||||
export interface IFicmas {
|
export interface IFicmas {
|
||||||
_id: number;
|
_id: number;
|
||||||
kink: string;
|
kink: string;
|
||||||
year: string;
|
year: number;
|
||||||
bands: PopulatedDoc<IBand & Document>[];
|
bands: PopulatedDoc<IBand>[];
|
||||||
relationship: string;
|
relationship: string;
|
||||||
wisher: PopulatedDoc<IUser & Document>;
|
wisher: PopulatedDoc<IUser>;
|
||||||
anniversary: boolean;
|
anniversary: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ export const FicmasSchema = new mongoose.Schema<IFicmas>({
|
|||||||
kink: {
|
kink: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
year: { type: String },
|
year: { type: Number },
|
||||||
bands: [
|
bands: [
|
||||||
{
|
{
|
||||||
type: Number,
|
type: Number,
|
||||||
|
@ -10,10 +10,10 @@ import SequenceFactory from "mongoose-sequence";
|
|||||||
import { IPrivMsg } from "./privMsg";
|
import { IPrivMsg } from "./privMsg";
|
||||||
import { IUser } from "./user";
|
import { IUser } from "./user";
|
||||||
export interface IInbox {
|
export interface IInbox {
|
||||||
owningUser: PopulatedDoc<IUser & Document>;
|
owningUser: PopulatedDoc<IUser>;
|
||||||
saved: PopulatedDoc<IPrivMsg & Document>[];
|
saved: PopulatedDoc<IPrivMsg>[];
|
||||||
received: PopulatedDoc<IPrivMsg & Document>[];
|
received: PopulatedDoc<IPrivMsg>[];
|
||||||
sent: PopulatedDoc<IPrivMsg & Document>[];
|
sent: PopulatedDoc<IPrivMsg>[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const InboxSchema = new Schema<IInbox>({
|
const InboxSchema = new Schema<IInbox>({
|
||||||
|
@ -7,8 +7,8 @@ const AutoIncrement = SequenceFactory(mongoose);
|
|||||||
|
|
||||||
export interface IPrivMsg {
|
export interface IPrivMsg {
|
||||||
_id: number;
|
_id: number;
|
||||||
from: PopulatedDoc<IUser & Document>;
|
from: PopulatedDoc<IUser>;
|
||||||
to: PopulatedDoc<IUser & Document>;
|
to: PopulatedDoc<IUser>;
|
||||||
subject: string;
|
subject: string;
|
||||||
content: string;
|
content: string;
|
||||||
sentAt: Date;
|
sentAt: Date;
|
||||||
|
@ -8,7 +8,7 @@ export interface IChapter {
|
|||||||
words?: number;
|
words?: number;
|
||||||
notes: string;
|
notes: string;
|
||||||
genre: string[];
|
genre: string[];
|
||||||
bands: PopulatedDoc<IBand & Document>[];
|
bands: PopulatedDoc<IBand>[];
|
||||||
characters: string[];
|
characters: string[];
|
||||||
relationships: string[][];
|
relationships: string[][];
|
||||||
nsfw: boolean;
|
nsfw: boolean;
|
||||||
|
@ -12,19 +12,19 @@ import { hasMigrated } from "@dbconfig";
|
|||||||
export interface IStory {
|
export interface IStory {
|
||||||
_id?: number;
|
_id?: number;
|
||||||
title: string;
|
title: string;
|
||||||
author: PopulatedDoc<IUser & Document>;
|
author: PopulatedDoc<IUser>;
|
||||||
chapters: IChapter[];
|
chapters: IChapter[];
|
||||||
recs: number;
|
recs: number;
|
||||||
favs: number;
|
favs: number;
|
||||||
reviews: number;
|
reviews: number;
|
||||||
views: number;
|
views: number;
|
||||||
completed: boolean;
|
completed: boolean;
|
||||||
challenge: PopulatedDoc<IChallenge & Document> | null;
|
challenge: PopulatedDoc<IChallenge> | null;
|
||||||
ficmas: PopulatedDoc<IFicmas & Document> | null;
|
ficmas: PopulatedDoc<IFicmas> | null;
|
||||||
downloads: number;
|
downloads: number;
|
||||||
lastUpdate: Date;
|
lastUpdate: Date;
|
||||||
posted: Date;
|
posted: Date;
|
||||||
coAuthor: PopulatedDoc<IUser & Document> | null;
|
coAuthor: PopulatedDoc<IUser> | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const StorySchema = new mongoose.Schema<IStory>({
|
const StorySchema = new mongoose.Schema<IStory>({
|
||||||
|
@ -11,10 +11,10 @@ export interface IReview {
|
|||||||
text: string;
|
text: string;
|
||||||
leftOn: number;
|
leftOn: number;
|
||||||
whichChapter: number;
|
whichChapter: number;
|
||||||
author: PopulatedDoc<IUser & Document>;
|
author: PopulatedDoc<IUser>;
|
||||||
datePosted: Date;
|
datePosted: Date;
|
||||||
replyingTo: PopulatedDoc<IReview & Document> | null;
|
replyingTo: PopulatedDoc<IReview> | null;
|
||||||
replies: PopulatedDoc<IReview & Document>[];
|
replies: PopulatedDoc<IReview>[];
|
||||||
}
|
}
|
||||||
const CommentSchema = new mongoose.Schema<IReview>({
|
const CommentSchema = new mongoose.Schema<IReview>({
|
||||||
_id: {
|
_id: {
|
||||||
|
@ -57,19 +57,19 @@ export interface IUser extends Document {
|
|||||||
wins: number;
|
wins: number;
|
||||||
};
|
};
|
||||||
favs: {
|
favs: {
|
||||||
authors: PopulatedDoc<IUser & Document>[];
|
authors: PopulatedDoc<IUser>[];
|
||||||
stories: PopulatedDoc<IStory & Document>[];
|
stories: PopulatedDoc<IStory>[];
|
||||||
};
|
};
|
||||||
subscriptions: {
|
subscriptions: {
|
||||||
authors: PopulatedDoc<IUser & Document>[];
|
authors: PopulatedDoc<IUser>[];
|
||||||
bands: PopulatedDoc<IBand & Document>[];
|
bands: PopulatedDoc<IBand>[];
|
||||||
stories: PopulatedDoc<IStory & Document>[];
|
stories: PopulatedDoc<IStory>[];
|
||||||
};
|
};
|
||||||
//@ts-ignore SHUT UP
|
//@ts-ignore SHUT UP
|
||||||
hiddenAuthors: PopulatedDoc<IUser & Document>[];
|
hiddenAuthors: PopulatedDoc<IUser>[];
|
||||||
hiddenBands: PopulatedDoc<IBand & Document>[];
|
hiddenBands: PopulatedDoc<IBand>[];
|
||||||
//@ts-ignore SHUT UP
|
//@ts-ignore SHUT UP
|
||||||
blocked: PopulatedDoc<IUser & Document>[];
|
blocked: PopulatedDoc<IUser>[];
|
||||||
sessionId: string | null;
|
sessionId: string | null;
|
||||||
banned: boolean;
|
banned: boolean;
|
||||||
quickMenuConfig: QuickMenuItem[];
|
quickMenuConfig: QuickMenuItem[];
|
||||||
|
@ -3,6 +3,7 @@ import { messages } from "@server/constants";
|
|||||||
import { log } from "@server/logger";
|
import { log } from "@server/logger";
|
||||||
import { isLoggedIn } from "@server/middlewareButNotReally";
|
import { isLoggedIn } from "@server/middlewareButNotReally";
|
||||||
import { Review } from "@models/stories/review";
|
import { Review } from "@models/stories/review";
|
||||||
|
import { IUser } from "@models/user";
|
||||||
|
|
||||||
export default eventHandler(async (ev) => {
|
export default eventHandler(async (ev) => {
|
||||||
isLoggedIn(ev);
|
isLoggedIn(ev);
|
||||||
@ -17,7 +18,7 @@ export default eventHandler(async (ev) => {
|
|||||||
log.silly(`${ev.context.currentUser!._id!} || ${c.author}`, {
|
log.silly(`${ev.context.currentUser!._id!} || ${c.author}`, {
|
||||||
label: "what the fuck",
|
label: "what the fuck",
|
||||||
});
|
});
|
||||||
if (c?.author._id != ev.context.currentUser?._id) {
|
if ((c?.author as IUser)?._id != ev.context.currentUser?._id) {
|
||||||
throw createError({
|
throw createError({
|
||||||
message: messages[403],
|
message: messages[403],
|
||||||
statusCode: 403,
|
statusCode: 403,
|
||||||
@ -32,7 +33,7 @@ export default eventHandler(async (ev) => {
|
|||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
data: await Review.findById(revid)
|
data: await Review.findById(revid)
|
||||||
.populate("author", "username _id")
|
.populate("author", "username profile _id")
|
||||||
.exec(),
|
.exec(),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -3,6 +3,7 @@ import { messages } from "@server/constants";
|
|||||||
import { isLoggedIn } from "@server/middlewareButNotReally";
|
import { isLoggedIn } from "@server/middlewareButNotReally";
|
||||||
import { Story } from "@models/stories";
|
import { Story } from "@models/stories";
|
||||||
import { Review } from "@models/stories/review";
|
import { Review } from "@models/stories/review";
|
||||||
|
import { IUser } from "@models/user";
|
||||||
|
|
||||||
export default eventHandler(async (ev) => {
|
export default eventHandler(async (ev) => {
|
||||||
isLoggedIn(ev);
|
isLoggedIn(ev);
|
||||||
@ -19,8 +20,10 @@ export default eventHandler(async (ev) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
replyingTo?.author.blocked.includes(ev.context.currentUser!._id) ||
|
(replyingTo?.author as IUser).blocked.includes(
|
||||||
ev.context.currentUser!.blocked.includes(replyingTo?.author._id)
|
ev.context.currentUser!._id,
|
||||||
|
) ||
|
||||||
|
ev.context.currentUser!.blocked.includes((replyingTo?.author as IUser)._id)
|
||||||
) {
|
) {
|
||||||
throw createError({
|
throw createError({
|
||||||
statusCode: 403,
|
statusCode: 403,
|
||||||
|
@ -34,11 +34,11 @@ export default eventHandler(async (ev) => {
|
|||||||
"chapters.$.characters": cc.characters,
|
"chapters.$.characters": cc.characters,
|
||||||
"chapters.$.relationships": Array.from(new Set(cc.relationships)),
|
"chapters.$.relationships": Array.from(new Set(cc.relationships)),
|
||||||
"chapters.$.bands": cc.bands,
|
"chapters.$.bands": cc.bands,
|
||||||
"chapters.$.nsfw": !!cc.nsfw,
|
"chapters.$.nsfw": cc.nsfw,
|
||||||
"chapters.$.notes": cc.notes,
|
"chapters.$.notes": cc.notes,
|
||||||
"chapters.$.words": countWords(content),
|
"chapters.$.words": countWords(content),
|
||||||
"chapters.$.genre": cc.genre,
|
"chapters.$.genre": cc.genre,
|
||||||
"chapters.$.loggedInOnly": !!cc.loggedInOnly,
|
"chapters.$.loggedInOnly": cc.loggedInOnly,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ new: true },
|
{ new: true },
|
||||||
|
@ -2,6 +2,7 @@ import { storyQuerier } from "@server/dbHelpers";
|
|||||||
import { chapterTransformer } from "@server/dbHelpers";
|
import { chapterTransformer } from "@server/dbHelpers";
|
||||||
import { isLoggedIn } from "@server/middlewareButNotReally";
|
import { isLoggedIn } from "@server/middlewareButNotReally";
|
||||||
import { messages } from "@server/constants";
|
import { messages } from "@server/constants";
|
||||||
|
import { IUser } from "@models/user";
|
||||||
|
|
||||||
export default eventHandler(async (ev) => {
|
export default eventHandler(async (ev) => {
|
||||||
isLoggedIn(ev);
|
isLoggedIn(ev);
|
||||||
@ -9,7 +10,7 @@ export default eventHandler(async (ev) => {
|
|||||||
const hidden = s.chapters.some((a) => a.hidden);
|
const hidden = s.chapters.some((a) => a.hidden);
|
||||||
if (
|
if (
|
||||||
hidden &&
|
hidden &&
|
||||||
ev.context.currentUser?._id !== s.author._id &&
|
ev.context.currentUser?._id !== (s.author as IUser)._id &&
|
||||||
!ev.context.currentUser?.profile.isAdmin
|
!ev.context.currentUser?.profile.isAdmin
|
||||||
) {
|
) {
|
||||||
throw createError({
|
throw createError({
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
"extends": "../.nuxt/tsconfig.server.json",
|
"extends": "../.nuxt/tsconfig.server.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"outDir": "../out"
|
"outDir": "../out",
|
||||||
|
"noImplicitAny": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user