feat: Sites feature backend

This commit is contained in:
Florian Sylvain committed 2026-10-14 03:56:50 +02:00
1 parent 45fcbd890d
commit a11338094e
98 files changed
+5365 -214

No files matched your search

@@ -0,0 +1,68 @@
package useCases
import (
"RenewCMS/internal/domain/audit"
"RenewCMS/internal/domain/site"
"context"
)
type DeleteSiteUseCase struct {
siteRepository site.Repository
recorder audit.Recorder
}
type DeleteSiteCommand struct {
ID uint32
ReassignTo *uint32
ReassignInvalid bool
}
func NewDeleteSiteUseCase(siteRepository site.Repository, recorder audit.Recorder) *DeleteSiteUseCase {
return &DeleteSiteUseCase{siteRepository, recorder}
}
func (u *DeleteSiteUseCase) Delete(ctx context.Context, command DeleteSiteCommand) error {
target, err := u.siteRepository.Get(command.ID)
if err != nil {
return err
}
event := audit.NewEvent(audit.ActionSiteDelete, audit.CategorySites)
event.Target = siteTarget(target)
if err := u.delete(target, command); err != nil {
recordFailure(ctx, u.recorder, event, err)
return err
}
u.recorder.Record(ctx, event)
return nil
}
func (u *DeleteSiteUseCase) delete(target site.Site, command DeleteSiteCommand) error {
if target.IsDefault {
return site.ErrDefaultSite
}
if target.ArticleCount == 0 {
return u.siteRepository.DeleteMovingArticles(target.ID, nil)
}
destination, err := u.destination(target, command)
if err != nil {
return err
}
return u.siteRepository.DeleteMovingArticles(target.ID, &destination)
}
func (u *DeleteSiteUseCase) destination(target site.Site, command DeleteSiteCommand) (uint32, error) {
if command.ReassignInvalid {
return 0, site.ErrInvalidReassign
}
if command.ReassignTo == nil {
return 0, site.ErrSiteHasArticles
}
if *command.ReassignTo == 0 || *command.ReassignTo == target.ID {
return 0, site.ErrInvalidReassign
}
if _, err := u.siteRepository.Get(*command.ReassignTo); err != nil {
return 0, err
}
return *command.ReassignTo, nil
}