tenseleyflow/shithub / d526321

Browse files

S34: buildAdminHandlers wiring

Authored by espadonne
SHA
d526321cd93787439919bf862b92ab2fe40f4272
Parents
9235b84
Tree
ec5f745

1 changed file

StatusFile+-
A internal/web/admin_wiring.go 44 0
internal/web/admin_wiring.goadded
@@ -0,0 +1,44 @@
1
+// SPDX-License-Identifier: AGPL-3.0-or-later
2
+
3
+package web
4
+
5
+import (
6
+	"errors"
7
+	"fmt"
8
+	"io/fs"
9
+	"log/slog"
10
+
11
+	"github.com/jackc/pgx/v5/pgxpool"
12
+
13
+	"github.com/tenseleyFlow/shithub/internal/auth/audit"
14
+	"github.com/tenseleyFlow/shithub/internal/infra/config"
15
+	adminh "github.com/tenseleyFlow/shithub/internal/web/handlers/admin"
16
+	"github.com/tenseleyFlow/shithub/internal/web/render"
17
+)
18
+
19
+// buildAdminHandlers wires the S34 site-admin handler set. The
20
+// returned handler set is route-only; the wiring layer in server.go
21
+// composes RequireUser + RequireSiteAdmin around the Mount call.
22
+func buildAdminHandlers(
23
+	cfg config.Config,
24
+	pool *pgxpool.Pool,
25
+	tmplFS fs.FS,
26
+	logger *slog.Logger,
27
+	version string,
28
+) (*adminh.Handlers, error) {
29
+	if pool == nil {
30
+		return nil, errors.New("admin: nil pool")
31
+	}
32
+	rr, err := render.New(tmplFS, render.Options{Octicons: render.BuiltinOcticons()})
33
+	if err != nil {
34
+		return nil, fmt.Errorf("admin: render.New: %w", err)
35
+	}
36
+	return adminh.New(adminh.Deps{
37
+		Logger:   logger,
38
+		Render:   rr,
39
+		Pool:     pool,
40
+		Audit:    audit.NewRecorder(),
41
+		SiteName: cfg.Auth.SiteName,
42
+		Version:  version,
43
+	})
44
+}