spark-server/internal/module/friend/model/purge.go
2026-09-20 17:49:09 +08:00

56 lines
1.3 KiB
Go

package model
import (
"context"
"spark-server/internal/pkg/errs"
)
func (m *Repo) PurgeUser(ctx context.Context, userID int64) error {
if userID <= 0 {
return errs.ErrInvalidArgument
}
db, err := m.session(ctx)
if err != nil {
return err
}
if err := db.Where("user_id = ? OR friend_id = ?", userID, userID).Delete(&FriendRelation{}).Error; err != nil {
return mapDBErr(err)
}
if err := db.Where("from_user = ? OR to_user = ?", userID, userID).Delete(&FriendRequest{}).Error; err != nil {
return mapDBErr(err)
}
if err := db.Where("user_id = ? OR target_id = ?", userID, userID).Delete(&FriendReport{}).Error; err != nil {
return mapDBErr(err)
}
return nil
}
func (m *MemoryRepo) PurgeUser(_ context.Context, userID int64) error {
if userID <= 0 {
return errs.ErrInvalidArgument
}
m.mu.Lock()
defer m.mu.Unlock()
for key := range m.relations {
if key.UserID == userID || key.FriendID == userID {
delete(m.relations, key)
}
}
for id, req := range m.requests {
if req == nil || (req.FromUser != userID && req.ToUser != userID) {
continue
}
delete(m.requests, id)
delete(m.byPair, requestKey{From: req.FromUser, To: req.ToUser})
}
kept := m.reports[:0]
for _, r := range m.reports {
if r != nil && r.UserID != userID && r.TargetID != userID {
kept = append(kept, r)
}
}
m.reports = kept
return nil
}