main / cmd/server/main.go
1.7 KB · Go Raw
1package main
2
3import (
4 "log"
5 "net/http"
6 "time"
7
8 "gitgud/internal/app"
9 "gitgud/internal/infra/config"
10 "gitgud/internal/infra/git"
11 "gitgud/internal/infra/persistence/sqlite"
12 "gitgud/internal/infra/security"
13 "gitgud/internal/infra/session"
14 "gitgud/internal/interface/web"
15 "gitgud/internal/interface/web/templates"
16)
17
18func main() {
19 cfg, err := config.Load()
20 if err != nil {
21 log.Fatal(err)
22 }
23
24 db, err := sqlite.Open(cfg.DBPath())
25 if err != nil {
26 log.Fatal(err)
27 }
28 defer db.Close()
29
30 hasher := security.NewBcryptHasher()
31 userRepo := sqlite.NewUserRepo(db)
32 userService := app.NewUserService(userRepo, hasher)
33
34 gitSvc := git.NewCLIGit(cfg.ReposDir())
35 gitReader := git.NewGoGitReader(cfg.ReposDir())
36 repoRepo := sqlite.NewRepoRepo(db)
37 repoService := app.NewRepoService(repoRepo, gitSvc)
38 browseService := app.NewBrowseService(repoRepo, gitReader)
39 issueRepo := sqlite.NewIssueRepo(db)
40 issueService := app.NewIssueService(issueRepo)
41 prRepo := sqlite.NewPRRepo(db)
42 pullService := app.NewPullService(prRepo, gitReader, gitSvc)
43 gitAccess := app.NewGitAccessService(repoRepo)
44
45 gitBackend, err := git.NewBackend(cfg.ReposDir())
46 if err != nil {
47 log.Fatal(err)
48 }
49
50 templates.SetBaseURL(cfg.BaseURL)
51
52 sm := session.NewSessionManager(db)
53 handlers := web.NewHandlers(userService, repoService, browseService, issueService, pullService, gitAccess, gitBackend, sm)
54
55 handler := web.NewRouter(cfg, handlers)
56
57 srv := &http.Server{
58 Addr: cfg.Addr,
59 Handler: handler,
60 ReadHeaderTimeout: 10 * time.Second,
61 ReadTimeout: 60 * time.Second,
62 WriteTimeout: 120 * time.Second,
63 IdleTimeout: 120 * time.Second,
64 }
65
66 log.Printf("listening on %s", cfg.Addr)
67 log.Fatal(srv.ListenAndServe())
68}