Skip to content

Commit

Permalink
Merge pull request #175 from stz184/migrated-mediaGeoJson-to-gorm
Browse files Browse the repository at this point in the history
Fixes photoview/issues#168
  • Loading branch information
viktorstrate committed Jan 30, 2021
2 parents fbebb13 + 8b4e219 commit 658e641
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 72 deletions.
1 change: 0 additions & 1 deletion api/database/database.go
Expand Up @@ -130,7 +130,6 @@ func SetupDatabase() (*gorm.DB, error) {
}

func MigrateDatabase(db *gorm.DB) error {

db.AutoMigrate(
&models.User{},
&models.AccessToken{},
Expand Down
2 changes: 1 addition & 1 deletion api/graphql/models/media_exif.go
Expand Up @@ -18,7 +18,7 @@ type MediaEXIF struct {
Orientation *int
ExposureProgram *int
GPSLatitude *float64
GPSLonitude *float64
GPSLongitude *float64
}

func (MediaEXIF) TableName() string {
Expand Down
7 changes: 3 additions & 4 deletions api/graphql/resolvers/media.go
Expand Up @@ -76,11 +76,10 @@ func (r *queryResolver) MediaList(ctx context.Context, ids []int) ([]*models.Med
}

var media []*models.Media
err := r.Database.
Select("media.*").
Joins("Album").
err := r.Database.Model(&media).
Joins("LEFT JOIN user_albums ON user_albums.album_id = media.album_id").
Where("media.id IN ?", ids).
Where("album.owner_id = ?", user.ID).
Where("user_albums.user_id = ?", user.ID).
Scan(&media).Error

if err != nil {
Expand Down
129 changes: 64 additions & 65 deletions api/graphql/resolvers/mediaGeoJson.go
Expand Up @@ -2,9 +2,22 @@ package resolvers

import (
"context"
"github.com/photoview/photoview/api/graphql/auth"
"github.com/photoview/photoview/api/utils"
"os"
"path"
)

type geoMedia struct {
MediaID int
MediaTitle string
ThumbnailName string
ThumbnailWidth int
ThumbnailHeight int
Latitude float64
Longitude float64
}

type geoJSONFeatureCollection struct {
Type string `json:"type"`
Features []geoJSONFeature `json:"features"`
Expand Down Expand Up @@ -56,72 +69,58 @@ func makeGeoJSONFeatureGeometryPoint(lat float64, long float64) geoJSONFeatureGe
}

func (r *queryResolver) MyMediaGeoJSON(ctx context.Context) (interface{}, error) {
user := auth.UserFromContext(ctx)
if user == nil {
return nil, auth.ErrUnauthorized
}

var media []*geoMedia

err := r.Database.Table("media").
Select(
"media.id AS media_id, media.title AS media_title, "+
"media_urls.media_name AS thumbnail_name, media_urls.width AS thumbnail_width, media_urls.height AS thumbnail_height, "+
"media_exif.gps_latitude AS latitude, media_exif.gps_longitude AS longitude").
Joins("INNER JOIN media_exif ON media.exif_id = media_exif.id").
Joins("INNER JOIN media_urls ON media.id = media_urls.media_id").
Joins("INNER JOIN user_albums ON media.album_id = user_albums.album_id").
Where("media_exif.gps_latitude IS NOT NULL").
Where("media_exif.gps_longitude IS NOT NULL").
Where("media_urls.purpose = 'thumbnail'").
Where("user_albums.user_id = ?", user.ID).
Scan(&media).Error

if err != nil {
return nil, err
}

features := make([]geoJSONFeature, 0)

for _, item := range media {
geoPoint := makeGeoJSONFeatureGeometryPoint(item.Latitude, item.Longitude)

thumbnailURL := utils.ApiEndpointUrl()
thumbnailURL.Path = path.Join(thumbnailURL.Path, "photo", item.ThumbnailName)

properties := geoJSONMediaProperties{
MediaID: item.MediaID,
MediaTitle: item.MediaTitle,
Thumbnail: struct {
URL string `json:"url"`
Width int `json:"width"`
Height int `json:"height"`
}{
URL: thumbnailURL.String(),
Width: item.ThumbnailWidth,
Height: item.ThumbnailHeight,
},
}

features = append(features, makeGeoJSONFeature(properties, geoPoint))
}

// user := auth.UserFromContext(ctx)
// if user == nil {
// return nil, errors.New("unauthorized")
// }

// rows, err := r.Database.Query(`
// SELECT media.media_id, media.title,
// url.media_name AS thumbnail_name, url.width AS thumbnail_width, url.height AS thumbnail_height,
// exif.gps_latitude, exif.gps_longitude FROM media_exif exif
// INNER JOIN media ON exif.exif_id = media.exif_id
// INNER JOIN media_url url ON media.media_id = url.media_id
// INNER JOIN album ON media.album_id = album.album_id
// WHERE exif.gps_latitude IS NOT NULL
// AND exif.gps_longitude IS NOT NULL
// AND url.purpose = 'thumbnail'
// AND album.owner_id = ?;
// `, user.UserID)
// defer rows.Close()
// if err != nil {
// return nil, err
// }

// features := make([]geoJSONFeature, 0)

// for rows.Next() {

// var mediaID int
// var mediaTitle string
// var thumbnailName string
// var thumbnailWidth int
// var thumbnailHeight int
// var latitude float64
// var longitude float64

// if err := rows.Scan(&mediaID, &mediaTitle, &thumbnailName, &thumbnailWidth, &thumbnailHeight, &latitude, &longitude); err != nil {
// return nil, err
// }

// geoPoint := makeGeoJSONFeatureGeometryPoint(latitude, longitude)

// thumbnailURL := utils.ApiEndpointUrl()
// thumbnailURL.Path = path.Join(thumbnailURL.Path, "photo", thumbnailName)

// properties := geoJSONMediaProperties{
// MediaID: mediaID,
// MediaTitle: mediaTitle,
// Thumbnail: struct {
// URL string `json:"url"`
// Width int `json:"width"`
// Height int `json:"height"`
// }{
// URL: thumbnailURL.String(),
// Width: thumbnailWidth,
// Height: thumbnailHeight,
// },
// }

// features = append(features, makeGeoJSONFeature(properties, geoPoint))
// }

// featureCollection := makeGeoJSONFeatureCollection(features)

// return featureCollection, nil

panic("to be migrated")
featureCollection := makeGeoJSONFeatureCollection(features)
return featureCollection, nil
}

func (r *queryResolver) MapboxToken(ctx context.Context) (*string, error) {
Expand Down
2 changes: 1 addition & 1 deletion api/scanner/exif/exif_parser_internal.go
Expand Up @@ -123,7 +123,7 @@ func (p *internalExifParser) ParseExif(media *models.Media) (returnExif *models.
lat, long, err := exifTags.LatLong()
if err == nil {
newExif.GPSLatitude = &lat
newExif.GPSLonitude = &long
newExif.GPSLongitude = &long
}

returnExif = &newExif
Expand Down

0 comments on commit 658e641

Please sign in to comment.