Files
WMC-Project-5/backend_splatournament_manager/src/services/tournament-service.ts

118 lines
4.9 KiB
TypeScript

import {Tournament} from '../models/tournament';
import fs from 'fs';
import path from 'path';
import {Database, RunResult} from "sqlite3";
export class TournamentService {
private csvFilename = 'csv/tournaments.csv';
private db: Database;
constructor(db: Database) {
this.db = db;
this.db.serialize(() => {
this.db.run(`CREATE TABLE IF NOT EXISTS Tournaments
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
description TEXT,
maxTeamAmount INTEGER,
currentTeamAmount INTEGER,
registrationStartDate TEXT,
registrationEndDate TEXT
)`);
})
this.seedDb();
}
getAllTournaments(): Promise<Tournament[]> {
return new Promise<Tournament[]>((resolve, reject) => {
this.db.all(`SELECT *
FROM Tournaments`, (err: RunResult, rows: Tournament[]) => {
if (!err) {
resolve(rows);
}
reject(err);
});
});
}
getTournamentById(id: number): Promise<Tournament> {
return new Promise<Tournament>((resolve, reject) => {
this.db.get(`Select *
From Tournaments
WHERE id = ${id}`, (err: RunResult, tournament: Tournament) => {
if (!err) {
resolve(tournament);
}
reject(err);
});
})
}
addTournament(tournament: Tournament): Promise<void> {
return new Promise<void>((resolve, reject) => {
const statement = this.db.prepare('Insert Into Tournaments (name, description, maxTeamAmount, currentTeamAmount, registrationStartDate, registrationEndDate) VALUES (?, ?, ?, ?, ?, ?)')
statement.run(tournament.name, tournament.description, tournament.maxTeamAmount, tournament.currentTeamAmount, tournament.registrationStartDate, tournament.registrationEndDate);
resolve();
})
}
updateTournament(id: number, updatedTournament: Tournament): Promise<void> {
return new Promise((resolve, reject) => {
this.db.run(`Update Tournaments
Set name = $name,
description = $description,
maxTeamAmount = $maxTeamAmount,
currentTeamAmount = $currentTeamAmount,
registrationStartDate = $registrationStartDate,
registrationEndDate = $registrationEndDate
where id = $id`, {
$id: id,
$name: updatedTournament.name,
$description: updatedTournament.description,
$maxTeamAmount: updatedTournament.maxTeamAmount,
$currentTeamAmount: updatedTournament.currentTeamAmount,
$registrationStartDate: updatedTournament.registrationStartDate,
$registrationEndDate: updatedTournament.registrationEndDate,
});
resolve();
})
}
deleteTournament(id: number): Promise<void> {
return new Promise((resolve, reject) => {
this.db.run('Delete From Tournaments where id = $id', {
$id: id,
});
resolve();
})
}
private seedDb() {
fs.readFile(path.join(process.cwd(), "dist", this.csvFilename), 'utf-8', (_, data) => {
const entries = data.split('\n');
entries.shift();
const statement = this.db.prepare(`INSERT INTO Tournaments
(name, description, maxTeamAmount, currentTeamAmount, registrationStartDate, registrationEndDate)
VALUES (?, ?, ?, ?, ?, ?)`);
entries.forEach(line => {
if (line) {
const parts = line.split(',');
const tournament = {
id: 0,
name: parts[0].trim(),
description: parts[1].trim(),
maxTeamAmount: +parts[2],
currentTeamAmount: +parts[3],
registrationStartDate: parts[4].trim(),
registrationEndDate: parts[5].trim()
} as Tournament;
statement.run(tournament.name, tournament.description, tournament.maxTeamAmount, tournament.currentTeamAmount, tournament.registrationStartDate, tournament.registrationEndDate);
console.log(tournament)
}
});
statement.finalize();
});
}
}