68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package db
|
|
|
|
func (d *DB) GetAllDomains() ([]DomainStats, error) {
|
|
var domains []Domain
|
|
if err := d.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
|
|
}
|