Migrate accessories to user data

- Add user_accessory as the per-user accessory inventory table.
- Migrate old accessory wear records to user-owned accessory ids, including legacy common_accessory_m lookups for old installs.
- Allocate default accessories for newly created users and update accessory reads to use user_accessory at runtime.
- Validate accessory ownership when wearing accessories and keep existing accessory-based responses working.

Signed-off-by: Sean Du <do4suki@gmail.com>
This commit is contained in:
2026-06-13 07:36:21 +08:00
parent 17336de1b7
commit cb0200ff29
11 changed files with 436 additions and 72 deletions
+27 -6
View File
@@ -17,12 +17,11 @@ func (ss *Session) GetUserAccessoryWearByUnitOwningUserID(unitOwningUserID int)
return has, &wearData
}
func (ss *Session) GetAccessoryByAccessoryOwningUserID(accessoryOwningUserID int) (bool, *accessorymodel.Accessory) {
accessoryData := accessorymodel.Accessory{}
has, err := ss.MainEng.Table("common_accessory_m").Alias("a").
Join("LEFT", "accessory_m", "a.accessory_id = accessory_m.accessory_id").
Where("a.accessory_owning_user_id = ?", accessoryOwningUserID).
Cols("accessory_m.*,a.exp").Get(&accessoryData)
func (ss *Session) GetUserAccessoryByAccessoryOwningUserID(accessoryOwningUserID int) (bool, *usermodel.UserAccessory) {
accessoryData := usermodel.UserAccessory{}
has, err := ss.UserEng.Table(new(usermodel.UserAccessory)).
Where("accessory_owning_user_id = ?", accessoryOwningUserID).
Get(&accessoryData)
if ss.CheckErr(err) {
return false, nil
}
@@ -30,6 +29,28 @@ func (ss *Session) GetAccessoryByAccessoryOwningUserID(accessoryOwningUserID int
return has, &accessoryData
}
func (ss *Session) GetAccessoryByAccessoryOwningUserID(accessoryOwningUserID int) (bool, *accessorymodel.Accessory) {
has, userAccessoryData := ss.GetUserAccessoryByAccessoryOwningUserID(accessoryOwningUserID)
if !has {
return false, nil
}
accessoryData := accessorymodel.Accessory{}
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
}
func (ss *Session) GetUserAccessoryInfoByUnitOwningUserID(unitOwningUserID int) (bool, *liverecordschema.AccessoryInfo) {
has, wearData := ss.GetUserAccessoryWearByUnitOwningUserID(unitOwningUserID)
if !has {