Project

General

Profile

Actions

Improvement #172

open
CN PP

add-alive-endpoint-update-api-versioning-global-response-and-update-env-uat

Improvement #172: add-alive-endpoint-update-api-versioning-global-response-and-update-env-uat

Added by Chakkaphon Noinang (Jay) 25 days ago. Updated 14 days ago.

Status:
New
Priority:
Normal
Start date:
12/25/2025
Due date:
% Done:

0%

Estimated time:
Environment:
Develop

Description

Bff

  • 3000 = main (new) พี่ไปร์ท
  • 3001 = masterdata
  • 3002 = jobpost
  • 3003 = candidates
  • 3004 = users

Process

  • 4002 = jobpost พี่ไปร์ท
  • 4003 = candidates พี่ไปร์ท
  • 4006 = jobapplication พี่ไปร์ท
  • 4007 = batch พี่ไปร์ท

System

  • 5001 = masterdata พี่ไปร์ท
  • 5002 = jobpost พี่ไปร์ท
  • 5003 = candidates พี่เจ
  • 5004 = users พี่ไปร์ท
  • 5005 = document พี่ไปร์ท
  • 5006 = jobapplication พี่เจ
  • 5007 = batch พี่เจ
  • 5008 = candidate-consumer พี่ไปร์ท
  • 5011 = job-appointment ก้อง
  • 5012 = notification ก้อง
  • xxxx = jobpost-consumer พี่ไปร์ท

==================

Dockerfile please backup name (Dockerfile.backup)

Dockerfile

# ----------------------------------------------------
# Stage 1: Build the Application
# ----------------------------------------------------
FROM node:24.11.0-alpine3.22 AS builder

# Install build dependencies in a single layer
RUN apk update && \
    apk add --no-cache \
    tzdata \
    busybox-extras \
    openssl \
    libssl3 \
    libc6-compat && \
    cp /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \
    rm -rf /var/cache/apk/*

WORKDIR /app

# Copy package files for dependency installation
COPY package*.json ./

# Install all dependencies (including devDependencies for build)
RUN npm install && \
    npm cache clean --force

# Copy source code
COPY . .

# Build application
RUN npm run build
# ----------------------------------------------------
# Stage 2: Production Image (Minimal & Secure)
# ----------------------------------------------------
FROM node:24.11.0-alpine3.22 AS production

# Install runtime dependencies
RUN apk update && \
    apk add --no-cache \
    tzdata \
    openssl \
    libssl3 \
    libc6-compat \
    dumb-init && \
    cp /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \
    rm -rf /var/cache/apk/*

WORKDIR /app

# Set NODE_ENV
ARG NODE_ENV=prod
ENV NODE_ENV=${NODE_ENV}

# Copy package files
COPY --from=builder /app/package*.json ./

# Install production dependencies only
RUN npm install --omit=dev && \
    npm cache clean --force

# Copy compiled application
COPY --from=builder /app/dist/src ./dist
COPY --from=builder /app/dist/config ./config
COPY --from=builder /app/env ./env

# Set ownership
RUN chown -R node:node /app

# Use non-root user
USER node

# Set port configuration
ARG APPLICATION_PORT=80
ENV PORT=${APPLICATION_PORT}

EXPOSE ${APPLICATION_PORT}

# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
    CMD node -e "require('http').get('http://localhost:' + process.env.PORT + '/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"

# Use dumb-init for proper signal handling
CMD ["dumb-init", "node", "dist/main"]

package.json

เพิ่ม

"start:pre": "cross-env NODE_ENV=pre nest start",

config/env.ts

แก้เป็น

export enum ENV {
  DEV = "dev",
  UAT = "uat",
  SIT = "sit",
  PROD = "prod",
  PRE = "pre",
}

env.dev

ลบ prefix ให้เป็นตามในตัวอย่าง

SYSTEM_JOB_POST_BASE_URL=http://localhost:5002/v1

env.uat

แก้ port=80

แก้ตาม prefix ให้ตรงตามตัวอย่าง

SYSTEM_JOB_POST_BASE_URL=http://hrr-system-jobpost-svc.development.svc.cluster.local

env.sit

copy env.uat มาเป็นตัวตั้งและเปลี่ยน NODE_ENV=sit

env.pre

copy env.uat มาเป็นตัวตั้งและเปลี่ยน NODE_ENV=pre

env.prod

copy env.uat มาเป็นตัวตั้งและเปลี่ยน NODE_ENV=prod

main.ts

enableCors ตามตัวอย่าง

    app.enableCors({
      origin: CORS_ORIGIN,
      credentials: false,
      methods: ["GET", "POST", "OPTIONS"],
      allowedHeaders: [
        "Content-Type",
        "Authorization",
        "X-Request-ID",
        "sender",
        "refer",
        "forward",
        "senddate",
        "clientid",
      ],
      exposedHeaders: ["X-Request-ID"],
    });

ลบ

app.setGlobalPrefix(`${API_PREFIX}/${API_VERSION}`);

เพิ่ม

    // Enable API versioning
    app.enableVersioning({
      type: VersioningType.URI,
      defaultVersion: "1",
      prefix: "v",
    });

modules/health/controllers/health.controller.ts

แก้ตามตัวอย่างทั้งไฟล์

import { Controller, Get, VERSION_NEUTRAL } from "@nestjs/common";
import { SkipEnvelope } from "@shared/http/skip-envelope.decorator";

@Controller({ version: VERSION_NEUTRAL })
export class HealthController {
  @Get("health")
  @SkipEnvelope()
  health(): { status: string } {
    return { status: "ok" };
  }

  @Get("alive")
  @SkipEnvelope()
  alive(): { status: string } {
    return { status: "ok" };
  }
}

ถ้าไม่มีไฟล์ @shared/http/skip-envelope.decorator.ts ให้เพิ่ม

import { SetMetadata } from "@nestjs/common";
export const SKIP_ENVELOPE_KEY = "skipEnvelope";
export const SkipEnvelope = () => SetMetadata(SKIP_ENVELOPE_KEY, true);

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #1

  • Subject changed from add-alive-endpoint-and-update-versioning-response-uat-env to add-alive-endpoint-update-api-versioning-global-response-and-update-uat-env

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #2

  • Subject changed from add-alive-endpoint-update-api-versioning-global-response-and-update-uat-env to add-alive-endpoint-update-api-versioning-global-response-and-update-env-uat

SR Updated by Supakorn Roekratchaneekorn (Gong) 25 days ago Actions #3

  • 3000 = main (new) พี่ไปร์ท
  • 3001 = masterdata
  • 5001 = masterdata
  • 3002 = jobpost
  • 5002 = jobpost
  • 3003 = candidates
  • 4003 = candidates
  • 5003 = candidates
  • 3004 = users
  • 5004 = users
  • 5005 = document
  • 4006 = jobapplication
  • 5006 = jobapplication
  • 4007 = batch
  • 5007 = batch
  • 5008 = candidate-consumer
  • 5009 = complete-candidate-consumer
  • 5010 = recruit-dlq-consumer
  • 5011 = job-appointment
  • 5012 = notification

SR Updated by Supakorn Roekratchaneekorn (Gong) 25 days ago Actions #4

  • Description updated (diff)

SR Updated by Supakorn Roekratchaneekorn (Gong) 25 days ago Actions #5

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #6

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #7

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #8

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #9

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #10

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #11

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #12

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #13

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #14

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 25 days ago Actions #15

  • Description updated (diff)

SR Updated by Supakorn Roekratchaneekorn (Gong) 25 days ago Actions #16

  • Description updated (diff)

SR Updated by Supakorn Roekratchaneekorn (Gong) 25 days ago Actions #17

  • Description updated (diff)

SR Updated by Supakorn Roekratchaneekorn (Gong) 25 days ago Actions #18

  • Description updated (diff)

SR Updated by Supakorn Roekratchaneekorn (Gong) 25 days ago Actions #19

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #20

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #21

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #22

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #23

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #24

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #25

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #26

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 25 days ago Actions #27

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 14 days ago Actions #28

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 14 days ago Actions #29

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 14 days ago Actions #30

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 14 days ago Actions #31

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 14 days ago Actions #32

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 14 days ago Actions #33

  • Description updated (diff)

SR Updated by Supakorn Roekratchaneekorn (Gong) 14 days ago Actions #34

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 14 days ago Actions #35

  • Description updated (diff)

CN Updated by Chakkaphon Noinang (Jay) 14 days ago Actions #36

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 14 days ago Actions #37

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 14 days ago Actions #38

  • Description updated (diff)

SR Updated by Supakorn Roekratchaneekorn (Gong) 14 days ago Actions #39

  • Description updated (diff)

PP Updated by Papassorn Phopong (Pipe) 14 days ago Actions #40

  • Description updated (diff)
Actions

Also available in: PDF Atom