feat: Sites feature backend
This commit is contained in:
1 parent
45fcbd890d
commit
a11338094e
98 files changed
+5365
-214
No files matched your search
@@ -0,0 +1,75 @@
|
||||
package useCases
|
||||
|
||||
import (
|
||||
"RenewCMS/internal/domain/audit"
|
||||
"RenewCMS/internal/domain/image"
|
||||
"RenewCMS/internal/domain/site"
|
||||
"context"
|
||||
)
|
||||
|
||||
type CreateSiteUseCase struct {
|
||||
siteRepository site.Repository
|
||||
imageRepository image.Repository
|
||||
recorder audit.Recorder
|
||||
}
|
||||
|
||||
type CreateSiteCommand struct {
|
||||
Name string
|
||||
Key string
|
||||
BaseURL string
|
||||
DefaultRobots string
|
||||
Locale *string
|
||||
DefaultSocialImageID *uint32
|
||||
IsDefault bool
|
||||
}
|
||||
|
||||
func NewCreateSiteUseCase(siteRepository site.Repository, imageRepository image.Repository, recorder audit.Recorder) *CreateSiteUseCase {
|
||||
return &CreateSiteUseCase{siteRepository, imageRepository, recorder}
|
||||
}
|
||||
|
||||
func (u *CreateSiteUseCase) Create(ctx context.Context, command CreateSiteCommand) (site.Site, error) {
|
||||
event := audit.NewEvent(audit.ActionSiteCreate, audit.CategorySites)
|
||||
event.Target = audit.Target{Type: audit.TargetSite, Name: command.Name}
|
||||
created, err := u.create(command)
|
||||
if err != nil {
|
||||
recordFailure(ctx, u.recorder, event, err)
|
||||
return site.Site{}, err
|
||||
}
|
||||
event.Target = siteTarget(created)
|
||||
u.recorder.Record(ctx, event)
|
||||
return created, nil
|
||||
}
|
||||
|
||||
func (u *CreateSiteUseCase) create(command CreateSiteCommand) (site.Site, error) {
|
||||
baseURL, err := site.NormalizeBaseURL(command.BaseURL)
|
||||
if err != nil {
|
||||
return site.Site{}, err
|
||||
}
|
||||
locale, err := site.NormalizeLocale(command.Locale)
|
||||
if err != nil {
|
||||
return site.Site{}, err
|
||||
}
|
||||
if err := ensureImageExists(u.imageRepository, command.DefaultSocialImageID); err != nil {
|
||||
return site.Site{}, err
|
||||
}
|
||||
taken, err := isKeyTaken(u.siteRepository, command.Key)
|
||||
if err != nil {
|
||||
return site.Site{}, err
|
||||
}
|
||||
if taken {
|
||||
return site.Site{}, site.ErrSiteKeyTaken
|
||||
}
|
||||
robots := command.DefaultRobots
|
||||
if robots == "" {
|
||||
robots = site.RobotsIndex
|
||||
}
|
||||
return u.siteRepository.Create(site.Site{
|
||||
Name: command.Name,
|
||||
Key: command.Key,
|
||||
BaseURL: baseURL,
|
||||
DefaultSocialImageID: command.DefaultSocialImageID,
|
||||
DefaultRobots: robots,
|
||||
Locale: locale,
|
||||
IsDefault: command.IsDefault,
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user