From 152894146b72830e48e800721ea6160228a9bdc1 Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Mon, 7 Jul 2025 00:00:22 -0700 Subject: generate sha-1 hash for chart on score import --- backend/src/routes/score.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'backend/src') diff --git a/backend/src/routes/score.ts b/backend/src/routes/score.ts index e0f2281..d0fdc56 100644 --- a/backend/src/routes/score.ts +++ b/backend/src/routes/score.ts @@ -1,6 +1,7 @@ import express from "express"; import { prisma } from "../config/db"; import { PAGE_SIZE } from "../config/constants"; +import crypto from "crypto"; export const handleScoreUpload = async ( req: express.Request, @@ -42,6 +43,10 @@ export const handleScoreUpload = async ( let skippedCount = 0; for (const scoreData of scoresArray) { + const chartIdHash = crypto + .createHash("sha1") + .update(`${internalGameName}${scoreData.title}${scoreData.artist}`) + .digest("hex"); // Check if exact same score data already exists const existingScore = await prisma.score.findFirst({ where: { @@ -56,9 +61,26 @@ export const handleScoreUpload = async ( if (existingScore) { skippedCount++; } else { + const chartExists = await prisma.charts.findFirst({ + where: { + gameInternalName: internalGameName, + chartId: chartIdHash, + }, + }); + if(!chartExists){ + await prisma.charts.create({ + data: { + gameInternalName: internalGameName, + chartId: chartIdHash, + title: scoreData.title, + artist: scoreData.artist, + }, + }); + } scoresToCreate.push({ gameInternalName: internalGameName, userId: userId, + chartId: chartIdHash, timestamp: scoreData.timestamp, data: scoreData, }); -- cgit v1.2.3