Reduce handler request boilerplate

- Add session.Attach to reuse per-request sessions across middleware and ghome handlers
- Make Session finalize/abort paths idempotent to avoid duplicate commit or rollback work
- Move request_data parsing helper to internal/utils
- Expand ParseRequestData usage across api, download, unit, live, multiunit, and subscenario handlers
- Extract download package metadata into internal/handler/download/types.go
- Return explicit errors from selected session lookup helpers and update callers
- Make api action handlers return errors directly instead of calling ss.CheckErr in nested layers

Signed-off-by: Sean Du <do4suki@gmail.com>
This commit is contained in:
2026-06-04 03:05:32 +08:00
parent 60677fe0dd
commit e61c07a9a3
53 changed files with 220 additions and 135 deletions
+4 -4
View File
@@ -13,8 +13,8 @@ func unitAccessoryAll(ctx *gin.Context) (res any, err error) {
accessoryList := []unitapischema.AccessoryList{}
err = ss.MainEng.Table("common_accessory_m").Find(&accessoryList)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
for k := range accessoryList {
accessoryList[k].NextExp = 0
@@ -25,8 +25,8 @@ func unitAccessoryAll(ctx *gin.Context) (res any, err error) {
}
wearingInfo := []unitapischema.WearingInfo{}
err = ss.UserEng.Table("user_accessory_wear").Where("user_id = ?", ss.UserID).Find(&wearingInfo)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
res = unitapischema.AccessoryAllResp{
Result: unitapischema.AccessoryAllData{
+2 -2
View File
@@ -15,8 +15,8 @@ func unitAll(ctx *gin.Context) (res any, err error) {
unitMap := []unitmodel.UnitDataMap{}
err = ss.GetBasicUnitInfo().
Where("a.user_id = ?", ss.UserID).Find(&unitMap)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
unitsData := []unitapischema.Active{}
+4 -4
View File
@@ -13,16 +13,16 @@ func unitDeckInfo(ctx *gin.Context) (res any, err error) {
userDeck := []unitapischema.UserDeckData{}
err = ss.UserEng.Table("user_deck").Where("user_id = ?", ss.UserID).Asc("deck_id").Find(&userDeck)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
unitDeckInfo := []unitapischema.DeckInfoData{}
for _, deck := range userDeck {
deckUnit := []unitapischema.UnitDeckData{}
err = ss.UserEng.Table("user_deck_unit").Where("user_deck_id = ?", deck.ID).Asc("position").Find(&deckUnit)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
oUID := []unitapischema.UnitOwningUserIds{}
@@ -14,14 +14,14 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) {
var skillEquipCount []unitapischema.SkillEquipCount
err = ss.UserEng.Table("user_unit_skill_equip").Where("user_id = ?", ss.UserID).Select("unit_removable_skill_id,COUNT(*) AS ct").
GroupBy("unit_removable_skill_id").Find(&skillEquipCount)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
var rmSkillIds []int
err = ss.MainEng.Table("unit_removable_skill_m").Where("effect_range = 1").Cols("unit_removable_skill_id").Find(&rmSkillIds)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
owingInfo := []unitapischema.OwningInfo{}
@@ -43,8 +43,8 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) {
var unitOwningIds []int
err = ss.UserEng.Table("user_unit_skill_equip").Where("user_id = ?", ss.UserID).Cols("unit_owning_user_id").GroupBy("unit_owning_user_id").Find(&unitOwningIds)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
equipInfo := map[int]any{}
@@ -52,8 +52,8 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) {
detail := []unitapischema.SkillEquipDetail{}
err = ss.UserEng.Table("user_unit_skill_equip").Where("user_id = ? AND unit_owning_user_id = ?", ss.UserID, v).
Cols("unit_removable_skill_id").Find(&detail)
if ss.CheckErr(err) {
return
if err != nil {
return nil, err
}
equipInfo[v] = unitapischema.SkillEquipList{