refactor(guild): extract disband, resign, leave, and scout logic into GuildService

Move business logic for guild disband, resign leadership, leave,
post scout, and answer scout from handlers into GuildService methods.
Handlers now delegate to the service layer and handle only protocol
concerns (packet parsing, ACK responses, cross-channel notifications).

Adds 22 new table-driven service tests and sentinel errors for typed
error handling (ErrNoEligibleLeader, ErrAlreadyInvited, etc.).
DonateRP left in handler due to Session coupling.
This commit is contained in:
Houmgaor
2026-02-23 23:35:28 +01:00
parent 2abca9fb23
commit 210cfa1fd1
6 changed files with 699 additions and 137 deletions

View File

@@ -17,6 +17,7 @@ func TestOperateGuild_Disband_Success(t *testing.T) {
guildMock.guild = &Guild{ID: 10}
guildMock.guild.LeaderCharID = 1
server.guildRepo = guildMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{
@@ -49,6 +50,7 @@ func TestOperateGuild_Disband_NotLeader(t *testing.T) {
guildMock.guild = &Guild{ID: 10}
guildMock.guild.LeaderCharID = 999 // different from session charID
server.guildRepo = guildMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{
@@ -79,6 +81,7 @@ func TestOperateGuild_Disband_RepoError(t *testing.T) {
guildMock.guild = &Guild{ID: 10}
guildMock.guild.LeaderCharID = 1
server.guildRepo = guildMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{
@@ -109,6 +112,7 @@ func TestOperateGuild_Resign_TransferLeadership(t *testing.T) {
{CharID: 2, OrderIndex: 2, AvoidLeadership: false},
}
server.guildRepo = guildMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{
@@ -149,6 +153,7 @@ func TestOperateGuild_Resign_SkipsAvoidLeadership(t *testing.T) {
{CharID: 3, OrderIndex: 3, AvoidLeadership: false},
}
server.guildRepo = guildMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{
@@ -230,6 +235,7 @@ func TestOperateGuild_Leave_AsApplicant(t *testing.T) {
guildMock.guild.LeaderCharID = 999
server.guildRepo = guildMock
server.mailRepo = mailMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{
@@ -258,6 +264,7 @@ func TestOperateGuild_Leave_AsMember(t *testing.T) {
guildMock.guild.LeaderCharID = 999
server.guildRepo = guildMock
server.mailRepo = mailMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{
@@ -289,6 +296,7 @@ func TestOperateGuild_Leave_MailError(t *testing.T) {
guildMock.guild.LeaderCharID = 999
server.guildRepo = guildMock
server.mailRepo = mailMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfOperateGuild{