From 202099605afec534c04a7f89670c776da45b028a Mon Sep 17 00:00:00 2001 From: Kittapath Date: Thu, 13 Jul 2023 11:03:06 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=20=E0=B9=84?= =?UTF-8?q?=E0=B8=9F=E0=B8=A5=E0=B9=8C=20docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.github/workflows/build-local.yaml | 46 ++++++++++ .../.github/workflows/release.yaml | 86 +++++++++++++++++++ .../OrganizationEmployeeController.cs | 6 +- BMA.EHR.Placement.Service/.dockerignore | 25 ++++++ .../.github/workflows/build-local.yaml | 46 ++++++++++ .../.github/workflows/release.yaml | 86 +++++++++++++++++++ .../Controllers/PlacementController.cs | 59 +++++++++---- BMA.EHR.Placement.Service/Dockerfile | 9 +- 8 files changed, 342 insertions(+), 21 deletions(-) create mode 100644 BMA.EHR.OrganizationEmployee.Service/.github/workflows/build-local.yaml create mode 100644 BMA.EHR.OrganizationEmployee.Service/.github/workflows/release.yaml create mode 100644 BMA.EHR.Placement.Service/.dockerignore create mode 100644 BMA.EHR.Placement.Service/.github/workflows/build-local.yaml create mode 100644 BMA.EHR.Placement.Service/.github/workflows/release.yaml diff --git a/BMA.EHR.OrganizationEmployee.Service/.github/workflows/build-local.yaml b/BMA.EHR.OrganizationEmployee.Service/.github/workflows/build-local.yaml new file mode 100644 index 00000000..3a06de72 --- /dev/null +++ b/BMA.EHR.OrganizationEmployee.Service/.github/workflows/build-local.yaml @@ -0,0 +1,46 @@ +# use for local build with act +name: build-local +run-name: build-local ${{ github.actor }} +on: + workflow_dispatch: +env: + REGISTRY: docker.frappet.com + IMAGE_NAME: demo/bma-ehr-metadata-service +jobs: + # act workflow_dispatch -W .github/workflows/build-local.yaml --input IMAGE_VER=test-v6.1 + build-local: + 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='test-vBeta' + 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 load local docker image + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64 + load: true + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest diff --git a/BMA.EHR.OrganizationEmployee.Service/.github/workflows/release.yaml b/BMA.EHR.OrganizationEmployee.Service/.github/workflows/release.yaml new file mode 100644 index 00000000..7dd741bb --- /dev/null +++ b/BMA.EHR.OrganizationEmployee.Service/.github/workflows/release.yaml @@ -0,0 +1,86 @@ +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: ehr/bma-ehr-org-employee-service + DEPLOY_HOST: frappet.com + COMPOSE_PATH: /home/frappet/docker/bma-ehr-org-employee + TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 + +jobs: + # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=test-v6.1 -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='test-vBeta' + 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 load local docker image + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64 + push: true + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest + + - name: Reload docker compose + uses: appleboy/ssh-action@v0.1.8 + with: + host: ${{env.DEPLOY_HOST}} + username: frappet + password: ${{ secrets.SSH_PASSWORD }} + port: 22 + script: | + cd "${{env.COMPOSE_PATH}}" + docker-compose pull + docker-compose up -d + echo "${{ steps.gen_ver.outputs.image_ver }}"> success + # - uses: snow-actions/line-notify@v1.1.0 + # if: success() + # with: + # access_token: ${{ env.TOKEN_LINE }} + # message: | + # -Success✅✅✅ + # Image: ${{env.IMAGE_NAME}} + # Version: ${{ github.event.inputs.IMAGE_VER }} + # By: ${{secrets.DOCKER_USER}} + # - uses: snow-actions/line-notify@v1.1.0 + # if: failure() + # with: + # access_token: ${{ env.TOKEN_LINE }} + # message: | + # -Failure❌❌❌ + # Image: ${{env.IMAGE_NAME}} + # Version: ${{ github.event.inputs.IMAGE_VER }} + # By: ${{secrets.DOCKER_USER}} diff --git a/BMA.EHR.OrganizationEmployee.Service/Controllers/OrganizationEmployeeController.cs b/BMA.EHR.OrganizationEmployee.Service/Controllers/OrganizationEmployeeController.cs index 1691e069..6a733ada 100644 --- a/BMA.EHR.OrganizationEmployee.Service/Controllers/OrganizationEmployeeController.cs +++ b/BMA.EHR.OrganizationEmployee.Service/Controllers/OrganizationEmployeeController.cs @@ -13,9 +13,11 @@ using Microsoft.EntityFrameworkCore; namespace BMA.EHR.OrganizationEmployee.Service.Controllers { - [Route("api/[controller]/organization-employee")] - [ApiController, Authorize] + [Route("api/v{version:apiVersion}/organization-employee")] + [ApiVersion("1.0")] + [ApiController] [Produces("application/json")] + [Authorize] [SwaggerTag("โครงสร้างตำแหน่งลูกจ้าง")] public class OrganizationEmployeeController : BaseController { diff --git a/BMA.EHR.Placement.Service/.dockerignore b/BMA.EHR.Placement.Service/.dockerignore new file mode 100644 index 00000000..3729ff0c --- /dev/null +++ b/BMA.EHR.Placement.Service/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/BMA.EHR.Placement.Service/.github/workflows/build-local.yaml b/BMA.EHR.Placement.Service/.github/workflows/build-local.yaml new file mode 100644 index 00000000..3a06de72 --- /dev/null +++ b/BMA.EHR.Placement.Service/.github/workflows/build-local.yaml @@ -0,0 +1,46 @@ +# use for local build with act +name: build-local +run-name: build-local ${{ github.actor }} +on: + workflow_dispatch: +env: + REGISTRY: docker.frappet.com + IMAGE_NAME: demo/bma-ehr-metadata-service +jobs: + # act workflow_dispatch -W .github/workflows/build-local.yaml --input IMAGE_VER=test-v6.1 + build-local: + 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='test-vBeta' + 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 load local docker image + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64 + load: true + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest diff --git a/BMA.EHR.Placement.Service/.github/workflows/release.yaml b/BMA.EHR.Placement.Service/.github/workflows/release.yaml new file mode 100644 index 00000000..52f15b20 --- /dev/null +++ b/BMA.EHR.Placement.Service/.github/workflows/release.yaml @@ -0,0 +1,86 @@ +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: ehr/bma-ehr-placement-service + DEPLOY_HOST: frappet.com + COMPOSE_PATH: /home/frappet/docker/bma-ehr-placement + TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 + +jobs: + # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=test-v6.1 -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='test-vBeta' + 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 load local docker image + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64 + push: true + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest + + - name: Reload docker compose + uses: appleboy/ssh-action@v0.1.8 + with: + host: ${{env.DEPLOY_HOST}} + username: frappet + password: ${{ secrets.SSH_PASSWORD }} + port: 22 + script: | + cd "${{env.COMPOSE_PATH}}" + docker-compose pull + docker-compose up -d + echo "${{ steps.gen_ver.outputs.image_ver }}"> success + # - uses: snow-actions/line-notify@v1.1.0 + # if: success() + # with: + # access_token: ${{ env.TOKEN_LINE }} + # message: | + # -Success✅✅✅ + # Image: ${{env.IMAGE_NAME}} + # Version: ${{ github.event.inputs.IMAGE_VER }} + # By: ${{secrets.DOCKER_USER}} + # - uses: snow-actions/line-notify@v1.1.0 + # if: failure() + # with: + # access_token: ${{ env.TOKEN_LINE }} + # message: | + # -Failure❌❌❌ + # Image: ${{env.IMAGE_NAME}} + # Version: ${{ github.event.inputs.IMAGE_VER }} + # By: ${{secrets.DOCKER_USER}} diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementController.cs index 544e5175..f7982e54 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementController.cs @@ -15,10 +15,11 @@ using System.Security.Cryptography; namespace BMA.EHR.Placement.Service.Controllers { - [Route("api/[controller]/placement")] - [ApiController] - [Produces("application/json")] - [Authorize] + [Route("api/v{version:apiVersion}/placement")] + [ApiVersion("1.0")] + [ApiController] + [Produces("application/json")] + [Authorize] [SwaggerTag("ระบบบรรจุ")] public class PlacementController : BaseController { @@ -338,20 +339,44 @@ namespace BMA.EHR.Placement.Service.Controllers [HttpGet("pass/stat/{examId:length(36)}")] public async Task> GetDashboardByPlacement(Guid examId) { - var placement = await _context.Placements - .Where(x => x.Id == examId) - .Select(x => new - { - Total = x.PlacementProfiles.Count(), - UnContain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "UN-CONTAIN").Count(), - PrepareContain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "PREPARE-CONTAIN").Count(), - Contain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "CONTAIN").Count(), - Disclaim = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "DISCLAIM").Count(), - }).FirstOrDefaultAsync(); - if (placement == null) - return Error(GlobalMessages.DataNotFound, 404); + if (PlacementAdmin == true) + { + var placement = await _context.Placements + .Where(x => x.Id == examId) + .Select(x => new + { + Total = x.PlacementProfiles.Count(), + UnContain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "UN-CONTAIN").Count(), + PrepareContain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "PREPARE-CONTAIN").Count(), + Contain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "CONTAIN").Count(), + Disclaim = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "DISCLAIM").Count(), + }).FirstOrDefaultAsync(); + if (placement == null) + return Error(GlobalMessages.DataNotFound, 404); - return Success(placement); + return Success(placement); + } + else + { + var profileOrg = await _context.Profiles.FirstOrDefaultAsync(x => x.KeycloakId == Guid.Parse(UserId ?? "00000000-0000-0000-0000-000000000000")); + if (profileOrg == null) + return Error(GlobalMessages.DataNotFound, 404); + var ocIdList = _documentService.GetAllIdByRoot(profileOrg.OcId); + var placement = await _context.Placements + .Where(x => x.Id == examId) + .Select(x => new + { + Total = x.PlacementProfiles.Where(p => ocIdList.Contains(p.OrganizationPosition.Organization.Id)).Count(), + UnContain = x.PlacementProfiles.Where(p => ocIdList.Contains(p.OrganizationPosition.Organization.Id)).Where(p => p.PlacementStatus.Trim().ToUpper() == "UN-CONTAIN").Count(), + PrepareContain = x.PlacementProfiles.Where(p => ocIdList.Contains(p.OrganizationPosition.Organization.Id)).Where(p => p.PlacementStatus.Trim().ToUpper() == "PREPARE-CONTAIN").Count(), + Contain = x.PlacementProfiles.Where(p => ocIdList.Contains(p.OrganizationPosition.Organization.Id)).Where(p => p.PlacementStatus.Trim().ToUpper() == "CONTAIN").Count(), + Disclaim = x.PlacementProfiles.Where(p => ocIdList.Contains(p.OrganizationPosition.Organization.Id)).Where(p => p.PlacementStatus.Trim().ToUpper() == "DISCLAIM").Count(), + }).FirstOrDefaultAsync(); + if (placement == null) + return Error(GlobalMessages.DataNotFound, 404); + + return Success(placement); + } } [HttpPost("pass/deferment"), DisableRequestSizeLimit] diff --git a/BMA.EHR.Placement.Service/Dockerfile b/BMA.EHR.Placement.Service/Dockerfile index 9b17b3b3..f74d9dcf 100644 --- a/BMA.EHR.Placement.Service/Dockerfile +++ b/BMA.EHR.Placement.Service/Dockerfile @@ -7,8 +7,13 @@ EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /src -COPY ["BMA.EHR.Placement.Service/BMA.EHR.Placement.Service.csproj", "BMA.EHR.Placement.Service/"] -RUN dotnet restore "BMA.EHR.Placement.Service/BMA.EHR.Placement.Service.csproj" + +COPY ["BMA.EHR.Application.csproj", "./BMA.EHR.Application"] +COPY ["BMA.EHR.Domain.csproj", "./BMA.EHR.Domain"] +COPY ["BMA.EHR.Infrastructure.csproj", "./BMA.EHR.Infrastructure"] + +COPY ["BMA.EHR.Placement.Service.csproj", "./BMA.EHR.Placement.Service"] +RUN dotnet restore "./BMA.EHR.Placement.Service/BMA.EHR.Placement.Service.csproj" COPY . . WORKDIR "/src/BMA.EHR.Placement.Service" RUN dotnet build "BMA.EHR.Placement.Service.csproj" -c Release -o /app/build