Images graphQL resolver is implemented by central/graphql/resolvers/images.go. Some functions of imageResolver are also defined in central/graphql/resolvers/image_scan.go and central/graphql/resolvers/generated.go
When flatten image data is enabled, we want the images graphQL to use the imageV2 datastore / loader to retrieve data while keeping interface the same.
To do that, we can add an interface "ImageResolver" and have structs imageResolver and imageV2Resolver both implement that interface.
- Autogenerate imageV2Resolver. Update central/grapgql/resolvers/gen/main.go to add storage.ImageV2 and re-generate generated.go. Follow similar pattern as storage.Image
- Add ImageV2 datastore to root Resolver
- Update central/grapgql/resolvers/images.go as follows:
- Add an ImageResolver interface similar to ImageVulnerabiityResolver in image_vulnerabilities.go
- Add all funcs implemented by imageResolver to the interface. Some funcs will be in generated.go and image_scan.go.
- Add ImageSHA func to the interface too. For imageResolver, ImageSHA is imageID. For imageV2Resolver, ImageSHA func should already be autogenerated
- Image and Images functions on root resolver should return the new interface
- Re-implement imageResolver functions in images.go and image_scan.go for imageV2Resolver