feat: hello world

This commit is contained in:
Guz
2025-03-05 10:05:21 -03:00
parent 1edc9c6ff0
commit d2308b5a1b
12 changed files with 150 additions and 90 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
tmp
.dist

16
app.go
View File

@@ -1,16 +0,0 @@
package capytalcodecomicverse
import (
"io/fs"
"net/http"
)
type App struct {
templates fs.FS
}
func NewApp(templates fs.FS) *App {
return &App{
templates: templates,
}
}

77
cmd/cmd.go Normal file
View File

@@ -0,0 +1,77 @@
package cmd
import (
"context"
"errors"
"flag"
"fmt"
"log/slog"
"net/http"
"os"
"os/signal"
"syscall"
"forge.capytal.company/capytalcode/project-comicverse/router"
"forge.capytal.company/loreddev/x/tinyssert"
)
var (
host = flag.String("host", "localhost", "Host to listen to")
port = flag.Uint("port", 8080, "Port to be used for the server.")
templatesDir = flag.String("templates", "", "Templates directory to be used instead of built-in ones.")
verbose = flag.Bool("verbose", false, "Print debug information on logs")
dev = flag.Bool("dev", false, "Run the server in debug mode.")
)
func init() {
flag.Parse()
}
func Execute() {
ctx := context.Background()
assertions := tinyssert.NewDisabledAssertions()
if *dev {
assertions = tinyssert.NewAssertions()
}
level := slog.LevelError
if *dev {
level = slog.LevelDebug
} else if *verbose {
level = slog.LevelInfo
}
log := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level}))
app := router.New(assertions, log, *dev)
srv := &http.Server{
Addr: fmt.Sprintf("%s:%d", *host, *port),
Handler: app,
}
c, stop := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM)
defer stop()
go func() {
log.Info("Starting application",
slog.String("host", *host),
slog.Uint64("port", uint64(*port)),
slog.Bool("verbose", *verbose),
slog.Bool("development", *dev))
if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Error("Failed to start application", slog.String("error", err.Error()))
}
}()
<-c.Done()
log.Info("Stopping application gracefully")
if err := srv.Shutdown(ctx); err != nil {
log.Error("Failed to stop application gracefully", slog.String("error", err.Error()))
}
log.Info("FINAL")
os.Exit(0)
}

6
go.mod
View File

@@ -1,3 +1,7 @@
module forge.capytal.company/capytalcode/project-comicverse
go 1.22.7
go 1.23.3
toolchain go1.23.6
require forge.capytal.company/loreddev/x v0.0.0-20250227192157-90a5169f1bef

2
go.sum
View File

@@ -0,0 +1,2 @@
forge.capytal.company/loreddev/x v0.0.0-20250227192157-90a5169f1bef h1:IJ9z7otITB5hhjZ+bmU0yOVsa8K1RWYIZ+cQj9XF6NY=
forge.capytal.company/loreddev/x v0.0.0-20250227192157-90a5169f1bef/go.mod h1:MnU08vmXvYIQlQutVcC6o6Xq1KHZuXGXO78bbHseCFo=

6
go.work Normal file
View File

@@ -0,0 +1,6 @@
go 1.23.6
use (
./.
./x
)

17
main.go
View File

@@ -1,18 +1,7 @@
package capytalcodecomicverse
package main
import (
"flag"
)
var (
debug = flag.Bool("dev", false, "Run the server in debug mode.")
port = flag.Int("port", 8080, "Port to be used for the server.")
)
func init() {
flag.Parse()
}
import "forge.capytal.company/capytalcode/project-comicverse/cmd"
func main() {
cmd.Execute()
}

View File

@@ -1,75 +1,31 @@
PORT?=8080
lint: build/templ
go run github.com/golangci/golangci-lint/cmd/golangci-lint@v1.59.1 run
npx eslint .
lint:
golangci-lint run .
lint/fix: build/templ
go run github.com/golangci/golangci-lint/cmd/golangci-lint@v1.59.1 run
npx eslint --fix .
fmt: build/templ
go fmt ./.
go run github.com/a-h/templ/cmd/templ@v0.2.707 fmt .
go run mvdan.cc/gofumpt@v0.7.0 -l -w .
go run github.com/segmentio/golines@v0.12.2 -w .
go run golang.org/x/tools/cmd/goimports@v0.26.0 -w -l .
dev/templ:
go run github.com/a-h/templ/cmd/templ@v0.2.707 generate --watch \
--proxy=http://localhost:$(PORT) \
--proxybind="0.0.0.0" \
--open-browser=false
dev/server:
go run github.com/air-verse/air@v1.52.2 \
--build.cmd "go build -o tmp/bin/main ." \
--build.bin "tmp/bin/main" \
--build.exclude_dir "node_modules" \
--build.include_ext "go" \
--build.stop_on_error "false" \
--misc.clean_on_exit true \
-- -dev -port $(PORT)
dev/sync_assets:
go run github.com/air-verse/air@v1.52.2 \
--build.cmd "go run github.com/a-h/templ/cmd/templ@v0.2.707 generate --notify-proxy" \
--build.bin "true" \
--build.delay "100" \
--build.exclude_dir "" \
--build.include_dir "static" \
--build.include_ext "js,css"
dev/assets/css:
npx unocss --watch
fmt:
go fmt .
golangci-lint run --fix .
dev:
go run github.com/joho/godotenv/cmd/godotenv@v1.5.1 \
make -j4 dev/templ dev/server dev/sync_assets dev/assets/css
go run github.com/air-verse/air@v1.52.2 \
--build.cmd "go build -o .tmp/bin/main ." \
--build.bin ".tmp/bin/main" \
--build.exclude_dir "node_modules" \
--build.include_ext "go" \
--build.stop_on_error "false" \
--misc.clean_on_exit true \
-- -dev -port $(PORT)
build/templ:
go run github.com/a-h/templ/cmd/templ@v0.2.707 generate
build/app:
build:
go build -o ./.dist/app .
build/assets:
npx unocss
build: build/templ build/assets build/app
run: build
./.dist/app
clean:
# Remove templ generated files
find -type f -iname '*_templ.go' -delete \
-o -type f -iname '*_templ.txt' -delete
# Remove UnoCSS generated file
rm ./assets/css/uno.css
# Remove generated directories
if [[ -d ".dist" ]]; then rm -r ./.dist; fi
if [[ -d "tmp" ]]; then rm -r ./tmp; fi

29
router/router.go Normal file
View File

@@ -0,0 +1,29 @@
package router
import (
"log/slog"
"net/http"
"forge.capytal.company/loreddev/x/smalltrip"
"forge.capytal.company/loreddev/x/smalltrip/middleware"
"forge.capytal.company/loreddev/x/tinyssert"
)
func New(assertions tinyssert.Assertions, log *slog.Logger, dev bool) http.Handler {
r := smalltrip.NewRouter(smalltrip.WithAssertions(assertions), smalltrip.WithLogger(log.WithGroup("smalltrip")))
r.Use(middleware.Logger(log.WithGroup("routes")))
if dev {
log.Debug("Development mode activated, using development middleware")
r.Use(middleware.Dev)
} else {
r.Use(middleware.PersistentCache())
}
r.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte("Hello world"))
})
return r
}

11
templates/index.html Normal file
View File

@@ -0,0 +1,11 @@
<html>
<head>
</head>
<body>
<h1>Hello, world</h1>
</body>
</html>

View File

2
x

Submodule x updated: 90a5169f1b...05619c382c