imc-vibe/backend/internal/db/domains.go
Christoph Haas d5880d5096 Rename ISPmail models to use Virtual* prefix
- Domain -> VirtualDomain
- User -> VirtualUser
- Alias -> VirtualAlias

This clarifies which tables are ISPmail tables vs IMC tables.
2026-03-26 23:34:05 +01:00

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
}