model with generics done
This commit is contained in:
@@ -25,34 +25,30 @@ func CreateDomain(d *models.Domain) (*models.Domain, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
r := &models.RecordWithType[dns.SOARecord]{}
|
||||
r := &models.Record[dns.SOARecord]{}
|
||||
r.Zone = d.WithDotEnd()
|
||||
r.Name = "@"
|
||||
r.RecordType = models.RecordTypeSOA
|
||||
r.Content.Ns = d.MainDNS
|
||||
r.Content.MBox = d.EmailSOAForamt()
|
||||
r.Content.Refresh = d.RefreshInterval
|
||||
r.Content.Retry = d.RetryInterval
|
||||
r.Content.Expire = d.ExpiryPeriod
|
||||
r.Content.MinTtl = d.NegativeTtl
|
||||
r.Content = d.GenerateSOA()
|
||||
if err := r.CheckZone(); err != nil {
|
||||
tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if _, err := (recordsDAO{}).Create(tx, *r.ToRecord()); err != nil {
|
||||
if _, err := (recordsDAO{}).Create(tx, r); err != nil {
|
||||
tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for i, ns := range nss {
|
||||
record := &models.RecordWithType[dns.NSRecord]{}
|
||||
record.Zone = d.WithDotEnd()
|
||||
record.RecordType = models.RecordTypeNS
|
||||
record := &models.Record[dns.NSRecord]{
|
||||
Zone: d.WithDotEnd(),
|
||||
RecordType: models.RecordTypeSOA,
|
||||
Name: fmt.Sprintf("ns%d", i+1),
|
||||
}
|
||||
record.Content.Host = ns
|
||||
record.Name = fmt.Sprintf("ns%d", i+1)
|
||||
|
||||
if _, err := (recordsDAO{}).Create(tx, *record.ToRecord()); err != nil {
|
||||
if _, err := (recordsDAO{}).Create(tx, record); err != nil {
|
||||
tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
@@ -77,7 +73,7 @@ func UpdateDomain(d *models.Domain) error {
|
||||
return err
|
||||
}
|
||||
|
||||
soa, err := (recordsDAO{}).GetOne(tx, models.Record{
|
||||
soa, err := (recordsDAO{}).GetOne(tx, &models.Record[models.RecordContentDefault]{
|
||||
RecordType: models.RecordTypeSOA, Zone: d.WithDotEnd(),
|
||||
})
|
||||
if err != nil {
|
||||
@@ -85,24 +81,19 @@ func UpdateDomain(d *models.Domain) error {
|
||||
return err
|
||||
}
|
||||
|
||||
r := &models.RecordWithType[dns.SOARecord]{}
|
||||
if err := r.FromRecord(&soa); err != nil {
|
||||
r := &models.Record[dns.SOARecord]{}
|
||||
if err := r.FromEntity(soa); err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
r.Content.Ns = d.MainDNS
|
||||
r.Content.MBox = d.EmailSOAForamt()
|
||||
r.Content.Refresh = d.RefreshInterval
|
||||
r.Content.Retry = d.RetryInterval
|
||||
r.Content.Expire = d.ExpiryPeriod
|
||||
r.Content.MinTtl = d.NegativeTtl
|
||||
r.Content = d.GenerateSOA()
|
||||
if err := r.CheckZone(); err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := (recordsDAO{}).Update(tx, *r.ToRecord()); err != nil {
|
||||
if _, err := (recordsDAO{}).Update(tx, r); err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
@@ -130,7 +121,7 @@ func DeleteDomain(id string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := (recordsDAO{}).Delete(tx, models.Record{Zone: domain.WithDotEnd()}); err != nil {
|
||||
if err := (recordsDAO{}).Delete(tx, &models.Record[models.RecordContentDefault]{Zone: domain.WithDotEnd()}); err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ func RegisterMetrics() {
|
||||
}
|
||||
}
|
||||
|
||||
func RefreshMetrics() error {
|
||||
func RefreshMetrics() error {
|
||||
domainCounts, err := getDomainCounts()
|
||||
if err != nil {
|
||||
return err
|
||||
|
@@ -10,7 +10,8 @@ func Migrate() error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := (recordsDAO{}).Migrate(database.Client, models.Record{}); err != nil {
|
||||
var recordDefiniation models.IRecord = &models.Record[models.RecordContentDefault]{}
|
||||
if err := (recordsDAO{}).Migrate(database.Client, recordDefiniation); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@@ -10,11 +10,11 @@ import (
|
||||
)
|
||||
|
||||
type recordsDAO struct {
|
||||
database.BaseDAO[models.Record]
|
||||
database.BaseDAO[models.IRecord]
|
||||
}
|
||||
|
||||
func CreateRecord(r *models.Record) (*models.Record, error) {
|
||||
if r.RecordType != models.RecordTypeSOA {
|
||||
func CreateRecord(r models.IRecord) (models.IRecord, error) {
|
||||
if r.GetType() != models.RecordTypeSOA {
|
||||
_, err := GetDomains(r.WithOutDotTail())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -25,11 +25,11 @@ func CreateRecord(r *models.Record) (*models.Record, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res, err := (recordsDAO{}).Create(database.Client, *r)
|
||||
return &res, err
|
||||
res, err := (recordsDAO{}).Create(database.Client, r)
|
||||
return res, err
|
||||
}
|
||||
|
||||
func CreateRecords(rs []*models.Record) error {
|
||||
func CreateRecords(rs []models.IRecord) error {
|
||||
tx := database.Client.Begin()
|
||||
for _, r := range rs {
|
||||
if err := r.CheckZone(); err != nil {
|
||||
@@ -37,7 +37,7 @@ func CreateRecords(rs []*models.Record) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := (recordsDAO{}).Create(tx, *r); err != nil {
|
||||
if _, err := (recordsDAO{}).Create(tx, r); err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
@@ -46,16 +46,16 @@ func CreateRecords(rs []*models.Record) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetRecords(cond models.Record) ([]models.Record, error) {
|
||||
func GetRecords(cond models.IRecord) ([]models.IRecord, error) {
|
||||
return (recordsDAO{}).GetAll(database.Client, cond)
|
||||
}
|
||||
|
||||
func UpdateRecord(r *models.Record) error {
|
||||
func UpdateRecord(r models.IRecord) error {
|
||||
if err := r.CheckZone(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := (recordsDAO{}).Update(database.Client, *r); err != nil {
|
||||
if _, err := (recordsDAO{}).Update(database.Client, r); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -68,13 +68,13 @@ func DeleteRecord(domain, id string) error {
|
||||
}
|
||||
|
||||
tx := database.Client.Begin()
|
||||
record, err := (recordsDAO{}).GetOne(tx, models.Record{ID: ID, Zone: fmt.Sprintf("%s.", domain)})
|
||||
record, err := (recordsDAO{}).GetOne(tx, &models.Record[models.RecordContentDefault]{ID: ID, Zone: fmt.Sprintf("%s.", domain)})
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
if record.RecordType == models.RecordTypeSOA {
|
||||
if record.GetType() == models.RecordTypeSOA {
|
||||
tx.Rollback()
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
@@ -90,14 +90,18 @@ func DeleteRecord(domain, id string) error {
|
||||
|
||||
// for metrics
|
||||
func getRecordCounts() (map[string]float64, error) {
|
||||
rows, err := (recordsDAO{}).GetAll(database.Client, models.Record{})
|
||||
rows, err := (recordsDAO{}).GetAll(database.Client, &models.Record[models.RecordContentDefault]{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := make(map[string]float64)
|
||||
for _, row := range rows {
|
||||
result[row.Zone] += 1
|
||||
record := &models.Record[models.RecordContentDefault]{}
|
||||
if err := record.FromEntity(row); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result[record.Zone] += 1
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user