diff --git a/assets/data.example.db b/assets/data.example.db index 1a38038..c9a13b8 100644 Binary files a/assets/data.example.db and b/assets/data.example.db differ diff --git a/assets/main.db b/assets/main.db index e21898f..3f775f5 100644 Binary files a/assets/main.db and b/assets/main.db differ diff --git a/handler/api.go b/handler/api.go index d1a290f..17f3879 100644 --- a/handler/api.go +++ b/handler/api.go @@ -32,7 +32,7 @@ func ApiHandler(ctx *gin.Context) { var res []byte var err error // fmt.Println(v) - // fmt.Println(v.Module, v.Action) + fmt.Println(v.Module, v.Action) switch v.Module { case "login": @@ -309,10 +309,23 @@ func ApiHandler(ctx *gin.Context) { CheckErr(err) case "accessoryAll": // key = "unit_accessory_result" + accessoryList := []model.AccessoryList{} + err := MainEng.Table("common_accessory_m").Find(&accessoryList) + CheckErr(err) + for k, _ := range accessoryList { + accessoryList[k].NextExp = 0 + accessoryList[k].Level = 8 + accessoryList[k].MaxLevel = 8 + accessoryList[k].RankUpCount = 4 + accessoryList[k].FavoriteFlag = true + } + wearingInfo := []model.WearingInfo{} + err = UserEng.Table("accessory_wear_m").Where("user_id = ?", ctx.GetString("userid")).Find(&wearingInfo) + CheckErr(err) unitAccResp := model.UnitAccessoryAllResp{ Result: model.UnitAccessoryAllResult{ - AccessoryList: []interface{}{}, - WearingInfo: []interface{}{}, + AccessoryList: accessoryList, + WearingInfo: wearingInfo, EspecialCreateFlag: false, }, Status: 200, @@ -321,6 +334,11 @@ func ApiHandler(ctx *gin.Context) { } res, err = json.Marshal(unitAccResp) CheckErr(err) + // case "accessoryTab": + // case "accessoryMaterialAll": + default: + err = errors.New("invalid option") + CheckErr(err) } case "costume": // key = "costume_list_result" diff --git a/handler/unit.go b/handler/unit.go index 0848f74..521eb3e 100644 --- a/handler/unit.go +++ b/handler/unit.go @@ -256,3 +256,64 @@ func SetDeckNameHandler(ctx *gin.Context) { ctx.String(http.StatusOK, string(resp)) } + +func WearAccessory(ctx *gin.Context) { + fmt.Println(ctx.PostForm("request_data")) + req := model.WearAccessoryReq{} + if err := json.Unmarshal([]byte(ctx.PostForm("request_data")), &req); err != nil { + panic(err) + } + + UserEng.ShowSQL(true) + // 开始事务 + session := UserEng.NewSession() + defer session.Close() + if err := session.Begin(); err != nil { + session.Rollback() + panic(err) + } + + // 取下饰品 + for _, v := range req.Remove { + fmt.Println("Remove:", v.AccessoryOwningUserID, v.UnitOwningUserID) + _, err := session.Table("accessory_wear_m"). + Where("accessory_owning_user_id = ? AND unit_owning_user_id = ? AND user_id = ?", v.AccessoryOwningUserID, v.UnitOwningUserID, ctx.GetString("userid")). + Delete() + if err != nil { + session.Rollback() + panic(err) + } + } + // 佩戴饰品 + for _, v := range req.Wear { + fmt.Println("Wear:", v.AccessoryOwningUserID, v.UnitOwningUserID) + data := model.AccessoryWearData{ + AccessoryOwningUserID: v.AccessoryOwningUserID, + UnitOwningUserID: v.UnitOwningUserID, + UserId: ctx.GetString("userid"), + } + _, err := session.Table("accessory_wear_m").Insert(&data) + CheckErr(err) + } + if err := session.Commit(); err != nil { + session.Rollback() + panic(err) + } + + wearResp := model.AwardSetResp{ + ResponseData: []interface{}{}, + ReleaseInfo: []interface{}{}, + StatusCode: 200, + } + resp, err := json.Marshal(wearResp) + CheckErr(err) + + nonce := ctx.GetInt("nonce") + nonce++ + + ctx.Header("user_id", ctx.GetString("userid")) + ctx.Header("authorize", fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", time.Now().Unix(), ctx.GetString("token"), nonce, ctx.GetString("userid"), ctx.GetInt64("req_time"))) + ctx.Header("X-Message-Sign", base64.StdEncoding.EncodeToString(encrypt.RSA_Sign_SHA1(resp, "privatekey.pem"))) + + ctx.String(http.StatusOK, string(resp)) +} diff --git a/main.go b/main.go index 421a9a6..a52c5e3 100644 --- a/main.go +++ b/main.go @@ -85,6 +85,7 @@ func main() { m.POST("/unit/deckName", handler.SetDeckNameHandler) m.POST("/unit/favorite", handler.SetDisplayRankHandler) m.POST("/unit/setDisplayRank", handler.SetDisplayRankHandler) + m.POST("/unit/wearAccessory", handler.WearAccessory) m.POST("/user/changeName", handler.ChangeNameHandler) m.POST("/user/changeNavi", handler.ChangeNaviHandler) m.POST("/user/setNotificationToken", handler.SetNotificationTokenHandler) diff --git a/model/unit.go b/model/unit.go index b249adb..310ea51 100644 --- a/model/unit.go +++ b/model/unit.go @@ -1,11 +1,31 @@ package model -type UnitAccessoryAllResult struct { - AccessoryList []interface{} `json:"accessory_list"` - WearingInfo []interface{} `json:"wearing_info"` - EspecialCreateFlag bool `json:"especial_create_flag"` +// AccessoryList ... +type AccessoryList struct { + AccessoryOwningUserID int `json:"accessory_owning_user_id" xorm:"accessory_owning_user_id"` + AccessoryID int `json:"accessory_id" xorm:"accessory_id"` + Exp int `json:"exp" xorm:"exp"` + NextExp int `json:"next_exp" xorm:"-"` + Level int `json:"level" xorm:"-"` + MaxLevel int `json:"max_level" xorm:"-"` + RankUpCount int `json:"rank_up_count" xorm:"-"` + FavoriteFlag bool `json:"favorite_flag" xorm:"-"` } +// WearingInfo +type WearingInfo struct { + UnitOwningUserID int `json:"unit_owning_user_id" xorm:"unit_owning_user_id"` + AccessoryOwningUserID int `json:"accessory_owning_user_id" xorm:"accessory_owning_user_id"` +} + +// UnitAccessoryAllResult ... +type UnitAccessoryAllResult struct { + AccessoryList []AccessoryList `json:"accessory_list"` + WearingInfo []WearingInfo `json:"wearing_info"` + EspecialCreateFlag bool `json:"especial_create_flag"` +} + +// UnitAccessoryAllResp ... type UnitAccessoryAllResp struct { Result UnitAccessoryAllResult `json:"result"` Status int `json:"status"` @@ -13,6 +33,44 @@ type UnitAccessoryAllResp struct { TimeStamp int64 `json:"timeStamp"` } +// WearAccessoryReq ... +type WearAccessoryReq struct { + Module string `json:"module"` + Remove []Remove `json:"remove"` + Action string `json:"action"` + TimeStamp int `json:"timeStamp"` + Wear []Wear `json:"wear"` + Mgd int `json:"mgd"` + CommandNum string `json:"commandNum"` +} + +// Remove ... +type Remove struct { + AccessoryOwningUserID int `json:"accessory_owning_user_id"` + UnitOwningUserID int `json:"unit_owning_user_id"` +} + +// Wear ... +type Wear struct { + AccessoryOwningUserID int `json:"accessory_owning_user_id"` + UnitOwningUserID int `json:"unit_owning_user_id"` +} + +// AccessoryWearData ... +type AccessoryWearData struct { + Id int `xorm:"id pk autoincr"` + AccessoryOwningUserID int `xorm:"accessory_owning_user_id"` + UnitOwningUserID int `xorm:"unit_owning_user_id"` + UserId string `xorm:"user_id"` +} + +// AccessoryWearResp ... +type AccessoryWearResp struct { + ResponseData []interface{} `json:"response_data"` + ReleaseInfo []interface{} `json:"release_info"` + StatusCode int `json:"status_code"` +} + // module: unit, action: unitAll type Costume struct { UnitID int `json:"unit_id"` diff --git a/tools/accessory.go b/tools/accessory.go new file mode 100644 index 0000000..f4ccf2e --- /dev/null +++ b/tools/accessory.go @@ -0,0 +1,45 @@ +package tools + +import "fmt" + +type AccessoryData struct { + AccessoryId int `xorm:"accessory_id"` + SmileMax int `xorm:"smile_max"` + PureMax int `xorm:"pure_max"` + CoolMax int `xorm:"cool_max"` +} + +type CommonAccessoryData struct { + AccessoryOwningUserId int `xorm:"accessory_owning_user_id pk autoincr"` + AccessoryId int `xorm:"accessory_id"` + Exp int `xorm:"exp"` +} + +func ProcessAccessoryData() { + var accessoryData []AccessoryData + err := MainEng.Table("accessory_m").Where("max_level = 8 AND rarity = 4").Cols("accessory_id,smile_max,pure_max,cool_max").Find(&accessoryData) + CheckErr(err) + + for _, data := range accessoryData { + var exp int + exists, err := MainEng.Table("accessory_level_m").Where("accessory_id = ?", data.AccessoryId).Select("MAX(next_exp)").Get(&exp) + CheckErr(err) + if !exists { + fmt.Println("LOL") + continue + } + commonData := CommonAccessoryData{ + AccessoryId: data.AccessoryId, + Exp: exp, + } + // fmt.Println(commonData) + // 每种饰品生成9个 + for i := 0; i < 9; i++ { + affected, err := MainEng.Table("common_accessory_m").Insert(&commonData) + CheckErr(err) + fmt.Printf("Time: %d, Aff: %d\n", i, affected) + + commonData.AccessoryOwningUserId += i + 1 + } + } +} diff --git a/tools/gen.go b/tools/gen.go index 0587116..c35e8b7 100644 --- a/tools/gen.go +++ b/tools/gen.go @@ -916,8 +916,8 @@ func GenApi2Data() { unitAccResp := model.UnitAccessoryAllResp{ // _ = model.UnitAccessoryAllResp{ Result: model.UnitAccessoryAllResult{ - AccessoryList: []interface{}{}, - WearingInfo: []interface{}{}, + AccessoryList: []model.AccessoryList{}, + WearingInfo: []model.WearingInfo{}, EspecialCreateFlag: false, }, Status: 200, diff --git a/tools/tools.go b/tools/tools.go index 56877f4..f7633bc 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -26,6 +26,7 @@ func init() { // GenDownloadDb() // GenCommonUnitData() InitUserData(0) + // ProcessAccessoryData() } func CheckErr(err error) {