From 7a6daed3aaefeb4a71d02e7403482628be33d169 Mon Sep 17 00:00:00 2001 From: zkldi Date: Thu, 22 Apr 2021 15:00:06 +0100 Subject: [PATCH] update songdocument typedefs --- server/src/core/auth-core.test.ts | 1 - server/src/db/db.ts | 75 ++++++++++--------- server/src/db/schemas.ts | 12 +-- .../database-lookup/song-title.ts | 19 +++-- .../core/calculated-data/calculated-data.ts | 1 - .../framework/core/hydrate-score.ts | 6 +- .../framework/importing/score-importing.ts | 5 +- .../csv-eamusement-iidx/converter.ts | 6 +- server/src/types.ts | 4 +- 9 files changed, 67 insertions(+), 62 deletions(-) diff --git a/server/src/core/auth-core.test.ts b/server/src/core/auth-core.test.ts index ffc064310..8d3f4afc5 100644 --- a/server/src/core/auth-core.test.ts +++ b/server/src/core/auth-core.test.ts @@ -71,7 +71,6 @@ t.test("#ReinstateInvite", (t) => { let response = await ReinstateInvite(inviteDoc); - // @ts-expect-error Monks' types are WRONG. this is nModified, not modifiedCount t.equal(response.nModified, 1, "Should modify one document"); let invite2 = await db.invites.findOne({ diff --git a/server/src/db/db.ts b/server/src/db/db.ts index 3b96161b6..04967d648 100644 --- a/server/src/db/db.ts +++ b/server/src/db/db.ts @@ -8,6 +8,7 @@ import { IIDXBPIData, IIDXEamusementScoreDocument, ImportDocument, + SongDocument, InviteCodeDocument, MilestoneDocument, NotificationDocument, @@ -16,7 +17,8 @@ import { PublicAPIKeyDocument, ScoreDocument, SessionDocument, - SongDocument, + AnySongDocument, + AnyChartDocument, UserGoalDocument, UserMilestoneDocument, } from "kamaitachi-common"; @@ -53,7 +55,39 @@ export async function CloseMongoConnection() { await monkDB.close(); } -const StaticCollections = { +const songs = { + bms: monkDB.get(`songs-bms`), + chunithm: monkDB.get(`songs-chunithm`), + ddr: monkDB.get(`songs-ddr`), + gitadora: monkDB.get(`songs-gitadora`), + iidx: monkDB.get(`songs-iidx`), + jubeat: monkDB.get(`songs-jubeat`), + maimai: monkDB.get(`songs-maimai`), + museca: monkDB.get(`songs-museca`), + popn: monkDB.get(`songs-popn`), + sdvx: monkDB.get(`songs-sdvx`), + usc: monkDB.get(`songs-usc`), +}; + +const charts = { + bms: monkDB.get(`charts-bms`), + chunithm: monkDB.get(`charts-chunithm`), + ddr: monkDB.get(`charts-ddr`), + gitadora: monkDB.get(`charts-gitadora`), + iidx: monkDB.get(`charts-iidx`), + jubeat: monkDB.get(`charts-jubeat`), + maimai: monkDB.get(`charts-maimai`), + museca: monkDB.get(`charts-museca`), + popn: monkDB.get(`charts-popn`), + sdvx: monkDB.get(`charts-sdvx`), + usc: monkDB.get(`charts-usc`), +}; + +const db = { + // i have to handwrite this out for TS... :( + // dont worry, it was all macro'd + songs, + charts, scores: monkDB.get("scores"), folders: monkDB.get("folders"), goals: monkDB.get("goals"), @@ -71,41 +105,8 @@ const StaticCollections = { "iidx-eam-scores": monkDB.get("iidx-eam-scores"), }; -type GameCollections = Record; - -interface GCPartial { - songs: Partial; - charts: Partial; +export function GetGameChartCollection(game: Game) { + return db.charts[game]; } -interface GameCollectionFull { - songs: GameCollections; - charts: GameCollections; -} - -let GameCollectionPartial: GCPartial = { - songs: {}, - // i have to handwrite this out for TS... :( - charts: { - bms: monkDB.get<`bms:${Playtypes["bms"]}`>(`charts-bms`), - chunithm: monkDB.get<`chunithm:${Playtypes["chunithm"]}`>(`charts-chunithm`), - ddr: monkDB.get<`ddr:${Playtypes["ddr"]}`>(`charts-ddr`), - gitadora: monkDB.get<`gitadora:${Playtypes["gitadora"]}`>(`charts-gitadora`), - iidx: monkDB.get<`iidx:${Playtypes["iidx"]}`>(`charts-iidx`), - jubeat: monkDB.get<`jubeat:${Playtypes["jubeat"]}`>(`charts-jubeat`), - maimai: monkDB.get<`maimai:${Playtypes["maimai"]}`>(`charts-maimai`), - museca: monkDB.get<`museca:${Playtypes["museca"]}`>(`charts-museca`), - popn: monkDB.get<`popn:${Playtypes["popn"]}`>(`charts-popn`), - sdvx: monkDB.get<`sdvx:${Playtypes["sdvx"]}`>(`charts-sdvx`), - usc: monkDB.get<`usc:${Playtypes["usc"]}`>(`charts-usc`), - }, -}; - -for (const game of config.supportedGames) { - GameCollectionPartial.songs[game] = monkDB.get(`songs-${game}`); -} - -// a typescript-friendly interface for the database. -const db = Object.assign(StaticCollections, GameCollectionPartial as GameCollectionFull); - export default db; diff --git a/server/src/db/schemas.ts b/server/src/db/schemas.ts index f3f659bc8..c44df3de4 100644 --- a/server/src/db/schemas.ts +++ b/server/src/db/schemas.ts @@ -25,12 +25,12 @@ export const PRUDENCE_PUBLIC_USER: PrudenceSchema = { }, friends: [p.isPositiveInteger], socialMedia: { - discord: "?string", - twitter: "?string", - github: "?string", - steam: "?string", - youtube: "?string", - twitch: "?string", + discord: "*?string", + twitter: "*?string", + github: "*?string", + steam: "*?string", + youtube: "*?string", + twitch: "*?string", }, about: p.isBoundedString(0, 4000), customPfp: "boolean", diff --git a/server/src/score-import/database-lookup/song-title.ts b/server/src/score-import/database-lookup/song-title.ts index bf3ba0ca0..4f7cd96a3 100644 --- a/server/src/score-import/database-lookup/song-title.ts +++ b/server/src/score-import/database-lookup/song-title.ts @@ -1,4 +1,5 @@ -import { Game } from "kamaitachi-common"; +import { Game, AnySongDocument } from "kamaitachi-common"; +import { FindOneResult } from "monk"; import db from "../../db/db"; /** @@ -8,9 +9,13 @@ import db from "../../db/db"; * @param game - The game to search upon. * @param title - The song title to match. * @param version - The version a song should be in to be counted. - * @returns SongDocument + * @returns AnySongDocument */ -export function FindSongOnTitleVersion(game: Game, title: string, version: string | number) { +export function FindSongOnTitleVersion( + game: G, + title: string, + version: string +): Promise> { return db.songs[game].findOne({ "data.version": version, $or: [ @@ -30,9 +35,13 @@ export function FindSongOnTitleVersion(game: Game, title: string, version: strin * rather difficult. Prefer other functions! * @param game - The game to search upon. * @param title - The song title to match. - * @returns SongDocument + * @returns AnySongDocument */ -export function FindSongOnTitle(game: Game, title: string) { +export function FindSongOnTitle( + game: Game, + title: string +): Promise> { + db.songs[game]; return db.songs[game].findOne({ $or: [ { diff --git a/server/src/score-import/framework/core/calculated-data/calculated-data.ts b/server/src/score-import/framework/core/calculated-data/calculated-data.ts index a825bdef7..a1026ece9 100644 --- a/server/src/score-import/framework/core/calculated-data/calculated-data.ts +++ b/server/src/score-import/framework/core/calculated-data/calculated-data.ts @@ -5,7 +5,6 @@ import { IDStrings, Playtypes, ScoreDocument, - SongDocument, TierlistDataDocument, } from "kamaitachi-common"; import { Logger } from "winston"; diff --git a/server/src/score-import/framework/core/hydrate-score.ts b/server/src/score-import/framework/core/hydrate-score.ts index 51e786d99..799ac5a8d 100644 --- a/server/src/score-import/framework/core/hydrate-score.ts +++ b/server/src/score-import/framework/core/hydrate-score.ts @@ -1,10 +1,9 @@ import { AnyChartDocument, - ChartDocument, config, integer, ScoreDocument, - SongDocument, + AnySongDocument, } from "kamaitachi-common"; import { Logger } from "winston"; import { DryScore } from "../../../types"; @@ -19,7 +18,7 @@ export default async function HydrateScore( userID: integer, dryScore: DryScore, chart: AnyChartDocument, - song: SongDocument, + song: AnySongDocument, scoreID: string, logger: Logger ): Promise { @@ -50,7 +49,6 @@ export default async function HydrateScore( songID: song.id, chartID: chart.chartID, scoreID, - difficulty: chart.difficulty, playtype: chart.playtype, // these will be sorted out in post-processing isLampPB: false, diff --git a/server/src/score-import/framework/importing/score-importing.ts b/server/src/score-import/framework/importing/score-importing.ts index 0ccf37d48..d096af8b1 100644 --- a/server/src/score-import/framework/importing/score-importing.ts +++ b/server/src/score-import/framework/importing/score-importing.ts @@ -1,10 +1,9 @@ import { AnyChartDocument, - ChartDocument, ImportProcessingInfo, integer, ScoreDocument, - SongDocument, + AnySongDocument, } from "kamaitachi-common"; import { DryScore, ConverterFunction, ConverterFnReturn } from "../../../types"; import HydrateScore from "../core/hydrate-score"; @@ -120,7 +119,7 @@ async function HydrateAndInsertScore( userID: integer, dryScore: DryScore, chart: AnyChartDocument, - song: SongDocument, + song: AnySongDocument, importLogger: Logger ): Promise { const scoreID = CreateScoreID(userID, dryScore, chart.chartID); diff --git a/server/src/score-import/import-types/csv-eamusement-iidx/converter.ts b/server/src/score-import/import-types/csv-eamusement-iidx/converter.ts index 2fb0a3498..1654bbeac 100644 --- a/server/src/score-import/import-types/csv-eamusement-iidx/converter.ts +++ b/server/src/score-import/import-types/csv-eamusement-iidx/converter.ts @@ -1,4 +1,4 @@ -import { config, ESDCore, Lamps, SongDocument } from "kamaitachi-common"; +import { config, ESDCore, Lamps, AnySongDocument } from "kamaitachi-common"; import { Logger } from "winston"; import { DryScore, ConverterFunction, ConverterFnReturn } from "../../../types"; import { FindChartWithPTDF } from "../../database-lookup/chart-ptdf"; @@ -29,7 +29,7 @@ const EAMUSEMENT_LAMP_RESOLVER: Map = new async function EamScoreConverter( eamScore: EamusementScoreData, - ktchiSong: SongDocument, + ktchiSong: AnySongDocument, context: IIDXEamusementCSVContext, data: IIDXEamusementCSVData, logger: Logger @@ -166,7 +166,7 @@ async function EamScoreConverter( */ async function EamScoreConverterWrapper( eamScore: EamusementScoreData, - song: SongDocument, + song: AnySongDocument, context: IIDXEamusementCSVContext, data: IIDXEamusementCSVData, logger: Logger diff --git a/server/src/types.ts b/server/src/types.ts index 5563f3358..6e6428a12 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -4,7 +4,7 @@ import { ImportTypes, integer, ScoreDocument, - SongDocument, + AnySongDocument, } from "kamaitachi-common"; import { Logger } from "winston"; import { ConverterFailure } from "./score-import/framework/core/converter-errors"; @@ -38,7 +38,7 @@ export type KTReponse = KTFailResponse | KTSuccessResponse; export interface ConverterFnSuccessReturn { dryScore: DryScore; chart: AnyChartDocument; - song: SongDocument; + song: AnySongDocument; } export type ConverterFnReturn = ConverterFailure | ConverterFnSuccessReturn | null;