Backend: Add "idx_photos_taken_uuid" for consistent sorting by time

Signed-off-by: Michael Mayer <michael@liquidbytes.net>
This commit is contained in:
Michael Mayer 2020-01-05 14:09:17 +01:00
parent d2437ebe7c
commit a3b3136498
5 changed files with 18 additions and 18 deletions

View file

@ -10,11 +10,12 @@ import (
// A photo can have multiple images and sidecar files
type Photo struct {
ID uint `gorm:"primary_key"`
PhotoUUID string `gorm:"type:varbinary(36);unique_index;"`
PhotoPath string `gorm:"type:varbinary(400);index;"`
PhotoName string `gorm:"type:varbinary(200);"`
PhotoTitle string `json:"PhotoTitle"`
ID uint `gorm:"primary_key"`
TakenAt time.Time `gorm:"type:datetime;index:idx_photos_taken_uuid;"`
PhotoUUID string `gorm:"type:varbinary(36);unique_index;index:idx_photos_taken_uuid;"`
PhotoPath string `gorm:"type:varbinary(400);index;"`
PhotoName string `gorm:"type:varbinary(200);"`
PhotoTitle string `json:"PhotoTitle"`
PhotoTitleChanged bool
PhotoDescription string `gorm:"type:text;"`
PhotoNotes string `gorm:"type:text;"`
@ -45,7 +46,6 @@ type Photo struct {
PhotoCountry string `gorm:"index:idx_photos_country_year_month;"`
PhotoYear int `gorm:"index:idx_photos_country_year_month;"`
PhotoMonth int `gorm:"index:idx_photos_country_year_month;"`
TakenAt time.Time `gorm:"type:datetime;index;"`
TakenAtLocal time.Time `gorm:"type:datetime;"`
TakenAtChanged bool
TimeZone string `gorm:"type:varbinary(64);"`

View file

@ -30,15 +30,15 @@ func (f *AlbumSearch) ParseQueryString() (result error) {
var key, value []rune
var escaped, isKeyValue bool
query := f.Query
q := f.Query
f.Query = ""
formValues := reflect.ValueOf(f).Elem()
query = strings.TrimSpace(query) + "\n"
q = strings.TrimSpace(q) + "\n"
for _, char := range query {
for _, char := range q {
if unicode.IsSpace(char) && !escaped {
if isKeyValue {
fieldName := strings.Title(string(key))

View file

@ -31,15 +31,15 @@ func (f *LabelSearch) ParseQueryString() (result error) {
var key, value []rune
var escaped, isKeyValue bool
query := f.Query
q := f.Query
f.Query = ""
formValues := reflect.ValueOf(f).Elem()
query = strings.TrimSpace(query) + "\n"
q = strings.TrimSpace(q) + "\n"
for _, char := range query {
for _, char := range q {
if unicode.IsSpace(char) && !escaped {
if isKeyValue {
fieldName := strings.Title(string(key))

View file

@ -57,15 +57,15 @@ func (f *PhotoSearch) ParseQueryString() (result error) {
var key, value []rune
var escaped, isKeyValue bool
query := f.Query
q := f.Query
f.Query = ""
formValues := reflect.ValueOf(f).Elem()
query = strings.TrimSpace(query) + "\n"
q = strings.TrimSpace(q) + "\n"
for _, char := range query {
for _, char := range q {
if unicode.IsSpace(char) && !escaped {
if isKeyValue {
fieldName := strings.Title(string(key))

View file

@ -304,13 +304,13 @@ func (s *Repo) Photos(f form.PhotoSearch) (results []PhotoResult, err error) {
case "relevance":
q = q.Order("photo_story DESC, photo_favorite DESC, taken_at DESC")
case "newest":
q = q.Order("taken_at DESC, photos.id DESC")
q = q.Order("taken_at DESC, photos.photo_uuid")
case "oldest":
q = q.Order("taken_at, photos.id")
q = q.Order("taken_at, photos.photo_uuid")
case "imported":
q = q.Order("photos.id DESC")
default:
q = q.Order("taken_at DESC, photos.id DESC")
q = q.Order("taken_at DESC, photos.photo_uuid")
}
if f.Count > 0 && f.Count <= 1000 {