Spaces:
Running
Running
User
deploy: update to latest release with Id case fix for notifications in seed_supabase.sql
22f4a07 | using System; | |
| using System.Collections.Generic; | |
| using Microsoft.EntityFrameworkCore; | |
| using TaskTrackingSystem.Shared.Enums; | |
| namespace TaskTrackingSystem.Database.AppDbContextModels; | |
| public partial class AppDbContext : DbContext | |
| { | |
| public AppDbContext() | |
| { | |
| } | |
| public AppDbContext(DbContextOptions<AppDbContext> options) | |
| : base(options) | |
| { | |
| } | |
| public virtual DbSet<AuditLog> AuditLogs { get; set; } | |
| public virtual DbSet<Comment> Comments { get; set; } | |
| public virtual DbSet<Menu> Menus { get; set; } | |
| public virtual DbSet<Notification> Notifications { get; set; } | |
| public virtual DbSet<Permission> Permissions { get; set; } | |
| public virtual DbSet<Issue> Issues { get; set; } | |
| public virtual DbSet<Project> Projects { get; set; } | |
| public virtual DbSet<ProjectMember> ProjectMembers { get; set; } | |
| public virtual DbSet<Role> Roles { get; set; } | |
| public virtual DbSet<RoleMenu> RoleMenus { get; set; } | |
| public virtual DbSet<RolePermission> RolePermissions { get; set; } | |
| public virtual DbSet<Task> Tasks { get; set; } | |
| public virtual DbSet<UserDevice> UserDevices { get; set; } | |
| public virtual DbSet<User> Users { get; set; } | |
| protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) | |
| { | |
| if (!optionsBuilder.IsConfigured) | |
| { | |
| optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=tts;Username=postgres;Password=postgres"); | |
| } | |
| } | |
| protected override void OnModelCreating(ModelBuilder modelBuilder) | |
| { | |
| modelBuilder.Entity<AuditLog>(entity => | |
| { | |
| entity.HasIndex(e => e.UserId, "IX_AuditLogs_UserId"); | |
| entity.Property(e => e.Action).HasMaxLength(100); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.IpAddress) | |
| .HasMaxLength(45) | |
| .IsUnicode(false); | |
| entity.Property(e => e.Module).HasMaxLength(50); | |
| entity.HasOne(d => d.User).WithMany(p => p.AuditLogs) | |
| .HasForeignKey(d => d.UserId) | |
| .HasConstraintName("FK_AuditLogs_Users"); | |
| }); | |
| modelBuilder.Entity<Comment>(entity => | |
| { | |
| entity.HasIndex(e => e.TaskId, "IX_Comments_TaskId"); | |
| entity.HasIndex(e => e.UserId, "IX_Comments_UserId"); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.UpdatedAt).HasColumnType("timestamp with time zone"); | |
| entity.HasOne(d => d.Task).WithMany(p => p.Comments) | |
| .HasForeignKey(d => d.TaskId) | |
| .HasConstraintName("FK_Comments_Tasks"); | |
| entity.HasOne(d => d.User).WithMany(p => p.Comments) | |
| .HasForeignKey(d => d.UserId) | |
| .OnDelete(DeleteBehavior.ClientSetNull) | |
| .HasConstraintName("FK_Comments_Users"); | |
| }); | |
| modelBuilder.Entity<Menu>(entity => | |
| { | |
| entity.HasIndex(e => e.MenuCode, "UQ_Menus_MenuCode").IsUnique(); | |
| entity.Property(e => e.CreatedAt) | |
| .HasPrecision(0) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP"); | |
| entity.Property(e => e.Icon).HasMaxLength(50); | |
| entity.Property(e => e.MenuCode).HasMaxLength(50); | |
| entity.Property(e => e.MenuName).HasMaxLength(100); | |
| entity.Property(e => e.MenuUrl).HasMaxLength(200); | |
| entity.Property(e => e.UpdatedAt).HasPrecision(0); | |
| entity.Property(e => e.Visible).HasDefaultValue(true); | |
| entity.HasOne(d => d.ParentMenu).WithMany(p => p.InverseParentMenu) | |
| .HasForeignKey(d => d.ParentMenuId) | |
| .HasConstraintName("FK_Menus_ParentMenu"); | |
| }); | |
| modelBuilder.Entity<Notification>(entity => | |
| { | |
| entity.ToTable("notifications"); | |
| entity.HasIndex(e => e.CreatedAt, "IX_notifications_CreatedAt"); | |
| entity.HasIndex(e => new { e.RecipientId, e.IsRead }, "IX_notifications_Recipient_IsRead"); | |
| entity.Property(e => e.CreatedAt).HasColumnName("created_at").HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.IsRead).HasColumnName("is_read").HasDefaultValue(false); | |
| entity.Property(e => e.NotificationType).HasColumnName("notification_type"); | |
| entity.Property(e => e.Title).HasMaxLength(255); | |
| entity.Property(e => e.ReadAt).HasColumnName("read_at").HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.RecipientId).HasColumnName("recipient_id"); | |
| entity.Property(e => e.SenderId).HasColumnName("sender_id"); | |
| entity.Property(e => e.SourceId).HasColumnName("source_id"); | |
| entity.Property(e => e.SourceType).HasColumnName("source_type").HasMaxLength(20); | |
| entity.HasOne(d => d.Recipient).WithMany() | |
| .HasForeignKey(d => d.RecipientId) | |
| .OnDelete(DeleteBehavior.Cascade) | |
| .HasConstraintName("FK_notifications_Users_Recipient"); | |
| entity.HasOne(d => d.Sender).WithMany() | |
| .HasForeignKey(d => d.SenderId) | |
| .OnDelete(DeleteBehavior.SetNull) | |
| .HasConstraintName("FK_notifications_Users_Sender"); | |
| }); | |
| modelBuilder.Entity<Permission>(entity => | |
| { | |
| entity.HasIndex(e => e.MenuId, "IX_Permissions_MenuId"); | |
| entity.HasIndex(e => e.PermissionCode, "UQ_Permissions_PermissionCode").IsUnique(); | |
| entity.Property(e => e.ActionName).HasMaxLength(100); | |
| entity.Property(e => e.ApiName).HasMaxLength(100); | |
| entity.Property(e => e.CreatedAt) | |
| .HasPrecision(0) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP"); | |
| entity.Property(e => e.HttpMethod).HasMaxLength(20); | |
| entity.Property(e => e.PermissionCode).HasMaxLength(50); | |
| entity.Property(e => e.UpdatedAt).HasPrecision(0); | |
| entity.Property(e => e.Visible).HasDefaultValue(true); | |
| entity.HasOne(d => d.Menu).WithMany(p => p.Permissions) | |
| .HasForeignKey(d => d.MenuId) | |
| .OnDelete(DeleteBehavior.ClientSetNull) | |
| .HasConstraintName("FK_Permissions_Menu"); | |
| }); | |
| modelBuilder.Entity<Issue>(entity => | |
| { | |
| entity.HasIndex(e => e.AssignedTo, "IX_Issues_AssignedTo"); | |
| entity.HasIndex(e => e.StatusId, "IX_Issues_StatusId"); | |
| entity.HasIndex(e => e.PriorityId, "IX_Issues_PriorityId"); | |
| entity.HasIndex(e => e.TaskId, "IX_Issues_TaskId"); | |
| entity.Property(e => e.ActualHours).HasColumnType("decimal(5, 2)"); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.Description).HasMaxLength(1000); | |
| entity.Property(e => e.DelayReason).HasMaxLength(300); | |
| entity.Property(e => e.BlockedBy).HasMaxLength(200); | |
| entity.Property(e => e.DueDate).HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.EscalationLevel).HasDefaultValue(0); | |
| entity.Property(e => e.IsBlocked).HasDefaultValue(false); | |
| entity.Property(e => e.IsDeleted).HasDefaultValue(false); | |
| entity.Property(e => e.PriorityId).HasDefaultValue(TaskPriority.Medium); | |
| entity.Property(e => e.StartDate).HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.StatusId).HasDefaultValue(AppTaskStatus.Todo); | |
| entity.Property(e => e.Title).HasMaxLength(200); | |
| entity.Property(e => e.UpdatedAt).HasColumnType("timestamp with time zone"); | |
| entity.HasOne(d => d.AssignedToNavigation).WithMany() | |
| .HasForeignKey(d => d.AssignedTo) | |
| .HasConstraintName("FK_Issues_Users_AssignedTo"); | |
| entity.HasOne(d => d.Task).WithMany() | |
| .HasForeignKey(d => d.TaskId) | |
| .HasConstraintName("FK_Issues_Tasks"); | |
| }); | |
| modelBuilder.Entity<Project>(entity => | |
| { | |
| entity.HasIndex(e => e.CreatedById, "IX_Projects_CreatedById"); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.CreatedDate) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.EndDate).HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.Name).HasMaxLength(150); | |
| entity.Property(e => e.StartDate).HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.UpdatedAt).HasColumnType("timestamp with time zone"); | |
| entity.HasOne(d => d.CreatedByNavigation).WithMany(p => p.Projects) | |
| .HasForeignKey(d => d.CreatedById) | |
| .OnDelete(DeleteBehavior.ClientSetNull); | |
| }); | |
| modelBuilder.Entity<ProjectMember>(entity => | |
| { | |
| entity.HasKey(e => new { e.ProjectId, e.UserId }); | |
| entity.HasIndex(e => e.UserId, "IX_ProjectMembers_UserId"); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.HasOne(d => d.Project).WithMany(p => p.ProjectMembers) | |
| .HasForeignKey(d => d.ProjectId) | |
| .HasConstraintName("FK_ProjectMembers_Projects"); | |
| entity.HasOne(d => d.User).WithMany(p => p.ProjectMembers) | |
| .HasForeignKey(d => d.UserId) | |
| .HasConstraintName("FK_ProjectMembers_Users"); | |
| }); | |
| modelBuilder.Entity<Role>(entity => | |
| { | |
| entity.HasIndex(e => e.Name, "UQ_Roles_Name").IsUnique(); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.Description).HasMaxLength(200); | |
| entity.Property(e => e.Name).HasMaxLength(50); | |
| entity.Property(e => e.UpdatedAt).HasColumnType("timestamp with time zone"); | |
| }); | |
| modelBuilder.Entity<RoleMenu>(entity => | |
| { | |
| entity.HasKey(e => e.RoleMenuId).HasName("PK_RoleMenus_New"); | |
| entity.HasIndex(e => new { e.RoleId, e.MenuId }, "UQ_RoleMenus_Role_Menu").IsUnique(); | |
| entity.Property(e => e.CreatedAt) | |
| .HasPrecision(0) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP"); | |
| entity.Property(e => e.UpdatedAt).HasPrecision(0); | |
| entity.HasOne(d => d.Menu).WithMany(p => p.RoleMenus) | |
| .HasForeignKey(d => d.MenuId) | |
| .OnDelete(DeleteBehavior.ClientSetNull) | |
| .HasConstraintName("FK_RoleMenus_Menus"); | |
| entity.HasOne(d => d.Role).WithMany(p => p.RoleMenus) | |
| .HasForeignKey(d => d.RoleId) | |
| .OnDelete(DeleteBehavior.ClientSetNull) | |
| .HasConstraintName("FK_RoleMenus_Roles"); | |
| }); | |
| modelBuilder.Entity<RolePermission>(entity => | |
| { | |
| entity.HasIndex(e => e.PermissionId, "IX_RolePermissions_PermissionId"); | |
| entity.HasIndex(e => e.RoleId, "IX_RolePermissions_RoleId"); | |
| entity.HasIndex(e => new { e.RoleId, e.PermissionId }, "UQ_RolePermissions_Role_Permission").IsUnique(); | |
| entity.Property(e => e.CreatedAt) | |
| .HasPrecision(0) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP"); | |
| entity.Property(e => e.UpdatedAt).HasPrecision(0); | |
| entity.HasOne(d => d.Permission).WithMany(p => p.RolePermissions) | |
| .HasForeignKey(d => d.PermissionId) | |
| .OnDelete(DeleteBehavior.ClientSetNull) | |
| .HasConstraintName("FK_RolePermissions_Permissions"); | |
| entity.HasOne(d => d.Role).WithMany(p => p.RolePermissions) | |
| .HasForeignKey(d => d.RoleId) | |
| .OnDelete(DeleteBehavior.ClientSetNull) | |
| .HasConstraintName("FK_RolePermissions_Roles"); | |
| }); | |
| modelBuilder.Entity<Task>(entity => | |
| { | |
| entity.HasIndex(e => e.AssignedBy, "IX_Tasks_AssignedBy"); | |
| entity.HasIndex(e => e.AssignedTo, "IX_Tasks_AssignedTo"); | |
| entity.HasIndex(e => e.ProjectId, "IX_Tasks_ProjectId"); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.DueDate).HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.IsArchived).HasDefaultValue(false); | |
| entity.Property(e => e.PriorityId).HasDefaultValue(TaskPriority.Medium); | |
| entity.Property(e => e.StatusId).HasDefaultValue(AppTaskStatus.Todo); | |
| entity.Property(e => e.Title).HasMaxLength(200); | |
| entity.Property(e => e.UpdatedAt).HasColumnType("timestamp with time zone"); | |
| entity.HasOne(d => d.AssignedByNavigation).WithMany(p => p.TaskAssignedByNavigations).HasForeignKey(d => d.AssignedBy); | |
| entity.HasOne(d => d.AssignedToNavigation).WithMany(p => p.TaskAssignedToNavigations).HasForeignKey(d => d.AssignedTo); | |
| entity.HasOne(d => d.Project).WithMany(p => p.Tasks) | |
| .HasForeignKey(d => d.ProjectId) | |
| .HasConstraintName("FK_Tasks_Projects"); | |
| }); | |
| modelBuilder.Entity<User>(entity => | |
| { | |
| entity.HasIndex(e => e.RoleId, "IX_Users_RoleId"); | |
| entity.HasIndex(e => e.Email, "UQ_Users_Email").IsUnique(); | |
| entity.HasIndex(e => e.Username, "UQ_Users_Username").IsUnique(); | |
| entity.Property(e => e.CreatedAt) | |
| .HasDefaultValueSql("CURRENT_TIMESTAMP") | |
| .HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.Email).HasMaxLength(256); | |
| entity.Property(e => e.FirstName).HasMaxLength(50); | |
| entity.Property(e => e.IsActive).HasDefaultValue(true); | |
| entity.Property(e => e.LastName).HasMaxLength(50); | |
| entity.Property(e => e.Phone).HasMaxLength(20); | |
| entity.Property(e => e.UpdatedAt).HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.Username).HasMaxLength(50); | |
| entity.HasOne(d => d.Role).WithMany(p => p.Users) | |
| .HasForeignKey(d => d.RoleId) | |
| .OnDelete(DeleteBehavior.ClientSetNull) | |
| .HasConstraintName("FK_Users_Roles"); | |
| }); | |
| modelBuilder.Entity<UserDevice>(entity => | |
| { | |
| entity.ToTable("user_devices"); | |
| entity.HasIndex(e => e.UserId, "IX_user_devices_UserId"); | |
| entity.HasIndex(e => e.FcmToken, "UQ_user_devices_FcmToken").IsUnique(); | |
| entity.Property(e => e.UserId).HasColumnName("user_id"); | |
| entity.Property(e => e.FcmToken).HasColumnName("fcm_token").HasMaxLength(255); | |
| entity.Property(e => e.CreatedAt).HasColumnName("created_at").HasColumnType("timestamp with time zone"); | |
| entity.Property(e => e.UpdatedAt).HasColumnName("updated_at").HasColumnType("timestamp with time zone"); | |
| entity.HasOne(d => d.User).WithMany() | |
| .HasForeignKey(d => d.UserId) | |
| .OnDelete(DeleteBehavior.Cascade) | |
| .HasConstraintName("FK_user_devices_Users"); | |
| }); | |
| OnModelCreatingPartial(modelBuilder); | |
| } | |
| partial void OnModelCreatingPartial(ModelBuilder modelBuilder); | |
| } | |