team-members.controller.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import { FastifyRequest, FastifyReply, FastifyInstance } from 'fastify'
  2. import { TeamMembersService } from '../services/team-members.service'
  3. import {
  4. CreateTeamMembersBody,
  5. UpdateTeamMembersBody,
  6. ListTeamMembersQuery,
  7. TeamMembersParams,
  8. UpdateRevenueBody
  9. } from '../dto/team-members.dto'
  10. import { UserRole } from '../entities/user.entity'
  11. import { TeamService } from '../services/team.service'
  12. export class TeamMembersController {
  13. private teamMembersService: TeamMembersService
  14. private teamService: TeamService
  15. constructor(app: FastifyInstance) {
  16. this.teamMembersService = new TeamMembersService(app)
  17. this.teamService = new TeamService(app)
  18. }
  19. async create(request: FastifyRequest<{ Body: CreateTeamMembersBody }>, reply: FastifyReply) {
  20. try {
  21. const user = request.user
  22. if (!user) {
  23. return reply.code(403).send({ message: '用户未登录' })
  24. }
  25. if (user.role === UserRole.TEAM) {
  26. const team = await this.teamService.findByUserId(user.id)
  27. request.body.teamId = team.id
  28. request.body.teamUserId = user.id
  29. }
  30. const teamMember = await this.teamMembersService.create(request.body, request.user.id)
  31. return reply.code(201).send(teamMember)
  32. } catch (error) {
  33. return reply.code(500).send({ message: '创建团队成员失败', error })
  34. }
  35. }
  36. async findById(request: FastifyRequest<{ Params: TeamMembersParams }>, reply: FastifyReply) {
  37. try {
  38. const { id } = request.params
  39. const teamMember = await this.teamMembersService.findById(id)
  40. return reply.send(teamMember)
  41. } catch (error) {
  42. return reply.code(404).send({ message: '团队成员不存在' })
  43. }
  44. }
  45. async findAll(request: FastifyRequest<{ Querystring: ListTeamMembersQuery }>, reply: FastifyReply) {
  46. try {
  47. const user = request.user
  48. if (!user) {
  49. return reply.code(403).send({ message: '用户未登录' })
  50. }
  51. if (user.role === UserRole.TEAM) {
  52. const team = await this.teamService.findByUserId(user.id)
  53. request.query.teamId = team.id
  54. }
  55. const result = await this.teamMembersService.findAll(request.query)
  56. return reply.send(result)
  57. } catch (error) {
  58. return reply.code(500).send({ message: '获取团队成员列表失败', error })
  59. }
  60. }
  61. async update(
  62. request: FastifyRequest<{ Params: TeamMembersParams; Body: UpdateTeamMembersBody }>,
  63. reply: FastifyReply
  64. ) {
  65. try {
  66. const { id } = request.params
  67. const updateData = { ...request.body, id }
  68. try {
  69. await this.teamMembersService.findById(id)
  70. } catch (error) {
  71. return reply.code(404).send({ message: '团队成员不存在' })
  72. }
  73. const updatedMember = await this.teamMembersService.update(updateData)
  74. return reply.send(updatedMember)
  75. } catch (error) {
  76. return reply.code(500).send({ message: '更新团队成员失败', error })
  77. }
  78. }
  79. async delete(request: FastifyRequest<{ Params: TeamMembersParams }>, reply: FastifyReply) {
  80. try {
  81. const { id } = request.params
  82. try {
  83. await this.teamMembersService.findById(id)
  84. } catch (error) {
  85. return reply.code(404).send({ message: '团队成员不存在' })
  86. }
  87. await this.teamMembersService.delete(id)
  88. return reply.send({ message: '团队成员已删除' })
  89. } catch (error) {
  90. return reply.code(500).send({ message: '删除团队成员失败', error })
  91. }
  92. }
  93. async updateRevenue(request: FastifyRequest<{ Body: UpdateRevenueBody }>, reply: FastifyReply) {
  94. try {
  95. const { id, amount, type } = request.body
  96. try {
  97. await this.teamMembersService.findById(id)
  98. } catch (error) {
  99. return reply.code(404).send({ message: '团队成员不存在' })
  100. }
  101. const updatedMember = await this.teamMembersService.updateRevenue(id, amount, type)
  102. return reply.send(updatedMember)
  103. } catch (error) {
  104. return reply.code(500).send({ message: '更新团队成员收入失败', error })
  105. }
  106. }
  107. async resetTodayRevenue(request: FastifyRequest, reply: FastifyReply) {
  108. try {
  109. await this.teamMembersService.resetTodayRevenue()
  110. return reply.send({ message: '今日收入已重置' })
  111. } catch (error) {
  112. return reply.code(500).send({ message: '重置今日收入失败', error })
  113. }
  114. }
  115. async getStatistics(request: FastifyRequest, reply: FastifyReply) {
  116. try {
  117. const statistics = await this.teamMembersService.getStatistics()
  118. return reply.send(statistics)
  119. } catch (error) {
  120. return reply.code(500).send({ message: '获取统计数据失败', error })
  121. }
  122. }
  123. }