Merge pull request #155 from stz184/search-orm-migration
Migrated the search to gorm
This commit is contained in:
commit
ae8e764539
|
@ -3,70 +3,70 @@ package resolvers
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"github.com/photoview/photoview/api/graphql/auth"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"gorm.io/gorm/clause"
|
||||||
|
|
||||||
"github.com/photoview/photoview/api/graphql/models"
|
"github.com/photoview/photoview/api/graphql/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (r *Resolver) Search(ctx context.Context, query string, _limitMedia *int, _limitAlbums *int) (*models.SearchResult, error) {
|
func (r *Resolver) Search(ctx context.Context, query string, _limitMedia *int, _limitAlbums *int) (*models.SearchResult, error) {
|
||||||
// user := auth.UserFromContext(ctx)
|
user := auth.UserFromContext(ctx)
|
||||||
// if user == nil {
|
if user == nil {
|
||||||
// return nil, auth.ErrUnauthorized
|
return nil, auth.ErrUnauthorized
|
||||||
// }
|
}
|
||||||
|
|
||||||
// limitMedia := 10
|
limitMedia := 10
|
||||||
// limitAlbums := 10
|
limitAlbums := 10
|
||||||
|
|
||||||
// if _limitMedia != nil {
|
if _limitMedia != nil {
|
||||||
// limitMedia = *_limitMedia
|
limitMedia = *_limitMedia
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if _limitAlbums != nil {
|
if _limitAlbums != nil {
|
||||||
// limitAlbums = *_limitAlbums
|
limitAlbums = *_limitAlbums
|
||||||
// }
|
}
|
||||||
|
|
||||||
// wildQuery := "%" + query + "%"
|
wildQuery := "%" + query + "%"
|
||||||
|
|
||||||
// photoRows, err := r.Database.Query(`
|
var media []*models.Media
|
||||||
// SELECT media.* FROM media JOIN album ON media.album_id = album.album_id
|
|
||||||
// WHERE album.owner_id = ? AND ( media.title LIKE ? OR media.path LIKE ? )
|
|
||||||
// ORDER BY (
|
|
||||||
// case when media.title LIKE ? then 2
|
|
||||||
// when media.path LIKE ? then 1
|
|
||||||
// end ) DESC
|
|
||||||
// LIMIT ?
|
|
||||||
// `, user.UserID, wildQuery, wildQuery, wildQuery, wildQuery, limitMedia)
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, errors.Wrapf(err, "searching media")
|
|
||||||
// }
|
|
||||||
|
|
||||||
// photos, err := models.NewMediaFromRows(photoRows)
|
err := r.Database.Joins("Album").
|
||||||
// if err != nil {
|
Where("Album.owner_id = ? AND ( media.title LIKE ? OR media.path LIKE ? )", user.ID, wildQuery, wildQuery).
|
||||||
// return nil, err
|
Clauses(clause.OrderBy{
|
||||||
// }
|
Expression: clause.Expr{
|
||||||
|
SQL: "(CASE WHEN media.title LIKE ? THEN 2 WHEN media.path LIKE ? THEN 1 END) DESC",
|
||||||
|
Vars: []interface{}{wildQuery, wildQuery},
|
||||||
|
WithoutParentheses: true},
|
||||||
|
}).
|
||||||
|
Limit(limitMedia).
|
||||||
|
Find(&media).Error
|
||||||
|
|
||||||
// albumRows, err := r.Database.Query(`
|
if err != nil {
|
||||||
// SELECT * FROM album
|
return nil, errors.Wrapf(err, "searching media")
|
||||||
// WHERE owner_id = ? AND ( title LIKE ? OR path LIKE ? )
|
}
|
||||||
// ORDER BY (
|
|
||||||
// case when title LIKE ? then 2
|
|
||||||
// when path LIKE ? then 1
|
|
||||||
// end ) DESC
|
|
||||||
// LIMIT ?
|
|
||||||
// `, user.UserID, wildQuery, wildQuery, wildQuery, wildQuery, limitAlbums)
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, errors.Wrapf(err, "searching albums")
|
|
||||||
// }
|
|
||||||
|
|
||||||
// albums, err := models.NewAlbumsFromRows(albumRows)
|
var albums []*models.Album
|
||||||
// if err != nil {
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
|
|
||||||
// result := models.SearchResult{
|
err = r.Database.Where("owner_id = ? AND (title LIKE ? OR path LIKE ?)", user.ID, wildQuery, wildQuery).
|
||||||
// Query: query,
|
Clauses(clause.OrderBy{
|
||||||
// Media: photos,
|
Expression: clause.Expr{
|
||||||
// Albums: albums,
|
SQL: "(CASE WHEN title LIKE ? THEN 2 WHEN path LIKE ? THEN 1 END) DESC",
|
||||||
// }
|
Vars: []interface{}{wildQuery, wildQuery},
|
||||||
|
WithoutParentheses: true},
|
||||||
|
}).
|
||||||
|
Limit(limitAlbums).
|
||||||
|
Find(&albums).Error
|
||||||
|
|
||||||
// return &result, nil
|
if err != nil {
|
||||||
panic("to be migrated")
|
return nil, errors.Wrapf(err, "searching albums")
|
||||||
|
}
|
||||||
|
|
||||||
|
result := models.SearchResult{
|
||||||
|
Query: query,
|
||||||
|
Media: media,
|
||||||
|
Albums: albums,
|
||||||
|
}
|
||||||
|
|
||||||
|
return &result, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue