You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
5.7 KiB
82 lines
5.7 KiB
using Application.Domain.Entities;
|
|
using Infrastructure.Application.Entites.Settings;
|
|
using Infrastructure.Extensions;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace IoT.Shared
|
|
{
|
|
public class IoTSharedDbConfig
|
|
{
|
|
public static void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
modelBuilder.Entity<Setting>();
|
|
//
|
|
modelBuilder.Entity<User>().Property(o => o.UserName).IsRequired();
|
|
modelBuilder.Entity<User>().HasIndex(o => o.UserName).IsUnique();
|
|
modelBuilder.Entity<User>().HasIndex(o => o.Email).IsUnique();
|
|
modelBuilder.Entity<Role>().Property(o => o.Name).IsRequired();
|
|
modelBuilder.Entity<Role>().HasIndex(o => o.Name).IsUnique();
|
|
modelBuilder.Entity<PermissionCategory>().HasOne(o => o.Parent).WithMany(o => o.Children).HasForeignKey(o => o.ParentId).OnDelete(DeleteBehavior.SetNull);
|
|
modelBuilder.Entity<PermissionCategory>().HasIndex(o => o.Number).IsUnique();
|
|
modelBuilder.Entity<Permission>().HasIndex(o => o.Number).IsUnique();
|
|
modelBuilder.Entity<Permission>().HasOne(o => o.Category).WithMany(o => o.Permissions).HasForeignKey(o => o.CategoryId).OnDelete(DeleteBehavior.SetNull);
|
|
modelBuilder.Entity<UserRole>().HasOne(o => o.User).WithMany(o => o.UserRoles).HasForeignKey(o => o.UserId);
|
|
modelBuilder.Entity<UserRole>().HasOne(o => o.Role).WithMany(o => o.UserRoles).HasForeignKey(o => o.RoleId);
|
|
modelBuilder.Entity<UserRole>().HasIndex(o => new { o.UserId, o.RoleId }).IsUnique();
|
|
modelBuilder.Entity<RolePermission>().HasOne(o => o.Role).WithMany(o => o.RolePermissions).HasForeignKey(o => o.RoleId);
|
|
modelBuilder.Entity<RolePermission>().HasOne(o => o.Permission).WithMany(o => o.RolePermissions).HasForeignKey(o => o.PermissionId);
|
|
modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique();
|
|
//////
|
|
modelBuilder.Entity<Node>().HasIndex(o => o.Number).IsUnique();
|
|
//
|
|
modelBuilder.Entity<Category>().HasIndex(o => o.Number).IsUnique();
|
|
modelBuilder.Entity<Product>().HasOne(o => o.Category).WithMany(o => o.Products).HasForeignKey(o => o.CategoryId);
|
|
modelBuilder.Entity<Product>().HasIndex(o => o.Number).IsUnique();
|
|
modelBuilder.Entity<Api>().HasOne(o => o.Product).WithMany(o => o.Apis).HasForeignKey(o => o.ProductId);
|
|
modelBuilder.Entity<Api>().HasIndex(o => new { o.ProductId, o.Name }).IsUnique();
|
|
modelBuilder.Entity<Parameter>().HasOne(o => o.Api).WithMany(o => o.Parameters).HasForeignKey(o => o.ApiId);
|
|
//
|
|
modelBuilder.Entity<Device>().HasOne(o => o.Product).WithMany(o => o.Devices).HasForeignKey(o => o.ProductId);
|
|
modelBuilder.Entity<Device>().HasOne(o => o.Node).WithMany(o => o.Devices).HasForeignKey(o => o.NodeId);
|
|
modelBuilder.Entity<Device>().HasIndex(o => o.Number).IsUnique();
|
|
modelBuilder.Entity<Data>().HasOne(o => o.Device).WithMany(o => o.Data).HasForeignKey(o => o.DeviceId);
|
|
//
|
|
modelBuilder.Entity<Command>().HasOne(o => o.Api).WithMany(o => o.Commands).HasForeignKey(o => o.ApiId);
|
|
modelBuilder.Entity<Scene>().HasOne(o => o.Node).WithMany(o => o.Scenes).HasForeignKey(o => o.NodeId);
|
|
modelBuilder.Entity<SceneCommand>().HasOne(o => o.Scene).WithMany(o => o.SceneCommands).HasForeignKey(o => o.SceneId);
|
|
modelBuilder.Entity<SceneCommand>().HasOne(o => o.Command).WithMany(o => o.SceneCommands).HasForeignKey(o => o.CommandId);
|
|
modelBuilder.Entity<SceneTimer>().HasOne(o => o.Scene).WithMany(o => o.SceneTimers).HasForeignKey(o => o.SceneId);
|
|
modelBuilder.Entity<SceneTigger>().HasOne(o => o.Scene).WithMany(o => o.SceneTiggers).HasForeignKey(o => o.SceneId);
|
|
modelBuilder.Entity<SceneTigger>().HasOne(o => o.Data).WithMany(o => o.Tiggers).HasForeignKey(o => o.DataId);
|
|
}
|
|
|
|
public static void Seed(DbContext db)
|
|
{
|
|
foreach (var item in db.Model.GetEntityTypes())
|
|
{
|
|
var type = item.ClrType;
|
|
var name = type.GetDisplayName();
|
|
var number = type.Name;
|
|
var category = new PermissionCategory
|
|
{
|
|
Name = name,
|
|
Number = type.Name
|
|
};
|
|
category.Permissions.Add(new Permission { Name = $"查看{name}", Number = $"Read-{number}" });
|
|
category.Permissions.Add(new Permission { Name = $"添加{name}", Number = $"Add-{number}" });
|
|
category.Permissions.Add(new Permission { Name = $"修改{name}", Number = $"Edit-{number}" });
|
|
category.Permissions.Add(new Permission { Name = $"删除{name}", Number = $"Delete-{number}" });
|
|
db.Set<PermissionCategory>().Add(category);
|
|
}
|
|
db.SaveChanges();
|
|
|
|
db.Set<Category>().Add(new Category { Id = "productcatgoryid-00".ToGuid(), Number = "00", Name = "网关", Image = "/images/gateway.svg" });
|
|
db.Set<Category>().Add(new Category { Id = "productcatgoryid-10".ToGuid(), Number = "10", Name = "安防", Image = "/images/safe.svg" });
|
|
db.Set<Category>().Add(new Category { Id = "productcatgoryid-20".ToGuid(), Number = "20", Name = "电器", Image = "/images/socket.svg" });
|
|
db.Set<Category>().Add(new Category { Id = "productcatgoryid-30".ToGuid(), Number = "30", Name = "照明", Image = "/images/light.svg" });
|
|
db.Set<Category>().Add(new Category { Id = "productcatgoryid-40".ToGuid(), Number = "40", Name = "监测", Image = "/images/monitor.svg" });
|
|
|
|
db.SaveChanges();
|
|
}
|
|
}
|
|
} |