2021-09-27 20:23:10 +02:00
package actions
import (
"time"
"github.com/photoview/photoview/api/graphql/models"
"gorm.io/gorm"
)
func MyTimeline ( db * gorm . DB , user * models . User , paginate * models . Pagination , onlyFavorites * bool , fromDate * time . Time ) ( [ ] * models . Media , error ) {
2021-09-27 20:43:26 +02:00
2021-09-27 20:23:10 +02:00
query := db .
Joins ( "JOIN albums ON media.album_id = albums.id" ) .
2021-09-27 20:43:26 +02:00
Where ( "albums.id IN (?)" , db . Table ( "user_albums" ) . Select ( "user_albums.album_id" ) . Where ( "user_id = ?" , user . ID ) )
2021-09-27 21:26:30 +02:00
switch db . Dialector . Name ( ) {
case "postgres" :
2021-09-27 20:43:26 +02:00
query = query .
Order ( "DATE_TRUNC('year', date_shot) DESC" ) .
Order ( "DATE_TRUNC('month', date_shot) DESC" ) .
Order ( "DATE_TRUNC('day', date_shot) DESC" ) .
Order ( "albums.title ASC" ) .
Order ( "media.date_shot DESC" )
2021-09-27 21:26:30 +02:00
case "sqlite" :
query = query .
Order ( "strftime('%j', media.date_shot) DESC" ) . // convert to day of year 001-366
Order ( "albums.title ASC" ) .
Order ( "TIME(media.date_shot) DESC" )
default :
2021-09-27 20:43:26 +02:00
query = query .
Order ( "YEAR(media.date_shot) DESC" ) .
Order ( "MONTH(media.date_shot) DESC" ) .
Order ( "DAY(media.date_shot) DESC" ) .
Order ( "albums.title ASC" ) .
Order ( "TIME(media.date_shot) DESC" )
}
2021-09-27 20:23:10 +02:00
if fromDate != nil {
query = query . Where ( "media.date_shot < ?" , fromDate )
}
2021-09-27 20:43:26 +02:00
if onlyFavorites != nil && * onlyFavorites {
query = query . Where ( "media.id IN (?)" , db . Table ( "user_media_data" ) . Select ( "user_media_data.media_id" ) . Where ( "user_media_data.user_id = ?" , user . ID ) . Where ( "user_media_data.favorite" ) )
2021-09-27 20:23:10 +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
}