DB & Route Organization

This commit is contained in:
2021-01-09 19:44:02 -05:00
parent 04924ead5c
commit 96b0c888ed
21 changed files with 430 additions and 192 deletions

View File

@@ -3,39 +3,41 @@ package db
import (
"log"
"path"
"fmt"
"time"
// "time"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/driver/sqlite"
"reichard.io/imagini/internal/config"
"reichard.io/imagini/internal/models"
)
var db *gorm.DB
func ConnectDB(c *config.Config) {
fmt.Printf("%+v\n", c)
gormConfig := &gorm.Config{
PrepareStmt: true,
Logger: logger.Default.LogMode(logger.Silent),
}
if c.DBType == "SQLite" {
dbLocation := path.Join(c.ConfigPath, "imagini.db")
db, _ = gorm.Open(sqlite.Open(dbLocation), &gorm.Config{
PrepareStmt: true,
})
db, _ = gorm.Open(sqlite.Open(dbLocation), gormConfig)
} else {
log.Fatal("ERROR: Unsupported Database")
}
// Initialize Database
db.AutoMigrate(&ServerSetting{})
db.AutoMigrate(&User{})
db.AutoMigrate(&MediaItem{})
db.AutoMigrate(&Tag{})
db.AutoMigrate(&Album{})
db.AutoMigrate(&models.ServerSetting{})
db.AutoMigrate(&models.User{})
db.AutoMigrate(&models.MediaItem{})
db.AutoMigrate(&models.Tag{})
db.AutoMigrate(&models.Album{})
}
func ItemsFromAlbum(user User, album Album) []MediaItem {
var mediaItems []MediaItem
func ItemsFromAlbum(user models.User, album models.Album) []models.MediaItem {
var mediaItems []models.MediaItem
// db.Table("media_albums").
// Select("media_item.*").
// Joins("INNER JOIN media_items ON media_albums.ID = media_items.Albums").
@@ -63,63 +65,63 @@ func ItemsFromAlbum(user User, album Album) []MediaItem {
// func IndexMediaItems(newItems []MediaItem) {
// }
func PopulateTestData() {
user1 := User{Name: "Evan", Email: "evan@reichard.io", AuthType: "LDAP", Salt: "1234", HashedPWSalt: "1234"}
user2 := User{Name: "Ryan", Email: "ryan@example.com", AuthType: "Local", Salt: "2345", HashedPWSalt: "2345"}
user3 := User{Name: "Bill", Email: "bill@example.com", AuthType: "LDAP", Salt: "3456", HashedPWSalt: "3456"}
mi1 := MediaItem{
User: user1,
EXIFDate: time.Now(),
Latitude: "1234",
Longitude: "1234",
RelPath: "./1234.jpg",
Tags: []Tag{
{Name: "Tag1"},
{Name: "Tag2"},
},
Albums: []Album{
{Name: "Album1"},
{Name: "Album2"},
},
}
mi2 := MediaItem{
User: user2,
EXIFDate: time.Now(),
Latitude: "1234",
Longitude: "1234",
RelPath: "./1234.jpg",
Tags: []Tag{
{Name: "Tag3"},
{Name: "Tag4"},
},
Albums: []Album{
{Name: "Album3"},
{Name: "Album4"},
},
}
mi3 := MediaItem{
User: user3,
EXIFDate: time.Now(),
Latitude: "1234",
Longitude: "1234",
RelPath: "./1234.jpg",
Tags: []Tag{
{Name: "Tag4"},
{Name: "Tag5"},
},
Albums: []Album{
{Name: "Album1"},
{Name: "Album7"},
},
}
// db.Create(&user1)
// db.Create(&user2)
// db.Create(&user3)
db.Create(&mi1)
db.Create(&mi2)
db.Create(&mi3)
}
// func PopulateTestData() {
// user1 := User{Username: "Evan", Email: "evan@reichard.io", FirstName: "Evan", LastName: "Reichard", AuthType: "LDAP", Salt: "1234", HashedPWSalt: "1234"}
// user2 := User{Username: "Ryan", Email: "ryan@example.com", FirstName: "Ryan", LastName: "Dunfrey", AuthType: "Local", Salt: "2345", HashedPWSalt: "2345"}
// user3 := User{Username: "Bill", Email: "bill@example.com", FirstName: "Bill", LastName: "Smith", AuthType: "LDAP", Salt: "3456", HashedPWSalt: "3456"}
//
// mi1 := MediaItem{
// User: user1,
// EXIFDate: time.Now(),
// Latitude: "1234",
// Longitude: "1234",
// RelPath: "./1234.jpg",
// Tags: []Tag{
// {Name: "Tag1"},
// {Name: "Tag2"},
// },
// Albums: []Album{
// {Name: "Album1"},
// {Name: "Album2"},
// },
// }
//
// mi2 := MediaItem{
// User: user2,
// EXIFDate: time.Now(),
// Latitude: "1234",
// Longitude: "1234",
// RelPath: "./1234.jpg",
// Tags: []Tag{
// {Name: "Tag3"},
// {Name: "Tag4"},
// },
// Albums: []Album{
// {Name: "Album3"},
// {Name: "Album4"},
// },
// }
//
// mi3 := MediaItem{
// User: user3,
// EXIFDate: time.Now(),
// Latitude: "1234",
// Longitude: "1234",
// RelPath: "./1234.jpg",
// Tags: []Tag{
// {Name: "Tag4"},
// {Name: "Tag5"},
// },
// Albums: []Album{
// {Name: "Album1"},
// {Name: "Album7"},
// },
// }
//
// // db.Create(&user1)
// // db.Create(&user2)
// // db.Create(&user3)
// db.Create(&mi1)
// db.Create(&mi2)
// db.Create(&mi3)
// }

7
internal/db/errors.go Normal file
View File

@@ -0,0 +1,7 @@
package db
import "errors"
var (
ErrUserAlreadyExists = errors.New("user already exists")
)

View File

@@ -1,44 +0,0 @@
package db
import (
"gorm.io/gorm"
"time"
)
type ServerSetting struct {
gorm.Model
Name string
Description string
Value string
}
type User struct {
gorm.Model
Name string
Email string
AuthType string
Salt string
HashedPWSalt string
}
type MediaItem struct {
gorm.Model
User User `gorm:"ForeignKey:ID"`
EXIFDate time.Time
Latitude string
Longitude string
MediaType uint
RelPath string
Tags []Tag `gorm:"many2many:media_tags;"`
Albums []Album `gorm:"many2many:media_albums;"`
}
type Tag struct {
gorm.Model
Name string
}
type Album struct {
gorm.Model
Name string
}

25
internal/db/users.go Normal file
View File

@@ -0,0 +1,25 @@
package db
import (
"reichard.io/imagini/internal/models"
)
func CreateUser (user models.User) error {
err := db.Create(&user).Error
return err
}
func User (user models.User) (models.User, error) {
var foundUser models.User
var count int64
err := db.Where(&user).First(&foundUser).Count(&count).Error
return foundUser, err
}
func DeleteUser (user models.User) error {
return nil
}
func UpdatePassword (user models.User, pw string) {
}