nikita revised this gist 1 day ago. Go to revision
1 file changed, 66 insertions
gistfile1.txt(file created)
| @@ -0,0 +1,66 @@ | |||
| 1 | + | package main | |
| 2 | + | ||
| 3 | + | import ( | |
| 4 | + | "context" | |
| 5 | + | "log" | |
| 6 | + | "net/http" | |
| 7 | + | "os/signal" | |
| 8 | + | "syscall" | |
| 9 | + | "time" | |
| 10 | + | ||
| 11 | + | "vkfc1-new-go/internal/config" | |
| 12 | + | httpapi "vkfc1-new-go/internal/http" | |
| 13 | + | "vkfc1-new-go/internal/queue" | |
| 14 | + | mysqlrepo "vkfc1-new-go/internal/repository/mysql" | |
| 15 | + | "vkfc1-new-go/internal/service" | |
| 16 | + | s3storage "vkfc1-new-go/internal/storage/s3" | |
| 17 | + | "vkfc1-new-go/internal/vk" | |
| 18 | + | ) | |
| 19 | + | ||
| 20 | + | func main() { | |
| 21 | + | cfg, err := config.Load() | |
| 22 | + | if err != nil { | |
| 23 | + | log.Fatalf("config load error: %v", err) | |
| 24 | + | } | |
| 25 | + | ||
| 26 | + | ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) | |
| 27 | + | defer cancel() | |
| 28 | + | ||
| 29 | + | db, err := mysqlrepo.New(ctx, cfg.MySQLDSN(), cfg.DB.PoolMax) | |
| 30 | + | if err != nil { | |
| 31 | + | log.Fatalf("db init error: %v", err) | |
| 32 | + | } | |
| 33 | + | defer db.Close() | |
| 34 | + | ||
| 35 | + | vkClient := vk.New(cfg.VK) | |
| 36 | + | s3Client, err := s3storage.New(cfg.S3) | |
| 37 | + | if err != nil { | |
| 38 | + | log.Fatalf("s3 init error: %v", err) | |
| 39 | + | } | |
| 40 | + | ||
| 41 | + | svc := service.New(cfg, db, vkClient, s3Client) | |
| 42 | + | router := httpapi.NewRouter(cfg, svc) | |
| 43 | + | ||
| 44 | + | worker := queue.NewWorker(db, svc) | |
| 45 | + | worker.Start(ctx) | |
| 46 | + | ||
| 47 | + | srv := &http.Server{ | |
| 48 | + | Addr: cfg.HTTPAddr(), | |
| 49 | + | Handler: router, | |
| 50 | + | ReadTimeout: 20 * time.Second, | |
| 51 | + | WriteTimeout: 40 * time.Second, | |
| 52 | + | IdleTimeout: 60 * time.Second, | |
| 53 | + | } | |
| 54 | + | ||
| 55 | + | go func() { | |
| 56 | + | log.Printf("api listening on %s", cfg.HTTPAddr()) | |
| 57 | + | if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { | |
| 58 | + | log.Fatalf("http server error: %v", err) | |
| 59 | + | } | |
| 60 | + | }() | |
| 61 | + | ||
| 62 | + | <-ctx.Done() | |
| 63 | + | shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 10*time.Second) | |
| 64 | + | defer shutdownCancel() | |
| 65 | + | _ = srv.Shutdown(shutdownCtx) | |
| 66 | + | } | |
Newer
Older