diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..802c160 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,23 @@ +name: deploy-docker +run-name: deploy-docker ${{ github.actor }} +on: + workflow_dispatch: +jobs: + # https://github.com/appleboy/ssh-action + # act -W .github/workflows/deploy.yaml -j remote-deploy -s SSH_PASSWORD + remote-deploy: + runs-on: ubuntu-latest + steps: + - name: Remote Deployment + uses: appleboy/ssh-action@v0.1.8 + with: + host: frappet.com + username: frappet + password: ${{ secrets.SSH_PASSWORD }} + port: 22 + script: | + cd /home/frappet/docker/bma-ehr-recruit-qualifying-exam + docker-compose pull + docker-compose up -d + touch success + diff --git a/.github/workflows/local-build.yaml b/.github/workflows/local-build.yaml new file mode 100644 index 0000000..8c799b5 --- /dev/null +++ b/.github/workflows/local-build.yaml @@ -0,0 +1,34 @@ + +name: local-build +run-name: local-build ${{ github.actor }} +on: + # push: + # tags: + # - v1.** + # branches: + # - 'main' + # branches: + # - 'release-*' + + # Allow run workflow manually from Action tab + workflow_dispatch: +env: + REGISTRY: docker.frappet.com + CMS_IMAGE_NAME: demo/qualifying-exam-cms + CMS_IMAGE_TAG: 0.1.1 +jobs: + # act -W .github/workflows/local-build.yaml -j local-image + local-image: + runs-on: ubuntu-latest + steps: + - name: "Check out code" + uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Build and push docker image + uses: docker/build-push-action@v3 + with: + context: cms + load: true + tags: ${{env.REGISTRY}}/${{env.CMS_IMAGE_NAME}}:${{env.CMS_IMAGE_TAG}},${{env.REGISTRY}}/${{env.CMS_IMAGE_NAME}}:latest diff --git a/.github/workflows/release-dev.yaml b/.github/workflows/release-dev.yaml new file mode 100644 index 0000000..1f7c3bb --- /dev/null +++ b/.github/workflows/release-dev.yaml @@ -0,0 +1,72 @@ +name: releaseDev +run-name: releaseDev ${{ github.actor }} +on: + # push: + # tags: + # - 'v[0-9]+.[0-9]+.[0-9]+' + # tags-ignore: + # - '2.*' + # Allow run workflow manually from Action tab + workflow_dispatch: + inputs: + IMAGE_VER: + description: "version for build image" + type: string +env: + REGISTRY: docker.frappet.com + IMAGE_NAME: demo/test-fe-exam +jobs: + # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=v0.2.1-dev -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + releaseDev: + runs-on: ubuntu-latest + steps: + # https://thekevinwang.com/2022/06/13/github-actions-survival-skills/ + - name: Check out code # checkout only cms is possible but I checkout all + uses: actions/checkout@v3 + - name: Gen Version + id: gen_ver + run: | + if [[ $GITHUB_REF == 'refs/tags/'* ]]; then + IMAGE_VER='${GITHUB_REF/refs\/tags\//}' + else + IMAGE_VER=${{ github.event.inputs.IMAGE_VER }} + fi + if [[ $IMAGE_VER == '' ]]; then + IMAGE_VER='beta' + fi + # echo "{\"version\":\"$IMAGE_VER\", \"builddate\":\"$(date +"%Y-%m-%d_%T")\",\"ref_name\":\"$GITHUB_REF\" }" > ./cms/src/lib/ver.json + # cat ./cms/src/lib/ver.json + echo '::set-output name=image_ver::'$IMAGE_VER + - name: Test Version + run: | + echo $GITHUB_REF + echo ${{ steps.gen_ver.outputs.image_ver }} + # cat ./cms/src/lib/ver.json + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login in to registry + uses: docker/login-action@v2 + with: + registry: ${{env.REGISTRY}} + username: ${{secrets.DOCKER_USER}} + password: ${{secrets.DOCKER_PASS}} + - name: Build and push docker image + uses: docker/build-push-action@v3 + with: + context: ./ + # platforms: linux/amd64,linux/arm64 + push: true + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest + # - name: Remote Deployment + # uses: appleboy/ssh-action@v0.1.8 + # with: + # host: frappet.com + # username: frappet + # password: ${{ secrets.SSH_PASSWORD }} + # port: 22 + # script: | + # cd /home/frappet/docker/bma-ehr-recruit-qualifying-exam + # docker-compose pull + # docker-compose up -d + # touch success + diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..392b1b7 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,72 @@ +name: release +run-name: release ${{ github.actor }} +on: + # push: + # tags: + # - 'v[0-9]+.[0-9]+.[0-9]+' + # tags-ignore: + # - '2.*' + # Allow run workflow manually from Action tab + workflow_dispatch: + # inputs: + # IMAGE_VER: + # description: "version for build image" + # type: string +env: + REGISTRY: docker.frappet.com + IMAGE_NAME: demo/test-fe-exam +jobs: + # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=v0.2.1-dev -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + release: + runs-on: ubuntu-latest + steps: + # https://thekevinwang.com/2022/06/13/github-actions-survival-skills/ + - name: Check out code # checkout only cms is possible but I checkout all + uses: actions/checkout@v3 + - name: Gen Version + id: gen_ver + run: | + if [[ $GITHUB_REF == 'refs/tags/'* ]]; then + IMAGE_VER='${GITHUB_REF/refs\/tags\//}' + else + IMAGE_VER=${{ github.event.inputs.IMAGE_VER }} + fi + if [[ $IMAGE_VER == '' ]]; then + IMAGE_VER='beta' + fi + # echo "{\"version\":\"$IMAGE_VER\", \"builddate\":\"$(date +"%Y-%m-%d_%T")\",\"ref_name\":\"$GITHUB_REF\" }" > ./cms/src/lib/ver.json + # cat ./cms/src/lib/ver.json + echo '::set-output name=image_ver::'$IMAGE_VER + - name: Test Version + run: | + echo $GITHUB_REF + echo ${{ steps.gen_ver.outputs.image_ver }} + # cat ./cms/src/lib/ver.json + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login in to registry + uses: docker/login-action@v2 + with: + registry: ${{env.REGISTRY}} + username: ${{secrets.DOCKER_USER}} + password: ${{secrets.DOCKER_PASS}} + - name: Build and push docker image + uses: docker/build-push-action@v3 + with: + context: ./ + # platforms: linux/amd64,linux/arm64 + push: true + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest + # - name: Remote Deployment + # uses: appleboy/ssh-action@v0.1.8 + # with: + # host: frappet.com + # username: frappet + # password: ${{ secrets.SSH_PASSWORD }} + # port: 22 + # script: | + # cd /home/frappet/docker/bma-ehr-recruit-qualifying-exam + # docker-compose pull + # docker-compose up -d + # touch success + diff --git a/.github/workflows/release2.yaml b/.github/workflows/release2.yaml new file mode 100644 index 0000000..4f0b52e --- /dev/null +++ b/.github/workflows/release2.yaml @@ -0,0 +1,63 @@ +name: release-dev +run-name: release-dev ${{ github.actor }} +on: + # push: + # tags: + # - 'v[0-9]+.[0-9]+.[0-9]+' + # tags-ignore: + # - '2.*' + # Allow run workflow manually from Action tab + workflow_dispatch: +env: + REGISTRY: docker.frappet.com + IMAGE_NAME: demo/bma-ehr-recruit-exam-service +jobs: + # act workflow_dispatch -W .github/workflows/release2.yaml --input IMAGE_VER=v0.2.1-dev -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + release-dev: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + # skip Set up QEMU because it fail on act and container + - name: Gen Version + id: gen_ver + run: | + if [[ $GITHUB_REF == 'refs/tags/'* ]]; then + IMAGE_VER='${GITHUB_REF/refs\/tags\//}' + else + IMAGE_VER=${{ github.event.inputs.IMAGE_VER }} + fi + if [[ $IMAGE_VER == '' ]]; then + IMAGE_VER='beta' + fi + echo '::set-output name=image_ver::'$IMAGE_VER + - name: Test Version + run: | + echo $GITHUB_REF + echo ${{ steps.gen_ver.outputs.image_ver }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login in to registry + uses: docker/login-action@v2 + with: + registry: ${{env.REGISTRY}} + username: ${{secrets.DOCKER_USER}} + password: ${{secrets.DOCKER_PASS}} + - name: Build and push docker image + uses: docker/build-push-action@v3 + with: + context: ./ + push: true + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest + - name: Remote Deployment + uses: appleboy/ssh-action@v0.1.8 + with: + host: frappet.com + username: frappet + password: ${{ secrets.SSH_PASSWORD }} + port: 22 + script: | + cd /home/frappet/docker/bma-ehr-recruit-exam + docker-compose pull + docker-compose up -d + touch success diff --git a/.github/workflows/remote-build.yaml b/.github/workflows/remote-build.yaml new file mode 100644 index 0000000..1a580f1 --- /dev/null +++ b/.github/workflows/remote-build.yaml @@ -0,0 +1,55 @@ +name: remote-build +run-name: remote-build ${{ github.actor }} +on: + # push: + # tags: + # - 'v[0-9]+.[0-9]+.[0-9]+' + # tags-ignore: + # - '2.*' + # Allow run workflow manually from Action tab + workflow_dispatch: +env: + REGISTRY: docker.frappet.com + CMS_IMAGE_NAME: demo/test-fe-exam + CMS_IMAGE_TAG: 0.2.1 +jobs: + # act --workflows .github/workflows/build.yaml --job remote-image -s DOCKER_USER -s DOCKER_PASS -s SSH_PASSWORD + # act -W .github/workflows/remote-build.yaml -j remote-image -s DOCKER_USER -s DOCKER_PASS -s SSH_PASSWORD + remote-image: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + # skip Set up QEMU because it fail on act and container + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login in to registry + uses: docker/login-action@v2 + with: + registry: ${{env.REGISTRY}} + username: ${{secrets.DOCKER_USER}} + password: ${{secrets.DOCKER_PASS}} + # Node no need because use 2 state build + # - uses: actions/setup-node@v3 + # with: + # node-version: '18' + - name: Build and push docker image + uses: docker/build-push-action@v3 + with: + context: ./ + # platforms: linux/amd64,linux/arm64 + push: true + tags: ${{env.REGISTRY}}/${{env.CMS_IMAGE_NAME}}:${{env.CMS_IMAGE_TAG}},${{env.REGISTRY}}/${{env.CMS_IMAGE_NAME}}:latest + # - name: Remote Deployment + # uses: appleboy/ssh-action@v0.1.8 + # with: + # host: frappet.com + # username: frappet + # password: ${{ secrets.SSH_PASSWORD }} + # port: 22 + # script: | + # cd /home/frappet/docker/bma-ehr-recruit-qualifying-exam + # docker-compose pull + # docker-compose up -d + # touch success + + diff --git a/BMA-EHR-Recurit-Exam-Service.csproj.user b/BMA-EHR-Recurit-Exam-Service.csproj.user deleted file mode 100644 index a768256..0000000 --- a/BMA-EHR-Recurit-Exam-Service.csproj.user +++ /dev/null @@ -1,9 +0,0 @@ - - - - https-api - - - ProjectDebugger - - \ No newline at end of file diff --git a/BMA-EHR-Recurit-Exam-Service.csproj b/BMA.EHR.Recurit.Exam.Service.csproj similarity index 95% rename from BMA-EHR-Recurit-Exam-Service.csproj rename to BMA.EHR.Recurit.Exam.Service.csproj index 224eb50..338c7d1 100644 --- a/BMA-EHR-Recurit-Exam-Service.csproj +++ b/BMA.EHR.Recurit.Exam.Service.csproj @@ -78,5 +78,13 @@ + + + PreserveNewest + + + PreserveNewest + + diff --git a/BMA-EHR-Recurit-Exam-Service.sln b/BMA.EHR.Recurit.Exam.Service.sln similarity index 88% rename from BMA-EHR-Recurit-Exam-Service.sln rename to BMA.EHR.Recurit.Exam.Service.sln index 33c1046..92f8873 100644 --- a/BMA-EHR-Recurit-Exam-Service.sln +++ b/BMA.EHR.Recurit.Exam.Service.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33103.184 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BMA-EHR-Recurit-Exam-Service", "BMA-EHR-Recurit-Exam-Service.csproj", "{92F7A5C5-FA85-41C0-B17B-1B2AA90EA980}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BMA.EHR.Recurit.Exam.Service", "BMA.EHR.Recurit.Exam.Service.csproj", "{92F7A5C5-FA85-41C0-B17B-1B2AA90EA980}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Controllers/TestController.cs b/Controllers/TestController.cs new file mode 100644 index 0000000..24cd6ba --- /dev/null +++ b/Controllers/TestController.cs @@ -0,0 +1,54 @@ +using BMA.EHR.Core; +using BMA.EHR.Recurit.Exam.Service.Request; +using BMA.EHR.Recurit.Exam.Service.Response; +using BMA.EHR.Recurit.Exam.Service.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Swashbuckle.AspNetCore.Annotations; + +namespace BMA.EHR.Recurit.Exam.Service.Controllers +{ + [Route("api/v{version:apiVersion}/test")] + [ApiVersion("1.0")] + [ApiController] + [Produces("application/json")] + [SwaggerTag("ทดสอบรัน api")] + public class TestController : BaseController + { + #region " Fields " + + #endregion + + #region " Constructor and Destructor " + + public TestController() + { + } + + #endregion + + /// + /// ข้อมูล สถานะ ผู้สมัครสอบ + /// + /// รหัสรอบสมัคร + /// + /// เมื่อทำการดึง ข้อมูล สถานะ ผู้สมัคร สำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetStatusTestService() + { + try + { + return Success(GlobalMessages.Success, "ผ่าน"); + } + catch (Exception ex) + { + return Error(ex); + } + } + } +} diff --git a/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/Data/Migrations/ApplicationDbContextModelSnapshot.cs index c7a62e4..58c308e 100644 --- a/Data/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/Data/Migrations/ApplicationDbContextModelSnapshot.cs @@ -270,6 +270,16 @@ namespace BMA.EHR.Recurit.Exam.Service.Data.Migrations b.Property("RelationshipId") .HasColumnType("char(36)"); + b.Property("SeatNumber") + .HasColumnType("longtext") + .HasComment("เลขที่นั่งสอบ"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasComment("สถานะผู้สมัคร"); + b.Property("Telephone") .HasMaxLength(20) .HasColumnType("varchar(20)") @@ -281,12 +291,6 @@ namespace BMA.EHR.Recurit.Exam.Service.Data.Migrations .HasColumnType("varchar(40)") .HasComment("User Id ผู้สมัคร"); - b.Property("status") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("varchar(20)") - .HasComment("สถานะผู้สมัคร"); - b.HasKey("Id"); b.HasIndex("CitizenDistrictId"); diff --git a/Dockerfile b/Dockerfile index 5f939cb..8e38a24 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,16 +7,17 @@ EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /src -COPY ["BMA-EHR-Recurit-Exam-Service.csproj", "."] -RUN dotnet restore "./BMA-EHR-Recurit-Exam-Service.csproj" +COPY ["nuget.config", "."] +COPY ["BMA.EHR.Recurit.Exam.Service.csproj", "."] +RUN dotnet restore "./BMA.EHR.Recurit.Exam.Service.csproj" COPY . . WORKDIR "/src/." -RUN dotnet build "BMA-EHR-Recurit-Exam-Service.csproj" -c Release -o /app/build +RUN dotnet build "BMA.EHR.Recurit.Exam.Service.csproj" -c Release -o /app/build FROM build AS publish -RUN dotnet publish "BMA-EHR-Recurit-Exam-Service.csproj" -c Release -o /app/publish /p:UseAppHost=false +RUN dotnet publish "BMA.EHR.Recurit.Exam.Service.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "BMA-EHR-Recurit-Exam-Service.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet", "BMA.EHR.Recurit.Exam.Service.dll"] \ No newline at end of file diff --git a/Migrations/20230329044404_Update table Candidate add seatnumber.Designer.cs b/Migrations/20230329044404_Update table Candidate add seatnumber.Designer.cs new file mode 100644 index 0000000..5189884 --- /dev/null +++ b/Migrations/20230329044404_Update table Candidate add seatnumber.Designer.cs @@ -0,0 +1,1220 @@ +// +using System; +using BMA.EHR.Recurit.Exam.Service.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace BMA.EHR.Recurit.Exam.Service.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20230329044404_Update table Candidate add seatnumber")] + partial class UpdatetableCandidateaddseatnumber + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Candidate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CitizenDate") + .HasColumnType("datetime(6)") + .HasComment("วันที่ออกบัตร"); + + b.Property("CitizenDistrictId") + .HasColumnType("char(36)"); + + b.Property("CitizenId") + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasComment("เลขประจำตัวประชาชน"); + + b.Property("CitizenProvinceId") + .HasColumnType("char(36)"); + + 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("CurrentAddress") + .HasColumnType("longtext") + .HasComment("ที่อยู่ปัจจุบัน"); + + b.Property("CurrentDistrictId") + .HasColumnType("char(36)"); + + b.Property("CurrentProvinceId") + .HasColumnType("char(36)"); + + b.Property("CurrentSubDistrictId") + .HasColumnType("char(36)"); + + b.Property("CurrentZipCode") + .HasMaxLength(10) + .HasColumnType("varchar(10)") + .HasComment("รหัสไปรษณีย์ที่อยู่ปัจจุบัน"); + + b.Property("DateOfBirth") + .HasMaxLength(40) + .HasColumnType("datetime(6)") + .HasComment("วันเกิด"); + + b.Property("Email") + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasComment("อีเมล"); + + b.Property("FatherFirstName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("ชื่อจริงบิดา"); + + b.Property("FatherLastName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("นามสกุลบิดา"); + + b.Property("FatherNationality") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("สัญชาติบิดา"); + + b.Property("FatherOccupation") + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasComment("อาชีพบิดา"); + + b.Property("FatherPrefixId") + .HasColumnType("char(36)"); + + b.Property("FirstName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnOrder(1) + .HasComment("ชื่อจริง"); + + b.Property("Knowledge") + .HasColumnType("longtext") + .HasComment("ความสามารถพิเศษ"); + + b.Property("LastName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnOrder(2) + .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("Marry") + .HasColumnType("tinyint(1)") + .HasComment("คู่สมรส"); + + b.Property("MarryFirstName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("ชื่อจริงคู่สมรส"); + + b.Property("MarryLastName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("นามสกุลคู่สมรส"); + + b.Property("MarryNationality") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("สัญชาติคู่สมรส"); + + b.Property("MarryOccupation") + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasComment("อาชีพคู่สมรส"); + + b.Property("MarryPrefixId") + .HasColumnType("char(36)"); + + b.Property("MobilePhone") + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasComment("โทรศัพท์มือถือ"); + + b.Property("MotherFirstName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("ชื่อจริงมารดา"); + + b.Property("MotherLastName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("นามสกุลมารดา"); + + b.Property("MotherNationality") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasComment("สัญชาติมารดา"); + + b.Property("MotherOccupation") + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasComment("อาชีพมารดา"); + + b.Property("MotherPrefixId") + .HasColumnType("char(36)"); + + b.Property("Nationality") + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(3) + .HasComment("สัญชาติ"); + + b.Property("OccupationCompany") + .HasColumnType("longtext") + .HasComment("สำนัก/บริษัท บริษัท"); + + b.Property("OccupationDepartment") + .HasColumnType("longtext") + .HasComment("กอง/ฝ่าย บริษัท"); + + b.Property("OccupationEmail") + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasComment("อีเมล บริษัท"); + + b.Property("OccupationPosition") + .HasColumnType("longtext") + .HasComment("ตำแหน่งอาชีพ"); + + b.Property("OccupationTelephone") + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasComment("โทรศัพท์ บริษัท"); + + b.Property("OccupationType") + .HasColumnType("longtext") + .HasComment("ประเภทอาชีพที่ทำงานมาก่อน"); + + b.Property("PeriodExamId") + .HasColumnType("char(36)"); + + b.Property("PrefixId") + .HasColumnType("char(36)"); + + b.Property("RegistAddress") + .HasColumnType("longtext") + .HasComment("ที่อยู่ตามทะเบียนบ้าน"); + + b.Property("RegistDistrictId") + .HasColumnType("char(36)"); + + b.Property("RegistProvinceId") + .HasColumnType("char(36)"); + + b.Property("RegistSame") + .HasColumnType("tinyint(1)") + .HasComment("ที่อยู่ปัจจุบันเหมือนที่อยู่ตามทะเบียนบ้าน"); + + b.Property("RegistSubDistrictId") + .HasColumnType("char(36)"); + + b.Property("RegistZipCode") + .HasMaxLength(10) + .HasColumnType("varchar(10)") + .HasComment("รหัสไปรษณีย์ที่อยู่ตามทะเบียนบ้าน"); + + b.Property("RejectDetail") + .HasColumnType("longtext") + .HasComment("เหตุผลการไม่อนุมัติ"); + + b.Property("RelationshipId") + .HasColumnType("char(36)"); + + b.Property("SeatNumber") + .HasColumnType("longtext") + .HasComment("เลขที่นั่งสอบ"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasComment("สถานะผู้สมัคร"); + + b.Property("Telephone") + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasComment("โทรศัพท์"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasComment("User Id ผู้สมัคร"); + + b.HasKey("Id"); + + b.HasIndex("CitizenDistrictId"); + + b.HasIndex("CitizenProvinceId"); + + b.HasIndex("CurrentDistrictId"); + + b.HasIndex("CurrentProvinceId"); + + b.HasIndex("CurrentSubDistrictId"); + + b.HasIndex("FatherPrefixId"); + + b.HasIndex("MarryPrefixId"); + + b.HasIndex("MotherPrefixId"); + + b.HasIndex("PeriodExamId"); + + b.HasIndex("PrefixId"); + + b.HasIndex("RegistDistrictId"); + + b.HasIndex("RegistProvinceId"); + + b.HasIndex("RegistSubDistrictId"); + + b.HasIndex("RelationshipId"); + + b.ToTable("Candidates"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Career", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CandidateId") + .HasColumnType("char(36)"); + + 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("DurationEnd") + .HasColumnType("datetime(6)") + .HasColumnOrder(2) + .HasComment("ระยะเวลาสิ้นสุด"); + + b.Property("DurationStart") + .HasColumnType("datetime(6)") + .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("Name") + .IsRequired() + .HasColumnType("longtext") + .HasColumnOrder(3) + .HasComment("สถานที่ทำงาน/ฝึกงาน"); + + b.Property("Position") + .IsRequired() + .HasColumnType("longtext") + .HasColumnOrder(4) + .HasComment("ตำแหน่ง/ลักษณะงาน"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("longtext") + .HasColumnOrder(6) + .HasComment("เหตุผลที่ออก"); + + b.Property("Salary") + .HasMaxLength(20) + .HasColumnType("int") + .HasColumnOrder(5) + .HasComment("เงินเดือนสุดท้ายก่อนออก"); + + b.HasKey("Id"); + + b.HasIndex("CandidateId"); + + b.ToTable("Careers"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.District", 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("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnOrder(2) + .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("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("varchar(150)") + .HasColumnOrder(1) + .HasComment("เขต/อำเภอ"); + + b.Property("ProvinceId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("ProvinceId"); + + b.ToTable("Districts"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Education", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CandidateId") + .HasColumnType("char(36)"); + + 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("DurationEnd") + .HasColumnType("datetime(6)") + .HasColumnOrder(2) + .HasComment("ระยะเวลาสิ้นสุด"); + + b.Property("DurationStart") + .HasColumnType("datetime(6)") + .HasColumnOrder(1) + .HasComment("ระยะเวลาเริ่ม"); + + b.Property("EducationLevelId") + .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("Major") + .IsRequired() + .HasColumnType("longtext") + .HasColumnOrder(4) + .HasComment("สาขาวิชา/วิชาเอก"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext") + .HasColumnOrder(3) + .HasComment("ชื่อสถานศึกษา"); + + b.Property("Scores") + .HasMaxLength(10) + .HasColumnType("float") + .HasColumnOrder(6) + .HasComment("คะแนนเฉลี่ยตลอดหลักสูตร"); + + b.HasKey("Id"); + + b.HasIndex("CandidateId"); + + b.HasIndex("EducationLevelId"); + + b.ToTable("Educations"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.EducationLevel", 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("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnOrder(2) + .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("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnOrder(1) + .HasComment("ระดับการศึกษา"); + + b.HasKey("Id"); + + b.ToTable("EducationLevels"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.PeriodExam", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AnnounceDate") + .HasColumnType("datetime(6)") + .HasColumnOrder(3) + .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("Detail") + .HasColumnType("longtext") + .HasComment("รายละเอียดสมัครสอบ"); + + b.Property("EndDate") + .HasColumnType("datetime(6)") + .HasColumnOrder(2) + .HasComment("วันสิ้นสุด"); + + b.Property("Fee") + .HasColumnType("float") + .HasComment("ค่าธรรมเนียม"); + + b.Property("IsActive") + .HasColumnType("tinyint(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("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("varchar(150)") + .HasColumnOrder(4) + .HasComment("ชื่อการสอบ"); + + b.Property("Round") + .HasColumnType("int") + .HasColumnOrder(5) + .HasComment("รอบการสอบ"); + + b.Property("StartDate") + .HasColumnType("datetime(6)") + .HasColumnOrder(1) + .HasComment("วันเริ่มสมัครสอบ"); + + b.Property("Year") + .HasColumnType("int") + .HasComment("ปีงบประมาณ"); + + b.HasKey("Id"); + + b.ToTable("PeriodExams"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Prefix", 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("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnOrder(3) + .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("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)") + .HasColumnOrder(2) + .HasComment("รายละเอียดคำนำหน้า"); + + b.HasKey("Id"); + + b.ToTable("Prefixes"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Province", 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("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnOrder(2) + .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("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("varchar(150)") + .HasColumnOrder(1) + .HasComment("จังหวัด"); + + b.HasKey("Id"); + + b.ToTable("Provinces"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Relationship", 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("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnOrder(2) + .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("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)") + .HasColumnOrder(1) + .HasComment("ชื่อความสัมพันธ์"); + + b.HasKey("Id"); + + b.ToTable("Relationships"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Religion", 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("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnOrder(2) + .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("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnOrder(1) + .HasComment("ศาสนา"); + + b.HasKey("Id"); + + b.ToTable("Religions"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.SubDistrict", 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("DistrictId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnOrder(3) + .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("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("varchar(150)") + .HasColumnOrder(1) + .HasComment("เขต/อำเภอ"); + + b.Property("ZipCode") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("varchar(10)") + .HasColumnOrder(2) + .HasComment("รหัสไปรษณีย์"); + + b.HasKey("Id"); + + b.HasIndex("DistrictId"); + + b.ToTable("SubDistricts"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Candidate", b => + { + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.District", "CitizenDistrict") + .WithMany() + .HasForeignKey("CitizenDistrictId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Province", "CitizenProvince") + .WithMany() + .HasForeignKey("CitizenProvinceId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.District", "CurrentDistrict") + .WithMany() + .HasForeignKey("CurrentDistrictId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Province", "CurrentProvince") + .WithMany() + .HasForeignKey("CurrentProvinceId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.SubDistrict", "CurrentSubDistrict") + .WithMany() + .HasForeignKey("CurrentSubDistrictId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Prefix", "FatherPrefix") + .WithMany() + .HasForeignKey("FatherPrefixId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Prefix", "MarryPrefix") + .WithMany() + .HasForeignKey("MarryPrefixId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Prefix", "MotherPrefix") + .WithMany() + .HasForeignKey("MotherPrefixId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.PeriodExam", "PeriodExam") + .WithMany() + .HasForeignKey("PeriodExamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Prefix", "Prefix") + .WithMany() + .HasForeignKey("PrefixId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.District", "RegistDistrict") + .WithMany() + .HasForeignKey("RegistDistrictId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Province", "RegistProvince") + .WithMany() + .HasForeignKey("RegistProvinceId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.SubDistrict", "RegistSubDistrict") + .WithMany() + .HasForeignKey("RegistSubDistrictId"); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Relationship", "Relationship") + .WithMany() + .HasForeignKey("RelationshipId"); + + b.Navigation("CitizenDistrict"); + + b.Navigation("CitizenProvince"); + + b.Navigation("CurrentDistrict"); + + b.Navigation("CurrentProvince"); + + b.Navigation("CurrentSubDistrict"); + + b.Navigation("FatherPrefix"); + + b.Navigation("MarryPrefix"); + + b.Navigation("MotherPrefix"); + + b.Navigation("PeriodExam"); + + b.Navigation("Prefix"); + + b.Navigation("RegistDistrict"); + + b.Navigation("RegistProvince"); + + b.Navigation("RegistSubDistrict"); + + b.Navigation("Relationship"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Career", b => + { + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Candidate", "Candidate") + .WithMany() + .HasForeignKey("CandidateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Candidate"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.District", b => + { + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Province", "Province") + .WithMany("Districts") + .HasForeignKey("ProvinceId"); + + b.Navigation("Province"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Education", b => + { + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.Candidate", "Candidate") + .WithMany() + .HasForeignKey("CandidateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.EducationLevel", "EducationLevel") + .WithMany() + .HasForeignKey("EducationLevelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Candidate"); + + b.Navigation("EducationLevel"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.SubDistrict", b => + { + b.HasOne("BMA.EHR.Recurit.Exam.Service.Models.District", "District") + .WithMany("SubDistricts") + .HasForeignKey("DistrictId"); + + b.Navigation("District"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.District", b => + { + b.Navigation("SubDistricts"); + }); + + modelBuilder.Entity("BMA.EHR.Recurit.Exam.Service.Models.Province", b => + { + b.Navigation("Districts"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20230329044404_Update table Candidate add seatnumber.cs b/Migrations/20230329044404_Update table Candidate add seatnumber.cs new file mode 100644 index 0000000..579c0aa --- /dev/null +++ b/Migrations/20230329044404_Update table Candidate add seatnumber.cs @@ -0,0 +1,40 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace BMA.EHR.Recurit.Exam.Service.Migrations +{ + /// + public partial class UpdatetableCandidateaddseatnumber : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "status", + table: "Candidates", + newName: "Status"); + + migrationBuilder.AddColumn( + name: "SeatNumber", + table: "Candidates", + type: "longtext", + nullable: true, + comment: "เลขที่นั่งสอบ") + .Annotation("MySql:CharSet", "utf8mb4"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "SeatNumber", + table: "Candidates"); + + migrationBuilder.RenameColumn( + name: "Status", + table: "Candidates", + newName: "status"); + } + } +} diff --git a/Models/Candidate.cs b/Models/Candidate.cs index 6faf381..696264c 100644 --- a/Models/Candidate.cs +++ b/Models/Candidate.cs @@ -14,6 +14,8 @@ namespace BMA.EHR.Recurit.Exam.Service.Models [Required, MaxLength(20), Comment("สถานะผู้สมัคร")] public string Status { get; set; } = "register"; + [Comment("เลขที่นั่งสอบ")] + public string? SeatNumber { get; set; } diff --git a/Models/PeriodExam.cs b/Models/PeriodExam.cs index 3fc10f8..094509a 100644 --- a/Models/PeriodExam.cs +++ b/Models/PeriodExam.cs @@ -19,7 +19,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Models public int? Round { get; set; } [Comment("ค่าธรรมเนียม")] - public float? Fee { get; set; } + public float? Fee { get; set; } = 0; [Comment("ปีงบประมาณ")] public int? Year { get; set; } diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json index 4da1817..79bf03b 100644 --- a/Properties/launchSettings.json +++ b/Properties/launchSettings.json @@ -4,7 +4,7 @@ "commandName": "Project", "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "https://localhost:7007;http://localhost:5261", + "applicationUrl": "https://localhost:7007;http://localhost:5262", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, @@ -18,7 +18,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "http://localhost:5261" + "applicationUrl": "http://localhost:5262" }, "https": { "commandName": "Project", @@ -28,13 +28,13 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "https://localhost:7007;http://localhost:5261" + "applicationUrl": "https://localhost:7007;http://localhost:5262" }, "https-api": { "commandName": "Project", "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "https://localhost:7007;http://localhost:5261", + "applicationUrl": "https://localhost:7007;http://localhost:5262", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, diff --git a/SeedHoliday.xlsx b/SeedHoliday.xlsx deleted file mode 100644 index 090d5a8..0000000 Binary files a/SeedHoliday.xlsx and /dev/null differ diff --git a/SeedInsignia.xlsx b/SeedInsignia.xlsx deleted file mode 100644 index c21f8e2..0000000 Binary files a/SeedInsignia.xlsx and /dev/null differ diff --git a/SeedOrganization.xlsx b/SeedOrganization.xlsx deleted file mode 100644 index d451d2b..0000000 Binary files a/SeedOrganization.xlsx and /dev/null differ diff --git a/SeedPosition.xlsx b/SeedPosition.xlsx deleted file mode 100644 index fe2b5be..0000000 Binary files a/SeedPosition.xlsx and /dev/null differ diff --git a/SeedPositionEmployee.xlsx b/SeedPositionEmployee.xlsx deleted file mode 100644 index f7b1e44..0000000 Binary files a/SeedPositionEmployee.xlsx and /dev/null differ diff --git a/Services/CandidateService.cs b/Services/CandidateService.cs index d326479..2d4b7dd 100644 --- a/Services/CandidateService.cs +++ b/Services/CandidateService.cs @@ -243,6 +243,9 @@ namespace BMA.EHR.Recurit.Exam.Service.Services if (exam == null) throw new Exception(GlobalMessages.ExamNotFound); + var _candidateNumber = await _context.Candidates.AsQueryable() + .CountAsync(x => x.PeriodExam == exam); + var _candidate = await _context.Candidates.AsQueryable() .FirstOrDefaultAsync(x => x.PeriodExam == exam && x.UserId == UserId); if (_candidate == null) @@ -257,6 +260,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Services CreatedFullName = FullName ?? "", LastUpdateFullName = FullName ?? "", UserId = UserId ?? "", + SeatNumber = "CDC-" + (_candidateNumber + 1), }; await _context.Candidates.AddAsync(candidate); diff --git a/appsettings.Development.json b/appsettings.Development.json index 25d7474..6af2401 100644 --- a/appsettings.Development.json +++ b/appsettings.Development.json @@ -18,7 +18,7 @@ }, "Jwt": { "Key": "HP-FnQMUj9msHMSD3T9HtdEnphAKoCJLEl85CIqROFI", - "Issuer": "https://identity.frappet.com/realms/bma-ehr-exam" + "Issuer": "https://identity.frappet.com/realms/bma-ehr" }, "EPPlus": { "ExcelPackage": { diff --git a/appsettings.json b/appsettings.json index e0be099..88f9e99 100644 --- a/appsettings.json +++ b/appsettings.json @@ -18,7 +18,7 @@ }, "Jwt": { "Key": "HP-FnQMUj9msHMSD3T9HtdEnphAKoCJLEl85CIqROFI", - "Issuer": "https://identity.frappet.com/realms/bma-ehr-exam" + "Issuer": "https://identity.frappet.com/realms/bma-ehr" }, "EPPlus": { "ExcelPackage": { diff --git a/global.json b/global.json new file mode 100644 index 0000000..a7670c9 --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "7.0.201" + } +} \ No newline at end of file diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..33b28ff --- /dev/null +++ b/nuget.config @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/obj/Debug/net7.0/apphost.exe b/obj/Debug/net7.0/apphost.exe index d394ff5..4141a0f 100644 Binary files a/obj/Debug/net7.0/apphost.exe and b/obj/Debug/net7.0/apphost.exe differ diff --git a/obj/project.assets.json b/obj/project.assets.json index 94ad894..2810b0a 100644 --- a/obj/project.assets.json +++ b/obj/project.assets.json @@ -8088,17 +8088,30 @@ "project": { "version": "1.0.0", "restore": { +<<<<<<< HEAD "projectUniqueName": "D:\\Develop\\Source\\BMA-EHR-Recurit-Exam-Service\\BMA-EHR-Recurit-Exam-Service.csproj", "projectName": "BMA-EHR-Recurit-Exam-Service", "projectPath": "D:\\Develop\\Source\\BMA-EHR-Recurit-Exam-Service\\BMA-EHR-Recurit-Exam-Service.csproj", "packagesPath": "C:\\Users\\suphonchai\\.nuget\\packages\\", "outputPath": "D:\\Develop\\Source\\BMA-EHR-Recurit-Exam-Service\\obj\\", +======= + "projectUniqueName": "D:\\BMA-EHR-Recurit-Exam-Service\\BMA.EHR.Recurit.Exam.Service.csproj", + "projectName": "BMA.EHR.Recurit.Exam.Service", + "projectPath": "D:\\BMA-EHR-Recurit-Exam-Service\\BMA.EHR.Recurit.Exam.Service.csproj", + "packagesPath": "C:\\Users\\M\\.nuget\\packages\\", + "outputPath": "D:\\BMA-EHR-Recurit-Exam-Service\\obj\\", +>>>>>>> origin/develop "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ +<<<<<<< HEAD "C:\\Users\\suphonchai\\AppData\\Roaming\\NuGet\\NuGet.Config", +======= + "D:\\BMA-EHR-Recurit-Exam-Service\\NuGet.Config", + "C:\\Users\\M\\AppData\\Roaming\\NuGet\\NuGet.Config", +>>>>>>> origin/develop "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], @@ -8106,9 +8119,14 @@ "net7.0" ], "sources": { +<<<<<<< HEAD "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} +======= + "https://api.nuget.org/v3/index.json": {}, + "https://nuget.frappet.synology.me/v3/index.json": {} +>>>>>>> origin/develop }, "frameworks": { "net7.0": { diff --git a/obj/project.nuget.cache b/obj/project.nuget.cache index e2b4e7f..820d7e5 100644 --- a/obj/project.nuget.cache +++ b/obj/project.nuget.cache @@ -1,8 +1,14 @@ { "version": 2, +<<<<<<< HEAD "dgSpecHash": "ChnI3WhXjP+sxAKLkSP8S8mz3WOzlnkCZXbBnqR2HJ/SOQOepaa34U2OC3GEmT8xAdinmgkUc82x7WgjOC7iRw==", "success": true, "projectFilePath": "D:\\Develop\\Source\\BMA-EHR-Recurit-Exam-Service\\BMA-EHR-Recurit-Exam-Service.csproj", +======= + "dgSpecHash": "jARShbZ7PIhhIRmoQr9ZlMRsoMjKYArRP27wUCJoLnZq6aAb2nxywy+XINyZW0hQINikWB8ZFgzBjUw6XqNheQ==", + "success": true, + "projectFilePath": "D:\\BMA-EHR-Recurit-Exam-Service\\BMA.EHR.Recurit.Exam.Service.csproj", +>>>>>>> origin/develop "expectedPackageFiles": [ "C:\\Users\\suphonchai\\.nuget\\packages\\bma.ehr.core\\1.0.0\\bma.ehr.core.1.0.0.nupkg.sha512", "C:\\Users\\suphonchai\\.nuget\\packages\\bma.ehr.extensions\\1.0.1\\bma.ehr.extensions.1.0.1.nupkg.sha512", diff --git a/wwwroot/keycloak.json b/wwwroot/keycloak.json index 5590c47..9eba3b3 100644 --- a/wwwroot/keycloak.json +++ b/wwwroot/keycloak.json @@ -1,7 +1,7 @@ { - "realm": "bma-ehr-exam", + "realm": "bma-ehr", "auth-server-url": "https://identity.frappet.com", "ssl-required": "external", - "resource": "bma-ehr-exam", + "resource": "bma-ehr", "public-client": true } \ No newline at end of file