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

@@ -18,6 +18,7 @@ func TestAnswerGuildScout_Accept(t *testing.T) {
guildMock.guild.LeaderCharID = 50
server.guildRepo = guildMock
server.mailRepo = mailMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfAnswerGuildScout{
@@ -52,6 +53,7 @@ func TestAnswerGuildScout_Decline(t *testing.T) {
guildMock.guild.LeaderCharID = 50
server.guildRepo = guildMock
server.mailRepo = mailMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfAnswerGuildScout{
@@ -76,6 +78,7 @@ func TestAnswerGuildScout_GuildNotFound(t *testing.T) {
guildMock.getErr = errNotFound
server.guildRepo = guildMock
server.mailRepo = &mockMailRepo{}
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfAnswerGuildScout{
@@ -104,6 +107,7 @@ func TestAnswerGuildScout_ApplicationMissing(t *testing.T) {
guildMock.guild.LeaderCharID = 50
server.guildRepo = guildMock
server.mailRepo = mailMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfAnswerGuildScout{
@@ -136,6 +140,7 @@ func TestAnswerGuildScout_MailError(t *testing.T) {
guildMock.guild.LeaderCharID = 50
server.guildRepo = guildMock
server.mailRepo = mailMock
ensureGuildService(server)
session := createMockSession(1, server)
pkt := &mhfpacket.MsgMhfAnswerGuildScout{