From a00e2d8280eb256c3008e09b367f3b5c8237901a Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 21 Aug 2026 17:54:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E6=89=93=E6=89=8B=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E4=BB=93=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/repositories/worker-platform/index.ts | 1 + .../worker-platform/worker-level-repo.ts | 69 ++++++++++++++++ .../worker-platform/worker-repo.ts | 81 ++----------------- 3 files changed, 78 insertions(+), 73 deletions(-) create mode 100644 apps/backend/src/repositories/worker-platform/worker-level-repo.ts diff --git a/apps/backend/src/repositories/worker-platform/index.ts b/apps/backend/src/repositories/worker-platform/index.ts index e3cabca8..8d42af8b 100644 --- a/apps/backend/src/repositories/worker-platform/index.ts +++ b/apps/backend/src/repositories/worker-platform/index.ts @@ -2,6 +2,7 @@ export * from './types.js' export * from './shared.js' export * from './worker-repo.js' export * from './worker-session-repo.js' +export * from './worker-level-repo.js' export * from './work-order-repo.js' export * from './work-order-event-repo.js' export * from './work-order-share-repo.js' diff --git a/apps/backend/src/repositories/worker-platform/worker-level-repo.ts b/apps/backend/src/repositories/worker-platform/worker-level-repo.ts new file mode 100644 index 00000000..ac462d1b --- /dev/null +++ b/apps/backend/src/repositories/worker-platform/worker-level-repo.ts @@ -0,0 +1,69 @@ +import { query } from '../../db/client.js' +import type { WorkerLevelRow } from './types.js' + +export async function getWorkerLevelByKey(levelKey: string): Promise { + const result = await query( + 'SELECT * FROM worker_levels WHERE level_key = $1 LIMIT 1', + [String(levelKey || '').trim()], + ) + return result.rows[0] || null +} + +export async function getWorkerLevelById(levelId: number | string): Promise { + const result = await query('SELECT * FROM worker_levels WHERE id = $1 LIMIT 1', [ + Number(levelId), + ]) + return result.rows[0] || null +} + +export async function listWorkerLevels(): Promise { + const result = await query( + 'SELECT * FROM worker_levels ORDER BY sort_order ASC, id ASC', + ) + return result.rows +} + +export async function upsertWorkerLevel(input: { + levelKey: string + name: string + sortOrder: number + status: string + permissionJson: string + now: string +}): Promise { + const result = await query( + `INSERT INTO worker_levels ( + level_key, name, sort_order, status, permission_json, created_at, updated_at + ) VALUES ($1, $2, $3, $4, $5::jsonb, $6, $7) + ON CONFLICT (level_key) DO UPDATE + SET name = EXCLUDED.name, sort_order = EXCLUDED.sort_order, status = EXCLUDED.status, + permission_json = EXCLUDED.permission_json, updated_at = EXCLUDED.updated_at + RETURNING *`, + [ + input.levelKey, + input.name, + input.sortOrder, + input.status, + input.permissionJson, + input.now, + input.now, + ], + ) + return result.rows[0] || null +} + +export async function countWorkerLevelUsages(levelId: number | string): Promise { + const result = await query<{ total: number }>( + 'SELECT COUNT(*)::int AS total FROM worker_users WHERE level_id = $1', + [Number(levelId)], + ) + return Number(result.rows[0]?.total || 0) +} + +export async function deleteWorkerLevel(levelId: number | string): Promise<{ deleted: boolean }> { + const result = await query<{ id: number }>( + 'DELETE FROM worker_levels WHERE id = $1 RETURNING id', + [Number(levelId)], + ) + return { deleted: Boolean(result.rows[0]) } +} diff --git a/apps/backend/src/repositories/worker-platform/worker-repo.ts b/apps/backend/src/repositories/worker-platform/worker-repo.ts index ed4f089f..e9a6a7d7 100644 --- a/apps/backend/src/repositories/worker-platform/worker-repo.ts +++ b/apps/backend/src/repositories/worker-platform/worker-repo.ts @@ -6,7 +6,6 @@ import type { ListInput, WalletLedgerListInput, WorkerFinanceRequestRow, - WorkerLevelRow, WorkerUserRow, WorkerWithdrawalAccountRow, WorkerWalletLedgerRow, @@ -68,78 +67,14 @@ export { type CreateWorkerSessionResult, } from './worker-session-repo.js' -export async function getWorkerLevelByKey(levelKey: string): Promise { - const result = await query( - 'SELECT * FROM worker_levels WHERE level_key = $1 LIMIT 1', - [String(levelKey || '').trim()], - ) - return result.rows[0] || null -} - -export async function getWorkerLevelById(levelId: number | string): Promise { - const result = await query('SELECT * FROM worker_levels WHERE id = $1 LIMIT 1', [ - Number(levelId), - ]) - return result.rows[0] || null -} - -export async function listWorkerLevels(): Promise { - const result = await query( - 'SELECT * FROM worker_levels ORDER BY sort_order ASC, id ASC', - ) - return result.rows -} - -export async function upsertWorkerLevel(input: { - levelKey: string - name: string - sortOrder: number - status: string - permissionJson: string - now: string -}): Promise { - const result = await query( - ` - INSERT INTO worker_levels ( - level_key, name, sort_order, status, permission_json, created_at, updated_at - ) VALUES ($1, $2, $3, $4, $5::jsonb, $6, $7) - ON CONFLICT (level_key) DO UPDATE - SET - name = EXCLUDED.name, - sort_order = EXCLUDED.sort_order, - status = EXCLUDED.status, - permission_json = EXCLUDED.permission_json, - updated_at = EXCLUDED.updated_at - RETURNING * - `, - [ - input.levelKey, - input.name, - input.sortOrder, - input.status, - input.permissionJson, - input.now, - input.now, - ], - ) - return result.rows[0] || null -} - -export async function countWorkerLevelUsages(levelId: number | string): Promise { - const result = await query<{ total: number }>( - 'SELECT COUNT(*)::int AS total FROM worker_users WHERE level_id = $1', - [Number(levelId)], - ) - return Number(result.rows[0]?.total || 0) -} - -export async function deleteWorkerLevel(levelId: number | string): Promise<{ deleted: boolean }> { - const result = await query<{ id: number }>( - 'DELETE FROM worker_levels WHERE id = $1 RETURNING id', - [Number(levelId)], - ) - return { deleted: Boolean(result.rows[0]) } -} +export { + countWorkerLevelUsages, + deleteWorkerLevel, + getWorkerLevelById, + getWorkerLevelByKey, + listWorkerLevels, + upsertWorkerLevel, +} from './worker-level-repo.js' export async function getWorkerUserByUsername(username: string): Promise { const result = await query(