Wooo API!
This commit is contained in:
@@ -1,113 +1,113 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"path"
|
||||
"fmt"
|
||||
"errors"
|
||||
"fmt"
|
||||
"path"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
// "gorm.io/gorm/logger"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
log "github.com/sirupsen/logrus"
|
||||
// "gorm.io/gorm/logger"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"reichard.io/imagini/internal/config"
|
||||
"reichard.io/imagini/graph/model"
|
||||
"reichard.io/imagini/graph/model"
|
||||
"reichard.io/imagini/internal/config"
|
||||
)
|
||||
|
||||
type DBManager struct {
|
||||
db *gorm.DB
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewMgr(c *config.Config) *DBManager {
|
||||
gormConfig := &gorm.Config{
|
||||
PrepareStmt: true,
|
||||
// Logger: logger.Default.LogMode(logger.Silent),
|
||||
}
|
||||
gormConfig := &gorm.Config{
|
||||
PrepareStmt: true,
|
||||
// Logger: logger.Default.LogMode(logger.Silent),
|
||||
}
|
||||
|
||||
// Create manager
|
||||
dbm := &DBManager{}
|
||||
// Create manager
|
||||
dbm := &DBManager{}
|
||||
|
||||
if c.DBType == "SQLite" {
|
||||
dbLocation := path.Join(c.ConfigPath, "imagini.db")
|
||||
dbm.db, _ = gorm.Open(sqlite.Open(dbLocation), gormConfig)
|
||||
} else {
|
||||
log.Fatal("Unsupported Database")
|
||||
}
|
||||
if c.DBType == "SQLite" {
|
||||
dbLocation := path.Join(c.ConfigPath, "imagini.db")
|
||||
dbm.db, _ = gorm.Open(sqlite.Open(dbLocation), gormConfig)
|
||||
} else {
|
||||
log.Fatal("Unsupported Database")
|
||||
}
|
||||
|
||||
// Initialize database
|
||||
dbm.db.AutoMigrate(&model.Device{})
|
||||
dbm.db.AutoMigrate(&model.User{})
|
||||
dbm.db.AutoMigrate(&model.MediaItem{})
|
||||
dbm.db.AutoMigrate(&model.Tag{})
|
||||
dbm.db.AutoMigrate(&model.Album{})
|
||||
// Initialize database
|
||||
dbm.db.AutoMigrate(&model.Device{})
|
||||
dbm.db.AutoMigrate(&model.User{})
|
||||
dbm.db.AutoMigrate(&model.MediaItem{})
|
||||
dbm.db.AutoMigrate(&model.Tag{})
|
||||
dbm.db.AutoMigrate(&model.Album{})
|
||||
|
||||
// Determine whether to bootstrap
|
||||
var count int64
|
||||
dbm.db.Model(&model.User{}).Count(&count)
|
||||
if count == 0 {
|
||||
dbm.bootstrapDatabase()
|
||||
}
|
||||
// Determine whether to bootstrap
|
||||
var count int64
|
||||
dbm.db.Model(&model.User{}).Count(&count)
|
||||
if count == 0 {
|
||||
dbm.bootstrapDatabase()
|
||||
}
|
||||
|
||||
return dbm
|
||||
return dbm
|
||||
}
|
||||
|
||||
func (dbm *DBManager) bootstrapDatabase() {
|
||||
log.Info("[query] Bootstrapping database.")
|
||||
log.Info("[query] Bootstrapping database.")
|
||||
|
||||
password := "admin"
|
||||
user := &model.User{
|
||||
Username: "admin",
|
||||
AuthType: "Local",
|
||||
Password: &password,
|
||||
Role: model.RoleAdmin,
|
||||
}
|
||||
password := "admin"
|
||||
user := &model.User{
|
||||
Username: "admin",
|
||||
AuthType: "Local",
|
||||
Password: &password,
|
||||
Role: model.RoleAdmin,
|
||||
}
|
||||
|
||||
err := dbm.CreateUser(user)
|
||||
err := dbm.CreateUser(user)
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("[query] Unable to bootstrap database.")
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal("[query] Unable to bootstrap database.")
|
||||
}
|
||||
}
|
||||
|
||||
func (dbm *DBManager) QueryBuilder(dest interface{}, params []byte) (int64, error) {
|
||||
// TODO:
|
||||
// - Where Filters
|
||||
// - Sort Filters
|
||||
// - Paging Filters
|
||||
// TODO:
|
||||
// - Where Filters
|
||||
// - Sort Filters
|
||||
// - Paging Filters
|
||||
|
||||
objType := fmt.Sprintf("%T", dest)
|
||||
if objType == "*[]model.MediaItem" {
|
||||
// TODO: Validate MediaItem Type
|
||||
} else {
|
||||
// Return Error
|
||||
return 0, errors.New("Invalid type")
|
||||
}
|
||||
objType := fmt.Sprintf("%T", dest)
|
||||
if objType == "*[]model.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
|
||||
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
|
||||
// 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
|
||||
// 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
|
||||
// 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
|
||||
}
|
||||
|
||||
@@ -1,31 +1,30 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/google/uuid"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"reichard.io/imagini/graph/model"
|
||||
"reichard.io/imagini/graph/model"
|
||||
)
|
||||
|
||||
func (dbm *DBManager) CreateDevice (device *model.Device) error {
|
||||
log.Info("[db] Creating device: ", device.Name)
|
||||
refreshKey := uuid.New().String()
|
||||
device.RefreshKey = &refreshKey
|
||||
err := dbm.db.Create(&device).Error
|
||||
return err
|
||||
func (dbm *DBManager) CreateDevice(device *model.Device) error {
|
||||
log.Debug("[db] Creating device: ", device.Name)
|
||||
refreshKey := uuid.New().String()
|
||||
device.RefreshKey = &refreshKey
|
||||
err := dbm.db.Create(device).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (dbm *DBManager) Device (device *model.Device) (model.Device, error) {
|
||||
var foundDevice model.Device
|
||||
var count int64
|
||||
err := dbm.db.Where(&device).First(&foundDevice).Count(&count).Error
|
||||
return foundDevice, err
|
||||
func (dbm *DBManager) Device(device *model.Device) (int64, error) {
|
||||
var count int64
|
||||
err := dbm.db.Where(device).First(device).Count(&count).Error
|
||||
return count, err
|
||||
}
|
||||
|
||||
func (dbm *DBManager) DeleteDevice (user *model.Device) error {
|
||||
return nil
|
||||
func (dbm *DBManager) DeleteDevice(user *model.Device) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dbm *DBManager) UpdateRefreshToken (device *model.Device, refreshToken string) error {
|
||||
return nil
|
||||
func (dbm *DBManager) UpdateRefreshToken(device *model.Device, refreshToken string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -3,5 +3,5 @@ package db
|
||||
import "errors"
|
||||
|
||||
var (
|
||||
ErrUserAlreadyExists = errors.New("user already exists")
|
||||
ErrUserAlreadyExists = errors.New("user already exists")
|
||||
)
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"reichard.io/imagini/graph/model"
|
||||
"reichard.io/imagini/graph/model"
|
||||
)
|
||||
|
||||
func (dbm *DBManager) CreateMediaItem (mediaItem *model.MediaItem) error {
|
||||
log.Info("[db] Creating media item: ", mediaItem.FileName)
|
||||
err := dbm.db.Create(&mediaItem).Error
|
||||
return err
|
||||
func (dbm *DBManager) CreateMediaItem(mediaItem *model.MediaItem) error {
|
||||
log.Debug("[db] Creating media item: ", mediaItem.FileName)
|
||||
err := dbm.db.Create(mediaItem).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (dbm *DBManager) MediaItems(mediaItemFilter *model.MediaItem) ([]model.MediaItem, int64, error) {
|
||||
var mediaItems []model.MediaItem
|
||||
var count int64
|
||||
var mediaItems []model.MediaItem
|
||||
var count int64
|
||||
|
||||
err := dbm.db.Where(&mediaItemFilter).Find(&mediaItems).Count(&count).Error;
|
||||
return mediaItems, count, err
|
||||
err := dbm.db.Where(mediaItemFilter).Find(&mediaItems).Count(&count).Error
|
||||
return mediaItems, count, err
|
||||
}
|
||||
|
||||
@@ -1,43 +1,41 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
log "github.com/sirupsen/logrus"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
"reichard.io/imagini/graph/model"
|
||||
"reichard.io/imagini/graph/model"
|
||||
)
|
||||
|
||||
func (dbm *DBManager) CreateUser (user *model.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 err
|
||||
}
|
||||
stringHashedPassword := string(hashedPassword)
|
||||
user.Password = &stringHashedPassword
|
||||
err = dbm.db.Create(&user).Error
|
||||
return err
|
||||
func (dbm *DBManager) CreateUser(user *model.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 err
|
||||
}
|
||||
stringHashedPassword := string(hashedPassword)
|
||||
user.Password = &stringHashedPassword
|
||||
return dbm.db.Create(user).Error
|
||||
}
|
||||
|
||||
func (dbm *DBManager) User (user *model.User) (model.User, error) {
|
||||
var foundUser model.User
|
||||
var count int64
|
||||
err := dbm.db.Where(&user).First(&foundUser).Count(&count).Error
|
||||
return foundUser, err
|
||||
func (dbm *DBManager) User(user *model.User) (int64, error) {
|
||||
var count int64
|
||||
err := dbm.db.Where(user).First(user).Count(&count).Error
|
||||
return count, err
|
||||
}
|
||||
|
||||
func (dbm *DBManager) Users () ([]*model.User, int64, error) {
|
||||
var foundUsers []*model.User
|
||||
var count int64
|
||||
err := dbm.db.Find(&foundUsers).Count(&count).Error
|
||||
return foundUsers, count, err
|
||||
func (dbm *DBManager) Users() ([]*model.User, int64, error) {
|
||||
var foundUsers []*model.User
|
||||
var count int64
|
||||
err := dbm.db.Find(&foundUsers).Count(&count).Error
|
||||
return foundUsers, count, err
|
||||
}
|
||||
|
||||
func (dbm *DBManager) DeleteUser (user model.User) error {
|
||||
return nil
|
||||
func (dbm *DBManager) DeleteUser(user model.User) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dbm *DBManager) UpdatePassword (user model.User, pw string) {
|
||||
func (dbm *DBManager) UpdatePassword(user model.User, pw string) {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user