using Yavsc.Models.Haircut; using Yavsc.Models.IT.Evolution; using Yavsc.Models.IT.Fixing; using Yavsc.Server.Models.EMailing; using Yavsc.Server.Models.IT.SourceCode; using Yavsc.Server.Models.IT; using Yavsc.Models.Streaming; namespace Yavsc.Models { using Relationship; using Forms; using Yavsc; using Auth; using Billing; using Musical; using Workflow; using Identity; using Market; using Chat; using Messaging; using Access; using Musical.Profiles; using Workflow.Profiles; using Drawing; using Attributes; using Bank; using Payment; using Blog; using Yavsc.Abstract.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Yavsc.Server.Models.Calendar; using Microsoft.EntityFrameworkCore.ChangeTracking; using Yavsc.Abstract.Models.Messaging; public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() { } public ApplicationDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); // Customize the ASP.NET Identity model and override the defaults if needed. // For example, you can rename the ASP.NET Identity table names and more. // Add your customizations after calling base.OnModelCreating(builder); builder.Entity().HasKey(x => new { x.OwnerId, x.UserId }); builder.Entity().Property(x => x.DeclarationDate).HasDefaultValueSql("LOCALTIMESTAMP"); builder.Entity().HasKey(x => new { x.PostId, x.TagId }); builder.Entity().Property(u => u.FullName).IsRequired(false); builder.Entity().Property(u => u.DedicatedGoogleCalendar).IsRequired(false); builder.Entity().HasMany(c => c.Connections); builder.Entity().Property(u => u.Avatar).HasDefaultValue(Constants.DefaultAvatar); builder.Entity().Property(u => u.DiskQuota).HasDefaultValue(Constants.DefaultFSQ); builder.Entity().HasAlternateKey(u => u.Email); builder.Entity().HasOne(bl => bl.User); builder.Entity().HasOne(bl => bl.Owner); builder.Entity().HasKey(u => new { u.DoesCode, u.UserId }); builder.Entity().HasKey(u => new { u.InstrumentId, u.UserId }); builder.Entity().HasKey(a => new { a.CircleId, a.BlogPostId }); builder.Entity().HasKey(c => new { c.MemberId, c.CircleId }); builder.Entity().HasKey(c => new { uid = c.UserId, notid = c.NotificationId }); builder.Entity().HasKey(ti => new { ti.TaintId, ti.PrestationId }); builder.Entity().HasKey(l => new { l.HRef, l.Method }); builder.Entity().HasKey(l => new { l.Start, l.End }); builder.Entity().HasKey(o => new { o.Code, o.CodeScrutin }); builder.Entity().Property(n => n.icon).HasDefaultValue("exclam"); builder.Entity().HasKey(p => new { room = p.ChannelName, user = p.UserId }); builder.Entity().HasAlternateKey(i => new { Instrument = i.InstrumentId, owner = i.OwnerId }); foreach (var et in builder.Model.GetEntityTypes()) { if (et.ClrType.GetInterface("IBaseTrackedEntity") != null) et.FindProperty("DateCreated").SetAfterSaveBehavior(Microsoft.EntityFrameworkCore.Metadata.PropertySaveBehavior.Ignore); } builder.Entity().Property(a => a.ParentCode).IsRequired(false); // builder.Entity>().HasKey(i=> new { i.LoginProvider, i.UserId, i.ProviderKey }); } // this is not a failback procedure. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var appSetup = (string)AppDomain.CurrentDomain.GetData(Constants.YavscConnectionStringEnvName); if (!string.IsNullOrWhiteSpace(appSetup)) { optionsBuilder.UseNpgsql(appSetup); return; } var envSetup = Environment.GetEnvironmentVariable(Constants.YavscConnectionStringEnvName); if (envSetup != null) optionsBuilder.UseNpgsql(envSetup); else optionsBuilder.UseNpgsql(); } public DbSet Applications { get; set; } public DbSet RefreshTokens { get; set; } /// /// Activities referenced on this site /// /// public DbSet Activities { get; set; } public DbSet UserActivities { get; set; } /// /// Users posts /// /// public DbSet BlogSpot { get; set; } /// /// Skills powered by this site /// /// public DbSet SiteSkills { get; set; } /// /// Circle members /// /// public DbSet CircleMembers { get; set; } /// /// Special commands, talking about /// a given place and date. /// public DbSet RdvQueries { get; set; } public DbSet HairCutQueries { get; set; } public DbSet HairPrestation { get; set; } public DbSet HairMultiCutQueries { get; set; } public DbSet Performers { get; set; } public DbSet Estimates { get; set; } public DbSet BankStatus { get; set; } public DbSet BankBook { get; set; } /// /// Google Calendar offline /// open auth tokens /// /// tokens public DbSet OAuth2Tokens { get; set; } /// /// References all declared external NativeConfidential devices /// /// public DbSet DeviceDeclaration { get; set; } public DbSet Services { get; set; } public DbSet Products { get; set; } public DbSet ExceptionsSIREN { get; set; } public DbSet Locations { get; set; } public DbSet Tags { get; set; } public DbSet TagsDomain { get; set; } public DbSet EstimateTemplates { get; set; } public DbSet Contact { get; set; } public DbSet ClientProviderInfo { get; set; } public DbSet BlackListed { get; set; } public DbSet MusicalPreference { get; set; } public DbSet MusicalTendency { get; set; } public DbSet Instrument { get; set; } [ActivitySettings] public DbSet DjSettings { get; set; } [ActivitySettings] public DbSet Instrumentation { get; set; } [ActivitySettings] public DbSet FormationSettings { get; set; } [ActivitySettings] public DbSet GeneralSettings { get; set; } public DbSet CoWorking { get; set; } private void AddTimestamps(string userId) { var entities = ChangeTracker.Entries() .Where(x => x.Entity.GetType().GetInterface(nameof(ITrackedEntity)) != null && (x.State == EntityState.Added || x.State == EntityState.Modified)); foreach (var entity in entities) { if (entity.State == EntityState.Added) { ((ITrackedEntity)entity.Entity).DateCreated = DateTime.Now; ((ITrackedEntity)entity.Entity).UserCreated = userId; } ((ITrackedEntity)entity.Entity).DateModified = DateTime.Now; ((ITrackedEntity)entity.Entity).UserModified = userId; } } public int SaveChanges(string userId) { AddTimestamps(userId); return base.SaveChanges(); } public async Task SaveChangesAsync(string userId, CancellationToken ctoken = default(CancellationToken)) { AddTimestamps(userId); return await base.SaveChangesAsync(ctoken); } public DbSet Circle { get; set; } public DbSet CircleAuthorizationToBlogPost { get; set; } public DbSet CommandForm { get; set; } public DbSet
Form { get; set; } public DbSet Ban { get; set; } public DbSet HairTaint { get; set; } public DbSet Color { get; set; } public DbSet Notification { get; set; } public DbSet DismissClicked { get; set; } [ActivitySettings] public DbSet BrusherProfile { get; set; } public DbSet BankIdentity { get; set; } public DbSet PayPalPayment { get; set; } public DbSet HyperLink { get; set; } public DbSet Period { get; set; } public DbSet BlogTag { get; set; } public DbSet ApplicationUser { get; set; } public DbSet Feature { get; set; } public DbSet Bug { get; set; } public DbSet Comment { get; set; } public DbSet Announce { get; set; } // TODO remove and opt for for memory only storing, // as long as it must be set empty each time the service is restarted, // and that chatting should be kept as must as possible independent from db context public DbSet ChatConnection { get; set; } public DbSet ChatRoom { get; set; } public DbSet MailingTemplate { get; set; } public DbSet GitRepositoryReference { get; set; } public DbSet Project { get; set; } [Obsolete("use signaled flows")] public DbSet LiveFlow { get; set; } public DbSet ChatRoomAccess { get; set; } public DbSet InstrumentRating { get; set; } public DbSet Scopes { get; set; } public DbSet blogSpotPublications{ get; set; } // public DbSet> AspNetUserLogins { get; set; } } }