Oh wow...

This commit is contained in:
zkldi
2021-04-10 14:05:47 +01:00
parent 8b5a0731bc
commit d13192ceaf
5 changed files with 20 additions and 26 deletions
+6 -16
View File
@@ -2,13 +2,13 @@ import { Router, NextFunction, Request, Response } from "express";
import { FileUploadImportTypes } from "kamaitachi-common";
import multer, { MulterError } from "multer";
import Prudence from "prudence";
import { Logger } from "winston";
import { GetUserWithID } from "../../core/user-core";
import db from "../../db";
import CreateLogCtx from "../../logger";
import prValidate from "../../middleware/prudence-validate";
import { RequireLoggedIn } from "../../middleware/require-logged-in";
import ScoreImportFatalError from "../../score-import/framework/core/score-import-error";
import { ResolveFileUploadData } from "../../score-import/framework/parsing/file-upload";
import { ResolveFileUploadData } from "../../score-import/framework/input-parsing/file-upload";
import ScoreImportMain from "../../score-import/framework/score-import-main";
import serverConfig from "../../server-config";
@@ -61,23 +61,13 @@ router.post(
try {
let importType = req.body.importType as FileUploadImportTypes;
let { iterable, idStrings, context, converter } = await ResolveFileUploadData(
importType,
req.file,
req.body,
logger
);
const inputParser = async (logger: Logger) =>
await ResolveFileUploadData(importType, req.file, req.body, logger);
const userDoc = await GetUserWithID(req.session.ktchi!.userID);
let importDocument = await ScoreImportMain(
userDoc,
importType,
idStrings,
iterable,
converter,
context
);
let importDocument = await ScoreImportMain(userDoc, importType, inputParser);
} catch (err) {
if (err instanceof ScoreImportFatalError) {
return res.status(err.statusCode).json(err.data);
@@ -4,7 +4,7 @@ import {
KTBlackImportDocument,
PublicUserDocument,
} from "kamaitachi-common";
import { ConverterFunction } from "../../types";
import { ImportInputParser } from "../../types";
import { InsertQueue } from "./core/insert-score";
import { ImportAllIterableData } from "./importing/score-importing";
import { CreateImportLoggerAndID } from "./core/import-logger";
@@ -12,20 +12,19 @@ import { CreateImportLoggerAndID } from "./core/import-logger";
export default async function ScoreImportMain<D, C>(
user: PublicUserDocument,
importType: ImportTypes,
idStrings: [IDStrings] & IDStrings[],
iterableData: Iterable<D> | AsyncIterable<D>,
ConverterFunction: ConverterFunction<D, C>,
context: C
InputParser: ImportInputParser<D, C>
) {
const timeStarted = Date.now();
const { importID, logger } = CreateImportLoggerAndID(user, importType);
const { iterable, ConverterFunction, context, idStrings } = await InputParser(logger);
// @todo: scope logger properly
logger.verbose("Received import request.");
let importInfo = await ImportAllIterableData(
user.id,
iterableData,
iterable,
ConverterFunction,
context,
logger
@@ -49,6 +48,7 @@ export default async function ScoreImportMain<D, C>(
importID,
timeFinished: Date.now(),
timeStarted,
createdSessions: [], // @todo, see session ctor
userID: user.id,
};
@@ -224,7 +224,7 @@ function ParseEamusementCSV(
return {
iterable: data,
context,
converter: ConverterFn,
ConverterFunction: ConverterFn,
idStrings: [`iidx:${context.playtype}` as "iidx:SP" | "iidx:DP"],
};
}
+7 -3
View File
@@ -52,11 +52,15 @@ export interface ConverterFunction<D, C> {
(data: D, processContext: C, logger: Logger): Promise<ConverterFunctionReturns>;
}
export interface ImportInputParser<D, C> {
(logger: Logger): ParserFunctionReturns<D, C> | Promise<ParserFunctionReturns<D, C>>;
}
export interface ParserFunctionReturnsSync<D, C> {
iterable: Iterable<D>;
idStrings: [IDStrings] & IDStrings[];
context: C;
converter: ConverterFunction<D, C>;
ConverterFunction: ConverterFunction<D, C>;
}
export type ParserFunctionReturns<D, C> =
@@ -67,7 +71,7 @@ export interface ParserFunctionReturnsAsync<D, C> {
iterable: AsyncIterable<D>;
idStrings: [IDStrings] & IDStrings[];
context: C;
converter: ConverterFunction<D, C>;
ConverterFunction: ConverterFunction<D, C>;
}
/**
@@ -87,7 +91,7 @@ export type DryScore<
export interface ScoreConverterInformation<D, C> {
data: D[];
converter: ConverterFunction<D, C>;
ConverterFunction: ConverterFunction<D, C>;
}
export interface OrphanedScore<T extends ImportTypes> {