member.controller.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import Router from '@koa/router';
  2. import { Context } from 'koa';
  3. import * as MemberService from './member.service';
  4. import { BadRequestError, NotFoundError } from '../../middleware/errorHandler';
  5. import { authMiddleware } from '../../middleware/auth';
  6. const router = new Router();
  7. // 获取会员权益信息
  8. router.get('/benefits', async (ctx: Context) => {
  9. const benefits = MemberService.getMemberBenefits();
  10. ctx.body = {
  11. code: 0,
  12. message: 'success',
  13. data: benefits,
  14. };
  15. });
  16. // 获取用户会员状态
  17. router.get('/status', authMiddleware, async (ctx: Context) => {
  18. const userId = ctx.state.user.userId;
  19. const status = await MemberService.getMemberStatus(userId);
  20. ctx.body = {
  21. code: 0,
  22. message: 'success',
  23. data: status,
  24. };
  25. });
  26. // 创建订单
  27. router.post('/order', authMiddleware, async (ctx: Context) => {
  28. const userId = ctx.state.user.userId;
  29. const { productType } = ctx.request.body as { productType: 'monthly' | 'yearly' };
  30. if (!['monthly', 'yearly'].includes(productType)) {
  31. throw new BadRequestError('无效的产品类型');
  32. }
  33. const result = await MemberService.createOrder(userId, productType);
  34. ctx.body = {
  35. code: 0,
  36. message: '订单创建成功',
  37. data: result,
  38. };
  39. });
  40. // 模拟支付(仅开发环境)
  41. router.post('/pay/mock', authMiddleware, async (ctx: Context) => {
  42. if (process.env.NODE_ENV === 'production') {
  43. throw new BadRequestError('生产环境不可用');
  44. }
  45. const userId = ctx.state.user.userId;
  46. const { orderNo } = ctx.request.body as { orderNo: string };
  47. if (!orderNo) {
  48. throw new BadRequestError('订单号不能为空');
  49. }
  50. const result = await MemberService.mockPaymentSuccess(orderNo, userId);
  51. ctx.body = {
  52. code: 0,
  53. message: '支付成功',
  54. data: result,
  55. };
  56. });
  57. // 获取订单列表
  58. router.get('/orders', authMiddleware, async (ctx: Context) => {
  59. const userId = ctx.state.user.userId;
  60. const { page = 1, pageSize = 10 } = ctx.query as { page?: string; pageSize?: string };
  61. const result = await MemberService.getOrders(
  62. userId,
  63. Number(page) || 1,
  64. Number(pageSize) || 10
  65. );
  66. ctx.body = {
  67. code: 0,
  68. message: 'success',
  69. data: result,
  70. };
  71. });
  72. export default router;