flamingo.me/flamingo-commerce/v3@v3.11.0/category/interfaces/graphql/resolvers.go (about) 1 package graphql 2 3 import ( 4 "context" 5 6 "flamingo.me/flamingo-commerce/v3/category/domain" 7 graphqlDto "flamingo.me/flamingo-commerce/v3/category/interfaces/graphql/categorydto" 8 productApplication "flamingo.me/flamingo-commerce/v3/product/application" 9 "flamingo.me/flamingo-commerce/v3/product/interfaces/graphql" 10 "flamingo.me/flamingo-commerce/v3/search/application" 11 searchDomain "flamingo.me/flamingo-commerce/v3/search/domain" 12 "flamingo.me/flamingo-commerce/v3/search/interfaces/graphql/searchdto" 13 ) 14 15 // CommerceCategoryQueryResolver resolves graphql category queries 16 type CommerceCategoryQueryResolver struct { 17 categoryService domain.CategoryService 18 searchService *productApplication.ProductSearchService 19 } 20 21 // Inject dependencies 22 func (r *CommerceCategoryQueryResolver) Inject( 23 service domain.CategoryService, 24 searchService *productApplication.ProductSearchService, 25 ) *CommerceCategoryQueryResolver { 26 r.categoryService = service 27 r.searchService = searchService 28 return r 29 } 30 31 // CommerceCategoryTree returns a Tree with the given activeCategoryCode from categoryService 32 func (r *CommerceCategoryQueryResolver) CommerceCategoryTree(ctx context.Context, activeCategoryCode string) (domain.Tree, error) { 33 return r.categoryService.Tree(ctx, activeCategoryCode) 34 } 35 36 // CommerceCategory returns product search result with the given categoryCode from searchService 37 func (r *CommerceCategoryQueryResolver) CommerceCategory( 38 ctx context.Context, 39 categoryCode string, 40 request *searchdto.CommerceSearchRequest) (*graphqlDto.CategorySearchResult, error) { 41 category, err := r.categoryService.Get(ctx, categoryCode) 42 43 if err != nil { 44 return nil, err 45 } 46 47 var filters []searchDomain.Filter 48 filters = append(filters, domain.NewCategoryFacet(categoryCode)) 49 searchRequest := &application.SearchRequest{AdditionalFilter: filters} 50 51 if request != nil { 52 for _, filter := range request.KeyValueFilters { 53 filters = append(filters, searchDomain.NewKeyValueFilter(filter.K, filter.V)) 54 } 55 searchRequest = &application.SearchRequest{ 56 AdditionalFilter: filters, 57 PageSize: request.PageSize, 58 Page: request.Page, 59 SortBy: request.SortBy, 60 Query: request.Query, 61 PaginationConfig: nil, 62 } 63 } 64 result, err := r.searchService.Find(ctx, searchRequest) 65 66 if err != nil { 67 return nil, err 68 } 69 70 return &graphqlDto.CategorySearchResult{Category: category, ProductSearchResult: graphql.WrapSearchResult(result)}, nil 71 }