forked from gsn/predictor
47 lines
960 B
Go
47 lines
960 B
Go
package rest
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"git.intra.yksa.space/gsn/predictor/internal/pkg/log"
|
|
"git.intra.yksa.space/gsn/predictor/internal/transport/middleware"
|
|
handler "git.intra.yksa.space/gsn/predictor/internal/transport/rest/handler"
|
|
api "git.intra.yksa.space/gsn/predictor/pkg/rest"
|
|
"github.com/rs/cors"
|
|
)
|
|
|
|
type Transport struct {
|
|
cfg *Config
|
|
srv *api.Server
|
|
handler *handler.Handler
|
|
}
|
|
|
|
func New(handler *handler.Handler, cfg *Config) (*Transport, error) {
|
|
srv, err := api.NewServer(
|
|
handler,
|
|
api.WithMiddleware(middleware.Logging()),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Transport{
|
|
srv: srv,
|
|
cfg: cfg,
|
|
handler: handler,
|
|
}, nil
|
|
}
|
|
|
|
func (t *Transport) Run() {
|
|
log.Ctx(context.Background()).Info("started")
|
|
|
|
mux := http.NewServeMux()
|
|
mux.Handle("/", t.srv)
|
|
cors.AllowAll().Handler(mux)
|
|
|
|
if err := http.ListenAndServe(fmt.Sprintf(":%d", t.cfg.Port), t.srv); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|