46 lines
1,023 B
Go
46 lines
1,023 B
Go
package photoprism
|
|
|
|
import (
|
|
"github.com/jinzhu/gorm"
|
|
)
|
|
|
|
type Search struct {
|
|
originalsPath string
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewQuery(originalsPath string, db *gorm.DB) *Search {
|
|
instance := &Search{
|
|
originalsPath: originalsPath,
|
|
db: db,
|
|
}
|
|
|
|
return instance
|
|
}
|
|
|
|
func (s *Search) FindPhotos(query string, count int, offset int) (photos []Photo) {
|
|
q := s.db.Preload("Tags").Preload("Files").Preload("Location").Preload("Albums")
|
|
|
|
if query != "" {
|
|
q = q.Joins("JOIN photo_tags ON photo_tags.photo_id=photos.id")
|
|
q = q.Joins("JOIN tags ON photo_tags.tag_id=tags.id")
|
|
q = q.Where("tags.label LIKE ?", "%"+query+"%")
|
|
}
|
|
|
|
q = q.Where(&Photo{Deleted: false}).Order("taken_at").Limit(count).Offset(offset)
|
|
q = q.Find(&photos)
|
|
|
|
return photos
|
|
}
|
|
|
|
func (s *Search) FindFiles(count int, offset int) (files []File) {
|
|
s.db.Where(&File{}).Limit(count).Offset(offset).Find(&files)
|
|
|
|
return files
|
|
}
|
|
|
|
func (s *Search) FindFile(id string) (file File) {
|
|
s.db.Where("id = ?", id).First(&file)
|
|
|
|
return file
|
|
}
|