- 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>
81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
package eventscenario
|
|
|
|
import (
|
|
"fmt"
|
|
eventscenarioapischema "honoka-chan/internal/schema/api/eventscenario"
|
|
"honoka-chan/internal/session"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func eventScenarioStatus(ctx *gin.Context) (res any, err error) {
|
|
ss := session.Get(ctx)
|
|
|
|
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 err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, id := range eventID {
|
|
var eventRes []struct {
|
|
EventScenarioId int `xorm:"event_scenario_id"`
|
|
Chapter int `xorm:"chapter"`
|
|
ChapterAsset string `xorm:"chapter_asset"`
|
|
OpenDate string `xorm:"open_date"`
|
|
}
|
|
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 err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, res := range eventRes {
|
|
chapList := eventscenarioapischema.ChapterList{
|
|
EventScenarioID: res.EventScenarioId,
|
|
Chapter: res.Chapter,
|
|
ChapterAsset: res.ChapterAsset,
|
|
Status: 2,
|
|
OpenFlashFlag: 0,
|
|
IsReward: false,
|
|
CostType: 1000,
|
|
ItemID: 1200,
|
|
Amount: 1,
|
|
}
|
|
chapsList = append(chapsList, chapList)
|
|
}
|
|
|
|
event := eventscenarioapischema.EventScenarioList{
|
|
EventID: id,
|
|
OpenDate: strings.ReplaceAll(eventRes[0].OpenDate, "/", "-"),
|
|
ChapterList: chapsList,
|
|
}
|
|
|
|
// HACK event_scenario_btn_asset
|
|
switch id {
|
|
case 10001:
|
|
event.EventScenarioBtnAsset = "assets/image/ui/eventscenario/38_se_ba_t.png"
|
|
case 221:
|
|
event.EventScenarioBtnAsset = "assets/image/ui/eventscenario/215_se_ba_t.png"
|
|
default:
|
|
event.EventScenarioBtnAsset = fmt.Sprintf("assets/image/ui/eventscenario/%d_se_ba_t.png", id)
|
|
}
|
|
|
|
eventsList = append(eventsList, event)
|
|
}
|
|
res = eventscenarioapischema.StatusResp{
|
|
Result: eventscenarioapischema.StatusData{
|
|
EventScenarioList: eventsList,
|
|
},
|
|
Status: 200,
|
|
CommandNum: false,
|
|
TimeStamp: time.Now().Unix(),
|
|
}
|
|
|
|
return res, err
|
|
}
|