photoprism/internal/entity/location.go
Michael Mayer 1e7c0c2435 Backend: Improve location hashing and categories
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
2019-12-20 23:05:44 +01:00

66 lines
1.3 KiB
Go

package entity
import (
"strings"
"time"
"github.com/jinzhu/gorm"
"github.com/photoprism/photoprism/internal/maps"
"github.com/photoprism/photoprism/internal/util"
)
// Photo location
type Location struct {
maps.Location
LocNotes string `gorm:"type:text;"`
LocFavorite bool
CreatedAt time.Time
UpdatedAt time.Time
}
func NewLocation(lat, lng float64) *Location {
result := &Location{}
result.ID = maps.OlcEncode(lat, lng)
result.LocLat = lat
result.LocLng = lng
return result
}
func (m *Location) Category() string {
return m.LocCategory
}
func (m *Location) Find(db *gorm.DB) error {
if err := db.First(m, "id LIKE ?", m.ID + "%").Error; err == nil {
return err
}
if err := m.Query(); err != nil {
return err
}
if err := db.Create(m).Error; err != nil {
log.Errorf("location: %s", err)
return err
}
return nil
}
func (m *Location) Keywords() []string {
result := []string{
strings.ToLower(m.LocCity),
strings.ToLower(m.LocSuburb),
strings.ToLower(m.LocState),
strings.ToLower(m.CountryName()),
strings.ToLower(m.LocCategory),
}
result = append(result, util.Keywords(m.LocTitle)...)
result = append(result, util.Keywords(m.LocDescription)...)
result = append(result, util.Keywords(m.LocNotes)...)
return result
}