♻️ 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)
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,
}),
}

View File

@ -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)

View File

@ -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)

View File

@ -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 (

View File

@ -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
}