-
Jakub Konvička authored71156027
DatabaseContext.cs 2.28 KiB
using Database.Model;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
namespace Database;
public class DatabaseContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<SourceCode> SourceCodes { get; set; }
public string DbPath { get; }
public DatabaseContext()
{
var folder = Environment.SpecialFolder.LocalApplicationData;
var path = Environment.GetFolderPath(folder);
DbPath = System.IO.Path.Join(path, "database.db");
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlite($"Data Source={DbPath}");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasIndex(b => b.Name)
.IsUnique();
}
public static void EnsureSeedData(DatabaseContext context)
{
context.Database.EnsureCreated(); // Ensure database is created
if (File.Exists("default-users.json"))
{
var seedUsers = JsonConvert.DeserializeObject<List<SeedUser>>(File.ReadAllText("default-users.json"));
foreach (var seedUser in seedUsers)
{
if (string.IsNullOrEmpty(seedUser.Password))
continue;
var existingUser = context.Users.Find(seedUser.Id);
if (existingUser != null)
{
// Update existing user
existingUser.Name = seedUser.Name;
existingUser.PasswordHash = BCrypt.Net.BCrypt.HashPassword(seedUser.Password, 12);
// Update other properties as needed
}
else
{
// Add new user
var newUser = new User
{
Id = seedUser.Id,
Name = seedUser.Name,
Token = "NOT LOGGED IN YET",
LastAccess = DateTime.MinValue,
PasswordHash = BCrypt.Net.BCrypt.HashPassword(seedUser.Password, 12)
};
context.Users.Add(newUser);
}
}
context.SaveChanges(); // Save changes to the database
}
}
}