Files
honoka-chan/internal/session/accessory.go
T
2026-07-13 08:03:10 +08:00

89 lines
2.9 KiB
Go

package session
import (
accessorymodel "honoka-chan/internal/model/accessory"
usermodel "honoka-chan/internal/model/user"
liverecordschema "honoka-chan/internal/schema/liverecord"
)
func (ss *Session) GetUserAccessoryWearByUnitOwningUserID(unitOwningUserID int) (bool, *usermodel.UserAccessoryWear) {
wearData := usermodel.UserAccessoryWear{}
has, err := ss.UserEng.Table(new(usermodel.UserAccessoryWear)).
Where("user_id = ? AND unit_owning_user_id = ?", ss.UserID, unitOwningUserID).Get(&wearData)
if ss.CheckErr(err) {
return false, nil
}
return has, &wearData
}
func (ss *Session) GetUserAccessoryByAccessoryOwningUserID(accessoryOwningUserID int) (bool, *usermodel.UserAccessory) {
return ss.GetUserAccessoryByAccessoryOwningUserIDForUser(ss.UserID, accessoryOwningUserID)
}
func (ss *Session) GetUserAccessoryByAccessoryOwningUserIDForUser(userID, accessoryOwningUserID int) (bool, *usermodel.UserAccessory) {
accessoryData := usermodel.UserAccessory{}
has, err := ss.UserEng.Table(new(usermodel.UserAccessory)).
Where("user_id = ? AND accessory_owning_user_id = ?", userID, accessoryOwningUserID).
Get(&accessoryData)
if ss.CheckErr(err) {
return false, nil
}
return has, &accessoryData
}
func (ss *Session) GetAccessoryByAccessoryOwningUserID(accessoryOwningUserID int) (bool, *accessorymodel.Accessory) {
return ss.GetAccessoryByAccessoryOwningUserIDForUser(ss.UserID, accessoryOwningUserID)
}
func (ss *Session) GetAccessoryByAccessoryOwningUserIDForUser(userID, accessoryOwningUserID int) (bool, *accessorymodel.Accessory) {
has, userAccessoryData := ss.GetUserAccessoryByAccessoryOwningUserIDForUser(userID, accessoryOwningUserID)
if !has {
return false, nil
}
type accessoryWithUserExp struct {
accessorymodel.Accessory `xorm:"extends"`
Exp int `xorm:"-"`
}
accessoryData := accessoryWithUserExp{}
has, err := ss.MainEng.Table("accessory_m").
Where("accessory_id = ?", userAccessoryData.AccessoryID).
Get(&accessoryData)
if ss.CheckErr(err) {
return false, nil
}
if !has {
return false, nil
}
accessoryData.Exp = userAccessoryData.Exp
return has, &accessoryData.Accessory
}
func (ss *Session) GetUserAccessoryInfoByUnitOwningUserID(unitOwningUserID int) (bool, *liverecordschema.AccessoryInfo) {
has, wearData := ss.GetUserAccessoryWearByUnitOwningUserID(unitOwningUserID)
if !has {
return false, nil
}
has, accessoryData := ss.GetAccessoryByAccessoryOwningUserID(wearData.AccessoryOwningUserID)
if !has {
return false, nil
}
return has, &liverecordschema.AccessoryInfo{
AccessoryOwningUserID: wearData.AccessoryOwningUserID,
AccessoryID: accessoryData.AccessoryID,
Exp: accessoryData.Exp,
NextExp: 0,
Level: accessoryData.MaxLevel,
MaxLevel: accessoryData.MaxLevel,
RankUpCount: accessoryData.MaxLevel - accessoryData.DefaultMaxLevel,
FavoriteFlag: true,
}
}