一阶段ok
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"mail_go/internal/db"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// DomainStore defines the interface for domain data operations.
|
||||
type DomainStore interface {
|
||||
Create(domain *db.Domain) error
|
||||
GetByID(id uint) (*db.Domain, error)
|
||||
GetByName(name string) (*db.Domain, error)
|
||||
Update(domain *db.Domain) error
|
||||
Delete(id uint) error
|
||||
List(page, size int) ([]db.Domain, int64, error)
|
||||
}
|
||||
|
||||
// domainStoreGorm implements DomainStore using GORM.
|
||||
type domainStoreGorm struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// newDomainStore creates a new GORM-backed DomainStore.
|
||||
func newDomainStore(database *gorm.DB) DomainStore {
|
||||
return &domainStoreGorm{db: database}
|
||||
}
|
||||
|
||||
// Create inserts a new domain record.
|
||||
func (s *domainStoreGorm) Create(domain *db.Domain) error {
|
||||
return s.db.Create(domain).Error
|
||||
}
|
||||
|
||||
// GetByID retrieves a domain by primary key.
|
||||
func (s *domainStoreGorm) GetByID(id uint) (*db.Domain, error) {
|
||||
var domain db.Domain
|
||||
if err := s.db.First(&domain, id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &domain, nil
|
||||
}
|
||||
|
||||
// GetByName retrieves a domain by its name.
|
||||
func (s *domainStoreGorm) GetByName(name string) (*db.Domain, error) {
|
||||
var domain db.Domain
|
||||
if err := s.db.Where("name = ?", name).First(&domain).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &domain, nil
|
||||
}
|
||||
|
||||
// Update saves changes to an existing domain record.
|
||||
func (s *domainStoreGorm) Update(domain *db.Domain) error {
|
||||
return s.db.Save(domain).Error
|
||||
}
|
||||
|
||||
// Delete removes a domain by ID.
|
||||
func (s *domainStoreGorm) Delete(id uint) error {
|
||||
return s.db.Delete(&db.Domain{}, id).Error
|
||||
}
|
||||
|
||||
// List retrieves a paginated list of domains.
|
||||
func (s *domainStoreGorm) List(page, size int) ([]db.Domain, int64, error) {
|
||||
var domains []db.Domain
|
||||
var total int64
|
||||
|
||||
if err := s.db.Model(&db.Domain{}).Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
offset := (page - 1) * size
|
||||
if err := s.db.Offset(offset).Limit(size).Find(&domains).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return domains, total, nil
|
||||
}
|
||||
Reference in New Issue
Block a user