@@ -3,6 +3,7 @@ package policies
33import (
44 "net/http"
55 "workspace-engine/pkg/oapi"
6+ "workspace-engine/pkg/selector"
67 "workspace-engine/pkg/server/openapi/utils"
78
89 "github.com/gin-gonic/gin"
@@ -19,23 +20,43 @@ func (p *Policies) GetReleaseTargetsForPolicy(c *gin.Context, workspaceId oapi.W
1920 return
2021 }
2122
22- // policy, ok := ws.Policies().Get(policyId)
23- // if !ok {
24- // c.JSON(http.StatusNotFound, gin.H{
25- // "error": "Policy not found",
26- // })
27- // return
28- // }
29-
30- // releaseTargets, err := ws.ReleaseTargets().Items(c.Request.Context())
31- // if err != nil {
32- // c.JSON(http.StatusInternalServerError, gin.H{
33- // "error": "Failed to get release targets for policy: " + err.Error(),
34- // })
35- // return
36- // }
37-
38- c .JSON (http .StatusInternalServerError , gin.H {
39- "error" : "Not implemented" ,
23+ policy , ok := ws .Policies ().Get (policyId )
24+ if ! ok {
25+ c .JSON (http .StatusNotFound , gin.H {
26+ "error" : "Policy not found" ,
27+ })
28+ return
29+ }
30+
31+ releaseTargets , err := ws .ReleaseTargets ().Items (c .Request .Context ())
32+ if err != nil {
33+ c .JSON (http .StatusInternalServerError , gin.H {
34+ "error" : "Failed to get release targets for policy: " + err .Error (),
35+ })
36+ return
37+ }
38+
39+ matchingReleaseTargets := make ([]* oapi.ReleaseTarget , 0 )
40+ for _ , releaseTarget := range releaseTargets {
41+ environment , ok := ws .Environments ().Get (releaseTarget .EnvironmentId )
42+ if ! ok {
43+ continue
44+ }
45+ deployment , ok := ws .Deployments ().Get (releaseTarget .DeploymentId )
46+ if ! ok {
47+ continue
48+ }
49+ resource , ok := ws .Resources ().Get (releaseTarget .ResourceId )
50+ if ! ok {
51+ continue
52+ }
53+ resolvedReleaseTarget := selector .NewBasicReleaseTarget (environment , deployment , resource )
54+ if selector .MatchPolicy (c .Request .Context (), policy , resolvedReleaseTarget ) {
55+ matchingReleaseTargets = append (matchingReleaseTargets , releaseTarget )
56+ }
57+ }
58+
59+ c .JSON (http .StatusOK , gin.H {
60+ "releaseTargets" : matchingReleaseTargets ,
4061 })
4162}
0 commit comments