👔 Created basic site use case interface implementation

This commit is contained in:
Maxim Lebedev 2023-11-08 04:55:42 +06:00
parent aa75f1b00e
commit 518beeeb8e
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
1 changed files with 40 additions and 0 deletions

View File

@ -0,0 +1,40 @@
package usecase
import (
"context"
"fmt"
"golang.org/x/text/language"
"source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/site"
)
type siteUseCase struct {
sites site.Repository
}
func NewSiteUseCase(sites site.Repository) site.UseCase {
return &siteUseCase{
sites: sites,
}
}
func (ucase *siteUseCase) Do(ctx context.Context, lang language.Tag) (*domain.Site, error) {
base, err := ucase.sites.Get(ctx, language.Und)
if err != nil {
return nil, fmt.Errorf("cannot find base site data: %w", err)
}
sub, err := ucase.sites.Get(ctx, lang)
if err != nil {
return nil, fmt.Errorf("cannot find site data for '%s' language code: %w", lang, err)
}
out := &domain.Site{Language: sub.Language}
if sub.Title == "" {
out.Title = base.Title
}
return out, nil
}