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 }