[add] initial commit

This commit is contained in:
2022-09-30 14:59:51 -05:00
commit 3da5d6a560
15 changed files with 825 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
package application
import (
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type Mode uint
const (
Debug Mode = iota
Test
Production
)
type Version struct {
Major uint8
Minor uint8
Patch uint8
}
type AppError struct {
Error string `json:"error"`
Debug string `json:"debug"`
}
type Application struct {
version Version
urlRoot string
database *Database
engine *gin.Engine
mode Mode
}
func (a *Application) SqliteDB(path string) {
a.database = &Database{
databaseType: SQLite3,
path: path,
mode: a.mode,
}
}
func (a *Application) OpenDB() error {
return a.database.open()
}
func (a *Application) CloseDB() error {
return a.database.close()
}
func (a Application) Db() *gorm.DB {
return a.database.db
}
func (a Application) Version() string {
return fmt.Sprintf("%d.%d.%d", a.version.Major, a.version.Minor, a.version.Patch)
}
func (a Application) VersionNamespace() string {
return fmt.Sprintf("%d", a.version.Major)
}
func (a Application) UrlRoot() string {
return a.urlRoot
}
func (a Application) Engine() *gin.Engine {
return a.engine
}
func (a *Application) Run(address string) error {
return a.engine.Run(address)
}
func (a Application) Database() *Database {
return a.database
}
func (a Application) Mode() Mode {
return a.mode
}
func (a Application) NewError(error string, debug string) interface{} {
if a.mode == Debug {
return AppError{
Error: error,
Debug: debug,
}
} else {
return struct {
Error string `json:"error"`
Debug string `json:"-"`
}{error, debug}
}
}
func NewApplication(version Version, urlRoot string, mode Mode) *Application {
switch mode {
case Production:
gin.SetMode(gin.ReleaseMode)
case Test:
gin.SetMode(gin.TestMode)
}
app := Application{
version: Version{
Major: version.Major,
Minor: version.Minor,
Patch: version.Patch,
},
urlRoot: urlRoot,
engine: gin.Default(),
mode: mode,
}
return &app
}

View File

@@ -0,0 +1,52 @@
package application
import (
"errors"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type DatabaseType uint8
const (
SQL DatabaseType = iota
SQLite3
)
type Database struct {
databaseType DatabaseType
path string
db *gorm.DB
mode Mode
}
func (d *Database) open() error {
var err error
switch d.databaseType {
case SQL:
err = errors.New("not yet implemented")
case SQLite3:
var config gorm.Config
if d.mode == Debug {
config = gorm.Config{}
} else {
config = gorm.Config{Logger: logger.Default.LogMode(logger.Silent)}
}
db, err := gorm.Open(sqlite.Open(d.path), &config)
if err == nil {
d.db = db
}
default:
err = errors.New("unknown database type")
}
return err
}
func (d *Database) close() error {
db, err := d.db.DB()
if err == nil {
err = db.Close()
}
return err
}