package api import ( "flag" "fmt" "net/http" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/go-chi/docgen" "github.com/go-chi/render" ) var routes = flag.Bool("routes", false, "Generate API route documentation") func Start() { flag.Parse() r := chi.NewRouter() r.Use(middleware.RequestID) r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.URLFormat) r.Use(render.SetContentType(render.ContentTypeJSON)) r.Get("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) }) r.Get("/ping", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("pong")) }) r.Get("/panic", func(w http.ResponseWriter, r *http.Request) { panic("oh no") }) r.Route("/messages", func(r chi.Router) { r.Get("/", ListMessages) r.Route("/{messageID}", func(r chi.Router) { r.Use(MessageCtx) // Load message r.Get("/", GetMessage) }) r.Post("/new", NewMessage) }) if *routes { fmt.Println(docgen.MarkdownRoutesDoc(r, docgen.MarkdownOpts{ ProjectPath: "git.dubyatp.xyz/chat-api-server", Intro: "Welcome to the chat API server. This is a simple API for sending and receiving messages.", })) return } http.ListenAndServe(":3000", r) }