SocialDragon/database/main.go

87 lines
1.6 KiB
Go

package database
import (
"log"
"time"
"git.1750studios.com/AniNite/SocialDragon/config"
"github.com/jinzhu/gorm"
_ "github.com/lib/pq" // Database backend for GORM
)
// Service defines the service providers
type Service uint
// IDs for the service providers
const (
Snapchat Service = iota
Twitter
Instagram
Folder
)
// State defines the states a media item can have
type State uint
// Possible states
const (
Inbox State = iota
Approved
Rejected
)
type updateCallbackT func(Item)
// Item defines the databse model
type Item struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
UserID uint `sql:"index"`
Service Service
State State
IsVideo bool
Path string
OriginalID string
}
// User defines the database model
type User struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
Name string
DisplayName string
Service Service
Blocked bool
}
// Db is the database handler
var Db *gorm.DB
var cb updateCallbackT
// InitDb opens and sets up database
func InitDb(callback updateCallbackT) {
cb = callback
var err error
Db, err = gorm.Open("postgres", config.C.DatabaseConnection)
if err != nil {
log.Fatalf("Database error: %+v", err)
}
Db.LogMode(false)
Db.SingularTable(true)
Db.Model(&Item{}).AddForeignKey("user_id", "\"user\"(id)", "RESTRICT", "RESTRICT")
Db.AutoMigrate(&Item{}, &User{})
}
// AfterSave sends updates over the callback
func (IT *Item) AfterSave(scope *gorm.Scope) (err error) {
go cb(*IT)
return
}