Эх сурвалжийг харах

更新团队创建逻辑,支持通过用户ID创建团队并添加密码字段,同时新增团队角色枚举。

wuyi 4 сар өмнө
parent
commit
cbe50be401

+ 1 - 1
src/controllers/team.controller.ts

@@ -17,7 +17,7 @@ export class TeamController {
 
   async create(request: FastifyRequest<{ Body: CreateTeamBody }>, reply: FastifyReply) {
     try {
-      const team = await this.teamService.create(request.body)
+      const team = await this.teamService.create(request.body, request.user.id)
       return reply.code(201).send(team)
     } catch (error) {
       return reply.code(500).send({ message: '创建团队失败', error })

+ 1 - 0
src/dto/team.dto.ts

@@ -6,6 +6,7 @@ export interface CreateTeamBody {
   totalRevenue?: number
   todayRevenue?: number
   commissionRate?: number
+  password?: string
 }
 
 export interface UpdateTeamBody {

+ 1 - 0
src/entities/user.entity.ts

@@ -2,6 +2,7 @@ import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateCol
 
 export enum UserRole {
   ADMIN = 'admin',
+  TEAM = 'team',
   USER = 'user'
 }
 

+ 23 - 7
src/services/team.service.ts

@@ -3,17 +3,33 @@ import { FastifyInstance } from 'fastify'
 import { Team } from '../entities/team.entity'
 import { PaginationResponse } from '../dto/common.dto'
 import { CreateTeamBody, UpdateTeamBody, ListTeamQuery } from '../dto/team.dto'
+import { UserService } from './user.service'
+import { UserRole } from '../entities/user.entity'
 
 export class TeamService {
   private teamRepository: Repository<Team>
+  private userService: UserService
 
   constructor(app: FastifyInstance) {
     this.teamRepository = app.dataSource.getRepository(Team)
+    this.userService = new UserService(app)
   }
 
-  async create(data: CreateTeamBody): Promise<Team> {
-    const team = this.teamRepository.create(data)
-    return this.teamRepository.save(team)
+  async create(data: CreateTeamBody, creatorId: number): Promise<Team> {
+    const { password, ...teamData } = data
+
+    const existingUser = await this.userService.findByName(teamData.name)
+    if (existingUser) {
+      throw new Error('团队已存在')
+    }
+
+    const team = this.teamRepository.create(teamData)
+    const savedTeam = await this.teamRepository.save(team)
+
+    const userPassword = password || 'password123'
+    await this.userService.create(userPassword, teamData.name, UserRole.TEAM, creatorId)
+
+    return savedTeam
   }
 
   async findById(id: number): Promise<Team> {
@@ -22,9 +38,9 @@ export class TeamService {
 
   async findAll(query: ListTeamQuery): Promise<PaginationResponse<Team>> {
     const { page, size, name } = query
-    
+
     const where: any = {}
-    
+
     if (name) {
       where.name = Like(`%${name}%`)
     }
@@ -58,13 +74,13 @@ export class TeamService {
 
   async updateRevenue(id: number, amount: number, type: 'total' | 'today'): Promise<Team> {
     const team = await this.findById(id)
-    
+
     if (type === 'total') {
       team.totalRevenue = Number(team.totalRevenue) + amount
     } else {
       team.todayRevenue = Number(team.todayRevenue) + amount
     }
-    
+
     return this.teamRepository.save(team)
   }