From 8f2a3a6e34dede93668f5cb37118ea3fadafa3fc Mon Sep 17 00:00:00 2001 From: LaurenceYang1218 Date: Mon, 26 May 2025 22:18:14 +0800 Subject: [PATCH 1/7] update run.sh --- run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run.sh b/run.sh index 6381b59..613f56e 100644 --- a/run.sh +++ b/run.sh @@ -5,5 +5,5 @@ set -e npm run db:migrate & PID=$! wait $PID -npm run local & PID=$! +node ./build/server.js & PID=$! wait $PID \ No newline at end of file From 2fb2eb5bd97ce7a928297a3c2747a79e5c5cdbbe Mon Sep 17 00:00:00 2001 From: LaurenceYang1218 Date: Mon, 26 May 2025 22:59:08 +0800 Subject: [PATCH 2/7] add getIPAddress by machineId filter --- src/application/services/ipAddress.service.ts | 1 + src/persistence/drizzle/ipAddress.persistence.ts | 3 +++ src/presentation/server/controllers/ipAddress.controller.ts | 1 + 3 files changed, 5 insertions(+) diff --git a/src/application/services/ipAddress.service.ts b/src/application/services/ipAddress.service.ts index f691538..b906846 100644 --- a/src/application/services/ipAddress.service.ts +++ b/src/application/services/ipAddress.service.ts @@ -9,6 +9,7 @@ export interface IPAddressQueryParams { address?: string, status?: IPAddressStatus, poolId?: number, + machineId?: number, sortBy?: IPAddressSortBy, sortOrder?: SortOrder } diff --git a/src/persistence/drizzle/ipAddress.persistence.ts b/src/persistence/drizzle/ipAddress.persistence.ts index 1fbda62..347c2c0 100644 --- a/src/persistence/drizzle/ipAddress.persistence.ts +++ b/src/persistence/drizzle/ipAddress.persistence.ts @@ -20,6 +20,9 @@ function buildIPAddressQueryFilters(queryParams?: IPAddressQueryParams): SQL[] { if (queryParams.poolId) { filters.push(eq(ipAddressTable.poolId, queryParams.poolId)) } + if (queryParams.machineId) { + filters.push(eq(ipAddressTable.machineId, queryParams.machineId)) + } return filters } diff --git a/src/presentation/server/controllers/ipAddress.controller.ts b/src/presentation/server/controllers/ipAddress.controller.ts index 8e90d99..37416a3 100644 --- a/src/presentation/server/controllers/ipAddress.controller.ts +++ b/src/presentation/server/controllers/ipAddress.controller.ts @@ -10,6 +10,7 @@ export async function getIPAddresses(req: Request, res: Response) { address: req.query.address as string, status: req.query.status as IPAddressStatus, poolId: Number(req.query.poolId), + machineId: Number(req.query.machineId), sortBy: req.query.sortBy as ipAddressService.IPAddressSortBy, sortOrder: req.query.sortOrder as SortOrder } From ec056d7e4fdb6b5f09be2cdf046325043064ee69 Mon Sep 17 00:00:00 2001 From: LaurenceYang1218 Date: Mon, 26 May 2025 23:14:58 +0800 Subject: [PATCH 3/7] remove getIPAddressByMachineId in persistence layer --- src/persistence/drizzle/ipAddress.persistence.ts | 9 --------- src/persistence/repositories/ipAddress.repository.ts | 1 - tests/unit/application/ipAddress.service.test.ts | 1 - tests/unit/application/machine.service.test.ts | 2 +- 4 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/persistence/drizzle/ipAddress.persistence.ts b/src/persistence/drizzle/ipAddress.persistence.ts index 347c2c0..ab7129d 100644 --- a/src/persistence/drizzle/ipAddress.persistence.ts +++ b/src/persistence/drizzle/ipAddress.persistence.ts @@ -81,15 +81,6 @@ export class IPAddressDrizzleRepository implements IIPAddressRepository { return ipAddress as IIPAddress } - async getIPAddressByMachineId(machineId: number) { - const [ipAddress] = await db - .select() - .from(ipAddressTable) - .where(eq(ipAddressTable.machineId, machineId)) - - return ipAddress as IIPAddress - } - async createIPAddress(ipAddress: IIPAddress) { const [createdIPAddress] = await db .insert(ipAddressTable) diff --git a/src/persistence/repositories/ipAddress.repository.ts b/src/persistence/repositories/ipAddress.repository.ts index e3523d2..71badb8 100644 --- a/src/persistence/repositories/ipAddress.repository.ts +++ b/src/persistence/repositories/ipAddress.repository.ts @@ -4,7 +4,6 @@ import { IPAddressQueryParams } from "../../application/services/ipAddress.servi export interface IIPAddressRepository { getIPAddresses(ipAddressQueryParams?: IPAddressQueryParams): Promise getIPAddressById(id: number): Promise - getIPAddressByMachineId(machineId: number): Promise createIPAddress(ipAddress: IIPAddress): Promise updateIPAddress(id: number, ipAddress: Partial): Promise deleteIPAddress(id: number): Promise diff --git a/tests/unit/application/ipAddress.service.test.ts b/tests/unit/application/ipAddress.service.test.ts index c490b83..e0dab1d 100644 --- a/tests/unit/application/ipAddress.service.test.ts +++ b/tests/unit/application/ipAddress.service.test.ts @@ -8,7 +8,6 @@ const mockIpAddressRepo: jest.Mocked = { createIPAddress: jest.fn(), updateIPAddress: jest.fn(), deleteIPAddress: jest.fn(), - getIPAddressByMachineId: jest.fn() } beforeEach(() => { diff --git a/tests/unit/application/machine.service.test.ts b/tests/unit/application/machine.service.test.ts index ef9bd1d..f6a2872 100644 --- a/tests/unit/application/machine.service.test.ts +++ b/tests/unit/application/machine.service.test.ts @@ -88,7 +88,7 @@ describe("machineService - createMachine", () => { // Mock dependencies required by createMachine const mockIpAddressRepo = { - getIPAddresses: jest.fn().mockResolvedValue([]), // 新增这一行 + getIPAddresses: jest.fn().mockResolvedValue([]), getIPAddressesByPoolId: jest.fn().mockResolvedValue([]), updateIPAddress: jest.fn() } as any From 3c3f1cd1577085b096d5ad1f8117d4ba596bc5a1 Mon Sep 17 00:00:00 2001 From: LaurenceYang1218 Date: Mon, 26 May 2025 23:23:20 +0800 Subject: [PATCH 4/7] remove getIPAddressByMachineId --- src/application/services/machine.service.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/application/services/machine.service.ts b/src/application/services/machine.service.ts index 3e81401..d5515ca 100644 --- a/src/application/services/machine.service.ts +++ b/src/application/services/machine.service.ts @@ -112,9 +112,11 @@ export async function deleteMachine( ipAddressRepo: IIPAddressRepository, id: number ) { - const ipAddress = await ipAddressRepo.getIPAddressByMachineId(id) - if (ipAddress.id) { - await ipAddressRepo.updateIPAddress(ipAddress.id, { + const [ipAddress] = await ipAddressRepo.getIPAddresses({ + machineId: id + }) + if (ipAddress!.id) { + await ipAddressRepo.updateIPAddress(ipAddress!.id, { status: IPAddressStatus.Released, releasedAt: new Date() }) From 4605025d6723bb1bcd966bc06af98a6ccf6e75cc Mon Sep 17 00:00:00 2001 From: LaurenceYang1218 Date: Mon, 26 May 2025 23:48:36 +0800 Subject: [PATCH 5/7] update cors --- src/server.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server.ts b/src/server.ts index e569acd..f8c8ce8 100644 --- a/src/server.ts +++ b/src/server.ts @@ -29,7 +29,11 @@ const server = express() // Add a list of allowed origins. // If you have more origins you would like to add, you can add them to the array below. -const allowedOrigins = ["http://localhost:3000", "http://127.0.0.1:3000"] +const allowedOrigins = [ + "http://localhost:3000", + "http://127.0.0.1:3000", + "https://dc-manager-frontend-703684363125.asia-east1.run.app/" +] const options: cors.CorsOptions = { origin: allowedOrigins, From 8487355fd5ad47ebefc6bb438590cd03549f9364 Mon Sep 17 00:00:00 2001 From: LaurenceYang1218 Date: Mon, 26 May 2025 23:57:29 +0800 Subject: [PATCH 6/7] update test --- tests/unit/application/machine.service.test.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/unit/application/machine.service.test.ts b/tests/unit/application/machine.service.test.ts index f6a2872..016398c 100644 --- a/tests/unit/application/machine.service.test.ts +++ b/tests/unit/application/machine.service.test.ts @@ -1,6 +1,8 @@ import * as machineService from "../../../src/application/services/machine.service" import { IMachineRepository } from "../../../src/persistence/repositories/machine.repository" import { IMachine, MachineStatus } from "../../../src/domain/machine" +import { getIPAddresses } from "../../../src/application/services/ipAddress.service" +import { IPAddressStatus } from "../../../src/domain/ipAddress" const mockMachineRepo: jest.Mocked = { getMachines: jest.fn(), @@ -154,7 +156,11 @@ describe("machineService - deleteMachine", () => { // Mock ipAddressRepo with required methods const mockIpAddressRepo = { - getIPAddressByMachineId: jest.fn().mockResolvedValue({}), + getIPAddresses: jest.fn().mockResolvedValue([{ + id: 123, + machineId: 1, + status: IPAddressStatus.Allocated + }]), updateIPAddress: jest.fn() } as any From 2ff566beaec3ce8bd32e3bcaf70b8991b8b20133 Mon Sep 17 00:00:00 2001 From: LaurenceYang1218 Date: Tue, 27 May 2025 00:30:37 +0800 Subject: [PATCH 7/7] update cors --- src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server.ts b/src/server.ts index f8c8ce8..f6e89e8 100644 --- a/src/server.ts +++ b/src/server.ts @@ -32,7 +32,7 @@ const server = express() const allowedOrigins = [ "http://localhost:3000", "http://127.0.0.1:3000", - "https://dc-manager-frontend-703684363125.asia-east1.run.app/" + "https://dc-manager-frontend-703684363125.asia-east1.run.app" ] const options: cors.CorsOptions = {