2024-08-04 18:44:33 -05:00
|
|
|
|
using LANCommander.Server.Data.Models;
|
2023-01-03 01:06:48 -06:00
|
|
|
|
using Microsoft.AspNetCore.Identity;
|
2023-01-02 15:44:04 -06:00
|
|
|
|
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
2023-03-27 01:19:21 -05:00
|
|
|
|
using Microsoft.Build.Framework;
|
2023-01-02 15:44:04 -06:00
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
|
2024-08-04 18:44:33 -05:00
|
|
|
|
namespace LANCommander.Server.Data
|
2023-01-02 15:44:04 -06:00
|
|
|
|
{
|
2023-01-04 01:46:31 -06:00
|
|
|
|
public class DatabaseContext : IdentityDbContext<User, Role, Guid>
|
2023-01-02 15:44:04 -06:00
|
|
|
|
{
|
|
|
|
|
|
public DatabaseContext(DbContextOptions<DatabaseContext> options)
|
|
|
|
|
|
: base(options)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void OnModelCreating(ModelBuilder builder)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.OnModelCreating(builder);
|
|
|
|
|
|
|
2023-11-28 17:56:16 -06:00
|
|
|
|
builder.ConfigureBaseRelationships<Data.Models.Action>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Archive>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Category>();
|
2023-12-04 01:39:59 -06:00
|
|
|
|
builder.ConfigureBaseRelationships<Collection>();
|
2023-11-28 17:56:16 -06:00
|
|
|
|
builder.ConfigureBaseRelationships<Company>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Game>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<GameSave>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Genre>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Key>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Media>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<MultiplayerMode>();
|
2024-06-30 23:10:55 -05:00
|
|
|
|
builder.ConfigureBaseRelationships<Platform>();
|
2023-11-28 17:56:16 -06:00
|
|
|
|
builder.ConfigureBaseRelationships<PlaySession>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Redistributable>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<SavePath>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Script>();
|
2024-08-04 18:44:33 -05:00
|
|
|
|
builder.ConfigureBaseRelationships<Data.Models.Server>();
|
2023-11-28 17:56:16 -06:00
|
|
|
|
builder.ConfigureBaseRelationships<ServerConsole>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<ServerHttpPath>();
|
|
|
|
|
|
builder.ConfigureBaseRelationships<Tag>();
|
2024-08-11 14:48:00 -05:00
|
|
|
|
builder.ConfigureBaseRelationships<Issue>();
|
2023-11-28 17:56:16 -06:00
|
|
|
|
|
2023-01-08 21:43:01 -06:00
|
|
|
|
builder.Entity<Genre>()
|
|
|
|
|
|
.HasMany(g => g.Games)
|
|
|
|
|
|
.WithMany(g => g.Genres);
|
|
|
|
|
|
|
|
|
|
|
|
builder.Entity<Category>()
|
|
|
|
|
|
.HasMany(c => c.Games)
|
|
|
|
|
|
.WithMany(g => g.Categories);
|
2023-01-02 15:44:04 -06:00
|
|
|
|
|
2023-01-08 21:43:01 -06:00
|
|
|
|
builder.Entity<Category>()
|
|
|
|
|
|
.HasMany(c => c.Children)
|
|
|
|
|
|
.WithOne(c => c.Parent)
|
2023-01-02 15:44:04 -06:00
|
|
|
|
.IsRequired(false);
|
|
|
|
|
|
|
2023-01-08 21:43:01 -06:00
|
|
|
|
builder.Entity<Tag>()
|
|
|
|
|
|
.HasMany(t => t.Games)
|
|
|
|
|
|
.WithMany(g => g.Tags);
|
|
|
|
|
|
|
2024-06-30 23:10:55 -05:00
|
|
|
|
builder.Entity<Platform>()
|
|
|
|
|
|
.HasMany(p => p.Games)
|
|
|
|
|
|
.WithMany(g => g.Platforms);
|
|
|
|
|
|
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#region Game Relationships
|
2023-01-02 15:44:04 -06:00
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Archives)
|
|
|
|
|
|
.WithOne(g => g.Game)
|
2023-10-18 01:14:31 -05:00
|
|
|
|
.IsRequired(false)
|
2023-01-09 18:55:50 -06:00
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2023-01-07 20:54:24 -06:00
|
|
|
|
|
2023-01-15 03:11:51 -06:00
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Scripts)
|
|
|
|
|
|
.WithOne(s => s.Game)
|
2023-10-18 01:14:31 -05:00
|
|
|
|
.IsRequired(false)
|
2023-01-15 03:11:51 -06:00
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
2023-01-07 20:54:24 -06:00
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Keys)
|
|
|
|
|
|
.WithOne(g => g.Game)
|
2023-01-09 18:55:50 -06:00
|
|
|
|
.IsRequired(true)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2023-01-08 21:43:01 -06:00
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Actions)
|
|
|
|
|
|
.WithOne(g => g.Game)
|
2024-01-18 01:27:03 -06:00
|
|
|
|
.IsRequired(false)
|
2023-01-08 21:43:01 -06:00
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.MultiplayerModes)
|
|
|
|
|
|
.WithOne(m => m.Game)
|
|
|
|
|
|
.IsRequired(true)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
2023-11-28 17:56:16 -06:00
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Media)
|
|
|
|
|
|
.WithOne(m => m.Game)
|
2024-01-15 02:20:35 -06:00
|
|
|
|
.IsRequired(false)
|
2023-11-28 17:56:16 -06:00
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.SavePaths)
|
|
|
|
|
|
.WithOne(p => p.Game)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.PlaySessions)
|
|
|
|
|
|
.WithOne(ps => ps.Game)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.GameSaves)
|
|
|
|
|
|
.WithOne(gs => gs.Game)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
|
|
|
2023-01-08 21:43:01 -06:00
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Developers)
|
|
|
|
|
|
.WithMany(c => c.DevelopedGames)
|
|
|
|
|
|
.UsingEntity<Dictionary<string, object>>(
|
|
|
|
|
|
"GameDeveloper",
|
|
|
|
|
|
g => g.HasOne<Company>().WithMany().HasForeignKey("DeveloperId"),
|
|
|
|
|
|
g => g.HasOne<Game>().WithMany().HasForeignKey("GameId")
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Publishers)
|
|
|
|
|
|
.WithMany(c => c.PublishedGames)
|
|
|
|
|
|
.UsingEntity<Dictionary<string, object>>(
|
|
|
|
|
|
"GamePublisher",
|
|
|
|
|
|
g => g.HasOne<Company>().WithMany().HasForeignKey("PublisherId"),
|
|
|
|
|
|
g => g.HasOne<Game>().WithMany().HasForeignKey("GameId")
|
|
|
|
|
|
);
|
2023-01-17 17:57:12 -06:00
|
|
|
|
|
2023-10-22 17:59:00 -05:00
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.Redistributables)
|
|
|
|
|
|
.WithMany(r => r.Games)
|
|
|
|
|
|
.UsingEntity<Dictionary<string, object>>(
|
|
|
|
|
|
"GameRedistributable",
|
|
|
|
|
|
gr => gr.HasOne<Redistributable>().WithMany().HasForeignKey("RedistributableId"),
|
|
|
|
|
|
gr => gr.HasOne<Game>().WithMany().HasForeignKey("GameId")
|
|
|
|
|
|
);
|
2024-01-08 02:37:36 -06:00
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasMany(g => g.DependentGames)
|
|
|
|
|
|
.WithOne(g => g.BaseGame)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.SetNull);
|
2024-03-29 17:19:42 -05:00
|
|
|
|
|
|
|
|
|
|
builder.Entity<Game>()
|
|
|
|
|
|
.HasOne(g => g.Engine)
|
|
|
|
|
|
.WithMany(e => e.Games)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.SetNull);
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#endregion
|
2023-10-22 17:59:00 -05:00
|
|
|
|
|
2024-06-19 21:28:26 -05:00
|
|
|
|
#region Media Relationships
|
|
|
|
|
|
builder.Entity<Media>()
|
|
|
|
|
|
.HasOne(m => m.Thumbnail)
|
|
|
|
|
|
.WithOne(m => m.Parent)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#region User Relationships
|
2023-01-17 17:57:12 -06:00
|
|
|
|
builder.Entity<User>()
|
|
|
|
|
|
.HasMany(u => u.GameSaves)
|
|
|
|
|
|
.WithOne(gs => gs.User)
|
|
|
|
|
|
.IsRequired(true)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
2023-11-17 02:28:46 -06:00
|
|
|
|
builder.Entity<User>()
|
|
|
|
|
|
.HasMany(u => u.PlaySessions)
|
|
|
|
|
|
.WithOne(ps => ps.User)
|
|
|
|
|
|
.IsRequired(true)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2024-01-15 02:20:35 -06:00
|
|
|
|
|
|
|
|
|
|
builder.Entity<User>()
|
|
|
|
|
|
.HasMany(u => u.Media)
|
|
|
|
|
|
.WithOne(m => m.User)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#endregion
|
2023-11-17 02:28:46 -06:00
|
|
|
|
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#region Server Relationships
|
2024-08-04 18:44:33 -05:00
|
|
|
|
builder.Entity<Data.Models.Server>()
|
2023-08-14 21:28:18 -05:00
|
|
|
|
.HasOne(s => s.Game)
|
|
|
|
|
|
.WithMany(g => g.Servers)
|
|
|
|
|
|
.IsRequired(false)
|
2023-11-28 17:56:16 -06:00
|
|
|
|
.OnDelete(DeleteBehavior.SetNull);
|
2023-08-15 20:15:53 -05:00
|
|
|
|
|
2024-08-04 18:44:33 -05:00
|
|
|
|
builder.Entity<Data.Models.Server>()
|
2023-08-17 19:55:46 -05:00
|
|
|
|
.HasMany<ServerConsole>()
|
2023-08-15 20:15:53 -05:00
|
|
|
|
.WithOne(sl => sl.Server)
|
|
|
|
|
|
.IsRequired(true)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2023-10-18 01:14:31 -05:00
|
|
|
|
|
2024-08-04 18:44:33 -05:00
|
|
|
|
builder.Entity<Data.Models.Server>()
|
2023-11-04 19:43:38 -05:00
|
|
|
|
.HasMany<ServerHttpPath>()
|
|
|
|
|
|
.WithOne(s => s.Server)
|
|
|
|
|
|
.IsRequired(true)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2023-12-20 17:53:52 -06:00
|
|
|
|
|
2024-08-04 18:44:33 -05:00
|
|
|
|
builder.Entity<Data.Models.Server>()
|
2023-12-20 17:53:52 -06:00
|
|
|
|
.HasMany(s => s.Scripts)
|
|
|
|
|
|
.WithOne(s => s.Server)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2024-01-18 01:27:03 -06:00
|
|
|
|
|
2024-08-04 18:44:33 -05:00
|
|
|
|
builder.Entity<Data.Models.Server>()
|
2024-01-18 01:27:03 -06:00
|
|
|
|
.HasMany(s => s.Actions)
|
|
|
|
|
|
.WithOne(s => s.Server)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#endregion
|
2023-11-04 19:43:38 -05:00
|
|
|
|
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#region Redistributable Relationships
|
2023-10-18 01:14:31 -05:00
|
|
|
|
builder.Entity<Redistributable>()
|
|
|
|
|
|
.HasMany(r => r.Archives)
|
|
|
|
|
|
.WithOne(a => a.Redistributable)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
|
|
|
|
|
builder.Entity<Redistributable>()
|
|
|
|
|
|
.HasMany(r => r.Scripts)
|
|
|
|
|
|
.WithOne(s => s.Redistributable)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
2023-11-28 17:56:16 -06:00
|
|
|
|
#endregion
|
2023-12-04 01:39:59 -06:00
|
|
|
|
|
|
|
|
|
|
#region Collection Relationships
|
|
|
|
|
|
builder.Entity<Collection>()
|
|
|
|
|
|
.HasMany(c => c.Games)
|
|
|
|
|
|
.WithMany(g => g.Collections)
|
|
|
|
|
|
.UsingEntity<Dictionary<string, object>>(
|
|
|
|
|
|
"CollectionGame",
|
|
|
|
|
|
cg => cg.HasOne<Game>().WithMany().HasForeignKey("GameId"),
|
|
|
|
|
|
cg => cg.HasOne<Collection>().WithMany().HasForeignKey("CollectionId")
|
|
|
|
|
|
);
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Role Relationships
|
|
|
|
|
|
builder.Entity<Role>()
|
|
|
|
|
|
.HasMany(r => r.Collections)
|
|
|
|
|
|
.WithMany(c => c.Roles)
|
|
|
|
|
|
.UsingEntity<Dictionary<string, object>>(
|
|
|
|
|
|
"RoleCollection",
|
|
|
|
|
|
rc => rc.HasOne<Collection>().WithMany().HasForeignKey("CollectionId"),
|
|
|
|
|
|
rc => rc.HasOne<Role>().WithMany().HasForeignKey("RoleId")
|
|
|
|
|
|
);
|
|
|
|
|
|
#endregion
|
2024-08-11 14:48:00 -05:00
|
|
|
|
|
|
|
|
|
|
#region Issue Relationships
|
|
|
|
|
|
builder.Entity<Issue>()
|
|
|
|
|
|
.HasOne(i => i.Game)
|
|
|
|
|
|
.WithMany(g => g.Issues)
|
|
|
|
|
|
.IsRequired(true)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
|
|
#endregion
|
2023-01-02 15:44:04 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public DbSet<Game>? Games { get; set; }
|
|
|
|
|
|
|
2023-01-08 21:43:01 -06:00
|
|
|
|
public DbSet<Genre>? Genres { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public DbSet<Category>? Categories { get; set; }
|
|
|
|
|
|
|
2023-01-02 15:44:04 -06:00
|
|
|
|
public DbSet<Tag>? Tags { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public DbSet<Company>? Companies { get; set; }
|
2023-01-07 20:54:24 -06:00
|
|
|
|
|
|
|
|
|
|
public DbSet<Key>? Keys { get; set; }
|
2023-01-17 19:36:58 -06:00
|
|
|
|
|
|
|
|
|
|
public DbSet<GameSave>? GameSaves { get; set; }
|
2023-03-18 00:44:31 -05:00
|
|
|
|
|
2023-11-17 02:28:46 -06:00
|
|
|
|
public DbSet<PlaySession>? PlaySessions { get; set; }
|
|
|
|
|
|
|
2024-08-04 18:44:33 -05:00
|
|
|
|
public DbSet<Data.Models.Server>? Servers { get; set; }
|
2023-08-17 19:55:46 -05:00
|
|
|
|
|
|
|
|
|
|
public DbSet<ServerConsole>? ServerConsoles { get; set; }
|
2023-10-18 01:14:31 -05:00
|
|
|
|
|
|
|
|
|
|
public DbSet<Redistributable>? Redistributables { get; set; }
|
2023-11-02 01:24:42 -05:00
|
|
|
|
|
|
|
|
|
|
public DbSet<Media>? Media { get; set; }
|
2024-08-11 14:48:00 -05:00
|
|
|
|
public DbSet<Issue>? Issues { get; set; }
|
2023-01-02 15:44:04 -06:00
|
|
|
|
}
|
|
|
|
|
|
}
|