Repository navigation
Expand file tree
/
Copy pathmain.go
More file actions
82 lines (65 loc) · 2.5 KB
/
Copy pathmain.go
File metadata and controls
82 lines (65 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package main
import (
"context"
"database/sql"
"os"
"os/signal"
"syscall"
"time"
_ "modernc.org/sqlite"
"homestore/internal/config"
delivery "homestore/internal/delivery/http"
"homestore/internal/repository/localfs"
"homestore/internal/repository/sqlite"
"homestore/internal/service"
"homestore/pkg/logging"
)
func main() {
//Загрузка конфига
cfg := config.Load()
//Инициализация логгера
logger := logging.NewLogger("App", cfg.LoggingLevel)
defer logger.Close()
logger.Info("Запуск HomeStore...")
dbConn, err := sql.Open("sqlite", cfg.DBPath)
if err != nil {
logger.Critical("Ошибка подключения к БД: %s", err)
return
}
defer dbConn.Close()
ctx, cancelInit := context.WithTimeout(context.Background(), 5*time.Second)
defer cancelInit()
dbConn.SetMaxOpenConns(1)
if err := sqlite.TurnForeignKeys(ctx, dbConn); err != nil {
logger.Critical("Ошибка включения foreign keys: %s", err)
return
}
if err := sqlite.InitTables(ctx, dbConn); err != nil {
logger.Critical("Ошибка создания таблиц в БД: %s", err)
return
}
userRepo := sqlite.NewUserRepo(dbConn)
sessionRepo := sqlite.NewSessionRepo(dbConn)
folderRepo := sqlite.NewFolderRepo(dbConn)
fileRepo := sqlite.NewFileRepo(dbConn)
diskProvider := localfs.NewDiskProvider(cfg.StoragePath)
txManager := sqlite.NewTxManager(dbConn)
authService := service.NewAuthService(userRepo, sessionRepo, txManager, cfg.SessionsDuration, logger)
storageService := service.NewStorageService(userRepo, fileRepo, diskProvider, folderRepo, txManager, logger)
folderService := service.NewFolderService(folderRepo, fileRepo, userRepo, diskProvider, txManager, logger)
workerCtx, workerCancel := context.WithCancel(context.Background())
defer workerCancel()
go storageService.StartAuditWorker(workerCtx, 1*60*time.Second)
srv := delivery.NewHttpServer(cfg.Port, logger, authService, storageService, folderService)
srv.Start()
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
<-quit
logger.Info("Получен сигнал для остановки. Завершение процессов..")
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 10*time.Second)
defer shutdownCancel()
if err := srv.Shutdown(shutdownCtx); err != nil {
logger.Error("Ошибка при остановке HTTP сервера: %s", err)
}
logger.Info("Сервер успешно остановлен..")
}