Organizer ist der Backend-Server der Organizer-App.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Organizer/models/models.go

80 lines
1.9 KiB

package models
import (
"database/sql"
"fmt"
"github.com/go-xorm/xorm"
"os"
// Use sqlite
_ "github.com/mattn/go-sqlite3"
)
// Engine represents a xorm engine or session.
type Engine interface {
Table(tableNameOrBean interface{}) *xorm.Session
Count(...interface{}) (int64, error)
Decr(column string, arg ...interface{}) *xorm.Session
Delete(interface{}) (int64, error)
Exec(string, ...interface{}) (sql.Result, error)
Find(interface{}, ...interface{}) error
Get(interface{}) (bool, error)
Id(interface{}) *xorm.Session
In(string, ...interface{}) *xorm.Session
Incr(column string, arg ...interface{}) *xorm.Session
Insert(...interface{}) (int64, error)
InsertOne(interface{}) (int64, error)
Iterate(interface{}, xorm.IterFunc) error
Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *xorm.Session
SQL(interface{}, ...interface{}) *xorm.Session
Where(interface{}, ...interface{}) *xorm.Session
}
var (
x *xorm.Engine
tables []interface{}
)
func init() {
tables = append(tables,
new(Teacher),
new(Vertretungsplan),
)
}
func getEngine() (*xorm.Engine, error) {
if err := os.MkdirAll("data/organizer.db", os.ModePerm); err != nil {
return nil, err
}
connStr := "file:data/organizer.db?cache=shared&mode=rwc"
return xorm.NewEngine("sqlite3", connStr)
}
// SetEngine sets the xorm.Engine
// code by github.com/go-gitea/gitea
func SetEngine() (err error) {
x, err = getEngine()
x.ShowSQL(true)
return nil
}
// NewEngine initializes a new xorm.Engine
// code by github.com/go-gitea/gitea
func NewEngine(migrateFunc func(*xorm.Engine) error) (err error) {
if err = SetEngine(); err != nil {
return err
}
if err = x.Ping(); err != nil {
return err
}
if err = migrateFunc(x); err != nil {
return fmt.Errorf("migrate: %v", err)
}
if err = x.StoreEngine("InnoDB").Sync2(tables...); err != nil {
return fmt.Errorf("sync database struct error: %v", err)
}
return nil
}