feat: backend service
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package geo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"galaxy/backend/internal/postgres/jet/backend/table"
|
||||
|
||||
"github.com/go-jet/jet/v2/postgres"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// OnUserDeleted removes every `backend.user_country_counters` row for
|
||||
// userID. It is the geo-side leg of the soft-delete cascade documented
|
||||
// in `backend/PLAN.md` §5.2 / §5.8 and is invoked from
|
||||
// `backend/internal/user.Service.SoftDelete` after the
|
||||
// `accounts.deleted_at` write commits.
|
||||
//
|
||||
// The DELETE is idempotent: re-running on a user with no counters is a
|
||||
// successful no-op. Errors from the database are wrapped with the geo
|
||||
// prefix so caller logs identify the source.
|
||||
func (s *Service) OnUserDeleted(ctx context.Context, userID uuid.UUID) error {
|
||||
if s == nil {
|
||||
return errors.New("geo: nil service")
|
||||
}
|
||||
if userID == uuid.Nil {
|
||||
return errors.New("geo: nil user id")
|
||||
}
|
||||
stmt := table.UserCountryCounters.DELETE().
|
||||
WHERE(table.UserCountryCounters.UserID.EQ(postgres.UUID(userID)))
|
||||
if _, err := stmt.ExecContext(ctx, s.db); err != nil {
|
||||
return fmt.Errorf("geo: delete counters for %s: %w", userID, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user