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:
@@ -1,7 +1,6 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"honoka-chan/internal/handler/api/album"
|
||||
"honoka-chan/internal/handler/api/award"
|
||||
@@ -32,6 +31,7 @@ import (
|
||||
"honoka-chan/internal/router"
|
||||
apischema "honoka-chan/internal/schema/api"
|
||||
"honoka-chan/internal/session"
|
||||
honokautils "honoka-chan/internal/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@@ -41,7 +41,7 @@ func api(ctx *gin.Context) {
|
||||
defer ss.Finalize()
|
||||
|
||||
apiReq := []apischema.ApiReq{}
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &apiReq)
|
||||
err := honokautils.ParseRequestData(ctx, &apiReq)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -13,14 +13,14 @@ func awardInfo(ctx *gin.Context) (res any, err error) {
|
||||
|
||||
var awardList []int
|
||||
err = ss.MainEng.Table("award_m").Cols("award_id").Find(&awardList)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var awardID int
|
||||
_, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("award_id").Get(&awardID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
awardsList := []awardapischema.Info{}
|
||||
|
||||
@@ -13,14 +13,14 @@ func backgroundInfo(ctx *gin.Context) (res any, err error) {
|
||||
|
||||
var backgroundList []int
|
||||
err = ss.MainEng.Table("background_m").Cols("background_id").Find(&backgroundList)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var backgroundID int
|
||||
_, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("background_id").Get(&backgroundID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
backgroundsList := []backgroundapischema.Info{}
|
||||
|
||||
@@ -16,8 +16,8 @@ func eventScenarioStatus(ctx *gin.Context) (res any, err error) {
|
||||
var eventID []int
|
||||
eventsList := []eventscenarioapischema.EventScenarioList{}
|
||||
err = ss.MainEng.Table("event_scenario_m").Cols("event_id").GroupBy("event_id").OrderBy("event_id DESC").Find(&eventID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, id := range eventID {
|
||||
@@ -30,8 +30,8 @@ func eventScenarioStatus(ctx *gin.Context) (res any, err error) {
|
||||
chapsList := []eventscenarioapischema.ChapterList{}
|
||||
err = ss.MainEng.Table("event_scenario_m").Where("event_id = ?", id).Cols("event_scenario_id,chapter,chapter_asset,open_date").
|
||||
OrderBy("chapter DESC").Find(&eventRes)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, res := range eventRes {
|
||||
|
||||
@@ -14,8 +14,8 @@ func owningPoint(ctx *gin.Context) (res any, err error) {
|
||||
var exchangeID []int
|
||||
exPointsList := []exchangeapischema.ExchangePointList{}
|
||||
err = ss.MainEng.Table("exchange_point_m").Cols("exchange_point_id").OrderBy("exchange_point_id ASC").Find(&exchangeID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, id := range exchangeID {
|
||||
|
||||
@@ -14,8 +14,8 @@ func liveSchedule(ctx *gin.Context) (res any, err error) {
|
||||
var liveID []int
|
||||
err = ss.MainEng.Table("special_live_m").
|
||||
Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
liveList := []liveapischema.LiveList{}
|
||||
|
||||
@@ -14,8 +14,8 @@ func liveStatus(ctx *gin.Context) (res any, err error) {
|
||||
var liveDifficultyID []int
|
||||
normalLives := []liveapischema.NormalLiveStatusList{}
|
||||
err = ss.MainEng.Table("normal_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, id := range liveDifficultyID {
|
||||
normalLive := liveapischema.NormalLiveStatusList{
|
||||
@@ -31,8 +31,8 @@ func liveStatus(ctx *gin.Context) (res any, err error) {
|
||||
|
||||
specialLives := []liveapischema.SpecialLiveStatusList{}
|
||||
err = ss.MainEng.Table("special_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, id := range liveDifficultyID {
|
||||
specialLive := liveapischema.SpecialLiveStatusList{
|
||||
|
||||
@@ -15,8 +15,8 @@ func MultiUnitScenarioStatus(ctx *gin.Context) (res any, err error) {
|
||||
var statusID []int
|
||||
multiUnitsList := []multiunitapischema.StatusList{}
|
||||
err = ss.MainEng.Table("multi_unit_scenario_m").Cols("multi_unit_id").GroupBy("multi_unit_id").OrderBy("multi_unit_id ASC").Find(&statusID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, id := range statusID {
|
||||
@@ -30,8 +30,8 @@ func MultiUnitScenarioStatus(ctx *gin.Context) (res any, err error) {
|
||||
Join("LEFT", "multi_unit_scenario_open_m", "multi_unit_scenario_m.multi_unit_id = multi_unit_scenario_open_m.multi_unit_id").
|
||||
Cols("multi_unit_scenario_btn_asset,open_date,multi_unit_scenario_id,chapter").
|
||||
Where("multi_unit_scenario_m.multi_unit_id = ?", id).Get(&multiRes)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
multiUnitsList = append(multiUnitsList, multiunitapischema.StatusList{
|
||||
|
||||
@@ -21,8 +21,8 @@ func museumInfo(ctx *gin.Context) (res any, err error) {
|
||||
var smileBuff, pureBuff, coolBuff int
|
||||
err = ss.MainEng.Table("museum_contents_m").Cols("museum_contents_id,smile_buff,pure_buff,cool_buff").
|
||||
OrderBy("museum_contents_id ASC").Find(&museumRes)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, res := range museumRes {
|
||||
|
||||
@@ -14,8 +14,8 @@ func scenarioStatus(ctx *gin.Context) (res any, err error) {
|
||||
var scenarioID []int
|
||||
scenarioLists := []scenarioapischema.StatusList{}
|
||||
err = ss.MainEng.Table("scenario_m").Cols("scenario_id").OrderBy("scenario_id ASC").Find(&scenarioID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, id := range scenarioID {
|
||||
|
||||
@@ -14,8 +14,8 @@ func subscenarioStatus(ctx *gin.Context) (res any, err error) {
|
||||
var subScenarioID []int
|
||||
subScenarioLists := []subscenarioapischema.StatusList{}
|
||||
err = ss.MainEng.Table("subscenario_m").Cols("subscenario_id").OrderBy("subscenario_id ASC").Find(&subScenarioID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, id := range subScenarioID {
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -13,8 +13,8 @@ func userGetNavi(ctx *gin.Context) (res any, err error) {
|
||||
|
||||
var uID, oID int
|
||||
_, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("user_id,unit_owning_user_id").Get(&uID, &oID)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res = userapischema.GetNaviResp{
|
||||
|
||||
Reference in New Issue
Block a user