Source

classes/requestContext.ts

import { Pool } from "mysql";
import { SnowflakeString } from "../types/snowflake";
import Animation from "./animation";
import Category from "./category";
import File from "./file";
import SystemRelation from "./systemRelation";
import User from "./user";
import UserClient from "./userClient";
import UserRelation from "./userRelation";

/**
 * Handles data about a single request context.
 */
export class RequestContext {
    public conn: Pool;
    public client?: UserClient;
    public user?: User;

    public users: Map<SnowflakeString, User> = new Map();
    public categories: Map<SnowflakeString, Category> = new Map();
    public animations: Map<SnowflakeString, Animation> = new Map();
    public files: Map<SnowflakeString, File> = new Map();
    public systemRelations: Map<SnowflakeString, SystemRelation> = new Map();
    public userRelation: Map<SnowflakeString, UserRelation> = new Map();

    /**
     * Creates request context instance
     * @param {Pool} conn
     */
    constructor(conn: Pool) {
        this.conn = conn;
    }

    /**
     * Checks if request context has client (mainly typescript)
     * @return {boolean}
     */
    public hasClient(): this is RequestContextWithClient {
        return this.client !== undefined;
    }
}

export interface RequestContextWithClient extends RequestContext {
    client: UserClient;
}