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"