refactor(gacha): extract gacha logic into GachaService

Move payment processing, reward selection, stepup state management,
and box gacha tracking from handlers into a dedicated service layer.
Handlers now delegate to GachaService methods and only handle
protocol serialization.
This commit is contained in:
Houmgaor
2026-02-23 23:57:54 +01:00
parent 32c5a9bf9c
commit 1e9de7920d
6 changed files with 709 additions and 236 deletions

View File

@@ -189,6 +189,7 @@ func TestHandleMsgMhfPlayNormalGacha_TransactError(t *testing.T) {
gachaRepo := &mockGachaRepo{txErr: errors.New("transact failed")}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)
@@ -213,6 +214,7 @@ func TestHandleMsgMhfPlayNormalGacha_RewardPoolError(t *testing.T) {
}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)
@@ -243,6 +245,7 @@ func TestHandleMsgMhfPlayNormalGacha_Success(t *testing.T) {
}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)
@@ -269,6 +272,7 @@ func TestHandleMsgMhfPlayStepupGacha_TransactError(t *testing.T) {
gachaRepo := &mockGachaRepo{txErr: errors.New("transact failed")}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)
@@ -302,6 +306,7 @@ func TestHandleMsgMhfPlayStepupGacha_Success(t *testing.T) {
}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)
@@ -331,6 +336,7 @@ func TestHandleMsgMhfGetStepupStatus_FreshStep(t *testing.T) {
hasEntryType: true,
}
server.gachaRepo = gachaRepo
ensureGachaService(server)
session := createMockSession(1, server)
@@ -354,6 +360,7 @@ func TestHandleMsgMhfGetStepupStatus_StaleStep(t *testing.T) {
stepupTime: time.Now().Add(-48 * time.Hour), // stale
}
server.gachaRepo = gachaRepo
ensureGachaService(server)
session := createMockSession(1, server)
@@ -378,6 +385,7 @@ func TestHandleMsgMhfGetStepupStatus_NoRows(t *testing.T) {
stepupErr: sql.ErrNoRows,
}
server.gachaRepo = gachaRepo
ensureGachaService(server)
session := createMockSession(1, server)
@@ -400,6 +408,7 @@ func TestHandleMsgMhfGetStepupStatus_NoEntryType(t *testing.T) {
hasEntryType: false, // no matching entry type -> reset
}
server.gachaRepo = gachaRepo
ensureGachaService(server)
session := createMockSession(1, server)
@@ -424,6 +433,7 @@ func TestHandleMsgMhfGetBoxGachaInfo_Error(t *testing.T) {
boxEntryIDsErr: errors.New("db error"),
}
server.gachaRepo = gachaRepo
ensureGachaService(server)
session := createMockSession(1, server)
@@ -444,6 +454,7 @@ func TestHandleMsgMhfGetBoxGachaInfo_Success(t *testing.T) {
boxEntryIDs: []uint32{10, 20, 30},
}
server.gachaRepo = gachaRepo
ensureGachaService(server)
session := createMockSession(1, server)
@@ -465,6 +476,7 @@ func TestHandleMsgMhfPlayBoxGacha_TransactError(t *testing.T) {
gachaRepo := &mockGachaRepo{txErr: errors.New("transact failed")}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)
@@ -495,6 +507,7 @@ func TestHandleMsgMhfPlayBoxGacha_Success(t *testing.T) {
}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)
@@ -517,6 +530,7 @@ func TestHandleMsgMhfResetBoxGachaInfo(t *testing.T) {
server := createMockServer()
gachaRepo := &mockGachaRepo{}
server.gachaRepo = gachaRepo
ensureGachaService(server)
session := createMockSession(1, server)
@@ -594,6 +608,7 @@ func TestHandleMsgMhfPlayStepupGacha_RewardPoolError(t *testing.T) {
}
server.gachaRepo = gachaRepo
server.userRepo = &mockUserRepoGacha{}
ensureGachaService(server)
session := createMockSession(1, server)