MyBookmark/Modules.User.Database/Database/UserDbContext.cs
THE_KONDRAT 7b16d72329 ui and login
mongo => postgres
2024-11-03 16:08:39 +03:00

69 lines
2.7 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.ValueGeneration;
using Modules.User.Database.Database.Entities;
namespace Modules.User.Database.Database;
public class UserDbContext : DbContext
{
public DbSet<Account> Accounts { get; set; }
public DbSet<Entities.User> Users { get; set; }
public DbSet<Session> Sessions { get; set; }
public UserDbContext(DbContextOptions<UserDbContext> options) : base(options)
{
}
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder.Properties<Enum>().HaveConversion<string>();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Entities.User>(q =>
{
q.HasOne(q => q.Account).WithOne(q => q.User).HasForeignKey<Account>(q => q.UserId);
q.OwnsOne(q => q.RegionalSettings);
q.Property(q => q.NickName).HasMaxLength(32);
q.Property(q => q.FirstName).HasMaxLength(32);
q.Property(q => q.LastName).HasMaxLength(128);
q.Property(q => q.Patronymic).HasMaxLength(64);
});
modelBuilder.Entity<Account>(q =>
{
q.Property(q => q.Email).HasMaxLength(128);
q.HasMany(q => q.Sessions).WithOne().HasForeignKey(q => q.AccountId);
q.Property(q => q.CreationDate).HasDefaultValueSql("now()").ValueGeneratedOnAdd().HasValueGenerator(typeof(DatetimeNowValueGenerator));
});
modelBuilder.Entity<Session>(q =>
{
//q.Property(q => q.DeviceInfo).HasMaxLength(128);
//q.Property(q => q.UserAgent).HasMaxLength(128);
q.OwnsOne(q => q.ClientInfo, q =>
{
q.Property(q => q.UserAgent).HasMaxLength(256);
q.Property(q => q.Country).HasMaxLength(96);
q.Property(q => q.Region).HasMaxLength(128);
});
q.Property(q => q.RefreshToken).HasMaxLength(172); //128 bytes to base64
q.Property(q => q.ExpiredDate).HasDefaultValueSql("'0001-01-01 00:00:00+00'").ValueGeneratedOnAdd();
q.Property(q => q.LastUpdate).HasDefaultValueSql("now()").ValueGeneratedOnAddOrUpdate();
//q.Property(q => q.LastUpdate).HasDefaultValueSql("now()").ValueGeneratedOnAddOrUpdate().HasValueGenerator(typeof(DatetimeNowValueGenerator));
});
}
private class DatetimeNowValueGenerator : ValueGenerator<DateTime>
{
public override bool GeneratesTemporaryValues => false;
public override DateTime Next(EntityEntry entry)
{
return DateTime.UtcNow;
}
}
}