feat(admin): add admin endpoint to list user devices with JPush registration IDs
- Add AdminDeviceTokenResponse DTO including push_token (RegistrationID) for push debugging - Add DeviceTokenToAdminResponse and DeviceTokensToAdminResponse converters - Inject PushService into AdminUserHandler for retrieving user devices - Register GET /api/v1/admin/users/:id/devices route for querying target user's device tokens
This commit is contained in:
@@ -18,6 +18,10 @@ type DeviceTokenRepository interface {
|
||||
GetActiveByUserID(userID string) ([]*model.DeviceToken, error)
|
||||
GetByDeviceID(deviceID string) (*model.DeviceToken, error)
|
||||
GetByPushToken(pushToken string) (*model.DeviceToken, error)
|
||||
// DeactivateByPushToken 失效指定 pushToken 的所有记录
|
||||
// 用于处理同设备多账号场景:registration_id 是设备级标识,
|
||||
// 当新账号在同一设备注册时,需失效旧账号对该 pushToken 的关联,避免跨账号误推
|
||||
DeactivateByPushToken(pushToken string) error
|
||||
DeactivateAllExcept(userID int64, deviceID string) error
|
||||
Upsert(token *model.DeviceToken) error
|
||||
UpdateLastUsed(deviceID string) error
|
||||
@@ -104,6 +108,15 @@ func (r *deviceTokenRepository) GetByPushToken(pushToken string) (*model.DeviceT
|
||||
return &token, nil
|
||||
}
|
||||
|
||||
// DeactivateByPushToken 失效指定 pushToken 的所有记录
|
||||
// registration_id(pushToken)是设备级标识,同一物理设备登录不同账号时 pushToken 不变。
|
||||
// 失效旧关联可防止给账号 A 推送时,同设备的账号 B 也收到通知。
|
||||
func (r *deviceTokenRepository) DeactivateByPushToken(pushToken string) error {
|
||||
return r.db.Model(&model.DeviceToken{}).
|
||||
Where("push_token = ?", pushToken).
|
||||
Update("is_active", false).Error
|
||||
}
|
||||
|
||||
// DeactivateAllExcept 登出其他设备(停用除指定设备外的所有设备)
|
||||
func (r *deviceTokenRepository) DeactivateAllExcept(userID int64, deviceID string) error {
|
||||
return r.db.Model(&model.DeviceToken{}).
|
||||
|
||||
Reference in New Issue
Block a user