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) } if err := db.Where("user_id = ? OR target_id = ?", userID, userID).Delete(&UserFollow{}).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 for key := range m.follows { if key.UserID == userID || key.TargetID == userID { delete(m.follows, key) } } return nil }