feat(M08-D): 补后台订单运营

This commit is contained in:
Codex
2026-08-10 11:52:25 +08:00
parent 3502f5b5f7
commit 20a292e4ce
10 changed files with 619 additions and 37 deletions
+24 -22
View File
@@ -32,29 +32,31 @@ export async function registerOrderQueryRoutes(
app: FastifyInstance,
options: OrderQueryRouteOptions
) {
app.get('/app-api/orders', async (request, reply) => {
const auth = await authenticate(request.headers.authorization, options);
const query = listSchema.safeParse(request.query);
if (!auth) return unauthorized(reply, request.traceId);
if (!query.success) return invalid(reply, request.traceId);
return {
code: 0,
data: await options.repository.listMine({ ...auth, ...query.data }),
traceId: request.traceId
};
});
for (const prefix of ['/app-api/orders', '/admin-api/orders', '/app-api/management/orders']) {
app.get(prefix, async (request, reply) => {
const auth = await authenticate(request.headers.authorization, options);
const query = listSchema.safeParse(request.query);
if (!auth) return unauthorized(reply, request.traceId);
if (!query.success) return invalid(reply, request.traceId);
return {
code: 0,
data: await options.repository.listMine({ ...auth, ...query.data }),
traceId: request.traceId
};
});
app.get('/app-api/orders/:orderId', async (request, reply) => {
const auth = await authenticate(request.headers.authorization, options);
const params = paramsSchema.safeParse(request.params);
if (!auth) return unauthorized(reply, request.traceId);
if (!params.success) return invalid(reply, request.traceId);
return handle(reply, request.traceId, async () => ({
code: 0,
data: await options.repository.getMine({ ...auth, orderId: params.data.orderId }),
traceId: request.traceId
}));
});
app.get(`${prefix}/:orderId`, async (request, reply) => {
const auth = await authenticate(request.headers.authorization, options);
const params = paramsSchema.safeParse(request.params);
if (!auth) return unauthorized(reply, request.traceId);
if (!params.success) return invalid(reply, request.traceId);
return handle(reply, request.traceId, async () => ({
code: 0,
data: await options.repository.getMine({ ...auth, orderId: params.data.orderId }),
traceId: request.traceId
}));
});
}
}
async function authenticate(
+19 -13
View File
@@ -27,19 +27,25 @@ export interface OrderStateRouteOptions {
export async function registerOrderStateRoutes(
app: FastifyInstance, options: OrderStateRouteOptions
) {
app.get('/app-api/orders/:orderId/history', async (request, reply) => {
const auth = await authenticate(request.headers.authorization, options);
const params = paramsSchema.safeParse(request.params);
if (!auth) return unauthorized(reply, request.traceId);
if (!params.success) return invalid(reply, request.traceId);
return handle(reply, request.traceId, async () => ({
code: 0,
data: await options.repository.history(
auth.tenantId, auth.userId, params.data.orderId, auth.access
),
traceId: request.traceId
}));
});
for (const path of [
'/app-api/orders/:orderId/history',
'/admin-api/orders/:orderId/history',
'/app-api/management/orders/:orderId/history'
]) {
app.get(path, async (request, reply) => {
const auth = await authenticate(request.headers.authorization, options);
const params = paramsSchema.safeParse(request.params);
if (!auth) return unauthorized(reply, request.traceId);
if (!params.success) return invalid(reply, request.traceId);
return handle(reply, request.traceId, async () => ({
code: 0,
data: await options.repository.history(
auth.tenantId, auth.userId, params.data.orderId, auth.access
),
traceId: request.traceId
}));
});
}
app.post('/app-api/orders/:orderId/cancel', async (request, reply) => {
const auth = await authenticate(request.headers.authorization, options);