56 lines
1.3 KiB
Go
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
|
|
}
|