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

@@ -40,6 +40,9 @@ func (a *ArticleRepository) scoped(filters domain.Filters) *gorm.DB {
if filters.IsOnline != nil {
query = query.Where("is_online = ?", *filters.IsOnline)
}
if filters.SiteID != nil {
query = query.Where("site_id = ?", *filters.SiteID)
}
switch filters.Status {
case domain.StatusOnline:
query = query.Where("is_online = ?", true)
@@ -177,19 +180,24 @@ func (a *ArticleRepository) GetByName(name string) (domain.Article, error) {
}
func (a *ArticleRepository) Create(article domain.Article) (domain.Article, error) {
creationResult := a.db.Create(&entity.Article{
created := entity.Article{
Title: article.Title,
Body: article.Body,
IsOnline: article.IsOnline,
})
if creationResult.Error != nil {
return domain.Article{}, creationResult.Error
SiteID: article.SiteID,
}
var createdArticle entity.Article
creationResult.Scan(&createdArticle)
return mappers.ArticleToDomain(createdArticle), nil
err := a.db.Transaction(func(tx *gorm.DB) error {
if article.SiteID != 0 {
if _, err := lockSite(tx, article.SiteID); err != nil {
return err
}
}
return tx.Create(&created).Error
})
if err != nil {
return domain.Article{}, err
}
return mappers.ArticleToDomain(created), nil
}
func (a *ArticleRepository) GetAll() []domain.Article {
@@ -225,6 +233,31 @@ func (a *ArticleRepository) UpdateBody(id uint32, body string) (domain.Article,
return newArticle, nil
}
func (a *ArticleRepository) Update(id uint32, update domain.Update) (domain.Article, error) {
var localArticle entity.Article
err := a.db.Transaction(func(tx *gorm.DB) error {
if update.SiteID != nil {
if _, err := lockSite(tx, *update.SiteID); err != nil {
return err
}
}
if err := tx.Model(&entity.Article{}).First(&localArticle, id).Error; err != nil {
return mapNotFoundErr(err, domain.ErrArticleNotFound)
}
if update.Body != nil {
localArticle.Body = *update.Body
}
if update.SiteID != nil {
localArticle.SiteID = *update.SiteID
}
return tx.Save(&localArticle).Error
})
if err != nil {
return domain.Article{}, err
}
return mappers.ArticleToDomain(localArticle), nil
}
func (a *ArticleRepository) UpdateIsOnline(id uint32, isOnline bool) (domain.Article, error) {
var localArticle entity.Article
err := a.db.Model(&entity.Article{}).First(&localArticle, id).Error