From 2dcf0ec867a442b9adb900d42c79c5652283efe2 Mon Sep 17 00:00:00 2001
From: Victor Lacasse-Beaudoin <vlbeaudoin@agecem.org>
Date: Tue, 13 May 2025 13:48:34 -0400
Subject: [PATCH] =?UTF-8?q?refactor:=20s=C3=A9parer=20executable=20et=20li?=
 =?UTF-8?q?brary?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Dockerfile            |  5 ++--
 Makefile              |  2 +-
 cmd.go                | 50 ++++++++++++++++++++++++++++++++++-
 cmd/presences/main.go | 11 ++++++++
 config.go             |  2 +-
 db.go                 |  2 +-
 entity.go             |  2 +-
 flag.go               |  2 +-
 handler.go            |  2 +-
 main.go               | 61 -------------------------------------------
 server.go             |  2 +-
 11 files changed, 70 insertions(+), 71 deletions(-)
 create mode 100644 cmd/presences/main.go
 delete mode 100644 main.go

diff --git a/Dockerfile b/Dockerfile
index fa0572a..c2840ea 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,15 +4,16 @@ LABEL author="vlbeaudoin"
 
 WORKDIR /go/src/app
 
-COPY LICENSE cmd.go config.go db.go entity.go flag.go go.mod go.sum handler.go main.go server.go ./
+COPY LICENSE cmd.go config.go db.go entity.go flag.go go.mod go.sum handler.go server.go ./
 
+ADD cmd/ cmd/
 ADD queries/ queries/
 ADD ui/ ui/
 
 RUN CGO_ENABLED=0 go build \
     -a \
     -o presences \
-    ./
+    ./cmd/presences/
 
 # Alpine
 
diff --git a/Makefile b/Makefile
index 4e91951..4553995 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ help: ## Show this help
 
 .PHONY: go-install
 go-install: ## Use `go install` to build and link the executable
-	go install -a
+	go install -a ./cmd/presences/
 
 .PHONY: docker-build
 docker-build: ## Build container image
diff --git a/cmd.go b/cmd.go
index 738a67b..538d035 100644
--- a/cmd.go
+++ b/cmd.go
@@ -1,11 +1,15 @@
-package main
+package presences
 
 import (
 	"context"
 	"encoding/json"
 	"fmt"
 	"log"
+	"net/http"
 
+	"codeberg.org/vlbeaudoin/voki/v3"
+	"git.agecem.com/bottin/bottin/v11"
+	"github.com/jackc/pgx/v5/pgxpool"
 	"github.com/spf13/cobra"
 )
 
@@ -49,3 +53,47 @@ var rootCmd = &cobra.Command{
 		}
 	},
 }
+
+func run(ctx context.Context, cfg Config) error {
+	select {
+	case <-ctx.Done():
+		return ctx.Err()
+	default:
+		bottinClient := bottin.APIClient{Caller: voki.New(
+			http.DefaultClient,
+			cfg.Bottin.Host,
+			cfg.Bottin.Key,
+			cfg.Bottin.Port,
+			func() string {
+				if cfg.Bottin.TLS.Enabled {
+					return "https"
+				} else {
+					return "http"
+				}
+			}(),
+		)}
+
+		// connect to db
+		dbPool, err := pgxpool.New(ctx,
+			fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s",
+				cfg.DB.Username,
+				cfg.DB.Password,
+				cfg.DB.Host,
+				cfg.DB.Port,
+				cfg.DB.Database,
+				cfg.DB.SSLMode,
+			))
+		if err != nil {
+			return err
+		}
+		defer dbPool.Close()
+
+		dbClient := DBClient{Pool: dbPool}
+
+		if err := RunUIServer(ctx, cfg, &bottinClient, &dbClient); err != nil && err != http.ErrServerClosed {
+			return err
+		}
+
+		return nil
+	}
+}
diff --git a/cmd/presences/main.go b/cmd/presences/main.go
new file mode 100644
index 0000000..ae112db
--- /dev/null
+++ b/cmd/presences/main.go
@@ -0,0 +1,11 @@
+package main
+
+import (
+	"git.agecem.com/bottin/presences"
+)
+
+// Entry
+func main() {
+	// Start commandline parsing then call `run`
+	presences.Execute()
+}
diff --git a/config.go b/config.go
index 77e0ea4..c3228ed 100644
--- a/config.go
+++ b/config.go
@@ -1,4 +1,4 @@
-package main
+package presences
 
 import (
 	"fmt"
diff --git a/db.go b/db.go
index a24994f..2d6447e 100644
--- a/db.go
+++ b/db.go
@@ -1,4 +1,4 @@
-package main
+package presences
 
 import (
 	"context"
diff --git a/entity.go b/entity.go
index cb4e53e..d7ca315 100644
--- a/entity.go
+++ b/entity.go
@@ -1,4 +1,4 @@
-package main
+package presences
 
 import "time"
 
diff --git a/flag.go b/flag.go
index 64e7d0f..8a01a21 100644
--- a/flag.go
+++ b/flag.go
@@ -1,4 +1,4 @@
-package main
+package presences
 
 import (
 	"github.com/spf13/pflag"
diff --git a/handler.go b/handler.go
index e1743c9..53127e8 100644
--- a/handler.go
+++ b/handler.go
@@ -1,4 +1,4 @@
-package main
+package presences
 
 import (
 	"context"
diff --git a/main.go b/main.go
deleted file mode 100644
index 805212c..0000000
--- a/main.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package main
-
-import (
-	"context"
-	"fmt"
-	"net/http"
-
-	"codeberg.org/vlbeaudoin/voki/v3"
-	"git.agecem.com/bottin/bottin/v11"
-	"github.com/jackc/pgx/v5/pgxpool"
-)
-
-// Entry
-func main() {
-	// Start commandline parsing then call `run`
-	Execute()
-}
-
-func run(ctx context.Context, cfg Config) error {
-	select {
-	case <-ctx.Done():
-		return ctx.Err()
-	default:
-		bottinClient := bottin.APIClient{Caller: voki.New(
-			http.DefaultClient,
-			cfg.Bottin.Host,
-			cfg.Bottin.Key,
-			cfg.Bottin.Port,
-			func() string {
-				if cfg.Bottin.TLS.Enabled {
-					return "https"
-				} else {
-					return "http"
-				}
-			}(),
-		)}
-
-		// connect to db
-		dbPool, err := pgxpool.New(ctx,
-			fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s",
-				cfg.DB.Username,
-				cfg.DB.Password,
-				cfg.DB.Host,
-				cfg.DB.Port,
-				cfg.DB.Database,
-				cfg.DB.SSLMode,
-			))
-		if err != nil {
-			return err
-		}
-		defer dbPool.Close()
-
-		dbClient := DBClient{Pool: dbPool}
-
-		if err := RunUIServer(ctx, cfg, &bottinClient, &dbClient); err != nil && err != http.ErrServerClosed {
-			return err
-		}
-
-		return nil
-	}
-}
diff --git a/server.go b/server.go
index 547773b..59d809d 100644
--- a/server.go
+++ b/server.go
@@ -1,4 +1,4 @@
-package main
+package presences
 
 import (
 	"context"