package commands import ( "context" "fmt" "github.com/pharos-ai-factory/pharos-platform/services/beto/contexts/party_governance/application/ports" "github.com/pharos-ai-factory/pharos-platform/services/beto/contexts/party_governance/domain" model "github.com/pharos-ai-factory/pharos-platform/services/beto/contracts/requests/generated/model/party_governance" foundation "github.com/pharos-ai-factory/pharos-platform/services/beto/foundation/application" tactical "github.com/pharos-ai-factory/pharos-platform/services/beto/foundation/domain" ) type SetPartyAccessStateCommandHandler struct { Admission ports.Admission Repository ports.AuthenticationWriteRepository } func (h SetPartyAccessStateCommandHandler) Execute(ctx context.Context, commandContext foundation.CommandContext, command model.SetPartyAccessStateCommand) (foundation.CommandResult, error) { if err := ctx.Err(); err != nil { return foundation.CommandResult{}, err } if err := h.Admission.Check("SetPartyAccessState", commandContext, command); err != nil { return foundation.CommandResult{}, err } loaded, err := h.Repository.Get(ctx, commandContext.Target) if err != nil { return foundation.CommandResult{}, err } if !loaded.Exists { return foundation.CommandResult{}, tactical.Reject("not_found", "The Party authentication does not exist") } if loaded.State == nil || loaded.Version == 0 || loaded.State.Snapshot().PartyID != commandContext.Target { return foundation.CommandResult{}, fmt.Errorf("corrupt Party authentication write identity or revision") } before := loaded.State.Snapshot().AuthVersion if err := loaded.State.SetAccessState(domain.AccessState(command.AccessState), domain.ReasonCategory(command.ReasonCategory)); err != nil { return foundation.CommandResult{}, err } if loaded.State.Snapshot().AuthVersion == before { return foundation.Result("unchanged"), nil } if err := h.Repository.Save(ctx, loaded.State); err != nil { return foundation.CommandResult{}, err } return foundation.Result("changed"), nil }