Commit Graph

6 Commits

Author SHA1 Message Date
Houmgaor
c5fd0444f4 docs: update architecture docs to reflect 6-service layer
The CLAUDE.md layered architecture section implied all handlers go
through services. In practice, services handle cross-repo coordination
while handlers call repos directly for simple CRUD. Updated the
diagram, added a services table, and added an "Adding Business Logic"
guide. Marked improvements.md item 4 as done.
2026-02-24 16:18:31 +01:00
Houmgaor
76d139538b refactor(items): extract inline data tables from handleMsgMhfEnumeratePrice
Static data (GZ monster prices, LB prices, wanted list) cluttered the
handler with 130 lines of table literals. Moving them to a dedicated
tables file keeps the handler focused on serialization logic.
2026-02-24 15:34:51 +01:00
Houmgaor
759988ae8e test(mocks): add mock implementations for 8 unmocked repo interfaces
Enables isolated unit tests for tower, festa, rengoku, diva, event,
misc, mercenary, and cafe handlers. All 21 repo interfaces now have
mock implementations in repo_mocks_test.go.
2026-02-24 15:24:08 +01:00
Houmgaor
41a103af9d refactor(test): consolidate two GuildRepo mocks into one
mockGuildRepoForMail and mockGuildRepoOps each implemented different
subsets of the 68-method GuildRepo interface. Adding any new method
required updating both mocks. Merged into a single mockGuildRepo with
configurable struct fields for error injection and no-op defaults for
the rest.
2026-02-24 14:13:20 +01:00
Houmgaor
c1fadd09c3 fix(commands): validate argument parsing in chat commands
KeyQuest set, Rights, and Teleport commands silently used zero values
when given malformed arguments (bad hex, non-integer coords). Now they
send the existing i18n error messages back to the player instead.
2026-02-24 13:57:58 +01:00
Houmgaor
8fead0b1f3 fix(handlers): add error handling for swallowed repo/service errors
Several handler files discarded errors from repository and service
calls, creating nil-dereference risks and silent data corruption:

- guild_adventure: 3 GetByCharID calls could panic on nil guild
- gacha: GetGachaPoints silently returned zero balances on DB error
- house: HasApplication called before nil check on guild;
  GetHouseContents error discarded with 7 return values
- distitem: 3 distRepo calls had no error logging
- guild_ops: Disband/Leave service errors were invisible
- shop: gacha type/weight/fpoint lookups had no error logging
- discord: bcrypt error could result in nil password being set
2026-02-24 13:55:49 +01:00