Selaa lähdekoodia

更新会员服务以支持通过origin查找团队域名配置,修改createGuest方法以接受origin参数,并在成员控制器中相应更新。调整团队域名和成员实体的字段约束以优化数据存储。

wuyi 3 kuukautta sitten
vanhempi
commit
13e3399498

+ 3 - 1
src/controllers/member.controller.ts

@@ -32,7 +32,9 @@ export class MemberController {
         (request.headers['x-real-ip'] as string) ||
         'unknown'
 
-      const user = await this.memberService.createGuest(code, ip)
+      const origin = request.headers.origin || undefined
+
+      const user = await this.memberService.createGuest(code, origin, ip)
       const token = await reply.jwtSign({ id: user.id, name: user.name, role: user.role })
 
       return reply.code(201).send({

+ 2 - 2
src/entities/team-domain.entity.ts

@@ -8,10 +8,10 @@ export class TeamDomain {
   @Column()
   teamId: number
 
-  @Column()
+  @Column({ length: 100 })
   domain: string
 
-  @Column({ nullable: true })
+  @Column({ length: 500, nullable: true })
   description: string
 
   @CreateDateColumn()

+ 1 - 1
src/entities/team-members.entity.ts

@@ -5,7 +5,7 @@ export class TeamMembers {
   @PrimaryGeneratedColumn()
   id: number
 
-  @Column()
+  @Column({ length: 255 })
   name: string
 
   @Column({ type: 'decimal', precision: 10, scale: 5, default: 0 })

+ 30 - 4
src/services/member.service.ts

@@ -5,6 +5,7 @@ import { PaginationResponse } from '../dto/common.dto'
 import { User, UserRole } from '../entities/user.entity'
 import * as randomstring from 'randomstring'
 import { Team } from '../entities/team.entity'
+import { TeamDomain } from '../entities/team-domain.entity'
 import bcrypt from 'bcryptjs'
 
 export class MemberService {
@@ -28,7 +29,7 @@ export class MemberService {
     this.dataSource = app.dataSource
   }
 
-  async createGuest(code?: string, ip?: string): Promise<User> {
+  async createGuest(code?: string, origin?: string, ip?: string): Promise<User> {
     return await this.dataSource.transaction(async manager => {
       const randomSuffix = randomstring.generate({
         length: 10,
@@ -43,8 +44,26 @@ export class MemberService {
         finalGuestName = `${guestName}${counter}`
       }
 
-      const team = await manager.findOne(Team, { where: { affCode: code } })
-      const parentId = team ? team.userId : 1
+      let parentId = 1
+
+      if (code) {
+        // 使用 code 查找团队
+        const team = await manager.findOne(Team, { where: { affCode: code } })
+        if (team) {
+          parentId = team.userId
+        }
+      } else if (origin) {
+        // 使用 origin 查找团队域名配置
+        const url = new URL(origin)
+        const domainName = url.host
+        const teamDomain = await manager.findOne(TeamDomain, { where: { domain: domainName } })
+        if (teamDomain) {
+          const team = await manager.findOne(Team, { where: { id: teamDomain.teamId } })
+          if (team) {
+            parentId = team.userId
+          }
+        }
+      }
 
       const user = manager.create(User, {
         name: finalGuestName,
@@ -286,7 +305,14 @@ export class MemberService {
     }
   }
 
-  async register(name: string, password: string, email?: string, phone?: string, code?: string, ip?: string): Promise<{ user: User; member: Member }> {
+  async register(
+    name: string,
+    password: string,
+    email?: string,
+    phone?: string,
+    code?: string,
+    ip?: string
+  ): Promise<{ user: User; member: Member }> {
     return await this.dataSource.transaction(async manager => {
       // 检查用户名是否已存在
       const existingUser = await manager.findOne(User, { where: { name } })