diff --git a/schemas/patch-schema/29-guild-weekly-bonus.sql b/schemas/patch-schema/29-guild-weekly-bonus.sql new file mode 100644 index 000000000..93f3cfedf --- /dev/null +++ b/schemas/patch-schema/29-guild-weekly-bonus.sql @@ -0,0 +1,6 @@ +BEGIN; + +ALTER TABLE IF EXISTS public.guilds + ADD COLUMN IF NOT EXISTS weekly_bonus_users INT NOT NULL DEFAULT 0; + +END; diff --git a/server/channelserver/handlers_guild_cooking.go b/server/channelserver/handlers_guild_cooking.go index 9f46e4e86..4801d751c 100644 --- a/server/channelserver/handlers_guild_cooking.go +++ b/server/channelserver/handlers_guild_cooking.go @@ -125,7 +125,13 @@ func handleMsgMhfGuildHuntdata(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAddGuildWeeklyBonusExceptionalUser(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfAddGuildWeeklyBonusExceptionalUser) - // TODO: record pkt.NumUsers to DB - // must use addition + if s.server.guildRepo != nil { + guild, err := s.server.guildRepo.GetByCharID(s.charID) + if err == nil && guild != nil { + if err := s.server.guildRepo.AddWeeklyBonusUsers(guild.ID, pkt.NumUsers); err != nil { + s.logger.Error("Failed to add weekly bonus users", zap.Error(err)) + } + } + } doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) } diff --git a/server/channelserver/repo_guild.go b/server/channelserver/repo_guild.go index b735e7000..18eb7601c 100644 --- a/server/channelserver/repo_guild.go +++ b/server/channelserver/repo_guild.go @@ -938,3 +938,12 @@ func (r *GuildRepository) ListInvitedCharacters(guildID uint32) ([]*ScoutedChara } return chars, nil } + +// AddWeeklyBonusUsers atomically adds numUsers to the guild's weekly bonus exceptional user count. +func (r *GuildRepository) AddWeeklyBonusUsers(guildID uint32, numUsers uint8) error { + _, err := r.db.Exec( + "UPDATE guilds SET weekly_bonus_users = weekly_bonus_users + $1 WHERE id = $2", + numUsers, guildID, + ) + return err +}