From b046f13098bc04d50dae8e230367fde8808d9aee Mon Sep 17 00:00:00 2001 From: Maxim Lebedev Date: Mon, 29 Jan 2024 11:52:22 +0600 Subject: [PATCH] :recycle: Simplify server use case usage --- internal/cmd/home/home.go | 4 +--- internal/middleware/header.go | 15 +-------------- internal/middleware/redirect.go | 15 +-------------- internal/server/usecase.go | 2 +- internal/server/usecase/server_ucase.go | 22 ++++++++++++++++------ 5 files changed, 20 insertions(+), 38 deletions(-) diff --git a/internal/cmd/home/home.go b/internal/cmd/home/home.go index e7bc90b..423bca8 100644 --- a/internal/cmd/home/home.go +++ b/internal/cmd/home/home.go @@ -57,7 +57,7 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) { themer := themeucase.NewThemeUseCase(partialsDir, themes) pages := pagefsrepo.NewFileSystemPageRepository(contentDir) pager := pageucase.NewPageUseCase(pages, resources) - serverer := servercase.NewServerUseCase() + serverer := servercase.NewServerUseCase(sites) handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // INFO(toby3d): any static file is public and unprotected by design, so it's safe to search it // first before deep down to any page or it's resource which might be secured by middleware or @@ -180,11 +180,9 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) { chain := middleware.Chain{ middleware.LogFmt(), middleware.Redirect(middleware.RedirectConfig{ - Siter: siter, Serverer: serverer, }), middleware.Header(middleware.HeaderConfig{ - Siter: siter, Serverer: serverer, }), } diff --git a/internal/middleware/header.go b/internal/middleware/header.go index fd7ba57..e476b74 100644 --- a/internal/middleware/header.go +++ b/internal/middleware/header.go @@ -5,13 +5,11 @@ import ( "source.toby3d.me/toby3d/home/internal/domain" "source.toby3d.me/toby3d/home/internal/server" - "source.toby3d.me/toby3d/home/internal/site" "source.toby3d.me/toby3d/home/internal/urlutil" ) type HeaderConfig struct { Skipper Skipper - Siter site.UseCase Serverer server.UseCase } @@ -20,10 +18,6 @@ func Header(config HeaderConfig) Interceptor { config.Skipper = DefaultSkipper } - if config.Siter == nil { - panic("middleware: header: Siter is nil") - } - if config.Serverer == nil { panic("middleware: header: Serverer is nil") } @@ -42,14 +36,7 @@ func Header(config HeaderConfig) Interceptor { } } - site, err := config.Siter.Do(r.Context(), lang) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - - return - } - - server, err := config.Serverer.Do(r.Context(), *site) + server, err := config.Serverer.Do(r.Context(), lang) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/internal/middleware/redirect.go b/internal/middleware/redirect.go index 79be6b4..833df1d 100644 --- a/internal/middleware/redirect.go +++ b/internal/middleware/redirect.go @@ -5,14 +5,12 @@ import ( "source.toby3d.me/toby3d/home/internal/domain" "source.toby3d.me/toby3d/home/internal/server" - "source.toby3d.me/toby3d/home/internal/site" "source.toby3d.me/toby3d/home/internal/urlutil" ) type ( RedirectConfig struct { Skipper Skipper - Siter site.UseCase Serverer server.UseCase } @@ -28,10 +26,6 @@ func Redirect(config RedirectConfig) Interceptor { config.Skipper = DefaultSkipper } - if config.Siter == nil { - panic("middleware: redirect: Siter is nil") - } - if config.Serverer == nil { panic("middleware: redirect: Serverer is nil") } @@ -50,14 +44,7 @@ func Redirect(config RedirectConfig) Interceptor { } } - site, err := config.Siter.Do(r.Context(), lang) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - - return - } - - server, err := config.Serverer.Do(r.Context(), *site) + server, err := config.Serverer.Do(r.Context(), lang) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/internal/server/usecase.go b/internal/server/usecase.go index ec36444..2c69f83 100644 --- a/internal/server/usecase.go +++ b/internal/server/usecase.go @@ -8,7 +8,7 @@ import ( ) type UseCase interface { - Do(ctx context.Context, site domain.Site) (*domain.Server, error) + Do(ctx context.Context, lang domain.Language) (*domain.Server, error) } var ( diff --git a/internal/server/usecase/server_ucase.go b/internal/server/usecase/server_ucase.go index 5257c70..c8a2249 100644 --- a/internal/server/usecase/server_ucase.go +++ b/internal/server/usecase/server_ucase.go @@ -2,21 +2,31 @@ package usecase import ( "context" + "fmt" "net/http" "source.toby3d.me/toby3d/home/internal/domain" "source.toby3d.me/toby3d/home/internal/server" + "source.toby3d.me/toby3d/home/internal/site" ) -type serverUseCase struct{} - -func NewServerUseCase() server.UseCase { - return serverUseCase{} +type serverUseCase struct { + sites site.Repository } -func (serverUseCase) Do(ctx context.Context, site domain.Site) (*domain.Server, error) { - out := domain.NewServer() +func NewServerUseCase(sites site.Repository) server.UseCase { + return &serverUseCase{ + sites: sites, + } +} +func (ucase *serverUseCase) Do(ctx context.Context, lang domain.Language) (*domain.Server, error) { + site, err := ucase.sites.Get(ctx, domain.LanguageUnd) + if err != nil { + return nil, fmt.Errorf("cannot find base site data: %w", err) + } + + out := domain.NewServer() if site.Params == nil { return out, nil }