@@ -3,89 +3,12 @@ package api
33import (
44 "net/http"
55
6- "go.infratographer.com/permissions-api/internal/types"
7-
86 "github.com/labstack/echo/v4"
97 "go.infratographer.com/x/gidx"
108 "go.opentelemetry.io/otel/attribute"
119 "go.opentelemetry.io/otel/trace"
1210)
1311
14- func (r * Router ) buildRelationship (resource types.Resource , item createRelationshipItem ) (types.Relationship , error ) {
15- itemID , err := gidx .Parse (item .SubjectID )
16- if err != nil {
17- return types.Relationship {}, err
18- }
19-
20- itemResource , err := r .engine .NewResourceFromID (itemID )
21- if err != nil {
22- return types.Relationship {}, err
23- }
24-
25- out := types.Relationship {
26- Subject : itemResource ,
27- Relation : item .Relation ,
28- Resource : resource ,
29- }
30-
31- return out , nil
32- }
33-
34- func (r * Router ) buildRelationships (subjResource types.Resource , items []createRelationshipItem ) ([]types.Relationship , error ) {
35- out := make ([]types.Relationship , len (items ))
36-
37- for i , item := range items {
38- rel , err := r .buildRelationship (subjResource , item )
39- if err != nil {
40- return nil , err
41- }
42-
43- out [i ] = rel
44- }
45-
46- return out , nil
47- }
48-
49- func (r * Router ) relationshipsCreate (c echo.Context ) error {
50- resourceIDStr := c .Param ("id" )
51-
52- ctx , span := tracer .Start (c .Request ().Context (), "api.relationshipsCreate" , trace .WithAttributes (attribute .String ("id" , resourceIDStr )))
53- defer span .End ()
54-
55- resourceID , err := gidx .Parse (resourceIDStr )
56- if err != nil {
57- return echo .NewHTTPError (http .StatusBadRequest , "error parsing resource ID" ).SetInternal (err )
58- }
59-
60- var reqBody createRelationshipsRequest
61-
62- err = c .Bind (& reqBody )
63- if err != nil {
64- return echo .NewHTTPError (http .StatusBadRequest , "error parsing request body" ).SetInternal (err )
65- }
66-
67- resource , err := r .engine .NewResourceFromID (resourceID )
68- if err != nil {
69- return echo .NewHTTPError (http .StatusBadRequest , "error creating relationships" ).SetInternal (err )
70- }
71-
72- rels , err := r .buildRelationships (resource , reqBody .Relationships )
73- if err != nil {
74- return echo .NewHTTPError (http .StatusBadRequest , "error creating relationships" ).SetInternal (err )
75- }
76-
77- _ , err = r .engine .CreateRelationships (ctx , rels )
78- if err != nil {
79- return echo .NewHTTPError (http .StatusInternalServerError , "error creating relationships" ).SetInternal (err )
80- }
81-
82- resp := createRelationshipsResponse {
83- Success : true ,
84- }
85-
86- return c .JSON (http .StatusCreated , resp )
87- }
88-
8912func (r * Router ) relationshipListFrom (c echo.Context ) error {
9013 resourceIDStr := c .Param ("id" )
9114
@@ -159,54 +82,3 @@ func (r *Router) relationshipListTo(c echo.Context) error {
15982
16083 return c .JSON (http .StatusOK , out )
16184}
162-
163- func (r * Router ) relationshipDelete (c echo.Context ) error {
164- resourceIDStr := c .Param ("id" )
165-
166- ctx , span := tracer .Start (c .Request ().Context (), "api.relationshipsDelete" , trace .WithAttributes (attribute .String ("id" , resourceIDStr )))
167- defer span .End ()
168-
169- resourceID , err := gidx .Parse (resourceIDStr )
170- if err != nil {
171- return echo .NewHTTPError (http .StatusBadRequest , "error parsing resource ID" ).SetInternal (err )
172- }
173-
174- var reqBody deleteRelationshipRequest
175-
176- err = c .Bind (& reqBody )
177- if err != nil {
178- return echo .NewHTTPError (http .StatusBadRequest , "error parsing request body" ).SetInternal (err )
179- }
180-
181- resource , err := r .engine .NewResourceFromID (resourceID )
182- if err != nil {
183- return echo .NewHTTPError (http .StatusBadRequest , "error deleting relationship" ).SetInternal (err )
184- }
185-
186- relatedResourceID , err := gidx .Parse (reqBody .SubjectID )
187- if err != nil {
188- return echo .NewHTTPError (http .StatusBadRequest , "error deleting relationship" ).SetInternal (err )
189- }
190-
191- relatedResource , err := r .engine .NewResourceFromID (relatedResourceID )
192- if err != nil {
193- return echo .NewHTTPError (http .StatusBadRequest , "error deleting relationship" ).SetInternal (err )
194- }
195-
196- relationship := types.Relationship {
197- Resource : resource ,
198- Relation : reqBody .Relation ,
199- Subject : relatedResource ,
200- }
201-
202- _ , err = r .engine .DeleteRelationships (ctx , relationship )
203- if err != nil {
204- return echo .NewHTTPError (http .StatusInternalServerError , "error deleting relationship" ).SetInternal (err )
205- }
206-
207- resp := deleteRelationshipsResponse {
208- Success : true ,
209- }
210-
211- return c .JSON (http .StatusOK , resp )
212- }
0 commit comments