spark-server/internal/module/friend/model/purge.go
DESKTOP-L8OUL9F\gfl0034 ce9c7a13aa feat: 互相关注后自动成为好友
一方关注只记关注。双方互关时写入已有双向好友边;取消关注若不再互关只删好友边,不删消息。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 21:51:18 +08:00

64 lines
1.6 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)
}
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
}