♻️ Simplify server use case usage

This commit is contained in:
Maxim Lebedev 2024-01-29 11:52:22 +06:00
parent 715445ee5d
commit b046f13098
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
5 changed files with 20 additions and 38 deletions

View File

@ -57,7 +57,7 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
themer := themeucase.NewThemeUseCase(partialsDir, themes) themer := themeucase.NewThemeUseCase(partialsDir, themes)
pages := pagefsrepo.NewFileSystemPageRepository(contentDir) pages := pagefsrepo.NewFileSystemPageRepository(contentDir)
pager := pageucase.NewPageUseCase(pages, resources) pager := pageucase.NewPageUseCase(pages, resources)
serverer := servercase.NewServerUseCase() serverer := servercase.NewServerUseCase(sites)
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 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 // 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 // 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{ chain := middleware.Chain{
middleware.LogFmt(), middleware.LogFmt(),
middleware.Redirect(middleware.RedirectConfig{ middleware.Redirect(middleware.RedirectConfig{
Siter: siter,
Serverer: serverer, Serverer: serverer,
}), }),
middleware.Header(middleware.HeaderConfig{ middleware.Header(middleware.HeaderConfig{
Siter: siter,
Serverer: serverer, Serverer: serverer,
}), }),
} }

View File

@ -5,13 +5,11 @@ import (
"source.toby3d.me/toby3d/home/internal/domain" "source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/server" "source.toby3d.me/toby3d/home/internal/server"
"source.toby3d.me/toby3d/home/internal/site"
"source.toby3d.me/toby3d/home/internal/urlutil" "source.toby3d.me/toby3d/home/internal/urlutil"
) )
type HeaderConfig struct { type HeaderConfig struct {
Skipper Skipper Skipper Skipper
Siter site.UseCase
Serverer server.UseCase Serverer server.UseCase
} }
@ -20,10 +18,6 @@ func Header(config HeaderConfig) Interceptor {
config.Skipper = DefaultSkipper config.Skipper = DefaultSkipper
} }
if config.Siter == nil {
panic("middleware: header: Siter is nil")
}
if config.Serverer == nil { if config.Serverer == nil {
panic("middleware: header: Serverer is nil") panic("middleware: header: Serverer is nil")
} }
@ -42,14 +36,7 @@ func Header(config HeaderConfig) Interceptor {
} }
} }
site, err := config.Siter.Do(r.Context(), lang) server, err := config.Serverer.Do(r.Context(), lang)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
server, err := config.Serverer.Do(r.Context(), *site)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)

View File

@ -5,14 +5,12 @@ import (
"source.toby3d.me/toby3d/home/internal/domain" "source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/server" "source.toby3d.me/toby3d/home/internal/server"
"source.toby3d.me/toby3d/home/internal/site"
"source.toby3d.me/toby3d/home/internal/urlutil" "source.toby3d.me/toby3d/home/internal/urlutil"
) )
type ( type (
RedirectConfig struct { RedirectConfig struct {
Skipper Skipper Skipper Skipper
Siter site.UseCase
Serverer server.UseCase Serverer server.UseCase
} }
@ -28,10 +26,6 @@ func Redirect(config RedirectConfig) Interceptor {
config.Skipper = DefaultSkipper config.Skipper = DefaultSkipper
} }
if config.Siter == nil {
panic("middleware: redirect: Siter is nil")
}
if config.Serverer == nil { if config.Serverer == nil {
panic("middleware: redirect: Serverer is nil") panic("middleware: redirect: Serverer is nil")
} }
@ -50,14 +44,7 @@ func Redirect(config RedirectConfig) Interceptor {
} }
} }
site, err := config.Siter.Do(r.Context(), lang) server, err := config.Serverer.Do(r.Context(), lang)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
server, err := config.Serverer.Do(r.Context(), *site)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)

View File

@ -8,7 +8,7 @@ import (
) )
type UseCase interface { type UseCase interface {
Do(ctx context.Context, site domain.Site) (*domain.Server, error) Do(ctx context.Context, lang domain.Language) (*domain.Server, error)
} }
var ( var (

View File

@ -2,21 +2,31 @@ package usecase
import ( import (
"context" "context"
"fmt"
"net/http" "net/http"
"source.toby3d.me/toby3d/home/internal/domain" "source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/server" "source.toby3d.me/toby3d/home/internal/server"
"source.toby3d.me/toby3d/home/internal/site"
) )
type serverUseCase struct{} type serverUseCase struct {
sites site.Repository
func NewServerUseCase() server.UseCase {
return serverUseCase{}
} }
func (serverUseCase) Do(ctx context.Context, site domain.Site) (*domain.Server, error) { func NewServerUseCase(sites site.Repository) server.UseCase {
out := domain.NewServer() 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 { if site.Params == nil {
return out, nil return out, nil
} }