mood/inspo boards

simplify a bit and start adding docker

besaid.zone 4027ae50 71316100

verified
Changed files
+81 -82
cmd
internal
app
server
services
+2
.dockerignore
··· 1 + .env 2 + .gitignore
+23
Dockerfile
··· 1 + FROM golang:1.25-alpine AS builder 2 + 3 + ENV CGO_ENABLED=0 \ 4 + GOOS=linux \ 5 + GOARCH=amd64 6 + 7 + WORKDIR /build 8 + 9 + COPY go.mod go.sum ./ 10 + 11 + RUN go mod download 12 + 13 + COPY . . 14 + 15 + RUN go build -o build/pallet ./cmd/main.go 16 + 17 + FROM alpine:3.23 AS final 18 + 19 + COPY --from=builder /build /bin/build 20 + 21 + EXPOSE 8080 22 + 23 + CMD ["bin/build"]
+2 -2
cmd/main.go
··· 7 7 8 8 _ "github.com/joho/godotenv/autoload" 9 9 "github.com/urfave/cli/v3" 10 - "tangled.org/dane.is.extraordinarily.cool/pallet/internal/app" 11 10 "tangled.org/dane.is.extraordinarily.cool/pallet/internal/db" 12 11 "tangled.org/dane.is.extraordinarily.cool/pallet/internal/logger" 12 + "tangled.org/dane.is.extraordinarily.cool/pallet/internal/server" 13 13 ) 14 14 15 15 ··· 62 62 } 63 63 logger.Info("database created") 64 64 65 - server := app.NewServer(cmd.String("port"), db, logger) 65 + server := server.NewServer(cmd.String("port"), db, logger) 66 66 67 67 if err := server.Start(); err != nil { 68 68 log.Fatal(err)
-52
internal/app/app.go
··· 1 - package app 2 - 3 - import ( 4 - "database/sql" 5 - "log/slog" 6 - "net/http" 7 - "time" 8 - 9 - "github.com/gorilla/mux" 10 - ) 11 - 12 - type Server struct { 13 - addr string 14 - db *sql.DB 15 - logger *slog.Logger 16 - } 17 - 18 - func NewServer(addr string, db *sql.DB, logger *slog.Logger) *Server { 19 - return &Server{ 20 - addr, 21 - db, 22 - logger, 23 - } 24 - } 25 - 26 - func (s *Server) Start() error { 27 - router := mux.NewRouter() 28 - server := &http.Server{ 29 - Addr: s.addr, 30 - WriteTimeout: 5 * time.Second, 31 - ReadTimeout: 10 * time.Second, 32 - IdleTimeout: 30 * time.Second, 33 - Handler: router, 34 - } 35 - 36 - // actorStore := actor.NewStore(s.db) 37 - // actorHandler := actor.NewHandler(actorStore) 38 - // actorHandler.RegisterRoutes() 39 - 40 - router.HandleFunc("/healthcheck", func(w http.ResponseWriter, r *http.Request) { 41 - w.WriteHeader(http.StatusOK); 42 - w.Write([]byte("reporting for duty")) 43 - }) 44 - 45 - router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 46 - w.WriteHeader(http.StatusOK) 47 - w.Write([]byte("hello world")) 48 - }) 49 - 50 - s.logger.Info("app server started") 51 - return server.ListenAndServe() 52 - }
+13
internal/server/handlers.go
··· 1 + package server 2 + 3 + import "net/http" 4 + 5 + func (s *Server) HandleHomeRoute(w http.ResponseWriter, r *http.Request) { 6 + w.WriteHeader(http.StatusOK) 7 + w.Write([]byte("hello world")) 8 + } 9 + 10 + func (s *Server) HandleHealthcheckRoute(w http.ResponseWriter, r *http.Request) { 11 + w.WriteHeader(http.StatusOK); 12 + w.Write([]byte("reporting for duty")) 13 + }
+41
internal/server/server.go
··· 1 + package server 2 + 3 + import ( 4 + "database/sql" 5 + "log/slog" 6 + "net/http" 7 + "time" 8 + 9 + "github.com/gorilla/mux" 10 + ) 11 + 12 + type Server struct { 13 + addr string 14 + db *sql.DB 15 + logger *slog.Logger 16 + } 17 + 18 + func NewServer(addr string, db *sql.DB, logger *slog.Logger) *Server { 19 + return &Server{ 20 + addr, 21 + db, 22 + logger, 23 + } 24 + } 25 + 26 + func (s *Server) Start() error { 27 + router := mux.NewRouter() 28 + server := &http.Server{ 29 + Addr: s.addr, 30 + WriteTimeout: 5 * time.Second, 31 + ReadTimeout: 10 * time.Second, 32 + IdleTimeout: 30 * time.Second, 33 + Handler: router, 34 + } 35 + 36 + router.HandleFunc("/healthcheck", s.HandleHealthcheckRoute) 37 + router.HandleFunc("/", s.HandleHomeRoute) 38 + 39 + s.logger.Info("app server started") 40 + return server.ListenAndServe() 41 + }
-17
internal/services/actor/routes.go
··· 1 - package actor 2 - 3 - import "github.com/gorilla/mux" 4 - 5 - type ActorStore interface {} 6 - 7 - type Handler struct { 8 - store ActorStore 9 - } 10 - 11 - func NewHandler(store ActorStore) *Handler { 12 - return &Handler{store} 13 - } 14 - 15 - func (h *Handler) RegisterRoutes(router *mux.Router) { 16 - router.HandleFunc("/login", nil).Methods("POST") 17 - }
-11
internal/services/actor/store.go
··· 1 - package actor 2 - 3 - import "database/sql" 4 - 5 - type Store struct { 6 - db *sql.DB 7 - } 8 - 9 - func NewStore(db *sql.DB) *Store { 10 - return &Store{db} 11 - }