wip: add api auth and /resume endpoint

This commit is contained in:
cătălin 2023-12-04 22:13:37 +01:00
commit aaec8ec08d
Signed by: catalin
GPG key ID: 0178DF42F43E5FD2
23 changed files with 1244 additions and 271 deletions

74
internal/app/app.go Normal file
View file

@ -0,0 +1,74 @@
package app
import (
"context"
"encoding/json"
"errors"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"git.roboces.dev/catalin/cvvvvv/internal/config"
delivery "git.roboces.dev/catalin/cvvvvv/internal/delivery/http"
"git.roboces.dev/catalin/cvvvvv/internal/domain"
"git.roboces.dev/catalin/cvvvvv/internal/repo"
"git.roboces.dev/catalin/cvvvvv/internal/server"
"git.roboces.dev/catalin/cvvvvv/internal/service"
"git.roboces.dev/catalin/cvvvvv/pkg/logger"
)
func loadResume(path string, resume *domain.Resume) error {
datafile, err := os.Open(path)
if err != nil {
return errors.New("could not open database file")
}
decoder := json.NewDecoder(datafile)
if decoder.Decode(&resume) != nil {
return errors.New("could not decode database")
}
return nil
}
func Run(configPath string) {
cfg, err := config.Init(configPath)
if err != nil {
logger.Error(err)
return
}
resume := domain.Resume{}
if loadResume(cfg.Database, &resume) != nil {
logger.Error(err)
return
}
repos := repo.NewRepos(resume)
services := service.NewServices(service.Deps{
Repos: repos,
Config: cfg,
})
handlers := delivery.NewHandler(services)
srv := server.NewServer(cfg, handlers.Init(cfg))
go func() {
if err := srv.Run(); !errors.Is(err, http.ErrServerClosed) {
logger.Errorf("error occurred while running http server: %s\n", err.Error())
}
}()
logger.Info("Server started")
// Graceful Shutdown
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGTERM, syscall.SIGINT)
<-quit
const timeout = 5 * time.Second
ctx, shutdown := context.WithTimeout(context.Background(), timeout)
defer shutdown()
if err := srv.Stop(ctx); err != nil {
logger.Errorf("failed to stop server: %v", err)
}
}