home/internal/theme/usecase/theme_ucase.go

51 lines
1.0 KiB
Go

package usecase
import (
"context"
"fmt"
"io"
"io/fs"
"source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/templateutil"
"source.toby3d.me/toby3d/home/internal/theme"
)
type (
themeUseCase struct {
partials fs.FS
themes theme.Repository
}
dummyThemeUseCase struct{}
)
func NewThemeUseCase(partials fs.FS, themes theme.Repository) theme.UseCase {
return &themeUseCase{
partials: partials,
themes: themes,
}
}
func (ucase *themeUseCase) Do(ctx context.Context, s *domain.Site, e *domain.Entry) (theme.Writer, error) {
out, err := ucase.themes.Get(ctx, templateutil.New(ucase.partials, s))
if err != nil {
return nil, fmt.Errorf("cannot find theme: %w", err)
}
return func(w io.Writer) error {
return out.Lookup("baseof.html").Execute(w, &domain.Context{
Site: s,
Page: e,
})
}, nil
}
func NewDummyThemeUseCase() theme.UseCase {
return dummyThemeUseCase{}
}
func (dummyThemeUseCase) Do(_ context.Context, _ *domain.Site, _ *domain.Entry) (theme.Writer, error) {
return nil, nil
}