- 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>
126 lines
3.6 KiB
Go
126 lines
3.6 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"honoka-chan/internal/handler/api/album"
|
|
"honoka-chan/internal/handler/api/award"
|
|
"honoka-chan/internal/handler/api/background"
|
|
"honoka-chan/internal/handler/api/banner"
|
|
"honoka-chan/internal/handler/api/challenge"
|
|
"honoka-chan/internal/handler/api/costume"
|
|
"honoka-chan/internal/handler/api/eventscenario"
|
|
"honoka-chan/internal/handler/api/exchange"
|
|
"honoka-chan/internal/handler/api/item"
|
|
"honoka-chan/internal/handler/api/live"
|
|
"honoka-chan/internal/handler/api/liveicon"
|
|
"honoka-chan/internal/handler/api/livese"
|
|
"honoka-chan/internal/handler/api/login"
|
|
"honoka-chan/internal/handler/api/marathon"
|
|
"honoka-chan/internal/handler/api/multiunit"
|
|
"honoka-chan/internal/handler/api/museum"
|
|
"honoka-chan/internal/handler/api/navigation"
|
|
"honoka-chan/internal/handler/api/notice"
|
|
"honoka-chan/internal/handler/api/payment"
|
|
"honoka-chan/internal/handler/api/profile"
|
|
"honoka-chan/internal/handler/api/scenario"
|
|
"honoka-chan/internal/handler/api/stamp"
|
|
"honoka-chan/internal/handler/api/subscenario"
|
|
"honoka-chan/internal/handler/api/unit"
|
|
"honoka-chan/internal/handler/api/user"
|
|
"honoka-chan/internal/middleware"
|
|
"honoka-chan/internal/router"
|
|
apischema "honoka-chan/internal/schema/api"
|
|
"honoka-chan/internal/session"
|
|
honokautils "honoka-chan/internal/utils"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func api(ctx *gin.Context) {
|
|
ss := session.Get(ctx)
|
|
defer ss.Finalize()
|
|
|
|
apiReq := []apischema.ApiReq{}
|
|
err := honokautils.ParseRequestData(ctx, &apiReq)
|
|
if ss.CheckErr(err) {
|
|
return
|
|
}
|
|
|
|
var result any
|
|
var results []any
|
|
for _, v := range apiReq {
|
|
// fmt.Println(v.Module, v.Action)
|
|
switch v.Module {
|
|
case "album":
|
|
result, err = album.AlbumApi(ctx, v.Action)
|
|
case "award":
|
|
result, err = award.AwardApi(ctx, v.Action)
|
|
case "background":
|
|
result, err = background.BackgroundApi(ctx, v.Action)
|
|
case "banner":
|
|
result, err = banner.BannerApi(v.Action)
|
|
case "challenge":
|
|
result, err = challenge.ChallengeApi(v.Action)
|
|
case "costume":
|
|
result, err = costume.CostumeApi(v.Action)
|
|
case "eventscenario":
|
|
result, err = eventscenario.EventScenarioApi(ctx, v.Action)
|
|
case "exchange":
|
|
result, err = exchange.ExchangeApi(ctx, v.Action)
|
|
case "item":
|
|
result, err = item.ItemApi(v.Action)
|
|
case "live":
|
|
result, err = live.LiveApi(ctx, v.Action)
|
|
case "liveicon":
|
|
result, err = liveicon.LiveIconApi(v.Action)
|
|
case "livese":
|
|
result, err = livese.LiveSeApi(v.Action)
|
|
case "login":
|
|
result, err = login.LoginApi(v.Action)
|
|
case "marathon":
|
|
result, err = marathon.MarathonApi(v.Action)
|
|
case "multiunit":
|
|
result, err = multiunit.MultiUnitApi(ctx, v.Action)
|
|
case "museum":
|
|
result, err = museum.MuseumApi(ctx, v.Action)
|
|
case "navigation":
|
|
result, err = navigation.NavigationApi(v.Action)
|
|
case "notice":
|
|
result, err = notice.NoticeApi(v.Action)
|
|
case "payment":
|
|
result, err = payment.PaymentApi(v.Action)
|
|
case "profile":
|
|
result, err = profile.ProfileApi(ctx, v.Action)
|
|
case "scenario":
|
|
result, err = scenario.ScenarioApi(ctx, v.Action)
|
|
case "stamp":
|
|
result, err = stamp.StampApi(v.Action)
|
|
case "subscenario":
|
|
result, err = subscenario.SubscenarioApi(ctx, v.Action)
|
|
case "unit":
|
|
result, err = unit.UnitApi(ctx, v.Action)
|
|
case "user":
|
|
result, err = user.UserApi(ctx, v.Action)
|
|
default:
|
|
err = fmt.Errorf("unimplemented api module: %s", v.Module)
|
|
}
|
|
|
|
if ss.CheckErr(err) {
|
|
return
|
|
}
|
|
results = append(results, result)
|
|
}
|
|
|
|
apiResp := apischema.ApiResp{
|
|
ResponseData: results,
|
|
ReleaseInfo: []any{},
|
|
StatusCode: 200,
|
|
}
|
|
|
|
ss.Respond(apiResp)
|
|
}
|
|
|
|
func init() {
|
|
router.AddHandler("main.php", "POST", "/api", middleware.Common, api)
|
|
}
|