diff --git a/.claude/settings.local.json b/.claude/settings.local.json
deleted file mode 100644
index a8da82e..0000000
--- a/.claude/settings.local.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "permissions": {
- "allow": [
- "Bash(dotnet build:*)",
- "WebSearch",
- "Bash(dotnet add:*)"
- ],
- "deny": [],
- "ask": []
- }
-}
diff --git a/BMA.EHR.Recruit.Service.csproj.user b/BMA.EHR.Recruit.Service.csproj.user
new file mode 100644
index 0000000..96e63d6
--- /dev/null
+++ b/BMA.EHR.Recruit.Service.csproj.user
@@ -0,0 +1,9 @@
+
+
+
+ https
+
+
+ ProjectDebugger
+
+
\ No newline at end of file
diff --git a/BMA.EHR.Recruit.csproj b/BMA.EHR.Recruit.csproj
index c148fa1..eca7d61 100644
--- a/BMA.EHR.Recruit.csproj
+++ b/BMA.EHR.Recruit.csproj
@@ -22,10 +22,7 @@
-
-
-
diff --git a/CLAUDE.md b/CLAUDE.md
deleted file mode 100644
index 273523d..0000000
--- a/CLAUDE.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# CLAUDE.md
-
-This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
-
-## Build & Run
-
-```bash
-dotnet build BMA.EHR.Recruit.Service.sln
-dotnet build BMA.EHR.Recruit.Service.sln -c Release
-dotnet publish -c Release -o /app/publish /p:UseAppHost=false
-```
-
-No test projects exist in this solution.
-
-## Architecture
-
-**Stack:** ASP.NET Core 7.0 Web API / EF Core 7.0 / MySQL (Pomelo) / MinIO (S3) / Keycloak (JWT)
-
-**Pattern:** Controllers → Services → EF Core DbContext (no repository layer for main data)
-
-### Multiple DbContexts
-Three separate MySQL databases, each with its own `DbContext`:
-- `ApplicationDbContext` — Recruitment data (Recruits, Scores, Imports)
-- `OrgDbContext` — Organization data
-- `MetadataDbContext` — Metadata
-
-All registered as `Transient` lifetime. Auto-migration runs on startup.
-
-### Controllers
-- `BaseController` provides standardized `Success()` / `Error()` response methods returning `ResponseObject` (Status, Message, Result)
-- `RecruitController` is the sole business controller (route: `api/v{version}/recruit`)
-- API versioning enabled via `Microsoft.AspNetCore.Mvc.Versioning`
-
-### Background Import System
-Excel file imports run asynchronously through a Channel-based queue:
-- `ImportBackgroundService` (BackgroundService) — dequeues and processes jobs
-- `ImportJobQueue` — bounded Channel (capacity 100)
-- `ImportJobTracker` — in-memory ConcurrentDictionary tracking
-
-Four import types: `CandidateFile`, `CandidateFileById`, `ScoreFile`, `ResultFile`
-
-All imports use `EFCore.BulkExtensions.MySql` (v6.7.16) for bulk operations to handle 50,000+ rows without memory issues. Pattern:
-1. Insert parent/history entities via `SaveChangesAsync` (small operations)
-2. `ChangeTracker.Clear()` to release references
-3. Collect entities into separate `List` per table
-4. `BulkInsertAsync` with `SetOutputIdentity = true` for parent entities
-5. Assign generated Ids to child entities
-6. `BulkInsertAsync` for each child entity table separately
-7. Batch size: 500
-
-### Entity Models
-All entities inherit from `EntityBase` (Guid `Id` PK, audit fields: `CreatedAt`, `CreatedUserId`, `LastUpdatedAt`, etc.). Models are in `Models/` with subdirectories: `Recruits/`, `Documents/`, `HR/`, `MetaData/`, `Placement/`.
-
-Key relationships use navigation properties without explicit FK properties (EF shadow properties). Configured via fluent API in `OnModelCreating`.
-
-### External Services
-- **Authentication:** Keycloak JWT Bearer (`hrmsbkk-id.case-collection.com/realms/hrms`)
-- **File Storage:** MinIO via `MinIOService` (AWS S3 SDK)
-- **Search/Logging:** Elasticsearch (NEST client)
-- **Excel:** EPPlus for reading import files
-
-## Key Files
-
-- `Program.cs` — Service registration, middleware pipeline, auto-migration
-- `Data/ApplicationDbContext.cs` — EF Core fluent API relationship configuration
-- `Services/ImportBackgroundService.cs` — All bulk import logic (4 import methods)
-- `Services/RecruitService.cs` — Core business logic
-- `Controllers/BaseController.cs` — Standard response helpers
-- `Responses/ResponseObject.cs` — Standard API response envelope
-
-## Conventions
-
-- Language: C# with nullable reference types enabled
-- Naming: PascalCase properties, `_camelCase` parameters in service methods
-- API responses: Always wrapped in `ResponseObject`
-- Authorization: `[Authorize]` on controllers, user context from JWT claims
diff --git a/Controllers/RecruitController.cs b/Controllers/RecruitController.cs
index 7d246ff..bbf38c3 100644
--- a/Controllers/RecruitController.cs
+++ b/Controllers/RecruitController.cs
@@ -377,7 +377,6 @@ namespace BMA.EHR.Recruit.Controllers
try
{
var data = await _context.RecruitImports.AsQueryable()
- .AsNoTracking()
.Include(x => x.RecruitImages)
.ThenInclude(x => x.Document)
.Include(x => x.RecruitDocuments)
@@ -718,11 +717,9 @@ namespace BMA.EHR.Recruit.Controllers
var doc = await _minioService.UploadFileAsync(file);
var import_doc_id = doc.Id.ToString("D");
- // Write file to disk directly from IFormFile instead of downloading back from MinIO
- using (var stream = new FileStream(importFile, FileMode.Create))
- {
- await file.CopyToAsync(stream);
- }
+ var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
+ System.IO.File.WriteAllBytes(importFile, fileContent);
+ fileContent = null;
// สร้างรอบการบรรจุ
var imported = new RecruitImport
@@ -758,7 +755,6 @@ namespace BMA.EHR.Recruit.Controllers
ImportDocId = import_doc_id,
UserId = UserId,
FullName = FullName,
- Token = token,
Request = req,
});
await _importJobQueue.EnqueueAsync(job);
@@ -934,11 +930,9 @@ namespace BMA.EHR.Recruit.Controllers
var doc = await _minioService.UploadFileAsync(file);
var import_doc_id = doc.Id.ToString("D");
- // Write file to disk directly from IFormFile instead of downloading back from MinIO
- using (var stream = new FileStream(importFile, FileMode.Create))
- {
- await file.CopyToAsync(stream);
- }
+ var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
+ System.IO.File.WriteAllBytes(importFile, fileContent);
+ fileContent = null;
// Enqueue background job
var job = _importJobTracker.CreateJob(new ImportJobInfo
@@ -949,7 +943,6 @@ namespace BMA.EHR.Recruit.Controllers
ImportDocId = import_doc_id,
UserId = UserId,
FullName = FullName,
- Token = token,
});
await _importJobQueue.EnqueueAsync(job);
@@ -1020,7 +1013,6 @@ namespace BMA.EHR.Recruit.Controllers
ImportDocId = import_doc_id,
UserId = UserId,
FullName = FullName,
- Token = token,
});
await _importJobQueue.EnqueueAsync(job);
@@ -1090,7 +1082,6 @@ namespace BMA.EHR.Recruit.Controllers
RecruitImportId = id,
UserId = UserId,
FullName = FullName,
- Token = token,
});
await _importJobQueue.EnqueueAsync(job);
@@ -2010,7 +2001,6 @@ namespace BMA.EHR.Recruit.Controllers
public async Task> ExportExamAsync(Guid id)
{
var data = await _context.RecruitImports.AsQueryable()
- .AsNoTracking()
.Include(x => x.Recruits)
.FirstOrDefaultAsync(x => x.Id == id);
@@ -2519,7 +2509,6 @@ namespace BMA.EHR.Recruit.Controllers
public async Task GetCandidateNewListReportAsync(Guid id)
{
var data = await _context.Recruits.AsQueryable()
- .AsNoTracking()
.Include(x => x.RecruitImport)
.Where(x => x.RecruitImport.Id == id)
.OrderBy(x => x.ExamId)
diff --git a/Data/ApplicationDbContext.cs b/Data/ApplicationDbContext.cs
index d386d19..81e4fd6 100644
--- a/Data/ApplicationDbContext.cs
+++ b/Data/ApplicationDbContext.cs
@@ -20,7 +20,6 @@ namespace BMA.EHR.Recruit.Data
modelBuilder.Entity().HasMany(x => x.Addresses).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity().HasMany(x => x.Certificates).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity().HasMany(x => x.Payments).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
- modelBuilder.Entity().HasMany(x => x.Scores).WithOne(x => x.ScoreImport).HasForeignKey(x => x.ScoreImportId).OnDelete(DeleteBehavior.Cascade);
}
public DbSet Documents { get; set; }
diff --git a/Dockerfile b/Dockerfile
index 0ee996f..ea318e6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -20,9 +20,4 @@ RUN dotnet publish "BMA.EHR.Recruit.csproj" -c Release -o /app/publish /p:UseApp
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
-
-# GC configuration for better memory management in containers
-#ENV DOTNET_GCHeapHardLimit=1073741824
-#ENV DOTNET_GCConserveMemory=9
-
ENTRYPOINT ["dotnet", "BMA.EHR.Recruit.dll"]
\ No newline at end of file
diff --git a/Migrations/20260519102256_fix relation.Designer.cs b/Migrations/20260519102256_fix relation.Designer.cs
deleted file mode 100644
index 770f155..0000000
--- a/Migrations/20260519102256_fix relation.Designer.cs
+++ /dev/null
@@ -1,1605 +0,0 @@
-//
-using System;
-using BMA.EHR.Recruit.Data;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace BMA.EHR.Recruit.Migrations
-{
- [DbContext(typeof(ApplicationDbContext))]
- [Migration("20260519102256_fix relation")]
- partial class fixrelation
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "7.0.3")
- .HasAnnotation("Relational:MaxIdentifierLength", 64);
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Documents.Document", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)");
-
- b.Property("CreatedDate")
- .HasColumnType("datetime(6)");
-
- b.Property("Detail")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("FileName")
- .IsRequired()
- .HasMaxLength(255)
- .HasColumnType("varchar(255)");
-
- b.Property("FileSize")
- .HasColumnType("int");
-
- b.Property("FileType")
- .IsRequired()
- .HasMaxLength(128)
- .HasColumnType("varchar(128)");
-
- b.Property("ObjectRefId")
- .HasColumnType("char(36)");
-
- b.HasKey("Id");
-
- b.ToTable("Documents");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("ApplyDate")
- .HasColumnType("datetime(6)");
-
- b.Property("CitizenCardExpireDate")
- .HasColumnType("datetime(6)");
-
- b.Property("CitizenCardIssuer")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("CitizenId")
- .IsRequired()
- .HasMaxLength(13)
- .HasColumnType("varchar(13)")
- .HasComment("เลขประจำตัวประชาชน");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedDate")
- .HasColumnType("datetime(6)");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("DateOfBirth")
- .HasColumnType("datetime(6)");
-
- b.Property("ExamId")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("FirstName")
- .IsRequired()
- .HasMaxLength(150)
- .HasColumnType("varchar(150)");
-
- b.Property("Gendor")
- .IsRequired()
- .HasMaxLength(20)
- .HasColumnType("varchar(20)");
-
- b.Property("HddPosition")
- .HasColumnType("longtext")
- .HasComment("บัญชีสอบ");
-
- b.Property("Isspecial")
- .IsRequired()
- .HasMaxLength(1)
- .HasColumnType("varchar(1)");
-
- b.Property("LastName")
- .IsRequired()
- .HasMaxLength(150)
- .HasColumnType("varchar(150)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("Marry")
- .IsRequired()
- .HasMaxLength(20)
- .HasColumnType("varchar(20)");
-
- b.Property("ModifiedDate")
- .HasColumnType("datetime(6)");
-
- b.Property("National")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("PositionLevel")
- .HasColumnType("longtext");
-
- b.Property("PositionName")
- .HasColumnType("longtext");
-
- b.Property("PositionType")
- .HasColumnType("longtext");
-
- b.Property("Prefix")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("Qualified")
- .IsRequired()
- .HasMaxLength(1)
- .HasColumnType("varchar(1)");
-
- b.Property("Race")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("RecruitImportId")
- .HasColumnType("char(36)");
-
- b.Property("RefNo")
- .IsRequired()
- .HasMaxLength(20)
- .HasColumnType("varchar(20)");
-
- b.Property("Religion")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Remark")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("typeTest")
- .HasColumnType("longtext")
- .HasComment("ประเภทการสอบภาค ก.");
-
- b.HasKey("Id");
-
- b.HasIndex("RecruitImportId");
-
- b.ToTable("Recruits");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("Address")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Address1")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Amphur")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Amphur1")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("District")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("District1")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("Mobile")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Moo")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Moo1")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Province")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Province1")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("RecruitId")
- .HasColumnType("char(36)");
-
- b.Property("Road")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Road1")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Soi")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Soi1")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Telephone")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("ZipCode")
- .IsRequired()
- .HasMaxLength(10)
- .HasColumnType("varchar(10)");
-
- b.Property("ZipCode1")
- .IsRequired()
- .HasMaxLength(10)
- .HasColumnType("varchar(10)");
-
- b.HasKey("Id");
-
- b.HasIndex("RecruitId");
-
- b.ToTable("RecruitAddresses");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("CertificateNo")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("Description")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("ExpiredDate")
- .HasColumnType("datetime(6)");
-
- b.Property("IssueDate")
- .HasColumnType("datetime(6)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("RecruitId")
- .HasColumnType("char(36)");
-
- b.HasKey("Id");
-
- b.HasIndex("RecruitId");
-
- b.ToTable("RecruitCertificates");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedDate")
- .HasColumnType("datetime(6)");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("DocumentFileId")
- .HasColumnType("char(36)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("RecruitId")
- .HasColumnType("char(36)");
-
- b.HasKey("Id");
-
- b.HasIndex("DocumentFileId");
-
- b.HasIndex("RecruitId");
-
- b.ToTable("RecruitDocuments");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("BachelorDate")
- .HasColumnType("datetime(6)");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("Degree")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("GPA")
- .HasColumnType("double");
-
- b.Property("HighDegree")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("Major")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("MajorGroupId")
- .IsRequired()
- .HasMaxLength(20)
- .HasColumnType("varchar(20)");
-
- b.Property("MajorGroupName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("RecruitId")
- .HasColumnType("char(36)");
-
- b.Property("Specialist")
- .IsRequired()
- .HasMaxLength(1000)
- .HasColumnType("varchar(1000)");
-
- b.Property("University")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.HasKey("Id");
-
- b.HasIndex("RecruitId");
-
- b.ToTable("RecruitEducations");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("AnnouncementDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(14)
- .HasComment("วันที่ประกาศผลสอบ");
-
- b.Property("AnnouncementEndDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(7)
- .HasComment("วันสิ้นสุดประกาศ");
-
- b.Property("AnnouncementStartDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(6)
- .HasComment("วันเริ่มประกาศ");
-
- b.Property("AuthName")
- .HasColumnType("longtext");
-
- b.Property("AuthPosition")
- .HasColumnType("longtext");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("Detail")
- .HasColumnType("longtext")
- .HasColumnOrder(4)
- .HasComment("รายละเอียด");
-
- b.Property("ExamDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(12)
- .HasComment("วันที่สอบ");
-
- b.Property("Fee")
- .HasColumnType("int")
- .HasColumnOrder(5)
- .HasComment("ค่าธรรมเนียม");
-
- b.Property("ImportFileId")
- .HasColumnType("char(36)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(250)
- .HasColumnType("varchar(250)")
- .HasColumnOrder(2)
- .HasComment("รอบการสอบ");
-
- b.Property("Note")
- .HasColumnType("text")
- .HasColumnOrder(13)
- .HasComment("หมายเหตุ");
-
- b.Property("Order")
- .HasColumnType("int")
- .HasColumnOrder(3)
- .HasComment("ครั้งที่");
-
- b.Property("PaymentEndDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(9)
- .HasComment("วันสิ้นสุดชำระเงิน");
-
- b.Property("PaymentStartDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(8)
- .HasComment("วันเริ่มชำระเงิน");
-
- b.Property("RegisterEndDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(11)
- .HasComment("วันสิ้นสุดสมัครสอบ");
-
- b.Property("RegisterStartDate")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(10)
- .HasComment("วันเริ่มสมัครสอบ");
-
- b.Property("Year")
- .HasColumnType("int")
- .HasColumnOrder(1)
- .HasComment("ปีงบประมาณที่จัดสอบ");
-
- b.HasKey("Id");
-
- b.HasIndex("ImportFileId");
-
- b.ToTable("RecruitImports");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImportDocument", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("DocumentId")
- .HasColumnType("char(36)")
- .HasComment("Id เอกสาร");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("RecruitImportId")
- .HasColumnType("char(36)")
- .HasComment("Id รอบสมัครสอบ");
-
- b.HasKey("Id");
-
- b.HasIndex("DocumentId");
-
- b.HasIndex("RecruitImportId");
-
- b.ToTable("RecruitImportDocuments");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImportHistory", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("Description")
- .IsRequired()
- .HasColumnType("longtext")
- .HasColumnOrder(1)
- .HasComment("รายละเอียดการนำเข้า");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("RecruitImportId")
- .HasColumnType("char(36)");
-
- b.HasKey("Id");
-
- b.HasIndex("RecruitImportId");
-
- b.ToTable("RecruitImportHistories");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImportImage", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("DocumentId")
- .HasColumnType("char(36)")
- .HasComment("Id ไฟล์รูป");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("RecruitImportId")
- .HasColumnType("char(36)")
- .HasComment("Id รอบสมัครสอบ");
-
- b.HasKey("Id");
-
- b.HasIndex("DocumentId");
-
- b.HasIndex("RecruitImportId");
-
- b.ToTable("RecruitImportImages");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("Occupation")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Position")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("RecruitId")
- .HasColumnType("char(36)");
-
- b.Property("Telephone")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("WorkAge")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Workplace")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.HasKey("Id");
-
- b.HasIndex("RecruitId");
-
- b.ToTable("RecruitOccupations");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("AccountNumber")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("Amount")
- .HasColumnType("decimal(65,30)");
-
- b.Property("BankCode")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("ChequeNo")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("ChqueBankCode")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("CompanyCode")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("CreditDebit")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("CustomerName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("PaymentId")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("PaymentType")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("RecruitId")
- .HasColumnType("char(36)");
-
- b.Property("RefNo1")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("TellerId")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("TermBranch")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("TextFile")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("TransDate")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("TransTime")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.HasKey("Id");
-
- b.HasIndex("RecruitId");
-
- b.ToTable("RecruitPayments");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("ABStatus")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)")
- .HasComment("ภาคความรู้ความสามารถที่ใช้เฉพาะตำแหน่ง ผลประเมิน");
-
- b.Property("AStatus")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)")
- .HasComment("ภาคความรู้ความสามารถที่ใช้เฉพาะตำแหน่ง ผลประเมิน");
-
- b.Property("BStatus")
- .HasMaxLength(50)
- .HasColumnType("varchar(50)");
-
- b.Property("CStatus")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)")
- .HasComment("ภาคความเหมาะสมกับตำแหน่ง ผลประเมิน");
-
- b.Property("CitizenId")
- .IsRequired()
- .HasMaxLength(13)
- .HasColumnType("varchar(13)")
- .HasComment("เลขประจำตัวประชาชน");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("ExamAttribute")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)")
- .HasComment("สถานะคัดกรองคุณสมบัติ");
-
- b.Property("ExamId")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)")
- .HasComment("เลขประจำตัวสอบ");
-
- b.Property("ExamStatus")
- .IsRequired()
- .HasMaxLength(50)
- .HasColumnType("varchar(50)")
- .HasComment("สอบได้ / ตก / ขาดสอบ");
-
- b.Property("FullA")
- .HasColumnType("int")
- .HasComment("ภาคความรู้ความสามารถที่ใช้เฉพาะตำแหน่ง คะแนนเต็ม");
-
- b.Property("FullB")
- .HasColumnType("int");
-
- b.Property("FullC")
- .HasColumnType("int")
- .HasComment("ภาคความเหมาะสมกับตำแหน่ง ทดสอบสมรรถนะ+ทดสอบจิตวิทยาฯ คะแนนเต็ม");
-
- b.Property("FullD")
- .HasColumnType("int")
- .HasComment("ภาคความเหมาะสมกับตำแหน่ง สัมภาษณ์ คะแนนเต็ม");
-
- b.Property("FullScore")
- .HasColumnType("int")
- .HasComment("คะแนนเต็ม");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("Major")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
-
- b.Property("Number")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasComment("ลำดับที่สอบได้");
-
- b.Property("PercentageA")
- .HasColumnType("double")
- .HasComment("ภาคความรู้ความสามารถที่ใช้เฉพาะตำแหน่ง ร้อยละ");
-
- b.Property("PercentageB")
- .HasColumnType("double");
-
- b.Property("PercentageC")
- .HasColumnType("double")
- .HasComment("ภาคความเหมาะสมกับตำแหน่ง ร้อยละ");
-
- b.Property("RemarkExamOrder")
- .IsRequired()
- .HasColumnType("longtext")
- .HasComment("หมายเหตุจากลำดับที่สอบได้");
-
- b.Property("RemarkScore")
- .IsRequired()
- .HasColumnType("longtext")
- .HasComment("หมายเหตุจากบัญชีรวมคะแนน");
-
- b.Property("ScoreImportId")
- .HasColumnType("char(36)");
-
- b.Property("SumA")
- .HasColumnType("double")
- .HasComment("ภาคความรู้ความสามารถที่ใช้เฉพาะตำแหน่ง คะแนนรวม");
-
- b.Property("SumAB")
- .HasColumnType("double")
- .HasComment("ภาคความรู้ความสามารถที่ใช้เฉพาะตำแหน่ง คะแนนรวม");
-
- b.Property("SumB")
- .HasColumnType("double");
-
- b.Property("SumC")
- .HasColumnType("double")
- .HasComment("ภาคความเหมาะสมกับตำแหน่ง ทดสอบสมรรถนะ+ทดสอบจิตวิทยาฯ คะแนนรวม");
-
- b.Property("SumCD")
- .HasColumnType("double")
- .HasComment("ภาคความเหมาะสมกับตำแหน่ง คะแนนรวมทดสอบสมรรถนะ+ทดสอบจิตวิทยาฯ และสัมภาษณ์");
-
- b.Property("SumD")
- .HasColumnType("double")
- .HasComment("ภาคความเหมาะสมกับตำแหน่ง สัมภาษณ์ คะแนนรวม");
-
- b.Property("TotalScore")
- .HasColumnType("double")
- .HasComment("คะแนนรวม");
-
- b.HasKey("Id");
-
- b.HasIndex("ScoreImportId");
-
- b.ToTable("RecruitScores");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("char(36)")
- .HasColumnOrder(0)
- .HasComment("PrimaryKey")
- .HasAnnotation("Relational:JsonPropertyName", "id");
-
- b.Property("CreatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(100)
- .HasComment("สร้างข้อมูลเมื่อ");
-
- b.Property("CreatedFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(104)
- .HasComment("ชื่อ User ที่สร้างข้อมูล");
-
- b.Property("CreatedUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(101)
- .HasComment("User Id ที่สร้างข้อมูล");
-
- b.Property("ImportFileId")
- .HasColumnType("char(36)");
-
- b.Property("LastUpdateFullName")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("varchar(200)")
- .HasColumnOrder(105)
- .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdateUserId")
- .IsRequired()
- .HasMaxLength(40)
- .HasColumnType("varchar(40)")
- .HasColumnOrder(103)
- .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด");
-
- b.Property("LastUpdatedAt")
- .HasColumnType("datetime(6)")
- .HasColumnOrder(102)
- .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
-
- b.Property("RecruitImportId")
- .HasColumnType("char(36)");
-
- b.Property("Year")
- .HasColumnType("int");
-
- b.HasKey("Id");
-
- b.HasIndex("ImportFileId");
-
- b.HasIndex("RecruitImportId")
- .IsUnique();
-
- b.ToTable("ScoreImports");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
- .WithMany("Recruits")
- .HasForeignKey("RecruitImportId")
- .OnDelete(DeleteBehavior.Cascade);
-
- b.Navigation("RecruitImport");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
- .WithMany("Addresses")
- .HasForeignKey("RecruitId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Recruit");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
- .WithMany("Certificates")
- .HasForeignKey("RecruitId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Recruit");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "DocumentFile")
- .WithMany()
- .HasForeignKey("DocumentFileId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
- .WithMany("Documents")
- .HasForeignKey("RecruitId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("DocumentFile");
-
- b.Navigation("Recruit");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
- .WithMany("Educations")
- .HasForeignKey("RecruitId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Recruit");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
- .WithMany()
- .HasForeignKey("ImportFileId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ImportFile");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImportDocument", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "Document")
- .WithMany()
- .HasForeignKey("DocumentId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
- .WithMany("RecruitDocuments")
- .HasForeignKey("RecruitImportId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Document");
-
- b.Navigation("RecruitImport");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImportHistory", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
- .WithMany("ImportHostories")
- .HasForeignKey("RecruitImportId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("RecruitImport");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImportImage", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "Document")
- .WithMany()
- .HasForeignKey("DocumentId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
- .WithMany("RecruitImages")
- .HasForeignKey("RecruitImportId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Document");
-
- b.Navigation("RecruitImport");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
- .WithMany("Occupations")
- .HasForeignKey("RecruitId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Recruit");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
- .WithMany("Payments")
- .HasForeignKey("RecruitId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Recruit");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.ScoreImport", "ScoreImport")
- .WithMany("Scores")
- .HasForeignKey("ScoreImportId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ScoreImport");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
- {
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
- .WithMany()
- .HasForeignKey("ImportFileId");
-
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
- .WithOne("ScoreImport")
- .HasForeignKey("BMA.EHR.Recruit.Models.Recruits.ScoreImport", "RecruitImportId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ImportFile");
-
- b.Navigation("RecruitImport");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
- {
- b.Navigation("Addresses");
-
- b.Navigation("Certificates");
-
- b.Navigation("Documents");
-
- b.Navigation("Educations");
-
- b.Navigation("Occupations");
-
- b.Navigation("Payments");
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
- {
- b.Navigation("ImportHostories");
-
- b.Navigation("RecruitDocuments");
-
- b.Navigation("RecruitImages");
-
- b.Navigation("Recruits");
-
- b.Navigation("ScoreImport")
- .IsRequired();
- });
-
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
- {
- b.Navigation("Scores");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Migrations/20260519102256_fix relation.cs b/Migrations/20260519102256_fix relation.cs
deleted file mode 100644
index bf91e02..0000000
--- a/Migrations/20260519102256_fix relation.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace BMA.EHR.Recruit.Migrations
-{
- ///
- public partial class fixrelation : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_ScoreImports_Documents_ImportFileId",
- table: "ScoreImports");
-
- migrationBuilder.AlterColumn(
- name: "ImportFileId",
- table: "ScoreImports",
- type: "char(36)",
- nullable: true,
- collation: "ascii_general_ci",
- oldClrType: typeof(Guid),
- oldType: "char(36)")
- .OldAnnotation("Relational:Collation", "ascii_general_ci");
-
- migrationBuilder.AddForeignKey(
- name: "FK_ScoreImports_Documents_ImportFileId",
- table: "ScoreImports",
- column: "ImportFileId",
- principalTable: "Documents",
- principalColumn: "Id");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_ScoreImports_Documents_ImportFileId",
- table: "ScoreImports");
-
- migrationBuilder.AlterColumn(
- name: "ImportFileId",
- table: "ScoreImports",
- type: "char(36)",
- nullable: false,
- defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
- collation: "ascii_general_ci",
- oldClrType: typeof(Guid),
- oldType: "char(36)",
- oldNullable: true)
- .OldAnnotation("Relational:Collation", "ascii_general_ci");
-
- migrationBuilder.AddForeignKey(
- name: "FK_ScoreImports_Documents_ImportFileId",
- table: "ScoreImports",
- column: "ImportFileId",
- principalTable: "Documents",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- }
- }
-}
diff --git a/Migrations/ApplicationDbContextModelSnapshot.cs b/Migrations/ApplicationDbContextModelSnapshot.cs
index 94e7f07..d849857 100644
--- a/Migrations/ApplicationDbContextModelSnapshot.cs
+++ b/Migrations/ApplicationDbContextModelSnapshot.cs
@@ -1353,7 +1353,7 @@ namespace BMA.EHR.Recruit.Migrations
.HasColumnOrder(101)
.HasComment("User Id ที่สร้างข้อมูล");
- b.Property("ImportFileId")
+ b.Property("ImportFileId")
.HasColumnType("char(36)");
b.Property("LastUpdateFullName")
@@ -1550,7 +1550,9 @@ namespace BMA.EHR.Recruit.Migrations
{
b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
.WithMany()
- .HasForeignKey("ImportFileId");
+ .HasForeignKey("ImportFileId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
.WithOne("ScoreImport")
diff --git a/Models/Recruits/RecruitScore.cs b/Models/Recruits/RecruitScore.cs
index 93024f1..9698b3f 100644
--- a/Models/Recruits/RecruitScore.cs
+++ b/Models/Recruits/RecruitScore.cs
@@ -1,6 +1,5 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
namespace BMA.EHR.Recruit.Models.Recruits
{
@@ -84,9 +83,6 @@ namespace BMA.EHR.Recruit.Models.Recruits
[MaxLength(50), Comment("สถานะคัดกรองคุณสมบัติ")]
public string ExamAttribute { get; set; } = string.Empty;
- [ForeignKey("ScoreImport")]
- public Guid ScoreImportId { get; set; }
-
public ScoreImport ScoreImport { get; set; }
}
}
diff --git a/Models/Recruits/ScoreImport.cs b/Models/Recruits/ScoreImport.cs
index 413f3f2..badee62 100644
--- a/Models/Recruits/ScoreImport.cs
+++ b/Models/Recruits/ScoreImport.cs
@@ -7,9 +7,7 @@ namespace BMA.EHR.Recruit.Models.Recruits
{
public int Year { get; set; }
- public Guid? ImportFileId { get; set; }
-
- public Document ImportFile { get; set; }
+ public Document ImportFile { get; set; } = new Document();
public virtual List Scores { get; set; } = new List();
diff --git a/Program.cs b/Program.cs
index 3475b74..f39a56c 100644
--- a/Program.cs
+++ b/Program.cs
@@ -69,7 +69,6 @@ builder.Services.AddAuthorization();
// Register Services
builder.Services.AddTransient();
builder.Services.AddTransient