package main import ( "app/controller" "app/database" "app/environment" "app/service" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/mvc" ) func main() { app := iris.New() app.Get("/ping", pong).Describe("healthcheck") mvc.Configure(app.Party("/greet"), setup) // http://localhost:8080/greet?name=kataras addr := ":" + environment.Getenv("PORT", "8080") app.Listen(addr, iris.WithLogLevel("debug")) } func pong(ctx iris.Context) { ctx.WriteString("pong") } /* +-------------------+ | Env (DEV, PROD) | +---------+---------+ | | | | | | | | | DEV | | | PROD -------------------+---------------------+ | +----------------------+------------------- | | | | | | +---+-----+ +----------------v------------------+ +----+----+ | sqlite | | NewDB(Env) DB | | mysql | +---+-----+ +----------------+---+--------------+ +----+----+ | | | | | | | | | | | | +--------------+-----+ +-------------------v---v-----------------+ +----+------+ | greeterWithLogging | | NewGreetService(Env, DB) GreetService | | greeter | +--------------+-----+ +---------------------------+-------------+ +----+------+ | | | | | | | +-----------------------------------------+ | | | GreetController | | | | | | | | | | - Service GreetService <-- | | | | | | | +-------------------+---------------------+ | | | | | | | | | | | +-----------+-----------+ | | | HTTP Request | | | +-----------------------+ | | | /greet?name=kataras | | | +-----------+-----------+ | | | | +------------------+--------+ +------------+------------+ +-------+------------------+ | model.Response (JSON) | | Response (JSON, error) | | Bad Request | +---------------------------+ +-------------------------+ +--------------------------+ | { | | mysql: not implemented | | "msg": "Hello kataras" | +--------------------------+ | } | +---------------------------+ */ func setup(app *mvc.Application) { // Register Dependencies. // Tip: A dependency can depend on other dependencies too. env := environment.ReadEnv("ENVIRONMENT", environment.DEV) app.Register( env, // DEV, PROD database.NewDB, // sqlite, mysql service.NewGreetService, // greeterWithLogging, greeter ) // Register Controllers. app.Handle(new(controller.GreetController)) }