diff --git a/backend/routes/upload-replay.js b/backend/routes/upload-replay.js index 65a46c6..56b5fd5 100644 --- a/backend/routes/upload-replay.js +++ b/backend/routes/upload-replay.js @@ -10,6 +10,6 @@ filename: (req, file, cb) => { }); // Create the multer instance -const upload = multer({ storage: storage }); +const upload = multer({ storage: storage}); module.exports = upload; \ No newline at end of file diff --git a/server.js b/server.js index bd8b91b..d8eb788 100644 --- a/server.js +++ b/server.js @@ -37,6 +37,7 @@ class Race extends Document { this.endDate = Date; this.mapName = String; this.mapLink = String; + this.mapUID = String; this.season = Season; } } @@ -48,7 +49,7 @@ class RaceResult extends Document { this.race = Race; this.racer = Racer; - this.timeInSeconds = Number; + this.timeInMilliseconds = Number; this.replayPath = String; } } @@ -200,23 +201,39 @@ app.post('/api/race/add', verifyToken, async (req, res) => { }); // route for handling requests from the Angular client -app.post('/api/upload-replay', upload.single('file'), (req, res) => { +app.post('/api/upload-replay', upload.single('file'), async (req, res) => { let file = req.file; - console.log(req.body); const { seasonId } = req.body; console.log("File uploaded: ", req.file); - fs.readFile(file.path, function(err, buffer) + + await fs.readFile(file.path, async function(err, buffer) { buff = new AdvancableBuffer(buffer); - header = new gbxHeader() + header = new gbxHeader(); header.parse(buff); + if (header.is_vaild == false) + { + return; + } console.log(header); replay = new gbxReplay(); replay.parse(buff); - }) + let currentRacer = await Racer.findOne({gameHandle: replay.gamerHandle}); + console.log(currentRacer); + if (currentRacer == undefined) + { + currentRacer = await Racer.create({name: "DanH", gameHandle: replay.gamerHandle}); + currentRacer.save(); + } + + let race = await Race.findOne({season: seasonId, mapUID: replay.mapUID}) - res.status(200); -}); + result = await RaceResult.create({race: race, racer: currentRacer, timeInMilliseconds: replay.bestTime, replayPath: file.destination}); + result.save(); + + res.status(200); + }); +}); app.listen(3000, () => { console.log('Server listening on port 3000'); diff --git a/src/app/components/upload-replay-dialog/upload-replay-dialog.component.ts b/src/app/components/upload-replay-dialog/upload-replay-dialog.component.ts index b54df3e..3912a78 100644 --- a/src/app/components/upload-replay-dialog/upload-replay-dialog.component.ts +++ b/src/app/components/upload-replay-dialog/upload-replay-dialog.component.ts @@ -9,7 +9,7 @@ import { ApiService } from '../../services/api.service'; }) export class UploadReplayDialogComponent { fileName = ''; - seasonId: string = ''; + seasonId: any; constructor(private apiService: ApiService, @Inject(MAT_DIALOG_DATA) seasonId: string @@ -26,7 +26,8 @@ export class UploadReplayDialogComponent { this.fileName = file.name; let formData = new FormData(); formData.append("file", file); - formData.append("seasonID", this.seasonId); + let local = this.seasonId.seasonId; + formData.append("seasonId", local); const upload$ = this.apiService.postReplayUpload(formData); upload$.subscribe(); } diff --git a/src/app/services/api.service.ts b/src/app/services/api.service.ts index c3e6b20..a7115db 100644 --- a/src/app/services/api.service.ts +++ b/src/app/services/api.service.ts @@ -26,6 +26,14 @@ export class ApiService this.server_route+'/api/upload-replay', file, { headers }); } + postReplayUploadV2(file: FormData, seasonId: string) + { + const headers = new HttpHeaders(); + headers.append('Content-Type', 'multipart/form-data'); + return this.http.post( + this.server_route+'/api/upload-replay', { file, seasonId }, { headers }); + } + getSeasons() { return this.http.get(