Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.60 KB | None | 0 0
  1. // GetRecommendations gets all recommendations.
  2. func (s *Setup) GetRecommendations(w http.ResponseWriter, r *http.Request) {
  3.     params := r.URL.Query()
  4.  
  5.     var redisKey string
  6.  
  7.     if params["page"] != nil {
  8.         redisKey = fmt.Sprintf("recommendation?page=%s", params["page"][0])
  9.     } else {
  10.         redisKey = "recommendation"
  11.     }
  12.  
  13.     var recommendation *model.RecommendationResult
  14.  
  15.     cache, err := s.CheckCache(redisKey, recommendation)
  16.     if err != nil {
  17.         helper.DecodeError(w, r, s.l, errUnmarshal, http.StatusInternalServerError)
  18.         return
  19.     }
  20.  
  21.     if cache {
  22.         json.NewEncoder(w).Encode(recommendation)
  23.         return
  24.     }
  25.  
  26.     total, err := s.h.GetRecommendationTotalRows()
  27.     if err != nil {
  28.         helper.DecodeError(w, r, s.l, errFetch, http.StatusInternalServerError)
  29.         return
  30.     }
  31.  
  32.     newPage, err := helper.PageParser(params)
  33.     if err != nil {
  34.         helper.DecodeError(w, r, s.l, errParseInt, http.StatusInternalServerError)
  35.         return
  36.     }
  37.  
  38.     chapter := &tome.Chapter{NewPage: newPage, TotalResults: total}
  39.  
  40.     if err := chapter.Paginate(); err != nil {
  41.         helper.DecodeError(w, r, s.l, err.Error(), http.StatusInternalServerError)
  42.         return
  43.     }
  44.  
  45.     result, err := s.h.GetRecommendations(chapter.Offset, chapter.Limit)
  46.     if err != nil {
  47.         helper.DecodeError(w, r, s.l, errFetch, http.StatusInternalServerError)
  48.         return
  49.     }
  50.  
  51.     resultFinal := &model.RecommendationResult{
  52.         Data:    result,
  53.         Chapter: chapter,
  54.     }
  55.  
  56.     err = s.SetCache(redisKey, resultFinal)
  57.     if err != nil {
  58.         helper.DecodeError(w, r, s.l, errMarhsal, http.StatusInternalServerError)
  59.         return
  60.     }
  61.  
  62.     w.WriteHeader(http.StatusOK)
  63.     json.NewEncoder(w).Encode(resultFinal)
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement