diff --git a/internal/constant/errorcode.go b/internal/constant/errorcode.go index 92638c6..533cfa0 100644 --- a/internal/constant/errorcode.go +++ b/internal/constant/errorcode.go @@ -2,6 +2,8 @@ package constant type ErrorCode int +// https://github.com/DarkEnergyProcessor/NPPS4/blob/master/npps4/idol/error.py const ( + ErrorCodeNoUnitIsSellable ErrorCode = 1205 ErrorCodeLivePreciseListNotFound ErrorCode = 3421 ) diff --git a/internal/handler/api/api.go b/internal/handler/api/api.go index 20b6173..02a6e57 100644 --- a/internal/handler/api/api.go +++ b/internal/handler/api/api.go @@ -22,6 +22,7 @@ import ( "honoka-chan/internal/handler/api/notice" "honoka-chan/internal/handler/api/payment" "honoka-chan/internal/handler/api/profile" + "honoka-chan/internal/handler/api/reward" "honoka-chan/internal/handler/api/scenario" "honoka-chan/internal/handler/api/stamp" "honoka-chan/internal/handler/api/subscenario" @@ -91,6 +92,8 @@ func api(ctx *gin.Context) { result, err = payment.PaymentApi(ctx, v.Action) case "profile": result, err = profile.ProfileApi(ctx, v.Action, v.UserID) + case "reward": + result, err = reward.RewardApi(v.Action) case "scenario": result, err = scenario.ScenarioApi(ctx, v.Action) case "stamp": diff --git a/internal/handler/api/reward/history.go b/internal/handler/api/reward/history.go new file mode 100644 index 0000000..50feb60 --- /dev/null +++ b/internal/handler/api/reward/history.go @@ -0,0 +1,21 @@ +package reward + +import ( + rewardapischema "honoka-chan/internal/schema/api/reward" + "time" +) + +func rewardHistory() (res any, err error) { + res = rewardapischema.HistoryResp{ + Result: rewardapischema.HistoryData{ + ItemCount: 0, + Limit: 20, + History: []any{}, + }, + Status: 200, + CommandNum: false, + TimeStamp: time.Now().Unix(), + } + + return res, err +} diff --git a/internal/handler/api/reward/list.go b/internal/handler/api/reward/list.go new file mode 100644 index 0000000..313c101 --- /dev/null +++ b/internal/handler/api/reward/list.go @@ -0,0 +1,22 @@ +package reward + +import ( + rewardapischema "honoka-chan/internal/schema/api/reward" + "time" +) + +func rewardList() (res any, err error) { + res = rewardapischema.ListResp{ + Result: rewardapischema.ListData{ + ItemCount: 0, + Limit: 20, + Order: 0, + Items: []any{}, + }, + Status: 200, + CommandNum: false, + TimeStamp: time.Now().Unix(), + } + + return res, err +} diff --git a/internal/handler/api/reward/reward.go b/internal/handler/api/reward/reward.go new file mode 100644 index 0000000..297b020 --- /dev/null +++ b/internal/handler/api/reward/reward.go @@ -0,0 +1,17 @@ +package reward + +import ( + "fmt" +) + +func RewardApi(action string) (res any, err error) { + switch action { + case "rewardList": + res, err = rewardList() + case "rewardHistory": + res, err = rewardHistory() + default: + err = fmt.Errorf("unimplemented action: reward: %s", action) + } + return res, err +} diff --git a/internal/handler/handler.go b/internal/handler/handler.go index 022c299..75cc27b 100644 --- a/internal/handler/handler.go +++ b/internal/handler/handler.go @@ -22,6 +22,7 @@ import ( _ "honoka-chan/internal/handler/payment" _ "honoka-chan/internal/handler/personalnotice" _ "honoka-chan/internal/handler/profile" + _ "honoka-chan/internal/handler/reward" _ "honoka-chan/internal/handler/scenario" _ "honoka-chan/internal/handler/subscenario" _ "honoka-chan/internal/handler/tos" diff --git a/internal/handler/live/precisescore.go b/internal/handler/live/precisescore.go index 78cf8fc..9b2f28f 100644 --- a/internal/handler/live/precisescore.go +++ b/internal/handler/live/precisescore.go @@ -6,6 +6,7 @@ import ( "honoka-chan/internal/middleware" usermodel "honoka-chan/internal/model/user" "honoka-chan/internal/router" + commonschema "honoka-chan/internal/schema/common" liveschema "honoka-chan/internal/schema/live" "honoka-chan/internal/session" honokautils "honoka-chan/internal/utils" @@ -232,8 +233,8 @@ func preciseScore(ctx *gin.Context) { } } else { playResp = liveschema.PreciseScoreResp{ - ResponseData: map[string]constant.ErrorCode{ - "error_code": constant.ErrorCodeLivePreciseListNotFound, + ResponseData: commonschema.ErrorData{ + ErrorCode: constant.ErrorCodeLivePreciseListNotFound, }, ReleaseInfo: []any{}, StatusCode: 600, diff --git a/internal/handler/reward/history.go b/internal/handler/reward/history.go new file mode 100644 index 0000000..048fc51 --- /dev/null +++ b/internal/handler/reward/history.go @@ -0,0 +1,29 @@ +package reward + +import ( + "honoka-chan/internal/middleware" + "honoka-chan/internal/router" + rewardschema "honoka-chan/internal/schema/reward" + "honoka-chan/internal/session" + + "github.com/gin-gonic/gin" +) + +func history(ctx *gin.Context) { + ss := session.Get(ctx) + defer ss.Finalize() + + ss.Respond(rewardschema.HistoryResp{ + ResponseData: rewardschema.HistoryData{ + ItemCount: 0, + Limit: 20, + History: []any{}, + }, + ReleaseInfo: []any{}, + StatusCode: 200, + }) +} + +func init() { + router.AddHandler("main.php", "POST", "/reward/rewardHistory", middleware.Common, history) +} diff --git a/internal/handler/reward/list.go b/internal/handler/reward/list.go new file mode 100644 index 0000000..d6c082e --- /dev/null +++ b/internal/handler/reward/list.go @@ -0,0 +1,30 @@ +package reward + +import ( + "honoka-chan/internal/middleware" + "honoka-chan/internal/router" + rewardschema "honoka-chan/internal/schema/reward" + "honoka-chan/internal/session" + + "github.com/gin-gonic/gin" +) + +func list(ctx *gin.Context) { + ss := session.Get(ctx) + defer ss.Finalize() + + ss.Respond(rewardschema.ListResp{ + ResponseData: rewardschema.ListData{ + ItemCount: 0, + Limit: 20, + Order: 0, + Items: []any{}, + }, + ReleaseInfo: []any{}, + StatusCode: 200, + }) +} + +func init() { + router.AddHandler("main.php", "POST", "/reward/rewardList", middleware.Common, list) +} diff --git a/internal/handler/reward/sellunit.go b/internal/handler/reward/sellunit.go new file mode 100644 index 0000000..29611d0 --- /dev/null +++ b/internal/handler/reward/sellunit.go @@ -0,0 +1,29 @@ +package reward + +import ( + "honoka-chan/internal/constant" + "honoka-chan/internal/middleware" + "honoka-chan/internal/router" + commonschema "honoka-chan/internal/schema/common" + rewardschema "honoka-chan/internal/schema/reward" + "honoka-chan/internal/session" + + "github.com/gin-gonic/gin" +) + +func sellUnit(ctx *gin.Context) { + ss := session.Get(ctx) + defer ss.Finalize() + + ss.Respond(rewardschema.SellUnitResp{ + ResponseData: commonschema.ErrorData{ + ErrorCode: constant.ErrorCodeNoUnitIsSellable, + }, + ReleaseInfo: []any{}, + StatusCode: 600, + }) +} + +func init() { + router.AddHandler("main.php", "POST", "/reward/sellUnit", middleware.Common, sellUnit) +} diff --git a/internal/schema/api/reward/history.go b/internal/schema/api/reward/history.go new file mode 100644 index 0000000..38759ad --- /dev/null +++ b/internal/schema/api/reward/history.go @@ -0,0 +1,14 @@ +package rewardapischema + +type HistoryData struct { + ItemCount int `json:"item_count"` + Limit int `json:"limit"` + History []any `json:"history"` +} + +type HistoryResp struct { + Result HistoryData `json:"result"` + Status int `json:"status"` + CommandNum bool `json:"commandNum"` + TimeStamp int64 `json:"timeStamp"` +} diff --git a/internal/schema/api/reward/list.go b/internal/schema/api/reward/list.go new file mode 100644 index 0000000..84c15fd --- /dev/null +++ b/internal/schema/api/reward/list.go @@ -0,0 +1,15 @@ +package rewardapischema + +type ListData struct { + ItemCount int `json:"item_count"` + Limit int `json:"limit"` + Order int `json:"order"` + Items []any `json:"items"` +} + +type ListResp struct { + Result ListData `json:"result"` + Status int `json:"status"` + CommandNum bool `json:"commandNum"` + TimeStamp int64 `json:"timeStamp"` +} diff --git a/internal/schema/common/common.go b/internal/schema/common/common.go new file mode 100644 index 0000000..0ee83aa --- /dev/null +++ b/internal/schema/common/common.go @@ -0,0 +1,7 @@ +package commonschema + +import "honoka-chan/internal/constant" + +type ErrorData struct { + ErrorCode constant.ErrorCode `json:"error_code"` +} diff --git a/internal/schema/reward/history.go b/internal/schema/reward/history.go new file mode 100644 index 0000000..f22545b --- /dev/null +++ b/internal/schema/reward/history.go @@ -0,0 +1,13 @@ +package rewardschema + +type HistoryData struct { + ItemCount int `json:"item_count"` + Limit int `json:"limit"` + History []any `json:"history"` +} + +type HistoryResp struct { + ResponseData HistoryData `json:"response_data"` + ReleaseInfo []any `json:"release_info"` + StatusCode int `json:"status_code"` +} diff --git a/internal/schema/reward/list.go b/internal/schema/reward/list.go new file mode 100644 index 0000000..3a45e26 --- /dev/null +++ b/internal/schema/reward/list.go @@ -0,0 +1,14 @@ +package rewardschema + +type ListData struct { + ItemCount int `json:"item_count"` + Limit int `json:"limit"` + Order int `json:"order"` + Items []any `json:"items"` +} + +type ListResp struct { + ResponseData ListData `json:"response_data"` + ReleaseInfo []any `json:"release_info"` + StatusCode int `json:"status_code"` +} diff --git a/internal/schema/reward/sellunit.go b/internal/schema/reward/sellunit.go new file mode 100644 index 0000000..5bab972 --- /dev/null +++ b/internal/schema/reward/sellunit.go @@ -0,0 +1,7 @@ +package rewardschema + +type SellUnitResp struct { + ResponseData any `json:"response_data"` + ReleaseInfo []any `json:"release_info"` + StatusCode int `json:"status_code"` +}