feat: setup project router

This commit is contained in:
Guz
2024-10-07 15:39:46 -03:00
parent 9cd1e1b1e9
commit bb0c4b371a
7 changed files with 152 additions and 0 deletions

29
cmd/serve/main.go Normal file
View 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
View 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
View File

@@ -0,0 +1,3 @@
module forge.capytal.company/capytalcode/project-comicverse
go 1.22.7

10
pages/dashboard.templ Normal file
View File

@@ -0,0 +1,10 @@
package pages
type Dashboard struct {}
func (p *Dashboard) ServeHTTP() {
}
templ (p *Dashboard) Component() {
}

7
pages/routes.go Normal file
View 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
View 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
View 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)
}