diff --git a/CleanAspCore/Data/Migrations/20240521195118_InitialMigration2.Designer.cs b/CleanAspCore/Data/Migrations/20240521195118_InitialMigration2.Designer.cs new file mode 100644 index 0000000..f87d886 --- /dev/null +++ b/CleanAspCore/Data/Migrations/20240521195118_InitialMigration2.Designer.cs @@ -0,0 +1,126 @@ +// +using System; +using CleanAspCore.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace CleanAspCore.Migrations +{ + [DbContext(typeof(HrContext))] + [Migration("20240521195118_InitialMigration2")] + partial class InitialMigration2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("CleanAspCore.Data.Models.Departments.Department", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("City") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.HasKey("Id"); + + b.ToTable("Departments"); + }); + + modelBuilder.Entity("CleanAspCore.Data.Models.Employees.Employee", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DepartmentId") + .HasColumnType("uuid"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Gender") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("JobId") + .HasColumnType("uuid"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.HasKey("Id"); + + b.HasIndex("DepartmentId"); + + b.HasIndex("JobId"); + + b.ToTable("Employees"); + }); + + modelBuilder.Entity("CleanAspCore.Data.Models.Jobs.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.HasKey("Id"); + + b.ToTable("Jobs"); + }); + + modelBuilder.Entity("CleanAspCore.Data.Models.Employees.Employee", b => + { + b.HasOne("CleanAspCore.Data.Models.Departments.Department", "Department") + .WithMany() + .HasForeignKey("DepartmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("CleanAspCore.Data.Models.Jobs.Job", "Job") + .WithMany() + .HasForeignKey("JobId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Department"); + + b.Navigation("Job"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/CleanAspCore/Data/Migrations/20240521195118_InitialMigration2.cs b/CleanAspCore/Data/Migrations/20240521195118_InitialMigration2.cs new file mode 100644 index 0000000..3c964d3 --- /dev/null +++ b/CleanAspCore/Data/Migrations/20240521195118_InitialMigration2.cs @@ -0,0 +1,126 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace CleanAspCore.Migrations +{ + /// + public partial class InitialMigration2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + table: "Jobs", + type: "character varying(100)", + maxLength: 100, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "LastName", + table: "Employees", + type: "character varying(100)", + maxLength: 100, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Gender", + table: "Employees", + type: "character varying(100)", + maxLength: 100, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "FirstName", + table: "Employees", + type: "character varying(100)", + maxLength: 100, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Departments", + type: "character varying(100)", + maxLength: 100, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "City", + table: "Departments", + type: "character varying(100)", + maxLength: 100, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + table: "Jobs", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AlterColumn( + name: "LastName", + table: "Employees", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AlterColumn( + name: "Gender", + table: "Employees", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AlterColumn( + name: "FirstName", + table: "Employees", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Departments", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AlterColumn( + name: "City", + table: "Departments", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + } + } +} diff --git a/CleanAspCore/Data/Migrations/HrContextModelSnapshot.cs b/CleanAspCore/Data/Migrations/HrContextModelSnapshot.cs index 66794d3..8c54ec4 100644 --- a/CleanAspCore/Data/Migrations/HrContextModelSnapshot.cs +++ b/CleanAspCore/Data/Migrations/HrContextModelSnapshot.cs @@ -22,7 +22,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - modelBuilder.Entity("CleanAspCore.Data.Models.Department", b => + modelBuilder.Entity("CleanAspCore.Data.Models.Departments.Department", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -30,18 +30,20 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("City") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.Property("Name") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.HasKey("Id"); b.ToTable("Departments"); }); - modelBuilder.Entity("CleanAspCore.Data.Models.Employee", b => + modelBuilder.Entity("CleanAspCore.Data.Models.Employees.Employee", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -50,20 +52,27 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("DepartmentId") .HasColumnType("uuid"); - b.Property("FirstName") + b.Property("Email") .IsRequired() .HasColumnType("text"); + b.Property("FirstName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + b.Property("Gender") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.Property("JobId") .HasColumnType("uuid"); b.Property("LastName") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.HasKey("Id"); @@ -74,7 +83,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Employees"); }); - modelBuilder.Entity("CleanAspCore.Data.Models.Job", b => + modelBuilder.Entity("CleanAspCore.Data.Models.Jobs.Job", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -82,50 +91,30 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Name") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.HasKey("Id"); b.ToTable("Jobs"); }); - modelBuilder.Entity("CleanAspCore.Data.Models.Employee", b => + modelBuilder.Entity("CleanAspCore.Data.Models.Employees.Employee", b => { - b.HasOne("CleanAspCore.Data.Models.Department", "Department") + b.HasOne("CleanAspCore.Data.Models.Departments.Department", "Department") .WithMany() .HasForeignKey("DepartmentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("CleanAspCore.Data.Models.Job", "Job") + b.HasOne("CleanAspCore.Data.Models.Jobs.Job", "Job") .WithMany() .HasForeignKey("JobId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.OwnsOne("CleanAspCore.Domain.EmailAddress", "Email", b1 => - { - b1.Property("EmployeeId") - .HasColumnType("uuid"); - - b1.Property("Email") - .IsRequired() - .HasColumnType("text") - .HasColumnName("Email"); - - b1.HasKey("EmployeeId"); - - b1.ToTable("Employees"); - - b1.WithOwner() - .HasForeignKey("EmployeeId"); - }); - b.Navigation("Department"); - b.Navigation("Email") - .IsRequired(); - b.Navigation("Job"); }); #pragma warning restore 612, 618 diff --git a/CleanAspCore/Data/Models/Departments/DepartmentConfiguration.cs b/CleanAspCore/Data/Models/Departments/DepartmentConfiguration.cs new file mode 100644 index 0000000..2bc2815 --- /dev/null +++ b/CleanAspCore/Data/Models/Departments/DepartmentConfiguration.cs @@ -0,0 +1,16 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace CleanAspCore.Data.Models.Departments; + +internal sealed class DepartmentConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.Property(c => c.Name) + .HasMaxLength(100); + + builder.Property(c => c.City) + .HasMaxLength(100); + } +} diff --git a/CleanAspCore/Data/Models/Employees/Employee.cs b/CleanAspCore/Data/Models/Employees/Employee.cs index 19924a0..c00781e 100644 --- a/CleanAspCore/Data/Models/Employees/Employee.cs +++ b/CleanAspCore/Data/Models/Employees/Employee.cs @@ -10,8 +10,8 @@ public class Employee : IEntity public required string LastName { get; set; } public required EmailAddress Email { get; set; } public required string Gender { get; set; } - public virtual Department? Department { get; init; } + public Department? Department { get; init; } public required Guid DepartmentId { get; set; } - public virtual Job? Job { get; init; } + public Job? Job { get; init; } public required Guid JobId { get; set; } } diff --git a/CleanAspCore/Data/Models/Employees/EmployeeConfiguration.cs b/CleanAspCore/Data/Models/Employees/EmployeeConfiguration.cs index 4702f5e..d246ec2 100644 --- a/CleanAspCore/Data/Models/Employees/EmployeeConfiguration.cs +++ b/CleanAspCore/Data/Models/Employees/EmployeeConfiguration.cs @@ -9,5 +9,14 @@ public void Configure(EntityTypeBuilder builder) { builder.Property(c => c.Email) .HasConversion(c => c.Email, c => new EmailAddress(c)); + + builder.Property(c => c.FirstName) + .HasMaxLength(100); + + builder.Property(c => c.LastName) + .HasMaxLength(100); + + builder.Property(c => c.Gender) + .HasMaxLength(100); } } diff --git a/CleanAspCore/Data/Models/Jobs/JobConfiguration.cs b/CleanAspCore/Data/Models/Jobs/JobConfiguration.cs new file mode 100644 index 0000000..1b5124b --- /dev/null +++ b/CleanAspCore/Data/Models/Jobs/JobConfiguration.cs @@ -0,0 +1,13 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace CleanAspCore.Data.Models.Jobs; + +internal sealed class JobConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.Property(c => c.Name) + .HasMaxLength(100); + } +}