拆分打手等级仓储

This commit is contained in:
yml2213
2026-08-21 17:54:13 +08:00
parent 01bfb53011
commit a00e2d8280
3 changed files with 78 additions and 73 deletions
@@ -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'
@@ -0,0 +1,69 @@
import { query } from '../../db/client.js'
import type { WorkerLevelRow } from './types.js'
export async function getWorkerLevelByKey(levelKey: string): Promise<WorkerLevelRow | null> {
const result = await query<WorkerLevelRow>(
'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<WorkerLevelRow | null> {
const result = await query<WorkerLevelRow>('SELECT * FROM worker_levels WHERE id = $1 LIMIT 1', [
Number(levelId),
])
return result.rows[0] || null
}
export async function listWorkerLevels(): Promise<WorkerLevelRow[]> {
const result = await query<WorkerLevelRow>(
'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<WorkerLevelRow | null> {
const result = await query<WorkerLevelRow>(
`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<number> {
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]) }
}
@@ -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<WorkerLevelRow | null> {
const result = await query<WorkerLevelRow>(
'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<WorkerLevelRow | null> {
const result = await query<WorkerLevelRow>('SELECT * FROM worker_levels WHERE id = $1 LIMIT 1', [
Number(levelId),
])
return result.rows[0] || null
}
export async function listWorkerLevels(): Promise<WorkerLevelRow[]> {
const result = await query<WorkerLevelRow>(
'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<WorkerLevelRow | null> {
const result = await query<WorkerLevelRow>(
`
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<number> {
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<WorkerUserRow | null> {
const result = await query<WorkerUserRow>(