refac: migration crash, real-database tests, site deleted during create, ruels out of the repo, lists

This commit is contained in:
Florian Sylvain committed 2026-11-03 05:06:04 +01:00
1 parent 680b9a1308
commit 9d284e65a9
62 files changed
+1858 -987

No files matched your search

@@ -28,61 +28,15 @@ func (s *SiteLanguageRepository) ListBySite(siteID uint32) ([]domain.SiteLanguag
return languages, nil
}
func (s *SiteLanguageRepository) LockStartingLanguage(siteID uint32) (string, error) {
func (s *SiteLanguageRepository) LockSiteLanguages(siteID uint32) ([]domain.SiteLanguage, error) {
if _, err := lockSite(s.db, siteID); err != nil {
return "", err
return nil, err
}
defaultLanguage, found, err := findDefaultLanguage(s.db, siteID)
if err != nil || !found || !defaultLanguage.Confirmed {
return domain.Unassigned, err
}
return defaultLanguage.Lang, nil
return s.ListBySite(siteID)
}
func (s *SiteLanguageRepository) ConfirmDefault(siteID uint32) error {
return s.db.Transaction(func(tx *gorm.DB) error {
if _, err := lockSite(tx, siteID); err != nil {
return err
}
defaultLanguage, err := requireDefaultLanguage(tx, siteID)
if err != nil {
return err
}
if defaultLanguage.Confirmed {
return nil
}
if err := markConfirmed(tx, defaultLanguage); err != nil {
return err
}
return assignUnassignedArticles(tx, defaultLanguage)
})
}
func findDefaultLanguage(db *gorm.DB, siteID uint32) (entity.SiteLanguage, bool, error) {
var defaults []entity.SiteLanguage
if err := db.Where("site_id = ? AND is_default = ?", siteID, true).Limit(1).Find(&defaults).Error; err != nil || len(defaults) == 0 {
return entity.SiteLanguage{}, false, err
}
return defaults[0], true, nil
}
func requireDefaultLanguage(db *gorm.DB, siteID uint32) (entity.SiteLanguage, error) {
defaultLanguage, found, err := findDefaultLanguage(db, siteID)
if err != nil {
return entity.SiteLanguage{}, err
}
if !found {
return entity.SiteLanguage{}, domain.ErrNoDefaultLanguage
}
return defaultLanguage, nil
}
func markConfirmed(tx *gorm.DB, defaultLanguage entity.SiteLanguage) error {
return tx.Model(&entity.SiteLanguage{}).Where("site_id = ? AND lang = ?", defaultLanguage.SiteID, defaultLanguage.Lang).UpdateColumn("confirmed", true).Error
}
func assignUnassignedArticles(tx *gorm.DB, defaultLanguage entity.SiteLanguage) error {
return tx.Unscoped().Model(&entity.Article{}).Where("site_id = ? AND lang = ?", defaultLanguage.SiteID, domain.Unassigned).UpdateColumn("lang", defaultLanguage.Lang).Error
func (s *SiteLanguageRepository) MarkConfirmed(siteID uint32, tag string) error {
return s.db.Model(&entity.SiteLanguage{}).Where("site_id = ? AND lang = ?", siteID, tag).UpdateColumn("confirmed", true).Error
}
var _ domain.Repository = &SiteLanguageRepository{}