Implement more endpoints & overhaul [2/n]
Drop LevelDB and move all the things to SQLite. Implemented endpoints: /api <unit, accessoryMaterialAll> /api <unit, accessoryTab> /live/continue /live/partyList /unit/favoriteAccessory (WIP) /unit/sale Signed-off-by: Sean Du <do4suki@gmail.com>
This commit is contained in:
@@ -2,12 +2,12 @@ package unit
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"honoka-chan/internal/middleware"
|
||||
unitmodel "honoka-chan/internal/model/unit"
|
||||
usermodel "honoka-chan/internal/model/user"
|
||||
"honoka-chan/internal/router"
|
||||
profileapischema "honoka-chan/internal/schema/api/profile"
|
||||
unitapischema "honoka-chan/internal/schema/api/unit"
|
||||
"honoka-chan/internal/schema/unit"
|
||||
unitschema "honoka-chan/internal/schema/unit"
|
||||
"honoka-chan/internal/session"
|
||||
"time"
|
||||
|
||||
@@ -18,7 +18,7 @@ func deck(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
deckReq := unit.DeckReq{}
|
||||
deckReq := unitschema.DeckReq{}
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &deckReq)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
@@ -63,53 +63,34 @@ func deck(ctx *gin.Context) {
|
||||
// 队伍成员信息
|
||||
for _, u := range deck.UnitDeckDetail {
|
||||
// 成员信息
|
||||
newUnitData := profileapischema.UnitData{}
|
||||
exists, err := ss.UserEng.Table("user_unit").Where("unit_owning_user_id = ?", u.UnitOwningUserID).Exist()
|
||||
unitData := unitmodel.UnitDataMap{}
|
||||
_, err = ss.GetBasicUnitInfo().
|
||||
Where("a.unit_owning_user_id = ?", u.UnitOwningUserID).Get(&unitData)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
if exists {
|
||||
// fmt.Println("新成员为用户增加成员")
|
||||
_, err = ss.UserEng.Table("user_unit").Where("unit_owning_user_id = ?", u.UnitOwningUserID).Get(&newUnitData)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
exists, err := ss.MainEng.Table("common_unit_m").Where("unit_owning_user_id = ?", u.UnitOwningUserID).Exist()
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
if exists {
|
||||
// fmt.Println("新成员为公共成员")
|
||||
_, err = ss.MainEng.Table("common_unit_m").Where("unit_owning_user_id = ?", u.UnitOwningUserID).Get(&newUnitData)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// fmt.Println("新成员不存在")
|
||||
err = errors.New("新成员不存在")
|
||||
}
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
}
|
||||
// fmt.Println("新的成员信息:", newUnitData)
|
||||
// fmt.Println("新的成员信息:", unitData)
|
||||
|
||||
// 插入新成员信息
|
||||
newUnitDeckData := unitapischema.UnitDeckData{}
|
||||
b, err := json.Marshal(newUnitData)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
newUnitDeckData := usermodel.UserDeckUnit{
|
||||
UserDeckID: userDeckId,
|
||||
UnitOwningUserID: unitData.UnitOwningUserID,
|
||||
UnitID: unitData.UnitID,
|
||||
Position: u.Position,
|
||||
Level: unitData.Level,
|
||||
LevelLimitID: unitData.LevelLimitID,
|
||||
DisplayRank: unitData.DisplayRank,
|
||||
Love: unitData.Love,
|
||||
UnitSkillLevel: unitData.UnitSkillLevel,
|
||||
IsRankMax: unitData.IsRankMax,
|
||||
IsLoveMax: unitData.IsLoveMax,
|
||||
IsLevelMax: unitData.IsLevelMax,
|
||||
IsSigned: unitData.IsSigned,
|
||||
BeforeLove: unitData.MaxLove,
|
||||
MaxLove: unitData.MaxLove,
|
||||
UserID: ss.UserID,
|
||||
InsertDate: time.Now().Unix(),
|
||||
}
|
||||
err = json.Unmarshal(b, &newUnitDeckData)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
newUnitDeckData.BeforeLove = newUnitDeckData.MaxLove
|
||||
newUnitDeckData.Position = u.Position
|
||||
newUnitDeckData.UserDeckID = userDeckId
|
||||
newUnitDeckData.InsertData = time.Now().Unix()
|
||||
|
||||
_, err = ss.UserEng.Table("user_deck_unit").Insert(&newUnitDeckData)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
@@ -117,7 +98,7 @@ func deck(ctx *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
ss.Respond(unit.DeckResp{
|
||||
ss.Respond(unitschema.DeckResp{
|
||||
ResponseData: []any{},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"honoka-chan/internal/middleware"
|
||||
"honoka-chan/internal/router"
|
||||
unitapischema "honoka-chan/internal/schema/api/unit"
|
||||
"honoka-chan/internal/schema/unit"
|
||||
unitschema "honoka-chan/internal/schema/unit"
|
||||
"honoka-chan/internal/session"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -15,7 +15,7 @@ func deckName(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
deckReq := unit.DeckNameReq{}
|
||||
deckReq := unitschema.DeckNameReq{}
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &deckReq)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
@@ -37,7 +37,7 @@ func deckName(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
ss.Respond(unit.DeckResp{
|
||||
ss.Respond(unitschema.DeckResp{
|
||||
ResponseData: []any{},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package unit
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"honoka-chan/internal/middleware"
|
||||
usermodel "honoka-chan/internal/model/user"
|
||||
"honoka-chan/internal/router"
|
||||
"honoka-chan/internal/schema/unit"
|
||||
unitschema "honoka-chan/internal/schema/unit"
|
||||
"honoka-chan/internal/session"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -13,7 +15,22 @@ func favorite(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
ss.Respond(unit.FavoriteResp{
|
||||
var req unitschema.FavoriteReq
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
data := usermodel.UserUnitData{
|
||||
FavoriteFlag: req.FavoriteFlag != 0,
|
||||
}
|
||||
_, err = ss.UserEng.Table(new(usermodel.UserUnitData)).
|
||||
ID(req.UnitOwningUserID).Cols("favorite_flag").Update(&data)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
ss.Respond(unitschema.FavoriteResp{
|
||||
ResponseData: []any{},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package unit
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"honoka-chan/internal/middleware"
|
||||
"honoka-chan/internal/router"
|
||||
"honoka-chan/internal/session"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type SetResp struct {
|
||||
ResponseData []any `json:"response_data"`
|
||||
ReleaseInfo []any `json:"release_info"`
|
||||
StatusCode int `json:"status_code"`
|
||||
}
|
||||
|
||||
func favoriteAccessory(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
fmt.Println(ctx.MustGet("request_data").(string))
|
||||
|
||||
ss.Respond(SetResp{
|
||||
ResponseData: []any{},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
})
|
||||
}
|
||||
|
||||
func init() {
|
||||
router.AddHandler("main.php", "POST", "/unit/favoriteAccessory", middleware.Common, favoriteAccessory)
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
"honoka-chan/internal/middleware"
|
||||
"honoka-chan/internal/router"
|
||||
"honoka-chan/internal/schema/unit"
|
||||
unitschema "honoka-chan/internal/schema/unit"
|
||||
"honoka-chan/internal/session"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -14,7 +14,7 @@ func removableSkillEquipment(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
req := unit.RemovableSkillEquipmentReq{}
|
||||
req := unitschema.RemovableSkillEquipmentReq{}
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
@@ -34,7 +34,7 @@ func removableSkillEquipment(ctx *gin.Context) {
|
||||
// 佩戴宝石
|
||||
for _, v := range req.Equip {
|
||||
// fmt.Println("Equip:", v.UnitOwningUserID, v.UnitRemovableSkillID)
|
||||
data := unit.RemovableSkillEquipmentData{
|
||||
data := unitschema.RemovableSkillEquipmentData{
|
||||
UnitRemovableSkillId: v.UnitRemovableSkillID,
|
||||
UnitOwningUserID: v.UnitOwningUserID,
|
||||
UserID: ss.UserID,
|
||||
@@ -45,7 +45,7 @@ func removableSkillEquipment(ctx *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
ss.Respond(unit.RemovableSkillEquipmentResp{
|
||||
ss.Respond(unitschema.RemovableSkillEquipmentResp{
|
||||
ResponseData: []any{},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
package unit
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"honoka-chan/internal/middleware"
|
||||
usermodel "honoka-chan/internal/model/user"
|
||||
"honoka-chan/internal/router"
|
||||
unitschema "honoka-chan/internal/schema/unit"
|
||||
"honoka-chan/internal/session"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func sale(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
req := unitschema.SaleReq{}
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
totalCoin := 0
|
||||
saleDetail := []unitschema.Detail{}
|
||||
for _, id := range req.UnitOwningUserID {
|
||||
salePrice := 1 // TODO: 从 unit_level_up_pattern_m 表获取实际价格
|
||||
totalCoin += salePrice
|
||||
|
||||
_, unitData := ss.GetUserUnitInfo(id)
|
||||
|
||||
saleDetail = append(saleDetail, unitschema.Detail{
|
||||
UnitOwningUserID: id,
|
||||
UnitID: unitData.UnitID,
|
||||
IsSigned: unitData.IsSigned,
|
||||
Price: salePrice,
|
||||
})
|
||||
|
||||
// 卸载宝石
|
||||
_, err = ss.UserEng.Table(new(usermodel.UserUnitSkillEquip)).
|
||||
Where("unit_owning_user_id = ?", id).Delete()
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
// 卸载饰品
|
||||
_, err = ss.UserEng.Table(new(usermodel.UserAccessoryWear)).
|
||||
Where("unit_owning_user_id = ?", id).Delete()
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
// 移除卡片
|
||||
_, err = ss.UserEng.Table(new(usermodel.UserUnitData)).
|
||||
Where("unit_owning_user_id = ?", id).Delete()
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
skillList := []int{}
|
||||
err = ss.MainEng.Table("unit_removable_skill_m").
|
||||
Where("skill_type = 1").Cols("unit_removable_skill_id").Find(&skillList)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
owningData := []unitschema.OwningInfo{}
|
||||
for _, sk := range skillList {
|
||||
owningData = append(owningData, unitschema.OwningInfo{
|
||||
UnitRemovableSkillID: sk,
|
||||
TotalAmount: 999,
|
||||
EquippedAmount: 0, // TODO: 计算实际数量
|
||||
InsertDate: "2023-01-01 12:00:00",
|
||||
})
|
||||
}
|
||||
|
||||
ss.Respond(unitschema.SaleResp{
|
||||
ResponseData: unitschema.SaleData{
|
||||
Total: totalCoin,
|
||||
Detail: saleDetail,
|
||||
BeforeUserInfo: ss.GetUserInfo(),
|
||||
AfterUserInfo: ss.GetUserInfo(),
|
||||
RewardBoxFlag: false,
|
||||
GetExchangePointList: []any{},
|
||||
UnitRemovableSkill: unitschema.UnitRemovableSkill{
|
||||
OwningInfo: owningData,
|
||||
},
|
||||
ServerTimestamp: time.Now().Unix(),
|
||||
},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
})
|
||||
}
|
||||
|
||||
func init() {
|
||||
router.AddHandler("main.php", "POST", "/unit/sale", middleware.Common, sale)
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
package unit
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"honoka-chan/internal/middleware"
|
||||
usermodel "honoka-chan/internal/model/user"
|
||||
"honoka-chan/internal/router"
|
||||
"honoka-chan/internal/schema/unit"
|
||||
unitschema "honoka-chan/internal/schema/unit"
|
||||
"honoka-chan/internal/session"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -13,7 +15,22 @@ func setDisplayRank(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
ss.Respond(unit.SetDisplayRankResp{
|
||||
var req unitschema.SetDisplayRankReq
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
data := usermodel.UserUnitData{
|
||||
DisplayRank: req.DisplayRank,
|
||||
}
|
||||
_, err = ss.UserEng.Table(new(usermodel.UserUnitData)).
|
||||
ID(req.UnitOwningUserID).Cols("display_rank").Update(&data)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
ss.Respond(unitschema.SetDisplayRankResp{
|
||||
ResponseData: []any{},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
"honoka-chan/internal/middleware"
|
||||
"honoka-chan/internal/router"
|
||||
"honoka-chan/internal/schema/unit"
|
||||
unitschema "honoka-chan/internal/schema/unit"
|
||||
"honoka-chan/internal/session"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -14,7 +14,7 @@ func wearAccessory(ctx *gin.Context) {
|
||||
ss := session.Get(ctx)
|
||||
defer ss.Finalize()
|
||||
|
||||
req := unit.WearAccessoryReq{}
|
||||
req := unitschema.WearAccessoryReq{}
|
||||
err := json.Unmarshal([]byte(ctx.MustGet("request_data").(string)), &req)
|
||||
if ss.CheckErr(err) {
|
||||
return
|
||||
@@ -34,7 +34,7 @@ func wearAccessory(ctx *gin.Context) {
|
||||
// 佩戴饰品
|
||||
for _, v := range req.Wear {
|
||||
// fmt.Println("Wear:", v.AccessoryOwningUserID, v.UnitOwningUserID)
|
||||
data := unit.WearAccessoryData{
|
||||
data := unitschema.WearAccessoryData{
|
||||
AccessoryOwningUserID: v.AccessoryOwningUserID,
|
||||
UnitOwningUserID: v.UnitOwningUserID,
|
||||
UserID: ss.UserID,
|
||||
@@ -45,7 +45,7 @@ func wearAccessory(ctx *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
ss.Respond(unit.WearAccessoryResp{
|
||||
ss.Respond(unitschema.WearAccessoryResp{
|
||||
ResponseData: []any{},
|
||||
ReleaseInfo: []any{},
|
||||
StatusCode: 200,
|
||||
|
||||
Reference in New Issue
Block a user