ikurotime / gitgud

public
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}