-
Notifications
You must be signed in to change notification settings - Fork 0
/
searchmovie.go
31 lines (25 loc) · 952 Bytes
/
searchmovie.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package services
import (
"errors"
"fmt"
"net/http"
)
type GetSearchRequest struct {
Term string `query:"term"`
}
type GetSearchResponse struct {
StatusCode int
Result []MovieDataResponse `json:"results"`
}
func (movieService MovieService) SearchMovie(request GetSearchRequest) (GetSearchResponse, error) {
if len(request.Term) == 0 {
return GetSearchResponse{StatusCode: http.StatusBadRequest}, errors.New("enter a search term")
}
var movieResult []MovieDataResponse
sqlQuery := fmt.Sprintf("SELECT Id,Title,Description,ReleaseDate,Genre,Popularity,VoteCount FROM movies WHERE MATCH (movies.Title,movies.Description) AGAINST ('%s')", request.Term)
dbResult := movieService.DB.Raw(sqlQuery).Scan(&movieResult)
if dbResult.Error != nil {
return GetSearchResponse{StatusCode: http.StatusInternalServerError}, errors.New(dbResult.Error.Error())
}
return GetSearchResponse{Result: movieResult, StatusCode: http.StatusOK}, nil
}