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);
+ }
+}