using Application.Domain.Entities; using Infrastructure.Application.Entites.Settings; using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Security; using IoT.Shared; using IoTCenter.Application.Domain; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; namespace IoTCenter { public class DbConfig : IDbConfig { private readonly IEncryptionService _encryptionService; public DbConfig(IEncryptionService encryptionService) { this._encryptionService = encryptionService; } public void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { } public void OnModelCreating(ModelBuilder modelBuilder) { IoTSharedDbConfig.OnModelCreating(modelBuilder); // modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Parent).WithMany(o => o.Children).HasForeignKey(o => o.ParentId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().HasIndex(o => new { o.OrganId, o.Number }).IsUnique(); modelBuilder.Entity().HasOne(o => o.Parent).WithMany(o => o.Children).HasForeignKey(o => o.ParentId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().Property(o => o.Number).IsRequired(); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().Property(o => o.Name).IsRequired(); modelBuilder.Entity().Property(o => o.Number).IsRequired(); modelBuilder.Entity().HasOne(o => o.Parent).WithMany(o => o.Children).HasForeignKey(o => o.ParentId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().HasOne(o => o.Area).WithMany(o => o.Organs).HasForeignKey(o => o.ParentId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.OrganUsers).HasForeignKey(o => o.OrganId); modelBuilder.Entity().HasOne(o => o.User).WithMany(o => o.OrganUsers).HasForeignKey(o => o.UserId); modelBuilder.Entity().HasIndex(o => new { o.OrganId, o.UserId }).IsUnique(); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.OrganNodes).HasForeignKey(o => o.OrganId); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.OrganNodes).HasForeignKey(o => o.OrganId); modelBuilder.Entity().HasOne(o => o.Node).WithMany(o => o.OrganNodes).HasForeignKey(o => o.NodeId); modelBuilder.Entity().HasIndex(o => new { o.OrganId, o.NodeId }).IsUnique(); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.OrganScenes).HasForeignKey(o => o.OrganId); modelBuilder.Entity().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneCommands).HasForeignKey(o => o.OrganSceneId); modelBuilder.Entity().HasOne(o => o.Command).WithMany(o => o.OrganSceneCommands).HasForeignKey(o => o.CommandId); modelBuilder.Entity().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneTimers).HasForeignKey(o => o.OrganSceneId); modelBuilder.Entity().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneTiggers).HasForeignKey(o => o.OrganSceneId); modelBuilder.Entity().HasOne(o => o.Data).WithMany(o => o.OrganSceneTiggers).HasForeignKey(o => o.DataId); // modelBuilder.Entity().HasIndex(o => o.Name).IsUnique(); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Node).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.NodeId); modelBuilder.Entity().HasOne(o => o.Category).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.CategoryId); modelBuilder.Entity().HasIndex(o => new { o.CategoryId, o.NodeId }).IsUnique(); modelBuilder.Entity().Property(o => o.DeviceNumber).IsRequired(); } public void Seed(DbContext db) { IoTSharedDbConfig.Seed(db); var saRole = new Role { Name = "超级管理员", IsReadOnly = true }; var adminRole = new Role { Name = "管理员", IsReadOnly = true }; var skips = new string[] { "添加Api", "修改Api", "添加分类", "修改分类", "添加参数", "修改参数", "添加产品", "修改产品", "添加节点", "添加权限", "修改权限", "添加权限分类", "修改权限分类", "添加设备" }; foreach (var item in db.Set()) { saRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true }); if (!item.Name.Contains("删除") && !skips.Contains(item.Name)) { adminRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true }); } } var securityStam = "123456"; db.Set().Add(new User { UserName = "super", SecurityStamp = securityStam, PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam), Email = "super@test.com", NickName = "超级管理员", UserRoles = new List { new UserRole { Role = saRole } } }); db.Set().Add(new User { UserName = "admin", SecurityStamp = securityStam, PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam), Email = "admin@test.com", NickName = "管理员", UserRoles = new List { new UserRole { Role = adminRole } } }); db.SaveChanges(); // var set = db.Set(); set.Add(new Setting { Name = "name", Value = "物联中心", Type = SettingType.Text }); set.Add(new Setting { Name = "logo", Value = "/images/logo.png", Type = SettingType.ImageUrl }); set.Add(new Setting { Name = "copyright", Value = "Copyright © {0} Company. All rights reserved", Type = SettingType.Html }); set.Add(new Setting { Name = "iosAppUrl", Value = "itms-services://?action=download-manifest&url=https://iot.edusoa.com/IoTCenter/Info.plist", Type = SettingType.Text }); // var macAddress = Helper.Instance.GetMacAddress(); set.Add(new Setting { Name = "sn", Value = macAddress, Type = SettingType.Text }); set.Add(new Setting { Name = "id", Value = macAddress.Md5(), Type = SettingType.Text }); set.Add(new Setting { Name = "code", Value = "根据id生成的授权码", Type = SettingType.Text }); set.Add(new Setting { Name = "delay", Value = "500", Type = SettingType.Text }); db.SaveChanges(); // db.Set().Add(new NodeCategory { Name = "智慧教室", Template = "node" }); //AccessTokenHours set.Add(new Setting { Name = "AccessTokenTimeout", Value = "1440", Type = SettingType.Text }); set.Add(new Setting { Name = "RefreshTokenTimeout", Value = "518400", Type = SettingType.Text }); set.Add(new Setting { Name = "MaxFailedAccessAttemptsBeforeLockout", Value = "5", Type = SettingType.Text }); set.Add(new Setting { Name = "DefaultAccountLockoutMinutes", Value = "10", Type = SettingType.Text }); set.Add(new Setting { Name = "CaptchaSeconds", Value = "60", Type = SettingType.Text }); set.Add(new Setting { Name = "RegisterDisabled", Value = "false", Type = SettingType.Text }); db.SaveChanges(); } } }