package db func (d *DB) GetAllDomains() ([]DomainStats, error) { var domains []Domain if err := d.Order("name ASC").Find(&domains).Error; err != nil { return nil, err } stats := make([]DomainStats, len(domains)) for i, dom := range domains { var userCount, aliasCount int64 d.Model(&User{}).Where("domain_id = ?", dom.ID).Count(&userCount) d.Model(&Alias{}).Where("domain_id = ?", dom.ID).Count(&aliasCount) stats[i] = DomainStats{ ID: dom.ID, Name: dom.Name, UserCount: userCount, AliasCount: aliasCount, } } if stats == nil { stats = []DomainStats{} } return stats, nil } func (d *DB) GetDomainByID(id uint) (*Domain, error) { var domain Domain if err := d.Where("id = ?", id).First(&domain).Error; err != nil { return nil, err } return &domain, nil } func (d *DB) GetDomainByName(name string) (*Domain, error) { var domain Domain if err := d.Where("name = ?", name).First(&domain).Error; err != nil { return nil, err } return &domain, nil } func (d *DB) CreateDomain(name string) (*Domain, error) { domain := Domain{Name: name} if err := d.Create(&domain).Error; err != nil { return nil, err } return &domain, nil } func (d *DB) DeleteDomain(id uint) error { tx := d.Begin() defer func() { tx.Rollback() }() if err := tx.Where("domain_id = ?", id).Delete(&User{}).Error; err != nil { return err } if err := tx.Where("domain_id = ?", id).Delete(&Alias{}).Error; err != nil { return err } if err := tx.Delete(&Domain{}, id).Error; err != nil { return err } return tx.Commit().Error }