import crm entry point
This commit is contained in:
parent
a7fcdf3795
commit
a21de65eb4
58
cmd/crm/main.go
Normal file
58
cmd/crm/main.go
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/go-chi/chi"
|
||||||
|
|
||||||
|
"github.com/titpetric/crust/crm"
|
||||||
|
"github.com/titpetric/factory"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleError(err error, message string) {
|
||||||
|
if message == "" {
|
||||||
|
message = "Error making API call"
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf(message+": %v", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// set up flags
|
||||||
|
var (
|
||||||
|
addr = flag.String("addr", ":3000", "Listen address for HTTP server")
|
||||||
|
)
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
// log to stdout not stderr
|
||||||
|
log.SetOutput(os.Stdout)
|
||||||
|
|
||||||
|
// set up database connection
|
||||||
|
factory.Database.Add("default", "crust:crust@tcp(db1:3306)/crust?collation=utf8mb4_general_ci")
|
||||||
|
|
||||||
|
/*
|
||||||
|
db, err := factory.Database.Get()
|
||||||
|
handleError(err, "Can't connect to database")
|
||||||
|
db.Profiler = &factory.Database.ProfilerStdout
|
||||||
|
*/
|
||||||
|
|
||||||
|
// listen socket for http server
|
||||||
|
log.Println("Starting http server on address " + *addr)
|
||||||
|
listener, err := net.Listen("tcp", *addr)
|
||||||
|
handleError(err, "Can't listen on addr "+*addr)
|
||||||
|
|
||||||
|
// route options
|
||||||
|
routeOptions, err := RouteOptions{}.New()
|
||||||
|
handleError(err, "Error creating RouteOptions object")
|
||||||
|
|
||||||
|
// mount routes
|
||||||
|
r := chi.NewRouter()
|
||||||
|
MountRoutes(r, routeOptions, crm.MountRoutes)
|
||||||
|
http.Serve(listener, r)
|
||||||
|
}
|
||||||
16
cmd/crm/options.go
Normal file
16
cmd/crm/options.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
type RouteOptions struct {
|
||||||
|
enableLogging bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (RouteOptions) New() (*RouteOptions, error) {
|
||||||
|
opts := &RouteOptions{}
|
||||||
|
opts.enableLogging = true
|
||||||
|
return opts, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *RouteOptions) EnableLogging(enable bool) *RouteOptions {
|
||||||
|
o.enableLogging = enable
|
||||||
|
return o
|
||||||
|
}
|
||||||
26
cmd/crm/routes.go
Normal file
26
cmd/crm/routes.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/go-chi/chi"
|
||||||
|
"github.com/go-chi/chi/middleware"
|
||||||
|
"github.com/go-chi/cors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MountRoutes will register API routes
|
||||||
|
func MountRoutes(r chi.Router, opts *RouteOptions, mountRoutes func(r chi.Router)) {
|
||||||
|
// CORS for local development...
|
||||||
|
cors := cors.New(cors.Options{
|
||||||
|
AllowedOrigins: []string{"*"},
|
||||||
|
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"},
|
||||||
|
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"},
|
||||||
|
AllowCredentials: true,
|
||||||
|
MaxAge: 300, // Maximum value not ignored by any of major browsers
|
||||||
|
})
|
||||||
|
r.Use(cors.Handler)
|
||||||
|
|
||||||
|
if opts.enableLogging {
|
||||||
|
r.Use(middleware.Logger)
|
||||||
|
}
|
||||||
|
|
||||||
|
mountRoutes(r)
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user