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
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"honoka-chan/internal/handler/api/album"
|
"honoka-chan/internal/handler/api/album"
|
||||||
"honoka-chan/internal/handler/api/award"
|
"honoka-chan/internal/handler/api/award"
|
||||||
@@ -32,6 +31,7 @@ import (
|
|||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
apischema "honoka-chan/internal/schema/api"
|
apischema "honoka-chan/internal/schema/api"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -41,7 +41,7 @@ func api(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
apiReq := []apischema.ApiReq{}
|
apiReq := []apischema.ApiReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &apiReq)
|
err := honokautils.ParseRequestData(ctx, &apiReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ func awardInfo(ctx *gin.Context) (res any, err error) {
|
|||||||
|
|
||||||
var awardList []int
|
var awardList []int
|
||||||
err = ss.MainEng.Table("award_m").Cols("award_id").Find(&awardList)
|
err = ss.MainEng.Table("award_m").Cols("award_id").Find(&awardList)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var awardID int
|
var awardID int
|
||||||
_, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("award_id").Get(&awardID)
|
_, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("award_id").Get(&awardID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
awardsList := []awardapischema.Info{}
|
awardsList := []awardapischema.Info{}
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ func backgroundInfo(ctx *gin.Context) (res any, err error) {
|
|||||||
|
|
||||||
var backgroundList []int
|
var backgroundList []int
|
||||||
err = ss.MainEng.Table("background_m").Cols("background_id").Find(&backgroundList)
|
err = ss.MainEng.Table("background_m").Cols("background_id").Find(&backgroundList)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var backgroundID int
|
var backgroundID int
|
||||||
_, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("background_id").Get(&backgroundID)
|
_, err = ss.UserEng.Table("user_pref").Where("user_id = ?", ss.UserID).Cols("background_id").Get(&backgroundID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
backgroundsList := []backgroundapischema.Info{}
|
backgroundsList := []backgroundapischema.Info{}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ func eventScenarioStatus(ctx *gin.Context) (res any, err error) {
|
|||||||
var eventID []int
|
var eventID []int
|
||||||
eventsList := []eventscenarioapischema.EventScenarioList{}
|
eventsList := []eventscenarioapischema.EventScenarioList{}
|
||||||
err = ss.MainEng.Table("event_scenario_m").Cols("event_id").GroupBy("event_id").OrderBy("event_id DESC").Find(&eventID)
|
err = ss.MainEng.Table("event_scenario_m").Cols("event_id").GroupBy("event_id").OrderBy("event_id DESC").Find(&eventID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, id := range eventID {
|
for _, id := range eventID {
|
||||||
@@ -30,8 +30,8 @@ func eventScenarioStatus(ctx *gin.Context) (res any, err error) {
|
|||||||
chapsList := []eventscenarioapischema.ChapterList{}
|
chapsList := []eventscenarioapischema.ChapterList{}
|
||||||
err = ss.MainEng.Table("event_scenario_m").Where("event_id = ?", id).Cols("event_scenario_id,chapter,chapter_asset,open_date").
|
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)
|
OrderBy("chapter DESC").Find(&eventRes)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, res := range eventRes {
|
for _, res := range eventRes {
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ func owningPoint(ctx *gin.Context) (res any, err error) {
|
|||||||
var exchangeID []int
|
var exchangeID []int
|
||||||
exPointsList := []exchangeapischema.ExchangePointList{}
|
exPointsList := []exchangeapischema.ExchangePointList{}
|
||||||
err = ss.MainEng.Table("exchange_point_m").Cols("exchange_point_id").OrderBy("exchange_point_id ASC").Find(&exchangeID)
|
err = ss.MainEng.Table("exchange_point_m").Cols("exchange_point_id").OrderBy("exchange_point_id ASC").Find(&exchangeID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, id := range exchangeID {
|
for _, id := range exchangeID {
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ func liveSchedule(ctx *gin.Context) (res any, err error) {
|
|||||||
var liveID []int
|
var liveID []int
|
||||||
err = ss.MainEng.Table("special_live_m").
|
err = ss.MainEng.Table("special_live_m").
|
||||||
Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveID)
|
Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
liveList := []liveapischema.LiveList{}
|
liveList := []liveapischema.LiveList{}
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ func liveStatus(ctx *gin.Context) (res any, err error) {
|
|||||||
var liveDifficultyID []int
|
var liveDifficultyID []int
|
||||||
normalLives := []liveapischema.NormalLiveStatusList{}
|
normalLives := []liveapischema.NormalLiveStatusList{}
|
||||||
err = ss.MainEng.Table("normal_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID)
|
err = ss.MainEng.Table("normal_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, id := range liveDifficultyID {
|
for _, id := range liveDifficultyID {
|
||||||
normalLive := liveapischema.NormalLiveStatusList{
|
normalLive := liveapischema.NormalLiveStatusList{
|
||||||
@@ -31,8 +31,8 @@ func liveStatus(ctx *gin.Context) (res any, err error) {
|
|||||||
|
|
||||||
specialLives := []liveapischema.SpecialLiveStatusList{}
|
specialLives := []liveapischema.SpecialLiveStatusList{}
|
||||||
err = ss.MainEng.Table("special_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID)
|
err = ss.MainEng.Table("special_live_m").Cols("live_difficulty_id").OrderBy("live_difficulty_id ASC").Find(&liveDifficultyID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, id := range liveDifficultyID {
|
for _, id := range liveDifficultyID {
|
||||||
specialLive := liveapischema.SpecialLiveStatusList{
|
specialLive := liveapischema.SpecialLiveStatusList{
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ func MultiUnitScenarioStatus(ctx *gin.Context) (res any, err error) {
|
|||||||
var statusID []int
|
var statusID []int
|
||||||
multiUnitsList := []multiunitapischema.StatusList{}
|
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)
|
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) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, id := range statusID {
|
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").
|
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").
|
Cols("multi_unit_scenario_btn_asset,open_date,multi_unit_scenario_id,chapter").
|
||||||
Where("multi_unit_scenario_m.multi_unit_id = ?", id).Get(&multiRes)
|
Where("multi_unit_scenario_m.multi_unit_id = ?", id).Get(&multiRes)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
multiUnitsList = append(multiUnitsList, multiunitapischema.StatusList{
|
multiUnitsList = append(multiUnitsList, multiunitapischema.StatusList{
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ func museumInfo(ctx *gin.Context) (res any, err error) {
|
|||||||
var smileBuff, pureBuff, coolBuff int
|
var smileBuff, pureBuff, coolBuff int
|
||||||
err = ss.MainEng.Table("museum_contents_m").Cols("museum_contents_id,smile_buff,pure_buff,cool_buff").
|
err = ss.MainEng.Table("museum_contents_m").Cols("museum_contents_id,smile_buff,pure_buff,cool_buff").
|
||||||
OrderBy("museum_contents_id ASC").Find(&museumRes)
|
OrderBy("museum_contents_id ASC").Find(&museumRes)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, res := range museumRes {
|
for _, res := range museumRes {
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ func scenarioStatus(ctx *gin.Context) (res any, err error) {
|
|||||||
var scenarioID []int
|
var scenarioID []int
|
||||||
scenarioLists := []scenarioapischema.StatusList{}
|
scenarioLists := []scenarioapischema.StatusList{}
|
||||||
err = ss.MainEng.Table("scenario_m").Cols("scenario_id").OrderBy("scenario_id ASC").Find(&scenarioID)
|
err = ss.MainEng.Table("scenario_m").Cols("scenario_id").OrderBy("scenario_id ASC").Find(&scenarioID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, id := range scenarioID {
|
for _, id := range scenarioID {
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ func subscenarioStatus(ctx *gin.Context) (res any, err error) {
|
|||||||
var subScenarioID []int
|
var subScenarioID []int
|
||||||
subScenarioLists := []subscenarioapischema.StatusList{}
|
subScenarioLists := []subscenarioapischema.StatusList{}
|
||||||
err = ss.MainEng.Table("subscenario_m").Cols("subscenario_id").OrderBy("subscenario_id ASC").Find(&subScenarioID)
|
err = ss.MainEng.Table("subscenario_m").Cols("subscenario_id").OrderBy("subscenario_id ASC").Find(&subScenarioID)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, id := range subScenarioID {
|
for _, id := range subScenarioID {
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ func unitAccessoryAll(ctx *gin.Context) (res any, err error) {
|
|||||||
|
|
||||||
accessoryList := []unitapischema.AccessoryList{}
|
accessoryList := []unitapischema.AccessoryList{}
|
||||||
err = ss.MainEng.Table("common_accessory_m").Find(&accessoryList)
|
err = ss.MainEng.Table("common_accessory_m").Find(&accessoryList)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
for k := range accessoryList {
|
for k := range accessoryList {
|
||||||
accessoryList[k].NextExp = 0
|
accessoryList[k].NextExp = 0
|
||||||
@@ -25,8 +25,8 @@ func unitAccessoryAll(ctx *gin.Context) (res any, err error) {
|
|||||||
}
|
}
|
||||||
wearingInfo := []unitapischema.WearingInfo{}
|
wearingInfo := []unitapischema.WearingInfo{}
|
||||||
err = ss.UserEng.Table("user_accessory_wear").Where("user_id = ?", ss.UserID).Find(&wearingInfo)
|
err = ss.UserEng.Table("user_accessory_wear").Where("user_id = ?", ss.UserID).Find(&wearingInfo)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
res = unitapischema.AccessoryAllResp{
|
res = unitapischema.AccessoryAllResp{
|
||||||
Result: unitapischema.AccessoryAllData{
|
Result: unitapischema.AccessoryAllData{
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ func unitAll(ctx *gin.Context) (res any, err error) {
|
|||||||
unitMap := []unitmodel.UnitDataMap{}
|
unitMap := []unitmodel.UnitDataMap{}
|
||||||
err = ss.GetBasicUnitInfo().
|
err = ss.GetBasicUnitInfo().
|
||||||
Where("a.user_id = ?", ss.UserID).Find(&unitMap)
|
Where("a.user_id = ?", ss.UserID).Find(&unitMap)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
unitsData := []unitapischema.Active{}
|
unitsData := []unitapischema.Active{}
|
||||||
|
|||||||
@@ -13,16 +13,16 @@ func unitDeckInfo(ctx *gin.Context) (res any, err error) {
|
|||||||
|
|
||||||
userDeck := []unitapischema.UserDeckData{}
|
userDeck := []unitapischema.UserDeckData{}
|
||||||
err = ss.UserEng.Table("user_deck").Where("user_id = ?", ss.UserID).Asc("deck_id").Find(&userDeck)
|
err = ss.UserEng.Table("user_deck").Where("user_id = ?", ss.UserID).Asc("deck_id").Find(&userDeck)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
unitDeckInfo := []unitapischema.DeckInfoData{}
|
unitDeckInfo := []unitapischema.DeckInfoData{}
|
||||||
for _, deck := range userDeck {
|
for _, deck := range userDeck {
|
||||||
deckUnit := []unitapischema.UnitDeckData{}
|
deckUnit := []unitapischema.UnitDeckData{}
|
||||||
err = ss.UserEng.Table("user_deck_unit").Where("user_deck_id = ?", deck.ID).Asc("position").Find(&deckUnit)
|
err = ss.UserEng.Table("user_deck_unit").Where("user_deck_id = ?", deck.ID).Asc("position").Find(&deckUnit)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
oUID := []unitapischema.UnitOwningUserIds{}
|
oUID := []unitapischema.UnitOwningUserIds{}
|
||||||
|
|||||||
@@ -14,14 +14,14 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) {
|
|||||||
var skillEquipCount []unitapischema.SkillEquipCount
|
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").
|
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)
|
GroupBy("unit_removable_skill_id").Find(&skillEquipCount)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var rmSkillIds []int
|
var rmSkillIds []int
|
||||||
err = ss.MainEng.Table("unit_removable_skill_m").Where("effect_range = 1").Cols("unit_removable_skill_id").Find(&rmSkillIds)
|
err = ss.MainEng.Table("unit_removable_skill_m").Where("effect_range = 1").Cols("unit_removable_skill_id").Find(&rmSkillIds)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
owingInfo := []unitapischema.OwningInfo{}
|
owingInfo := []unitapischema.OwningInfo{}
|
||||||
@@ -43,8 +43,8 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) {
|
|||||||
|
|
||||||
var unitOwningIds []int
|
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)
|
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) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
equipInfo := map[int]any{}
|
equipInfo := map[int]any{}
|
||||||
@@ -52,8 +52,8 @@ func unitRemovableSkillInfo(ctx *gin.Context) (res any, err error) {
|
|||||||
detail := []unitapischema.SkillEquipDetail{}
|
detail := []unitapischema.SkillEquipDetail{}
|
||||||
err = ss.UserEng.Table("user_unit_skill_equip").Where("user_id = ? AND unit_owning_user_id = ?", ss.UserID, v).
|
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)
|
Cols("unit_removable_skill_id").Find(&detail)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
equipInfo[v] = unitapischema.SkillEquipList{
|
equipInfo[v] = unitapischema.SkillEquipList{
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ func userGetNavi(ctx *gin.Context) (res any, err error) {
|
|||||||
|
|
||||||
var uID, oID int
|
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)
|
_, 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) {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
res = userapischema.GetNaviResp{
|
res = userapischema.GetNaviResp{
|
||||||
|
|||||||
@@ -1,30 +1,23 @@
|
|||||||
package download
|
package download
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"honoka-chan/config"
|
"honoka-chan/config"
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
downloadschema "honoka-chan/internal/schema/download"
|
downloadschema "honoka-chan/internal/schema/download"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PkgInfo struct {
|
|
||||||
PkgType int `xorm:"pkg_type"`
|
|
||||||
PkgID int `xorm:"pkg_id"`
|
|
||||||
Order int `xorm:"pkg_order"`
|
|
||||||
Size int `xorm:"pkg_size"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func additional(ctx *gin.Context) {
|
func additional(ctx *gin.Context) {
|
||||||
ss := session.Get(ctx)
|
ss := session.Get(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
downloadReq := downloadschema.AdditionalReq{}
|
downloadReq := downloadschema.AdditionalReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq)
|
err := honokautils.ParseRequestData(ctx, &downloadReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package download
|
package download
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"honoka-chan/config"
|
"honoka-chan/config"
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
downloadschema "honoka-chan/internal/schema/download"
|
downloadschema "honoka-chan/internal/schema/download"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
@@ -18,7 +18,7 @@ func batch(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
downloadReq := downloadschema.BatchReq{}
|
downloadReq := downloadschema.BatchReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq)
|
err := honokautils.ParseRequestData(ctx, &downloadReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package download
|
package download
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"honoka-chan/config"
|
"honoka-chan/config"
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
downloadschema "honoka-chan/internal/schema/download"
|
downloadschema "honoka-chan/internal/schema/download"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -18,7 +18,7 @@ func getUrl(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
downloadReq := downloadschema.UrlReq{}
|
downloadReq := downloadschema.UrlReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq)
|
err := honokautils.ParseRequestData(ctx, &downloadReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package download
|
||||||
|
|
||||||
|
type PkgInfo struct {
|
||||||
|
PkgType int `xorm:"pkg_type"`
|
||||||
|
PkgID int `xorm:"pkg_id"`
|
||||||
|
Order int `xorm:"pkg_order"`
|
||||||
|
Size int `xorm:"pkg_size"`
|
||||||
|
}
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package download
|
package download
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"honoka-chan/config"
|
"honoka-chan/config"
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
downloadschema "honoka-chan/internal/schema/download"
|
downloadschema "honoka-chan/internal/schema/download"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -23,7 +23,7 @@ func update(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
downloadReq := downloadschema.UpdateReq{}
|
downloadReq := downloadschema.UpdateReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &downloadReq)
|
err := honokautils.ParseRequestData(ctx, &downloadReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func active(ctx *gin.Context) {
|
func active(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
ss.Respond(ghomeschema.ActiveResp{
|
ss.Respond(ghomeschema.ActiveResp{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func initialize(ctx *gin.Context) {
|
func initialize(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
initData := ghomeschema.InitializeData{
|
initData := ghomeschema.InitializeData{
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func login(ctx *gin.Context) {
|
func login(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
data, err := ctx.GetRawData()
|
data, err := ctx.GetRawData()
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func loginAuto(ctx *gin.Context) {
|
func loginAuto(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
data, err := ctx.GetRawData()
|
data, err := ctx.GetRawData()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func reportRole(ctx *gin.Context) {
|
func reportRole(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
randKey, err := ss.Get3DESRandKey()
|
randKey, err := ss.Get3DESRandKey()
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func getCode(ctx *gin.Context) {
|
func getCode(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
codeArray := `{"codeArray":[{"btntext":"好的","code":"-10264022","msg_from":2,"text":"","title":"短信验证码被阻止","type":1},{"btntext":"","code":"-10869623","msg_from":2,"text":"","title":"网络连接失败,无法一键登录","type":2},{"btntext":"","code":"10298300","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298311","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298312","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298313","msg_from":2,"text":"","title":"","type":1},{"btntext":"","code":"10298321","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298322","msg_from":2,"text":"","title":"","type":3}],"codeVersion":"1.0.5"}`
|
codeArray := `{"codeArray":[{"btntext":"好的","code":"-10264022","msg_from":2,"text":"","title":"短信验证码被阻止","type":1},{"btntext":"","code":"-10869623","msg_from":2,"text":"","title":"网络连接失败,无法一键登录","type":2},{"btntext":"","code":"10298300","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298311","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298312","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298313","msg_from":2,"text":"","title":"","type":1},{"btntext":"","code":"10298321","msg_from":2,"text":"","title":"","type":3},{"btntext":"","code":"10298322","msg_from":2,"text":"","title":"","type":3}],"codeVersion":"1.0.5"}`
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func getProductList(ctx *gin.Context) {
|
func getProductList(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
getProductListData := ghomeschema.GetProductListData{
|
getProductListData := ghomeschema.GetProductListData{
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func handshake(ctx *gin.Context) {
|
func handshake(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
data, err := ctx.GetRawData()
|
data, err := ctx.GetRawData()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func loginArea(ctx *gin.Context) {
|
func loginArea(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
ss.Respond(ghomeschema.LoginAreaResp{
|
ss.Respond(ghomeschema.LoginAreaResp{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func publicKey(ctx *gin.Context) {
|
func publicKey(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
publicKeyCode := 0
|
publicKeyCode := 0
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func status(ctx *gin.Context) {
|
func status(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
ss.Respond(ghomeschema.GuestStatusResp{
|
ss.Respond(ghomeschema.GuestStatusResp{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func agreement(ctx *gin.Context) {
|
func agreement(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
ss.Respond(ghomeschema.AgreementResp{
|
ss.Respond(ghomeschema.AgreementResp{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func appReport(ctx *gin.Context) {
|
func appReport(ctx *gin.Context) {
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
ss.Respond(ghomeschema.AppReportResp{
|
ss.Respond(ghomeschema.AppReportResp{
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
liveschema "honoka-chan/internal/schema/live"
|
liveschema "honoka-chan/internal/schema/live"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"honoka-chan/pkg/utils"
|
"honoka-chan/pkg/utils"
|
||||||
"math"
|
"math"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -20,7 +21,7 @@ func play(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
playReq := liveschema.PlayReq{}
|
playReq := liveschema.PlayReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &playReq)
|
err := honokautils.ParseRequestData(ctx, &playReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
liveschema "honoka-chan/internal/schema/live"
|
liveschema "honoka-chan/internal/schema/live"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"honoka-chan/pkg/utils"
|
"honoka-chan/pkg/utils"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
@@ -20,7 +21,7 @@ func preciseScore(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
playScoreReq := liveschema.PlayScoreReq{}
|
playScoreReq := liveschema.PlayScoreReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &playScoreReq)
|
err := honokautils.ParseRequestData(ctx, &playScoreReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package live
|
package live
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
usermodel "honoka-chan/internal/model/user"
|
usermodel "honoka-chan/internal/model/user"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
liveschema "honoka-chan/internal/schema/live"
|
liveschema "honoka-chan/internal/schema/live"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"honoka-chan/pkg/utils"
|
"honoka-chan/pkg/utils"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ func reward(ctx *gin.Context) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
playRewardReq := liveschema.RewardReq{}
|
playRewardReq := liveschema.RewardReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &playRewardReq)
|
err := honokautils.ParseRequestData(ctx, &playRewardReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,10 @@ func login(ctx *gin.Context) {
|
|||||||
ss := session.Get(ctx)
|
ss := session.Get(ctx)
|
||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
has, authKeyData := ss.GetAuthKey(ctx.MustGet("token").(string))
|
has, authKeyData, err := ss.GetAuthKey(ctx.MustGet("token").(string))
|
||||||
|
if ss.CheckErr(err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if !has {
|
if !has {
|
||||||
ss.Abort(errors.New("invalid token"))
|
ss.Abort(errors.New("invalid token"))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package multiunit
|
package multiunit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
multiunitschema "honoka-chan/internal/schema/multiunit"
|
multiunitschema "honoka-chan/internal/schema/multiunit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -16,7 +16,7 @@ func scenarioStartup(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
startReq := multiunitschema.ScenarioStartUpReq{}
|
startReq := multiunitschema.ScenarioStartUpReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &startReq)
|
err := honokautils.ParseRequestData(ctx, &startReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package subscenario
|
package subscenario
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
subscenarioschema "honoka-chan/internal/schema/subscenario"
|
subscenarioschema "honoka-chan/internal/schema/subscenario"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -16,7 +16,7 @@ func startup(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
startReq := subscenarioschema.StartUpReq{}
|
startReq := subscenarioschema.StartUpReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &startReq)
|
err := honokautils.ParseRequestData(ctx, &startReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package unit
|
package unit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
unitmodel "honoka-chan/internal/model/unit"
|
unitmodel "honoka-chan/internal/model/unit"
|
||||||
usermodel "honoka-chan/internal/model/user"
|
usermodel "honoka-chan/internal/model/user"
|
||||||
@@ -9,6 +8,7 @@ import (
|
|||||||
unitapischema "honoka-chan/internal/schema/api/unit"
|
unitapischema "honoka-chan/internal/schema/api/unit"
|
||||||
unitschema "honoka-chan/internal/schema/unit"
|
unitschema "honoka-chan/internal/schema/unit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -19,7 +19,7 @@ func deck(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
deckReq := unitschema.DeckReq{}
|
deckReq := unitschema.DeckReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &deckReq)
|
err := honokautils.ParseRequestData(ctx, &deckReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package unit
|
package unit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
unitapischema "honoka-chan/internal/schema/api/unit"
|
unitapischema "honoka-chan/internal/schema/api/unit"
|
||||||
unitschema "honoka-chan/internal/schema/unit"
|
unitschema "honoka-chan/internal/schema/unit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -16,7 +16,7 @@ func deckName(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
deckReq := unitschema.DeckNameReq{}
|
deckReq := unitschema.DeckNameReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &deckReq)
|
err := honokautils.ParseRequestData(ctx, &deckReq)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package unit
|
package unit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
usermodel "honoka-chan/internal/model/user"
|
usermodel "honoka-chan/internal/model/user"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
unitschema "honoka-chan/internal/schema/unit"
|
unitschema "honoka-chan/internal/schema/unit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -16,7 +16,7 @@ func favorite(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
var req unitschema.FavoriteReq
|
var req unitschema.FavoriteReq
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
err := honokautils.ParseRequestData(ctx, &req)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package unit
|
package unit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
unitschema "honoka-chan/internal/schema/unit"
|
unitschema "honoka-chan/internal/schema/unit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -15,7 +15,7 @@ func removableSkillEquipment(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
req := unitschema.RemovableSkillEquipmentReq{}
|
req := unitschema.RemovableSkillEquipmentReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
err := honokautils.ParseRequestData(ctx, &req)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package unit
|
package unit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
usermodel "honoka-chan/internal/model/user"
|
usermodel "honoka-chan/internal/model/user"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
unitschema "honoka-chan/internal/schema/unit"
|
unitschema "honoka-chan/internal/schema/unit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -17,7 +17,7 @@ func sale(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
req := unitschema.SaleReq{}
|
req := unitschema.SaleReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
err := honokautils.ParseRequestData(ctx, &req)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package unit
|
package unit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
usermodel "honoka-chan/internal/model/user"
|
usermodel "honoka-chan/internal/model/user"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
unitschema "honoka-chan/internal/schema/unit"
|
unitschema "honoka-chan/internal/schema/unit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -16,7 +16,7 @@ func setDisplayRank(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
var req unitschema.SetDisplayRankReq
|
var req unitschema.SetDisplayRankReq
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
err := honokautils.ParseRequestData(ctx, &req)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package unit
|
package unit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"honoka-chan/internal/middleware"
|
"honoka-chan/internal/middleware"
|
||||||
"honoka-chan/internal/router"
|
"honoka-chan/internal/router"
|
||||||
unitschema "honoka-chan/internal/schema/unit"
|
unitschema "honoka-chan/internal/schema/unit"
|
||||||
"honoka-chan/internal/session"
|
"honoka-chan/internal/session"
|
||||||
|
honokautils "honoka-chan/internal/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -15,7 +15,7 @@ func wearAccessory(ctx *gin.Context) {
|
|||||||
defer ss.Finalize()
|
defer ss.Finalize()
|
||||||
|
|
||||||
req := unitschema.WearAccessoryReq{}
|
req := unitschema.WearAccessoryReq{}
|
||||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
err := honokautils.ParseRequestData(ctx, &req)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func Common(ctx *gin.Context) {
|
|||||||
uid := ctx.GetHeader("User-ID")
|
uid := ctx.GetHeader("User-ID")
|
||||||
ctx.Set("userid", uid)
|
ctx.Set("userid", uid)
|
||||||
|
|
||||||
ss := session.New(ctx)
|
ss := session.Attach(ctx)
|
||||||
ctx.Set("session", ss)
|
ctx.Set("session", ss)
|
||||||
|
|
||||||
authorize := ctx.GetHeader("Authorize")
|
authorize := ctx.GetHeader("Authorize")
|
||||||
|
|||||||
@@ -4,25 +4,28 @@ import (
|
|||||||
usermodel "honoka-chan/internal/model/user"
|
usermodel "honoka-chan/internal/model/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ss *Session) GetUserDeck(deckID int) (bool, *usermodel.UserDeck) {
|
func (ss *Session) GetUserDeck(deckID int) (bool, *usermodel.UserDeck, error) {
|
||||||
deckData := usermodel.UserDeck{}
|
deckData := usermodel.UserDeck{}
|
||||||
has, err := ss.UserEng.Table("user_deck").
|
has, err := ss.UserEng.Table("user_deck").
|
||||||
Where("user_id = ? AND deck_id = ?", ss.UserID, deckID).Get(&deckData)
|
Where("user_id = ? AND deck_id = ?", ss.UserID, deckID).Get(&deckData)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return false, nil
|
return false, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return has, &deckData
|
return has, &deckData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ss *Session) GetUserDeckUnit(deckID int) []usermodel.UserDeckUnit {
|
func (ss *Session) GetUserDeckUnit(deckID int) []usermodel.UserDeckUnit {
|
||||||
has, deckData := ss.GetUserDeck(deckID)
|
has, deckData, err := ss.GetUserDeck(deckID)
|
||||||
|
if ss.CheckErr(err) {
|
||||||
|
return []usermodel.UserDeckUnit{}
|
||||||
|
}
|
||||||
if !has {
|
if !has {
|
||||||
return []usermodel.UserDeckUnit{}
|
return []usermodel.UserDeckUnit{}
|
||||||
}
|
}
|
||||||
|
|
||||||
unitData := []usermodel.UserDeckUnit{}
|
unitData := []usermodel.UserDeckUnit{}
|
||||||
err := ss.UserEng.Table("user_deck_unit").
|
err = ss.UserEng.Table("user_deck_unit").
|
||||||
Where("user_deck_id = ?", deckData.ID).Find(&unitData)
|
Where("user_deck_id = ?", deckData.ID).Find(&unitData)
|
||||||
if ss.CheckErr(err) {
|
if ss.CheckErr(err) {
|
||||||
return []usermodel.UserDeckUnit{}
|
return []usermodel.UserDeckUnit{}
|
||||||
|
|||||||
@@ -6,26 +6,30 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (ss *Session) GetDeviceID() string {
|
func (ss *Session) GetDeviceID() string {
|
||||||
return ss.Ctx.Request.Header.Get("X-DEVICEID")
|
return ss.deviceID
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ss *Session) GetRandKey() []byte {
|
func (ss *Session) GetRandKey() ([]byte, error) {
|
||||||
deviceKey := ghomemodel.DeviceKey{}
|
deviceKey := ghomemodel.DeviceKey{}
|
||||||
has, err := ss.UserEng.Table(new(ghomemodel.DeviceKey)).
|
has, err := ss.UserEng.Table(new(ghomemodel.DeviceKey)).
|
||||||
Where("device_id = ?", ss.GetDeviceID()).Get(&deviceKey)
|
Where("device_id = ?", ss.GetDeviceID()).Get(&deviceKey)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !has {
|
if !has {
|
||||||
return nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return []byte(deviceKey.RandKey)
|
return []byte(deviceKey.RandKey), nil
|
||||||
}
|
}
|
||||||
func (ss *Session) SetRandKey(key string) {
|
func (ss *Session) SetRandKey(key string) {
|
||||||
var err error
|
var err error
|
||||||
if ss.GetRandKey() == nil {
|
randKey, err := ss.GetRandKey()
|
||||||
|
if ss.CheckErr(err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if randKey == nil {
|
||||||
_, err = ss.UserEng.Insert(&ghomemodel.DeviceKey{
|
_, err = ss.UserEng.Insert(&ghomemodel.DeviceKey{
|
||||||
DeviceID: ss.GetDeviceID(),
|
DeviceID: ss.GetDeviceID(),
|
||||||
RandKey: key,
|
RandKey: key,
|
||||||
@@ -40,7 +44,10 @@ func (ss *Session) SetRandKey(key string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ss *Session) Get3DESRandKey() ([]byte, error) {
|
func (ss *Session) Get3DESRandKey() ([]byte, error) {
|
||||||
randKey := ss.GetRandKey()
|
randKey, err := ss.GetRandKey()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
if len(randKey) < 24 {
|
if len(randKey) < 24 {
|
||||||
return nil, errors.New("invalid rand key")
|
return nil, errors.New("invalid rand key")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ package session
|
|||||||
|
|
||||||
import loginmodel "honoka-chan/internal/model/login"
|
import loginmodel "honoka-chan/internal/model/login"
|
||||||
|
|
||||||
func (ss *Session) GetAuthKey(token string) (bool, *loginmodel.AuthKey) {
|
func (ss *Session) GetAuthKey(token string) (bool, *loginmodel.AuthKey, error) {
|
||||||
authKeyData := loginmodel.AuthKey{}
|
authKeyData := loginmodel.AuthKey{}
|
||||||
has, err := ss.UserEng.Table(new(loginmodel.AuthKey)).
|
has, err := ss.UserEng.Table(new(loginmodel.AuthKey)).
|
||||||
Where("authorize_token = ?", token).Get(&authKeyData)
|
Where("authorize_token = ?", token).Get(&authKeyData)
|
||||||
if ss.CheckErr(err) {
|
if err != nil {
|
||||||
return false, nil
|
return false, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return has, &authKeyData
|
return has, &authKeyData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ss *Session) SetAuthKey(authKey *loginmodel.AuthKey) {
|
func (ss *Session) SetAuthKey(authKey *loginmodel.AuthKey) {
|
||||||
|
|||||||
+71
-13
@@ -13,19 +13,36 @@ import (
|
|||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Session struct {
|
type responseHooks struct {
|
||||||
Ctx *gin.Context
|
setHeader func(string, string)
|
||||||
|
writeJSON func(int, any)
|
||||||
|
writeBody func(int, string)
|
||||||
|
abort func()
|
||||||
|
}
|
||||||
|
|
||||||
|
type Session struct {
|
||||||
MainEng *xorm.Session
|
MainEng *xorm.Session
|
||||||
UserEng *xorm.Session
|
UserEng *xorm.Session
|
||||||
|
|
||||||
UserID int
|
UserID int
|
||||||
UserPref usermodel.UserPref
|
UserPref usermodel.UserPref
|
||||||
|
|
||||||
|
deviceID string
|
||||||
|
resp responseHooks
|
||||||
|
done bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(ctx *gin.Context) *Session {
|
func New(ctx *gin.Context) *Session {
|
||||||
ss := &Session{
|
ss := &Session{
|
||||||
Ctx: ctx,
|
deviceID: ctx.GetHeader("X-DEVICEID"),
|
||||||
|
resp: responseHooks{
|
||||||
|
setHeader: ctx.Header,
|
||||||
|
writeJSON: ctx.JSON,
|
||||||
|
writeBody: func(code int, body string) {
|
||||||
|
ctx.String(code, body)
|
||||||
|
},
|
||||||
|
abort: ctx.Abort,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
ss.MainEng = db.MainEng.NewSession()
|
ss.MainEng = db.MainEng.NewSession()
|
||||||
@@ -45,21 +62,62 @@ func Get(ctx *gin.Context) *Session {
|
|||||||
return ctx.MustGet("session").(*Session)
|
return ctx.MustGet("session").(*Session)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Attach(ctx *gin.Context) *Session {
|
||||||
|
if ss, ok := ctx.Get("session"); ok {
|
||||||
|
return ss.(*Session)
|
||||||
|
}
|
||||||
|
|
||||||
|
ss := New(ctx)
|
||||||
|
ctx.Set("session", ss)
|
||||||
|
return ss
|
||||||
|
}
|
||||||
|
|
||||||
func (ss *Session) Finalize() {
|
func (ss *Session) Finalize() {
|
||||||
ss.MainEng.Close()
|
if ss.done {
|
||||||
if ss.CheckErr(ss.UserEng.Commit()) {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
ss.done = true
|
||||||
|
|
||||||
|
if ss.MainEng != nil {
|
||||||
|
ss.MainEng.Close()
|
||||||
|
ss.MainEng = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if ss.UserEng == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ss.UserEng.Commit(); err != nil {
|
||||||
|
log.Println(err.Error())
|
||||||
|
ss.UserEng.Close()
|
||||||
|
ss.UserEng = nil
|
||||||
|
ss.resp.writeJSON(500, gin.H{"error": err.Error()})
|
||||||
|
ss.resp.abort()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ss.UserEng.Close()
|
ss.UserEng.Close()
|
||||||
|
ss.UserEng = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ss *Session) Abort(err error) {
|
func (ss *Session) Abort(err error) {
|
||||||
ss.MainEng.Close()
|
if ss.done {
|
||||||
ss.UserEng.Rollback()
|
return
|
||||||
ss.UserEng.Close()
|
}
|
||||||
|
ss.done = true
|
||||||
|
|
||||||
ss.Ctx.JSON(500, gin.H{"error": err.Error()})
|
if ss.MainEng != nil {
|
||||||
ss.Ctx.Abort()
|
ss.MainEng.Close()
|
||||||
|
ss.MainEng = nil
|
||||||
|
}
|
||||||
|
if ss.UserEng != nil {
|
||||||
|
ss.UserEng.Rollback()
|
||||||
|
ss.UserEng.Close()
|
||||||
|
ss.UserEng = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
ss.resp.writeJSON(500, gin.H{"error": err.Error()})
|
||||||
|
ss.resp.abort()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ss *Session) CheckErr(err error) bool {
|
func (ss *Session) CheckErr(err error) bool {
|
||||||
@@ -77,7 +135,7 @@ func (ss *Session) Respond(resp any) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ss.Ctx.Header("Content-Type", "application/json")
|
ss.resp.setHeader("Content-Type", "application/json")
|
||||||
ss.Ctx.Header("X-Message-Sign", base64.StdEncoding.EncodeToString(encrypt.RSASignSHA1(data)))
|
ss.resp.setHeader("X-Message-Sign", base64.StdEncoding.EncodeToString(encrypt.RSASignSHA1(data)))
|
||||||
ss.Ctx.String(http.StatusOK, string(data))
|
ss.resp.writeBody(http.StatusOK, string(data))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ParseRequestData(ctx *gin.Context, dst any) error {
|
||||||
|
return json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), dst)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user