mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-29 03:52:41 +02:00
refactor(channelserver): extract Goocoo, Diva, Misc, Scenario, and Mercenary repositories
Move remaining raw s.server.db.* queries from handler files into dedicated repository structs, completing the repository extraction effort. Also adds SaveCharacterData and SaveHouseData to CharacterRepository. Fixes guild_hunts query to select both cats_used and start columns to match the existing two-column Scan call. Adds slot index validation in GoocooRepository to prevent SQL injection via fmt.Sprintf.
This commit is contained in:
@@ -9,17 +9,16 @@ import (
|
||||
)
|
||||
|
||||
func getGoocooData(s *Session, cid uint32) [][]byte {
|
||||
var goocoo []byte
|
||||
var goocoos [][]byte
|
||||
for i := 0; i < 5; i++ {
|
||||
err := s.server.db.QueryRow(fmt.Sprintf("SELECT goocoo%d FROM goocoo WHERE id=$1", i), cid).Scan(&goocoo)
|
||||
for i := uint32(0); i < 5; i++ {
|
||||
goocoo, err := s.server.goocooRepo.GetSlot(cid, i)
|
||||
if err != nil {
|
||||
if _, err := s.server.db.Exec("INSERT INTO goocoo (id) VALUES ($1)", s.charID); err != nil {
|
||||
if err := s.server.goocooRepo.EnsureExists(s.charID); err != nil {
|
||||
s.logger.Error("Failed to insert goocoo record", zap.Error(err))
|
||||
}
|
||||
return goocoos
|
||||
}
|
||||
if err == nil && goocoo != nil {
|
||||
if goocoo != nil {
|
||||
goocoos = append(goocoos, goocoo)
|
||||
}
|
||||
}
|
||||
@@ -45,7 +44,7 @@ func handleMsgMhfUpdateGuacot(s *Session, p mhfpacket.MHFPacket) {
|
||||
continue
|
||||
}
|
||||
if goocoo.Data1[0] == 0 {
|
||||
if _, err := s.server.db.Exec(fmt.Sprintf("UPDATE goocoo SET goocoo%d=NULL WHERE id=$1", goocoo.Index), s.charID); err != nil {
|
||||
if err := s.server.goocooRepo.ClearSlot(s.charID, goocoo.Index); err != nil {
|
||||
s.logger.Error("Failed to clear goocoo slot", zap.Error(err))
|
||||
}
|
||||
} else {
|
||||
@@ -59,7 +58,7 @@ func handleMsgMhfUpdateGuacot(s *Session, p mhfpacket.MHFPacket) {
|
||||
}
|
||||
bf.WriteUint8(uint8(len(goocoo.Name)))
|
||||
bf.WriteBytes(goocoo.Name)
|
||||
if _, err := s.server.db.Exec(fmt.Sprintf("UPDATE goocoo SET goocoo%d=$1 WHERE id=$2", goocoo.Index), bf.Data(), s.charID); err != nil {
|
||||
if err := s.server.goocooRepo.SaveSlot(s.charID, goocoo.Index, bf.Data()); err != nil {
|
||||
s.logger.Error("Failed to update goocoo slot", zap.Error(err))
|
||||
}
|
||||
dumpSaveData(s, bf.Data(), fmt.Sprintf("goocoo-%d", goocoo.Index))
|
||||
|
||||
Reference in New Issue
Block a user