Update oldest/newest when photo date is updated

This commit is contained in:
gokcedilek 2023-11-13 19:27:43 -08:00
parent 5676174e41
commit c5523d650d
2 changed files with 55 additions and 5 deletions

View file

@ -155,8 +155,11 @@ func AddPhotoToUserAlbums(photoUid string, albums []string, userUid string) (err
if before := takenAt.Before(albumOldest); before {
albumOldest = takenAt
log.Println("test")
} else if after := takenAt.After(albumNewest); after {
} else if zero := albumOldest.IsZero(); zero {
albumOldest = takenAt
}
if after := takenAt.After(albumNewest); after {
albumNewest = takenAt
}
}
@ -887,7 +890,8 @@ func (m *Album) RemovePhotos(UIDs []string) (removed PhotoAlbums) {
// update the oldest of the album
updatedAlbumOldest = oldestPhoto.TakenAt
}
} else if isNewest := takenAt.Equal(m.AlbumNewest); isNewest {
}
if isNewest := takenAt.Equal(m.AlbumNewest); isNewest {
if newestPhoto, err := AlbumOldestOrNewest(m.AlbumUID, false); err == nil {
// update the newest of the album
updatedAlbumNewest = newestPhoto.TakenAt
@ -936,9 +940,30 @@ func AlbumOldestOrNewest(albumUid string, isOldest bool) (Photo, error) {
),
)
if err := stmt.First(&photo).Error; err != nil {
return Photo{}, err
if r := stmt.First(&photo); r.RecordNotFound() {
return Photo{}, nil
} else if r.Error != nil {
return Photo{}, r.Error
}
return photo, nil
}
func AlbumsOfPhoto(photoUid string) ([]Album, error) {
var albums []Album
stmt := Db().Table("albums").Select("albums.*").Joins(
"JOIN photos_albums ON albums.album_uid = "+
"photos_albums.album_uid",
).Joins("JOIN photos ON photos_albums.photo_uid = photos.photo_uid").
Where("photos.photo_uid = ?", photoUid).
Where("photos_albums.hidden = 0")
if r := stmt.Find(&albums); r.RecordNotFound() {
return albums, nil
} else if r.Error != nil {
return albums, r.Error
}
return albums, nil
}

View file

@ -127,4 +127,29 @@ func (m *Photo) UpdateDateFields() {
Where("photo_id = ? AND photo_taken_at <> ?", m.ID, m.TakenAtLocal).
Updates(File{PhotoTakenAt: m.TakenAtLocal}).Error,
)
// update the oldest or newest date of the albums of this photo, if needed
if albums, err := AlbumsOfPhoto(m.PhotoUID); err == nil {
for _, album := range albums {
albumOldest := album.AlbumOldest
albumNewest := album.AlbumNewest
takenAt := m.TakenAt
if before := takenAt.Before(albumOldest); before {
albumOldest = takenAt
} else if after := takenAt.After(albumNewest); after {
albumNewest = takenAt
}
// Refresh updated timestamp and album oldest/newest values.
if !albumOldest.Equal(album.AlbumOldest) || !albumNewest.Equal(album.AlbumNewest) {
if err := UpdateAlbum(
album.AlbumUID, Values{
"albumOldest": albumOldest, "albumNewest": albumNewest,
},
); err != nil {
log.Errorf("album: %s (update %s)", err.Error(), album)
}
}
}
}
}