| 135 | } |
| 136 | |
| 137 | func (m *Mapper) ToQuery(ctx context.Context, q *RelationQuery) (res *ketoapi.RelationQuery, err error) { |
| 138 | ctx, span := trace.SpanFromContext(ctx).TracerProvider().Tracer("keto/internal/relationtuple").Start(ctx, "Mapper.ToQuery") |
| 139 | defer otelx.End(span, &err) |
| 140 | |
| 141 | onSuccess := newSuccess(&err) |
| 142 | defer onSuccess.apply() |
| 143 | |
| 144 | var s []string |
| 145 | var u []uuid.UUID |
| 146 | res = &ketoapi.RelationQuery{ |
| 147 | Relation: q.Relation, |
| 148 | } |
| 149 | |
| 150 | nm, err := m.D.Config(ctx).NamespaceManager() |
| 151 | if err != nil { |
| 152 | return nil, err |
| 153 | } |
| 154 | |
| 155 | if q.Namespace != nil { |
| 156 | n, err := nm.GetNamespaceByName(ctx, *q.Namespace) |
| 157 | if err != nil { |
| 158 | return nil, err |
| 159 | } |
| 160 | res.Namespace = new(n.Name) |
| 161 | } |
| 162 | if q.Object != nil { |
| 163 | u = append(u, *q.Object) |
| 164 | onSuccess.do(func() { |
| 165 | res.Object = new(s[0]) |
| 166 | }) |
| 167 | } |
| 168 | if q.Subject != nil { |
| 169 | switch sub := q.Subject.(type) { |
| 170 | case *SubjectID: |
| 171 | u = append(u, sub.ID) |
| 172 | onSuccess.do(func() { |
| 173 | res.SubjectID = new(s[len(s)-1]) |
| 174 | }) |
| 175 | case *SubjectSet: |
| 176 | u = append(u, sub.Object) |
| 177 | n, err := nm.GetNamespaceByName(ctx, sub.Namespace) |
| 178 | if err != nil { |
| 179 | return nil, err |
| 180 | } |
| 181 | onSuccess.do(func() { |
| 182 | res.SubjectSet = &ketoapi.SubjectSet{ |
| 183 | Namespace: n.Name, |
| 184 | Object: s[len(s)-1], |
| 185 | Relation: sub.Relation, |
| 186 | } |
| 187 | }) |
| 188 | } |
| 189 | } |
| 190 | |
| 191 | s, err = m.D.MappingManager().MapUUIDsToStrings(ctx, u...) |
| 192 | if err != nil { |
| 193 | return nil, err |
| 194 | } |