[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

8
config/app.go Normal file
View File

@@ -0,0 +1,8 @@
package config
import "gelvin/app/application"
func configureApp() *application.Application {
app := application.NewApplication(Environment().Version, Environment().UrlRoot, Environment().Mode)
return app
}

33
config/config.go Normal file
View File

@@ -0,0 +1,33 @@
package config
import (
"gelvin/app/application"
"gelvin/app/controllers"
"gelvin/app/models"
)
type Config struct {
app *application.Application
controller *controllers.Controller
model *models.Model
}
func (c Config) App() *application.Application {
return c.app
}
func (c Config) Controller() *controllers.Controller {
return c.controller
}
func (c Config) Model() *models.Model {
return c.model
}
func Configure() *Config {
app := configureApp()
controller := controllers.NewController(app)
configureDb(app)
configureRoutes(app, controller)
return &Config{app, controller, controller.Model()}
}

9
config/database.go Normal file
View File

@@ -0,0 +1,9 @@
package config
import (
"gelvin/app/application"
)
func configureDb(app *application.Application) {
app.SqliteDB("./db")
}

51
config/environment.go Normal file
View File

@@ -0,0 +1,51 @@
package config
import (
"gelvin/app/application"
"os"
)
const EnvPrefix = "GELVIN_"
type environment struct {
Mode application.Mode
UrlRoot string
Version application.Version
}
func Environment() environment {
var mode application.Mode
switch getEnv("MODE") {
case "TEST":
mode = application.Test
case "PRODUCTION":
mode = application.Production
default:
mode = application.Debug
}
var urlRoot string
if urlRoot = getEnv("URL_ROOT"); urlRoot == "" {
urlRoot = "/"
}
version := parseVersion(getEnv("API_VERSION"))
return environment{
Mode: mode,
UrlRoot: urlRoot,
Version: version,
}
}
func getEnv(key string) string {
return os.Getenv(EnvPrefix + key)
}
func parseVersion(s string) application.Version {
version := application.Version{Major: 1}
if s != "" {
// TODO
}
return version
}

30
config/routes.go Normal file
View File

@@ -0,0 +1,30 @@
package config
import (
"gelvin/app/application"
"gelvin/app/controllers"
"github.com/gin-contrib/cors"
)
func configureRoutes(app *application.Application, controller *controllers.Controller) {
root := app.UrlRoot()
router := app.Engine()
corsConfig := cors.DefaultConfig()
// cors
corsConfig.AllowOrigins = []string{
"http://localhost:8080",
}
router.Use(cors.New(corsConfig))
// sensors
router.GET(root+"sensors", controller.GetSensors)
router.GET(root+"sensors/:id", controller.GetSensor)
router.POST(root+"sensors", controller.AddSensor)
// measurements
router.GET(root+"measurements", controller.GetMeasurements)
router.GET(root+"measurements/:id", controller.GetMeasurement)
router.POST(root+"measurements", controller.AddMeasurement)
router.POST(root+"measurements/:id", controller.AddMeasurementID)
}