diff --git a/AceJobAgency/AceJobAgency.csproj b/AceJobAgency/AceJobAgency.csproj
index 8b42b96..94b379c 100644
--- a/AceJobAgency/AceJobAgency.csproj
+++ b/AceJobAgency/AceJobAgency.csproj
@@ -8,12 +8,12 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/AceJobAgency/Controllers/UserController.cs b/AceJobAgency/Controllers/UserController.cs
index f35cf71..8351f57 100644
--- a/AceJobAgency/Controllers/UserController.cs
+++ b/AceJobAgency/Controllers/UserController.cs
@@ -1,5 +1,4 @@
-using System.Diagnostics;
-using AceJobAgency.Data;
+using AceJobAgency.Data;
using AceJobAgency.Entities;
using Microsoft.AspNetCore.Mvc;
@@ -12,8 +11,12 @@ namespace AceJobAgency.Controllers
[HttpPost]
public async Task Register(User user)
{
- var userExists = context.Users.Any(u => u.Email == user.Email);
- if (userExists)
+ var userEmailExists = context.Users.Any(u => u.Email == user.Email);
+ var userNationalRegistrationIdentityCardNumberExists = context.Users.Any(
+ u => u.NationalRegistrationIdentityCardNumber
+ == user.NationalRegistrationIdentityCardNumber
+ );
+ if (userEmailExists || userNationalRegistrationIdentityCardNumberExists)
{
return BadRequest("User with the same email already exists.");
}
@@ -23,6 +26,7 @@ namespace AceJobAgency.Controllers
user.Password = passwordHash;
var userId = Guid.NewGuid().ToString();
user.Id = userId;
+ user.IsActive = 1;
await context.Users.AddAsync(user);
await context.SaveChangesAsync();
diff --git a/AceJobAgency/Data/DataContext.cs b/AceJobAgency/Data/DataContext.cs
index 9e62b38..a5d3c3b 100644
--- a/AceJobAgency/Data/DataContext.cs
+++ b/AceJobAgency/Data/DataContext.cs
@@ -12,7 +12,7 @@ namespace AceJobAgency.Data
"DefaultConnection");
if (connectionString != null)
{
- optionsBuilder.UseMySQL(connectionString);
+ optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
}
}
public DbSet Users { get; set; }
diff --git a/AceJobAgency/Entities/User.cs b/AceJobAgency/Entities/User.cs
index 0ce626e..8228ddc 100644
--- a/AceJobAgency/Entities/User.cs
+++ b/AceJobAgency/Entities/User.cs
@@ -5,6 +5,7 @@ namespace AceJobAgency.Entities
public class User
{
[Key]
+ [MaxLength(36)]
public required string Id { get; set; }
[Required]
@@ -20,22 +21,34 @@ namespace AceJobAgency.Entities
[Required]
[StringLength(9, MinimumLength = 9)]
- public required string NRIC { get; set; }
+ public required string NationalRegistrationIdentityCardNumber { get; set; }
[Required]
[EmailAddress]
+ [MaxLength(128)]
public required string Email { get; set; }
[Required]
[DataType(DataType.Password)]
+ [MaxLength(128)]
public required string Password { get; set; }
[Required]
[DataType(DataType.Date)]
public required DateTime DateOfBirth { get; set; }
+ [MaxLength(128)]
public required string ResumeName { get; set; }
- public required string WhoAmI { get; set; }
+ [MaxLength(255)]
+ public string WhoAmI { get; set; } = string.Empty;
+
+ public int IsActive { get; set; } = 1;
+
+ [DataType(DataType.Date)]
+ public DateTime CreatedAt { get; init; } = DateTime.Now;
+
+ [DataType(DataType.Date)]
+ public DateTime UpdatedAt { get; set; } = DateTime.Now;
}
}
\ No newline at end of file
diff --git a/AceJobAgency/Migrations/20250206173504_Added_User.cs b/AceJobAgency/Migrations/20250206173504_Added_User.cs
deleted file mode 100644
index a8112ac..0000000
--- a/AceJobAgency/Migrations/20250206173504_Added_User.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace AceJobAgency.Migrations
-{
- ///
- public partial class Added_User : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterDatabase()
- .Annotation("MySQL:Charset", "utf8mb4");
-
- migrationBuilder.CreateTable(
- name: "Users",
- columns: table => new
- {
- Id = table.Column(type: "varchar(255)", nullable: false),
- FirstName = table.Column(type: "varchar(50)", maxLength: 50, nullable: false),
- LastName = table.Column(type: "varchar(50)", maxLength: 50, nullable: false),
- Gender = table.Column(type: "int", nullable: false),
- NRIC = table.Column(type: "varchar(9)", maxLength: 9, nullable: false),
- Email = table.Column(type: "longtext", nullable: false),
- Password = table.Column(type: "longtext", nullable: false),
- DateOfBirth = table.Column(type: "datetime(6)", nullable: false),
- ResumeName = table.Column(type: "longtext", nullable: false),
- WhoAmI = table.Column(type: "longtext", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Users", x => x.Id);
- })
- .Annotation("MySQL:Charset", "utf8mb4");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "Users");
- }
- }
-}
diff --git a/AceJobAgency/Migrations/20250206173504_Added_User.Designer.cs b/AceJobAgency/Migrations/20250207071719_AddedUser.Designer.cs
similarity index 64%
rename from AceJobAgency/Migrations/20250206173504_Added_User.Designer.cs
rename to AceJobAgency/Migrations/20250207071719_AddedUser.Designer.cs
index d8e56da..db045eb 100644
--- a/AceJobAgency/Migrations/20250206173504_Added_User.Designer.cs
+++ b/AceJobAgency/Migrations/20250207071719_AddedUser.Designer.cs
@@ -3,6 +3,7 @@ using System;
using AceJobAgency.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
@@ -11,28 +12,35 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace AceJobAgency.Migrations
{
[DbContext(typeof(DataContext))]
- [Migration("20250206173504_Added_User")]
- partial class Added_User
+ [Migration("20250207071719_AddedUser")]
+ partial class AddedUser
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
- .HasAnnotation("ProductVersion", "8.0.11")
+ .HasAnnotation("ProductVersion", "8.0.2")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
+ MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder);
+
modelBuilder.Entity("AceJobAgency.Entities.User", b =>
{
b.Property("Id")
- .HasColumnType("varchar(255)");
+ .HasMaxLength(36)
+ .HasColumnType("varchar(36)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime(6)");
b.Property("DateOfBirth")
.HasColumnType("datetime(6)");
b.Property("Email")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
b.Property("FirstName")
.IsRequired()
@@ -42,27 +50,36 @@ namespace AceJobAgency.Migrations
b.Property("Gender")
.HasColumnType("int");
+ b.Property("IsActive")
+ .HasColumnType("int");
+
b.Property("LastName")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
- b.Property("NRIC")
+ b.Property("NationalRegistrationIdentityCardNumber")
.IsRequired()
.HasMaxLength(9)
.HasColumnType("varchar(9)");
b.Property("Password")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
b.Property("ResumeName")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime(6)");
b.Property("WhoAmI")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(255)
+ .HasColumnType("varchar(255)");
b.HasKey("Id");
diff --git a/AceJobAgency/Migrations/20250207071719_AddedUser.cs b/AceJobAgency/Migrations/20250207071719_AddedUser.cs
new file mode 100644
index 0000000..deeff7d
--- /dev/null
+++ b/AceJobAgency/Migrations/20250207071719_AddedUser.cs
@@ -0,0 +1,57 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace AceJobAgency.Migrations
+{
+ ///
+ public partial class AddedUser : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AlterDatabase()
+ .Annotation("MySql:CharSet", "utf8mb4");
+
+ migrationBuilder.CreateTable(
+ name: "Users",
+ columns: table => new
+ {
+ Id = table.Column(type: "varchar(36)", maxLength: 36, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ FirstName = table.Column(type: "varchar(50)", maxLength: 50, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ LastName = table.Column(type: "varchar(50)", maxLength: 50, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ Gender = table.Column(type: "int", nullable: false),
+ NationalRegistrationIdentityCardNumber = table.Column(type: "varchar(9)", maxLength: 9, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ Email = table.Column(type: "varchar(128)", maxLength: 128, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ Password = table.Column(type: "varchar(128)", maxLength: 128, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ DateOfBirth = table.Column(type: "datetime(6)", nullable: false),
+ ResumeName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ WhoAmI = table.Column(type: "varchar(255)", maxLength: 255, nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ IsActive = table.Column(type: "int", nullable: false),
+ CreatedAt = table.Column(type: "datetime(6)", nullable: false),
+ UpdatedAt = table.Column(type: "datetime(6)", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Users", x => x.Id);
+ })
+ .Annotation("MySql:CharSet", "utf8mb4");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Users");
+ }
+ }
+}
diff --git a/AceJobAgency/Migrations/DataContextModelSnapshot.cs b/AceJobAgency/Migrations/DataContextModelSnapshot.cs
index 05513ba..963de11 100644
--- a/AceJobAgency/Migrations/DataContextModelSnapshot.cs
+++ b/AceJobAgency/Migrations/DataContextModelSnapshot.cs
@@ -3,6 +3,7 @@ using System;
using AceJobAgency.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
@@ -16,20 +17,27 @@ namespace AceJobAgency.Migrations
{
#pragma warning disable 612, 618
modelBuilder
- .HasAnnotation("ProductVersion", "8.0.11")
+ .HasAnnotation("ProductVersion", "8.0.2")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
+ MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder);
+
modelBuilder.Entity("AceJobAgency.Entities.User", b =>
{
b.Property("Id")
- .HasColumnType("varchar(255)");
+ .HasMaxLength(36)
+ .HasColumnType("varchar(36)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime(6)");
b.Property("DateOfBirth")
.HasColumnType("datetime(6)");
b.Property("Email")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
b.Property("FirstName")
.IsRequired()
@@ -39,27 +47,36 @@ namespace AceJobAgency.Migrations
b.Property("Gender")
.HasColumnType("int");
+ b.Property("IsActive")
+ .HasColumnType("int");
+
b.Property("LastName")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
- b.Property("NRIC")
+ b.Property("NationalRegistrationIdentityCardNumber")
.IsRequired()
.HasMaxLength(9)
.HasColumnType("varchar(9)");
b.Property("Password")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
b.Property("ResumeName")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime(6)");
b.Property("WhoAmI")
.IsRequired()
- .HasColumnType("longtext");
+ .HasMaxLength(255)
+ .HasColumnType("varchar(255)");
b.HasKey("Id");