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  }