package useCases import ( "RenewCMS/internal/domain/apikey" "RenewCMS/internal/domain/user" "time" ) type RevokeAPIKeyUseCase struct { apiKeyRepository apikey.Repository userRepository user.Repository now func() time.Time } func NewRevokeAPIKeyUseCase(apiKeyRepository apikey.Repository, userRepository user.Repository, now func() time.Time) *RevokeAPIKeyUseCase { return &RevokeAPIKeyUseCase{apiKeyRepository, userRepository, now} } func (r *RevokeAPIKeyUseCase) RevokeAPIKey(requesterId uint32, keyId uint32) error { key, err := r.apiKeyRepository.Get(keyId) if err != nil { return err } requester, err := r.userRepository.Get(requesterId) if err != nil { return err } if requester.Role != user.RoleOwner && key.UserID != requester.ID { return apikey.ErrAPIKeyNotFound } if key.RevokedAt != nil { return nil } return r.apiKeyRepository.Revoke(key.ID, r.now()) }