Pre graphql

This commit is contained in:
2021-02-01 18:24:09 -05:00
parent dc56899b8b
commit ecf981495e
14 changed files with 414 additions and 156 deletions

View File

@@ -1,7 +1,9 @@
package db
import (
"fmt"
"path"
"errors"
"gorm.io/gorm"
// "gorm.io/gorm/logger"
@@ -52,7 +54,7 @@ func NewMgr(c *config.Config) *DBManager {
func (dbm *DBManager) bootstrapDatabase() {
log.Info("[query] Bootstrapping database.")
_, err := dbm.CreateUser(models.User{
err := dbm.CreateUser(&models.User{
Username: "admin",
Password: "admin",
AuthType: "Local",
@@ -62,3 +64,46 @@ func (dbm *DBManager) bootstrapDatabase() {
log.Fatal("[query] Unable to bootstrap database.")
}
}
func (dbm *DBManager) QueryBuilder(dest interface{}, params []byte) (int64, error) {
// TODO:
// - Where Filters
// - Sort Filters
// - Paging Filters
objType := fmt.Sprintf("%T", dest)
if objType == "*[]models.MediaItem" {
// TODO: Validate MediaItem Type
} else {
// Return Error
return 0, errors.New("Invalid type")
}
var count int64
err := dbm.db.Find(dest).Count(&count).Error;
return count, err
// Paging:
// - Regular Pagination:
// - /api/v1/MediaItems?page[limit]=50&page=2
// - Meta Count Only
// - /api/v1/MediaItems?page[limit]=0
// Sorting:
// - Ascending Sort:
// - /api/v1/MediaItems?sort=created_at
// - Descending Sort:
// - /api/v1/MediaItems?sort=-created_at
// Filters:
// - Greater Than / Less Than (created_at, updated_at, exif_date)
// - /api/v1/MediaItems?filter[created_at]>=2020-01-01&filter[created_at]<=2021-01-01
// - Long / Lat Range (latitude, longitude)
// - /api/v1/MediaItems?filter[latitude]>=71.1827&filter[latitude]<=72.0000&filter[longitude]>=100.000&filter[longitude]<=101.0000
// - Image / Video (media_type)
// - /api/v1/MediaItems?filter[media_type]=Image
// - Tags (tags)
// - /api/v1/MediaItems?filter[tags]=id1,id2,id3
// - Albums (albums)
// - /api/v1/MediaItems?filter[albums]=id1
}

View File

@@ -7,24 +7,24 @@ import (
"reichard.io/imagini/internal/models"
)
func (dbm *DBManager) CreateDevice (device models.Device) (models.Device, error) {
func (dbm *DBManager) CreateDevice (device *models.Device) error {
log.Info("[db] Creating device: ", device.Name)
device.RefreshKey = uuid.New().String()
err := dbm.db.Create(&device).Error
return device, err
return err
}
func (dbm *DBManager) Device (device models.Device) (models.Device, error) {
func (dbm *DBManager) Device (device *models.Device) (models.Device, error) {
var foundDevice models.Device
var count int64
err := dbm.db.Where(&device).First(&foundDevice).Count(&count).Error
return foundDevice, err
}
func (dbm *DBManager) DeleteDevice (user models.Device) error {
func (dbm *DBManager) DeleteDevice (user *models.Device) error {
return nil
}
func (dbm *DBManager) UpdateRefreshToken (device models.Device, refreshToken string) error {
func (dbm *DBManager) UpdateRefreshToken (device *models.Device, refreshToken string) error {
return nil
}

View File

@@ -6,30 +6,16 @@ import (
"reichard.io/imagini/internal/models"
)
func (dbm *DBManager) CreateMediaItem (mediaItem models.MediaItem) (models.MediaItem, error) {
func (dbm *DBManager) CreateMediaItem (mediaItem *models.MediaItem) error {
log.Info("[db] Creating media item: ", mediaItem.FileName)
err := dbm.db.Create(&mediaItem).Error
return mediaItem, err
return err
}
func (dbm *DBManager) MediaItemsFromAlbum(user models.User, album models.Album) ([]models.MediaItem, error) {
func (dbm *DBManager) MediaItems(mediaItemFilter *models.MediaItem) ([]models.MediaItem, int64, error) {
var mediaItems []models.MediaItem
// db.Table("media_albums").
// Select("media_item.*").
// Joins("INNER JOIN media_items ON media_albums.ID = media_items.Albums").
// Where("media_albums.album_id = ? AND media_items.User = ?", albumID, userID).
var count int64
err := dbm.db.
//Where("album = ? AND user = ?", albumID, userID).
Find(&mediaItems).Error
return mediaItems, err
// db.Raw(`
// SELECT
// MediaItems.*
// FROM
// MediaAlbums
// INNER JOIN MediaItems ON MediaAlbums.mediaID = MediaItems.mediaID
// WHERE MediaAlbums.albumID = ? AND MediaItems.userID = ?`, albumID, userID)
err := dbm.db.Where(&mediaItemFilter).Find(&mediaItems).Count(&count).Error;
return mediaItems, count, err
}

View File

@@ -7,19 +7,19 @@ import (
"reichard.io/imagini/internal/models"
)
func (dbm *DBManager) CreateUser(user models.User) (models.User, error) {
func (dbm *DBManager) CreateUser(user *models.User) error {
log.Info("[db] Creating user: ", user.Username)
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
if err != nil {
log.Error(err)
return user, err
return err
}
user.Password = string(hashedPassword)
err = dbm.db.Create(&user).Error
return user, err
return err
}
func (dbm *DBManager) User (user models.User) (models.User, error) {
func (dbm *DBManager) User (user *models.User) (models.User, error) {
var foundUser models.User
var count int64
err := dbm.db.Where(&user).First(&foundUser).Count(&count).Error