- users.go -> virtual_users.go - domains.go -> virtual_domains.go - aliases.go -> virtual_aliases.go
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package db
|
|
|
|
func (d *DB) GetAllDomains() ([]DomainStats, error) {
|
|
var domains []VirtualDomain
|
|
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(&VirtualUser{}).Where("domain_id = ?", dom.ID).Count(&userCount)
|
|
d.Model(&VirtualAlias{}).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) (*VirtualDomain, error) {
|
|
var domain VirtualDomain
|
|
if err := d.Where("id = ?", id).First(&domain).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &domain, nil
|
|
}
|
|
|
|
func (d *DB) GetDomainByName(name string) (*VirtualDomain, error) {
|
|
var domain VirtualDomain
|
|
if err := d.Where("name = ?", name).First(&domain).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &domain, nil
|
|
}
|
|
|
|
func (d *DB) CreateDomain(name string) (*VirtualDomain, error) {
|
|
domain := VirtualDomain{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(&VirtualUser{}).Error; err != nil {
|
|
return err
|
|
}
|
|
if err := tx.Where("domain_id = ?", id).Delete(&VirtualAlias{}).Error; err != nil {
|
|
return err
|
|
}
|
|
if err := tx.Delete(&VirtualDomain{}, id).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
return tx.Commit().Error
|
|
}
|