feat: complete phase 0
This commit is contained in:
16
Makefile
Normal file
16
Makefile
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
BIN := bin/heloha-server
|
||||||
|
CMD := ./cmd/heloha-server
|
||||||
|
|
||||||
|
.PHONY: build run test tidy
|
||||||
|
|
||||||
|
build:
|
||||||
|
go build -o $(BIN) $(CMD)
|
||||||
|
|
||||||
|
run:
|
||||||
|
go run $(CMD)
|
||||||
|
|
||||||
|
test:
|
||||||
|
go test ./...
|
||||||
|
|
||||||
|
tidy:
|
||||||
|
go mod tidy
|
||||||
18
TODO.md
18
TODO.md
@@ -12,21 +12,21 @@ A detailed, actionable task list for building a unified, multi-radar severe weat
|
|||||||
- [x] `git init`
|
- [x] `git init`
|
||||||
- [x] Create a `.gitignore` file for Go and common OS files.
|
- [x] Create a `.gitignore` file for Go and common OS files.
|
||||||
- [x] Create a `README.md` with the project's mission statement.
|
- [x] Create a `README.md` with the project's mission statement.
|
||||||
- [ ] **Establish Go Project Structure:**
|
- [x] **Establish Go Project Structure:**
|
||||||
- [ ] `go mod init github.com/blakeridgway/heloha`
|
- [x] `go mod init github.com/blakeridgway/heloha`
|
||||||
- [ ] Create a standard Go project layout:
|
- [x] Create a standard Go project layout:
|
||||||
- `/cmd/heloha-server`: Main application entry point.
|
- `/cmd/heloha-server`: Main application entry point.
|
||||||
- `/internal/radar`: Code for fetching, parsing, and processing radar data.
|
- `/internal/radar`: Code for fetching, parsing, and processing radar data.
|
||||||
- `/internal/server`: HTTP handlers and server logic.
|
- `/internal/server`: HTTP handlers and server logic.
|
||||||
- `/internal/config`: Configuration management.
|
- `/internal/config`: Configuration management.
|
||||||
- `/web/templates`: HTML templates for the frontend.
|
- `/web/templates`: HTML templates for the frontend.
|
||||||
- `/web/static`: CSS and JavaScript assets.
|
- `/web/static`: CSS and JavaScript assets.
|
||||||
- [ ] **Create a Basic Web Server:**
|
- [x] **Create a Basic Web Server:**
|
||||||
- [ ] In `/cmd/heloha-server/main.go`, set up an `http.Server`.
|
- [x] In `/cmd/heloha-server/main.go`, set up an `http.Server`.
|
||||||
- [ ] Choose and implement a router (e.g., `go-chi/chi` is a good choice for middleware and flexibility).
|
- [x] Choose and implement a router (e.g., `go-chi/chi` is a good choice for middleware and flexibility).
|
||||||
- [ ] Create a simple `/healthz` endpoint that returns `200 OK`.
|
- [x] Create a simple `/healthz` endpoint that returns `200 OK`.
|
||||||
- [ ] **Set Up Build Automation:**
|
- [x] **Set Up Build Automation:**
|
||||||
- [ ] Create a `Makefile` with targets for:
|
- [x] Create a `Makefile` with targets for:
|
||||||
- `build`: `go build -o bin/heloha-server ./cmd/heloha-server`
|
- `build`: `go build -o bin/heloha-server ./cmd/heloha-server`
|
||||||
- `run`: `go run ./cmd/heloha-server`
|
- `run`: `go run ./cmd/heloha-server`
|
||||||
- `test`: `go test ./...`
|
- `test`: `go test ./...`
|
||||||
|
|||||||
39
cmd/heloha-server/main.go
Normal file
39
cmd/heloha-server/main.go
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log/slog"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-chi/chi/v5"
|
||||||
|
"github.com/go-chi/chi/v5/middleware"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
|
||||||
|
|
||||||
|
r := chi.NewRouter()
|
||||||
|
r.Use(middleware.RequestID)
|
||||||
|
r.Use(middleware.RealIP)
|
||||||
|
r.Use(middleware.Recoverer)
|
||||||
|
|
||||||
|
r.Get("/healthz", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
w.Write([]byte("ok"))
|
||||||
|
})
|
||||||
|
|
||||||
|
srv := &http.Server{
|
||||||
|
Addr: ":8080",
|
||||||
|
Handler: r,
|
||||||
|
ReadTimeout: 10 * time.Second,
|
||||||
|
WriteTimeout: 30 * time.Second,
|
||||||
|
IdleTimeout: 120 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.Info("starting server", "addr", srv.Addr)
|
||||||
|
if err := srv.ListenAndServe(); err != nil {
|
||||||
|
logger.Error("server exited", "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
5
go.mod
Normal file
5
go.mod
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
module github.com/blakeridgway/heloha
|
||||||
|
|
||||||
|
go 1.25.9
|
||||||
|
|
||||||
|
require github.com/go-chi/chi/v5 v5.2.5
|
||||||
Reference in New Issue
Block a user