1
Fork 0
photoview/api/graphql/resolvers/timeline.go

42 lines
1.2 KiB
Go
Raw Normal View History

2021-02-04 19:02:51 +01:00
package resolvers
import (
"context"
"time"
2021-02-07 17:13:27 +01:00
"github.com/photoview/photoview/api/graphql/auth"
2021-02-04 19:02:51 +01:00
"github.com/photoview/photoview/api/graphql/models"
)
2021-09-18 20:17:24 +02:00
func (r *queryResolver) MyTimeline(ctx context.Context, paginate *models.Pagination, onlyFavorites *bool, fromDate *time.Time) ([]*models.Media, error) {
2021-02-07 17:13:27 +01:00
user := auth.UserFromContext(ctx)
if user == nil {
return nil, auth.ErrUnauthorized
}
2021-02-04 19:02:51 +01:00
2021-09-18 20:17:24 +02:00
query := r.Database.
Joins("JOIN albums ON media.album_id = albums.id").
Where("albums.id IN (?)", r.Database.Table("user_albums").Select("user_albums.album_id").Where("user_id = ?", user.ID)).
Order("YEAR(media.date_shot) DESC").
Order("MONTH(media.date_shot) DESC").
Order("DAY(media.date_shot) DESC").
Order("albums.title ASC")
if fromDate != nil {
query = query.Where("media.date_shot < ?", fromDate)
2021-02-04 19:02:51 +01:00
}
2021-09-25 17:11:54 +02:00
if onlyFavorites != nil && *onlyFavorites == true {
query = query.Where("media.id IN (?)", r.Database.Table("user_media_data").Select("user_media_data.media_id").Where("user_media_data.user_id = ?", user.ID).Where("user_media_data.favorite = 1"))
}
2021-09-18 20:17:24 +02:00
query = models.FormatSQL(query, nil, paginate)
var media []*models.Media
if err := query.Find(&media).Error; err != nil {
return nil, err
}
return media, nil
2021-02-04 19:02:51 +01:00
}