This commit is contained in:
殷勇 2023-08-31 19:40:21 +08:00
parent b33d728125
commit bbd2662f7b
4 changed files with 53 additions and 45 deletions

View File

@ -59,6 +59,9 @@ const (
GuildMemberLevelViceLeader = 2 // 成员等级, 副会长
GuildMemberLevelElite = 3 // 成员等级, 精英
GuildMemberLevelDefault = 3 // 成员等级, 普通成员
JoinCondDefault = 0 // 加入条件 0 需要审批
JoinCondFree = 1 // 加入条件 1 可直接加入
JoinCondStar = 2 // 加入条件 2 满足星星条件
PendingReqIsJoinGuildStatusDefault = 0 // 等待验证请求状态, 0 等待审核
PendingReqIsJoinGuildStatusJoined = 1 // 等待验证请求状态, 1 已加入
PendingReqIsJoinGuildStatusReject = 2 // 等待验证请求状态, 2 拒绝

View File

@ -72,12 +72,10 @@ func (g *Guild) IsFull() error {
}
// AddMember 添加成员
func (g *Guild) AddMember(member *GuildMember) error {
if err := g.IsFull(); err != nil {
return err
func (g *Guild) AddMember(member *GuildMember) {
if err := g.IsFull(); err == nil {
g.Members = append(g.Members, member)
}
g.Members = append(g.Members, member)
return nil
}
// RemoveMember 移除成员

View File

@ -2,6 +2,7 @@ package main
import (
"f5"
"fmt"
"q5"
)
@ -192,18 +193,29 @@ func (gm *GuildMgr) createGuildDB(g *Guild) {
{"leader_account_id", g.LeaderId},
{"max_members", q5.ToString(g.MaxMembers)},
}
var insertError error
var lastInsertId int64
var rowsAffected int64
insertCallback := func(err error, id int64, affectedRows int64) {
insertError = err
lastInsertId = id
rowsAffected = affectedRows
}
f5.GetJsStyleDb().Insert(
FRIEND_DB,
"t_guild",
fields,
func(err error, lastInsertId int64, rowsAffected int64) {
if err != nil || rowsAffected != 1 {
f5.GetSysLog().Info("createGuildDB:%v\n", err)
}
f5.GetSysLog().Info("lastInsertId:%d\n", lastInsertId)
f5.GetSysLog().Info("rowsAffected:%d\n", rowsAffected)
},
insertCallback,
)
if insertError != nil || rowsAffected != 1 {
// 插入失败,处理错误逻辑
fmt.Printf("Failed to insert guild: %v", insertError)
}
f5.GetSysLog().Info("Guild inserted successfully. LastInsertId: %d, RowsAffected: %d", lastInsertId, rowsAffected)
}
// updateGuild 更新公会信息

View File

@ -76,14 +76,11 @@ func (gm *GuildMgr) CreateGuild(name string, leaderId string) (int64, error) {
MaxMembers: MaxMembers,
}
newMember := GuildMember{AccountId: leaderId, Level: GuildMemberLevelLeader}
err = guild.AddMember(&newMember)
if err != nil {
return 0, err
}
newMember := &GuildMember{AccountId: leaderId, Level: GuildMemberLevelLeader}
guild.Members = append(guild.Members, newMember)
gm.createGuildDB(guild)
gm.upsertGuildMember(guildId, &newMember)
gm.upsertGuildMember(guildId, newMember)
gm.AddGuild(guildId, guild)
return guildId, nil
@ -96,7 +93,7 @@ func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error
return err
}
// check join guild
// 是否加入其他公会
_, err = gm.checkJoinGuild(applicantAccountId)
if err != nil {
return err
@ -107,6 +104,19 @@ func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error
return err
}
// 可直接加入
if guild.JoinCond == JoinCondFree {
gm.JoinGuild(guild, applicantAccountId)
return nil
}
if guild.JoinCond == JoinCondStar {
var userStar int32 = 200
if userStar < guild.JoinCondValue {
return fmt.Errorf("joincond error")
}
}
// IF exists, then replace it fields `isJoinGuild` is 0
gm.upsertPendingReqs(guildId, applicantAccountId, PendingReqIsJoinGuildStatusDefault)
pendReq, exists := gm.pendingReqs[guildId]
@ -142,19 +152,21 @@ func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string)
return err
}
err = guild.IsFull()
if err != nil {
return err
}
// 是否在申请队列中
_, exists := gm.pendingReqs[guildId][accountId]
if !exists {
return fmt.Errorf("no pending applications for this guild")
}
newMember := GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault}
err = guild.AddMember(&newMember)
if err != nil {
return err
}
newMember := &GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault}
guild.AddMember(newMember)
gm.upsertGuildMember(guildId, &newMember)
gm.upsertGuildMember(guildId, newMember)
gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusJoined)
logContent := fmt.Sprintf("Approve[operator:%s]", operatorAccountId)
@ -178,28 +190,11 @@ func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error {
}
// JoinGuild 直接加入公会
func (gm *GuildMgr) JoinGuild(guildId int64, accountId string) error {
guild, err := gm.GetGuild(guildId)
if err != nil {
return err
}
err = guild.IsFull()
if err != nil {
return err
}
func (gm *GuildMgr) JoinGuild(guild *Guild, accountId string) {
newMember := GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault}
err = guild.AddMember(&newMember)
if err != nil {
return err
}
guild.AddMember(&newMember)
guildId := guild.GuildId
gm.upsertGuildMember(guildId, &newMember)
delete(gm.pendingReqs[guildId], accountId)
gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusJoined)
return nil
}
// LeaveGuild 离开公会