feat: initial datamodel + ef connection and migrations

Initial version of the data model
Includes EF initialization and migrations
EF migrations are applied on application start
This commit is contained in:
2026-04-09 10:36:09 +02:00
commit 16160f6424
45 changed files with 2522 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TournamentOrganizer.Models;
public class Event
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; } = "Example Tournament";
public DateTime Start { get; set; }
public DateTime End { get; set; }
public required List<Tournament> Tournaments { get; set; }
}
+32
View File
@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TournamentOrganizer.Models;
public enum RuleSet
{
DoubleElimination,
SingleElimination,
RoundRobin,
Swiss
}
public class Game
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; } = "Example Game";
public string Description { get; set; } = "Example Game Description";
public RuleSet S1RuleSet { get; set; }
public int S1Groups;
public int S1GroupAdvances;
public RuleSet? S2RuleSet { get; set; }
public required List<Tournament> Tournaments { get; set; }
}
+19
View File
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TournamentOrganizer.Models;
public class Match
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int TournamentId { get; set; }
public required List<TeamParticipant> Teams;
public required List<Round> Rounds;
public required Tournament Tournament { get; set; }
}
+29
View File
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace TournamentOrganizer.Models;
[PrimaryKey(nameof(RoundId), nameof(PlayerId))]
public class PlayerParticipant
{
public int RoundId { get; set; }
public int PlayerId { get; set; }
public required Player Player { get; set; }
public required Round Round { get; set; }
}
public class TeamParticipant
{
public int MatchId { get; set; }
public int TeamId { get; set; }
public int Seed { get; set; }
public int Score { get; set; }
public required Team Team { get; set; }
public required Match Round { get; set; }
}
+19
View File
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TournamentOrganizer.Models;
public class Player
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; } = "Example Tournament";
public string Contact { get; set; } = "discordname";
public int TeamId { get; set; }
public required Team Team { get; set; }
}
+26
View File
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TournamentOrganizer.Models;
public enum RoundState
{
WAITING,
STARTED,
FINISHED
}
public class Round
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int MatchId { get; set; }
public RoundState State { get; set; } = RoundState.WAITING;
public required List<PlayerParticipant> Players;
public required Match Match { get; set; }
}
+18
View File
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TournamentOrganizer.Models;
public class Team
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; } = "Example Team";
public required List<Player> Players { get; set; }
public required List<TeamParticipant> Matches { get; set; }
}
+27
View File
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace TournamentOrganizer.Models;
public class Tournament
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int GameId { get; set; }
public int EventId { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public RuleSet S1RuleSet { get; set; }
public int S1Groups;
public int S1GroupAdvances;
public RuleSet? S2RuleSet { get; set; }
public required Game Game { get; set; }
public required Event Event { get; set; }
}