boilerplate-go/webService/movies.go

47 lines
1.3 KiB
Go

package webService
import (
"errors"
"gitlab.com/arkadooti.sarkar/go-boilerplate/core/appcontext"
"gitlab.com/arkadooti.sarkar/go-boilerplate/core/log"
"gitlab.com/arkadooti.sarkar/go-boilerplate/utils"
"net/http"
)
func (s *WebService) MovieDetails(w http.ResponseWriter, r *http.Request) {
ctx := appcontext.UpgradeCtx(r.Context())
movieName := r.URL.Query().Get("name")
details, err := s.DB.GetMovieDetails(ctx, movieName)
if err != nil {
log.GenericError(ctx, errors.New("not able to get movies from DB:"+err.Error()))
}
if details.Title != "" {
log.GenericInfo(ctx, "Sending response from DB")
utils.ReturnOKResponse(ctx, w, details)
return
}
details, err = s.Domain.GetMovieDetailsFromApi(ctx, movieName)
if err != nil {
utils.ReturnErrorResponse(ctx, w, "Invalid request or IMDB error", http.StatusBadRequest, err)
return
}
if details.Title == "" {
utils.ReturnErrorResponse(ctx, w, "No movie found with the title: "+movieName, http.StatusBadRequest, err)
return
}
if details.Title != "" {
err = s.DB.SetMovieDetails(ctx, details)
if err != nil {
log.GenericError(ctx, errors.New("not able to insert into DB: "+err.Error()))
}
}
log.GenericInfo(ctx, "Sending response from API endpoint")
utils.ReturnOKResponse(ctx, w, details)
}