Skip to content
This repository has been archived by the owner on Oct 14, 2024. It is now read-only.

Commit

Permalink
refactor(api): asset scan estimation statuses (#1074)
Browse files Browse the repository at this point in the history
* refactor(api): asset scan estimation statuses

* refactor(api): add guards to endpoints, fix unit test, change db schema

* fix(api): undefined variable

* fix(api): gofumpt controller

* fix(api): gofmt file

* refactor(api): dont return pointer from GetStatus functions

* refactor(api): remove manually from aborted description

* refactor(api): rerun oapicodegen
  • Loading branch information
adamtagscherer authored Jan 11, 2024
1 parent 8099c85 commit 8eb8eb5
Show file tree
Hide file tree
Showing 15 changed files with 491 additions and 295 deletions.
12 changes: 6 additions & 6 deletions api/models/assetscan.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@

package models

func (r *AssetScan) GetStatus() (*AssetScanStatus, bool) {
func (r *AssetScan) GetStatus() (AssetScanStatus, bool) {
if r.Status == nil {
return nil, false
return AssetScanStatus{}, false
}

return r.Status, true
return *r.Status, true
}

func (r *AssetScan) GetID() (string, bool) {
Expand Down Expand Up @@ -56,10 +56,10 @@ func (r *AssetScan) GetAssetID() (string, bool) {
return assetID, ok
}

func (r *AssetScan) GetResourceCleanupStatus() (*ResourceCleanupStatus, bool) {
func (r *AssetScan) GetResourceCleanupStatus() (ResourceCleanupStatus, bool) {
if r.ResourceCleanupStatus == nil {
return nil, false
return ResourceCleanupStatus{}, false
}

return r.ResourceCleanupStatus, true
return *r.ResourceCleanupStatus, true
}
22 changes: 4 additions & 18 deletions api/models/assetscanestimation.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,12 @@

package models

func (r *AssetScanEstimation) GetState() (AssetScanEstimationStateState, bool) {
var state AssetScanEstimationStateState
var ok bool

if r.State != nil {
state, ok = r.State.GetState()
func (r *AssetScanEstimation) GetStatus() (AssetScanEstimationStatus, bool) {
if r.Status == nil {
return AssetScanEstimationStatus{}, false
}

return state, ok
return *r.Status, true
}

func (r *AssetScanEstimation) GetID() (string, bool) {
Expand Down Expand Up @@ -58,14 +55,3 @@ func (r *AssetScanEstimation) GetAssetID() (string, bool) {

return assetID, ok
}

func (s *AssetScanEstimationState) GetState() (AssetScanEstimationStateState, bool) {
var state AssetScanEstimationStateState
var ok bool

if s.State != nil {
state, ok = *s.State, true
}

return state, ok
}
94 changes: 94 additions & 0 deletions api/models/assetscanestimationstatus.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package models

import (
"fmt"
"time"
)

var assetScanEstimationStatusStateTransitions = map[AssetScanEstimationStatusState][]AssetScanEstimationStatusState{
AssetScanEstimationStatusStatePending: {
AssetScanEstimationStatusStateAborted,
AssetScanEstimationStatusStateDone,
AssetScanEstimationStatusStateFailed,
},
AssetScanEstimationStatusStateFailed: {
AssetScanEstimationStatusStateAborted,
},
}

var assetScanEstimationStatusReasonMapping = map[AssetScanEstimationStatusState][]AssetScanEstimationStatusReason{
AssetScanEstimationStatusStatePending: {
AssetScanEstimationStatusReasonCreated,
},
AssetScanEstimationStatusStateAborted: {
AssetScanEstimationStatusReasonCancellation,
},
AssetScanEstimationStatusStateFailed: {
AssetScanEstimationStatusReasonAborted,
AssetScanEstimationStatusReasonError,
},
AssetScanEstimationStatusStateDone: {
AssetScanEstimationStatusReasonSuccess,
},
}

func NewAssetScanEstimationStatus(s AssetScanEstimationStatusState, r AssetScanEstimationStatusReason, m *string) *AssetScanEstimationStatus {
return &AssetScanEstimationStatus{
State: s,
Reason: r,
Message: m,
LastTransitionTime: time.Now(),
}
}

func (a *AssetScanEstimationStatus) Equals(b AssetScanEstimationStatus) bool {
if a.Message == nil && b.Message != nil {
return false
}
if b.Message == nil && a.Message != nil {
return false
}
if a.Message == nil && b.Message == nil {
return a.State == b.State && a.Reason == b.Reason
}

return a.State == b.State && a.Reason == b.Reason && *a.Message == *b.Message
}

func (a *AssetScanEstimationStatus) isValidStatusTransition(b AssetScanEstimationStatus) error {
transitions := assetScanEstimationStatusStateTransitions[a.State]
for _, transition := range transitions {
if transition == b.State {
return nil
}
}

return fmt.Errorf("invalid transition: from=%s to=%s", a.State, b.State)
}

func (a *AssetScanEstimationStatus) isValidReason() error {
reasons := assetScanEstimationStatusReasonMapping[a.State]
for _, reason := range reasons {
if reason == a.Reason {
return nil
}
}

return fmt.Errorf("invalid reason for state: state=%s reason=%s", a.State, a.Reason)
}

func (a *AssetScanEstimationStatus) IsValidTransition(b AssetScanEstimationStatus) error {
if a.Equals(b) {
return nil
}

if err := b.isValidReason(); err != nil {
return err
}

if err := a.isValidStatusTransition(b); err != nil {
return err
}

return nil
}
6 changes: 3 additions & 3 deletions api/models/assetscanstatus.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func NewAssetScanStatus(s AssetScanStatusState, r AssetScanStatusReason, m *stri
}
}

func (a *AssetScanStatus) Equals(b *AssetScanStatus) bool {
func (a *AssetScanStatus) Equals(b AssetScanStatus) bool {
if a.Message == nil && b.Message != nil {
return false
}
Expand All @@ -77,7 +77,7 @@ func (a *AssetScanStatus) Equals(b *AssetScanStatus) bool {
return a.State == b.State && a.Reason == b.Reason && *a.Message == *b.Message
}

func (a *AssetScanStatus) isValidStatusTransition(b *AssetScanStatus) error {
func (a *AssetScanStatus) isValidStatusTransition(b AssetScanStatus) error {
transitions := assetScanStatusStateTransitions[a.State]
for _, transition := range transitions {
if transition == b.State {
Expand All @@ -99,7 +99,7 @@ func (a *AssetScanStatus) isValidReason() error {
return fmt.Errorf("invalid reason for state: state=%s reason=%s", a.State, a.Reason)
}

func (a *AssetScanStatus) IsValidTransition(b *AssetScanStatus) error {
func (a *AssetScanStatus) IsValidTransition(b AssetScanStatus) error {
if a.Equals(b) {
return nil
}
Expand Down
86 changes: 60 additions & 26 deletions api/models/models.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions api/models/resourcecleanupstatus.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func NewResourceCleanupStatus(s ResourceCleanupStatusState, r ResourceCleanupSta
}
}

func (a *ResourceCleanupStatus) Equals(b *ResourceCleanupStatus) bool {
func (a *ResourceCleanupStatus) Equals(b ResourceCleanupStatus) bool {
if a.Message == nil && b.Message != nil {
return false
}
Expand All @@ -53,7 +53,7 @@ func (a *ResourceCleanupStatus) Equals(b *ResourceCleanupStatus) bool {
return a.State == b.State && a.Reason == b.Reason && *a.Message == *b.Message
}

func (a *ResourceCleanupStatus) isValidStatusTransition(b *ResourceCleanupStatus) error {
func (a *ResourceCleanupStatus) isValidStatusTransition(b ResourceCleanupStatus) error {
transitions := resourceCleanupStatusStateTransitions[a.State]
for _, transition := range transitions {
if transition == b.State {
Expand All @@ -75,7 +75,7 @@ func (a *ResourceCleanupStatus) isValidReason() error {
return fmt.Errorf("invalid reason for state: state=%s reason=%s", a.State, a.Reason)
}

func (a *ResourceCleanupStatus) IsValidTransition(b *ResourceCleanupStatus) error {
func (a *ResourceCleanupStatus) IsValidTransition(b ResourceCleanupStatus) error {
if a.Equals(b) {
return nil
}
Expand Down
6 changes: 3 additions & 3 deletions api/models/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ import "time"

const DefaultMaxParallelScanners int = 2

func (s *Scan) GetStatus() (*ScanStatus, bool) {
func (s *Scan) GetStatus() (ScanStatus, bool) {
if s.Status == nil {
return nil, false
return ScanStatus{}, false
}

return s.Status, true
return *s.Status, true
}

func (s *Scan) GetID() (string, bool) {
Expand Down
6 changes: 3 additions & 3 deletions api/models/scanstatus.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func NewScanStatus(s ScanStatusState, r ScanStatusReason, m *string) *ScanStatus
}
}

func (a *ScanStatus) Equals(b *ScanStatus) bool {
func (a *ScanStatus) Equals(b ScanStatus) bool {
if a.Message == nil && b.Message != nil {
return false
}
Expand All @@ -73,7 +73,7 @@ func (a *ScanStatus) Equals(b *ScanStatus) bool {
return a.State == b.State && a.Reason == b.Reason && *a.Message == *b.Message
}

func (a *ScanStatus) isValidStatusTransition(b *ScanStatus) error {
func (a *ScanStatus) isValidStatusTransition(b ScanStatus) error {
transitions := scanStatusStateTransitions[a.State]
for _, transition := range transitions {
if transition == b.State {
Expand All @@ -95,7 +95,7 @@ func (a *ScanStatus) isValidReason() error {
return fmt.Errorf("invalid reason for state: state=%s reason=%s", a.State, a.Reason)
}

func (a *ScanStatus) IsValidTransition(b *ScanStatus) error {
func (a *ScanStatus) IsValidTransition(b ScanStatus) error {
if a.Equals(b) {
return nil
}
Expand Down
Loading

0 comments on commit 8eb8eb5

Please sign in to comment.