feat: setup project router
This commit is contained in:
29
cmd/serve/main.go
Normal file
29
cmd/serve/main.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
comicverse "forge.capytal.company/capytalcode/project-comicverse"
|
||||
)
|
||||
|
||||
var port *int
|
||||
|
||||
func init() {
|
||||
portEnv := os.Getenv("COMICVERSE_PORT")
|
||||
if portEnv == "" {
|
||||
portEnv = "8080"
|
||||
}
|
||||
p, err := strconv.Atoi(portEnv)
|
||||
if err != nil {
|
||||
p = 8080
|
||||
}
|
||||
|
||||
port = flag.Int("port", p, "The port to the server to listen on")
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
comicverse.Run(*port)
|
||||
}
|
||||
20
comicverse.go
Normal file
20
comicverse.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package comicverse
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"forge.capytal.company/capytalcode/project-comicverse/pages"
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router"
|
||||
)
|
||||
|
||||
func Run(port int) {
|
||||
router := router.NewRouter()
|
||||
|
||||
router.HandleRoutes(pages.PAGES)
|
||||
|
||||
if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
3
go.mod
Normal file
3
go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module forge.capytal.company/capytalcode/project-comicverse
|
||||
|
||||
go 1.22.7
|
||||
10
pages/dashboard.templ
Normal file
10
pages/dashboard.templ
Normal file
@@ -0,0 +1,10 @@
|
||||
package pages
|
||||
|
||||
type Dashboard struct {}
|
||||
|
||||
func (p *Dashboard) ServeHTTP() {
|
||||
}
|
||||
|
||||
templ (p *Dashboard) Component() {
|
||||
|
||||
}
|
||||
7
pages/routes.go
Normal file
7
pages/routes.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package pages
|
||||
|
||||
import (
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router"
|
||||
)
|
||||
|
||||
var PAGES = []router.Route{}
|
||||
29
router/default.go
Normal file
29
router/default.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router/middleware"
|
||||
)
|
||||
|
||||
var DefaultRouter = NewRouter()
|
||||
|
||||
func Handle(pattern string, handler http.Handler) {
|
||||
DefaultRouter.Handle(pattern, handler)
|
||||
}
|
||||
|
||||
func HandleFunc(pattern string, handler http.HandlerFunc) {
|
||||
DefaultRouter.HandleFunc(pattern, handler)
|
||||
}
|
||||
|
||||
func HandleRoutes(routes []Route) {
|
||||
DefaultRouter.HandleRoutes(routes)
|
||||
}
|
||||
|
||||
func Middleware(m middleware.Middleware) {
|
||||
DefaultRouter.AddMiddleware(m)
|
||||
}
|
||||
|
||||
func ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
DefaultRouter.ServeHTTP(w, r)
|
||||
}
|
||||
54
router/router.go
Normal file
54
router/router.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type Router struct {
|
||||
mux *http.ServeMux
|
||||
serveHttp http.HandlerFunc
|
||||
}
|
||||
|
||||
type RouterOpts struct {
|
||||
Mux *http.ServeMux
|
||||
}
|
||||
|
||||
type Route struct {
|
||||
pattern string
|
||||
handler http.Handler
|
||||
}
|
||||
|
||||
func NewRouter(opts ...RouterOpts) *Router {
|
||||
var mux *http.ServeMux
|
||||
if len(opts) > 0 {
|
||||
mux = opts[0].Mux
|
||||
} else {
|
||||
mux = http.NewServeMux()
|
||||
}
|
||||
|
||||
return &Router{
|
||||
mux: mux,
|
||||
serveHttp: mux.ServeHTTP,
|
||||
middlewares: []middleware.Middleware{},
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Router) Handle(pattern string, handler http.Handler) {
|
||||
r.mux.Handle(pattern, handler)
|
||||
}
|
||||
|
||||
func (r *Router) HandleFunc(pattern string, hf http.HandlerFunc) {
|
||||
r.mux.HandleFunc(pattern, hf)
|
||||
}
|
||||
|
||||
func (rt *Router) HandleRoutes(routes []Route) {
|
||||
for _, r := range routes {
|
||||
rt.Handle(r.pattern, r.handler)
|
||||
}
|
||||
}
|
||||
|
||||
func (rt *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
rt.serveHttp(w, r)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user