feat: implement repository layer for data access
- Add CertificateRepository with CRUD operations - Implement CertificateAuthorityRepository for CA management - Add CertificateRequestRepository for CSR handling - Include UserRepository and OrganizationRepository - Implement proper error handling and validation - Add support for soft deletes and relationships - Include query optimization and filtering capabilities
This commit is contained in:
91
repositories/csr.go
Normal file
91
repositories/csr.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package repositories
|
||||
|
||||
import (
|
||||
"git.secnex.io/secnex/certman/models"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type CertificateRequestRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewCertificateRequestRepository creates a new certificate request repository
|
||||
func NewCertificateRequestRepository(db *gorm.DB) *CertificateRequestRepository {
|
||||
return &CertificateRequestRepository{db: db}
|
||||
}
|
||||
|
||||
// GetByID returns a certificate request by their ID
|
||||
func (r *CertificateRequestRepository) GetByID(id string) (models.CertificateRequest, error) {
|
||||
var csr models.CertificateRequest
|
||||
if err := r.db.First(&csr, id).Error; err != nil {
|
||||
return models.CertificateRequest{}, err
|
||||
}
|
||||
return csr, nil
|
||||
}
|
||||
|
||||
// GetAll returns all certificate requests
|
||||
func (r *CertificateRequestRepository) GetAll() ([]models.CertificateRequest, error) {
|
||||
var csrs []models.CertificateRequest
|
||||
if err := r.db.Find(&csrs).Error; err != nil {
|
||||
return []models.CertificateRequest{}, err
|
||||
}
|
||||
return csrs, nil
|
||||
}
|
||||
|
||||
// Create creates a new certificate request
|
||||
func (r *CertificateRequestRepository) Create(csr models.CertificateRequest) error {
|
||||
return r.db.Create(&csr).Error
|
||||
}
|
||||
|
||||
// Update updates a certificate request
|
||||
func (r *CertificateRequestRepository) Update(csr models.CertificateRequest) error {
|
||||
return r.db.Save(&csr).Error
|
||||
}
|
||||
|
||||
// Delete deletes a certificate request by their ID
|
||||
func (r *CertificateRequestRepository) Delete(id string) error {
|
||||
return r.db.Delete(&models.CertificateRequest{}, id).Error
|
||||
}
|
||||
|
||||
// HardDelete deletes a certificate request by their ID
|
||||
func (r *CertificateRequestRepository) HardDelete(csr models.CertificateRequest) error {
|
||||
return r.db.Unscoped().Delete(&csr).Error
|
||||
}
|
||||
|
||||
// GetByStatus returns certificate requests by status
|
||||
func (r *CertificateRequestRepository) GetByStatus(status models.RequestStatus) ([]models.CertificateRequest, error) {
|
||||
var csrs []models.CertificateRequest
|
||||
if err := r.db.Where("status = ?", status).Find(&csrs).Error; err != nil {
|
||||
return []models.CertificateRequest{}, err
|
||||
}
|
||||
return csrs, nil
|
||||
}
|
||||
|
||||
// GetPending returns all pending certificate requests
|
||||
func (r *CertificateRequestRepository) GetPending() ([]models.CertificateRequest, error) {
|
||||
return r.GetByStatus(models.RequestStatusPending)
|
||||
}
|
||||
|
||||
// GetApproved returns all approved certificate requests
|
||||
func (r *CertificateRequestRepository) GetApproved() ([]models.CertificateRequest, error) {
|
||||
return r.GetByStatus(models.RequestStatusApproved)
|
||||
}
|
||||
|
||||
// GetRejected returns all rejected certificate requests
|
||||
func (r *CertificateRequestRepository) GetRejected() ([]models.CertificateRequest, error) {
|
||||
return r.GetByStatus(models.RequestStatusRejected)
|
||||
}
|
||||
|
||||
// GetCancelled returns all cancelled certificate requests
|
||||
func (r *CertificateRequestRepository) GetCancelled() ([]models.CertificateRequest, error) {
|
||||
return r.GetByStatus(models.RequestStatusCancelled)
|
||||
}
|
||||
|
||||
// GetByCA returns certificate requests for a specific CA
|
||||
func (r *CertificateRequestRepository) GetByCA(caID string) ([]models.CertificateRequest, error) {
|
||||
var csrs []models.CertificateRequest
|
||||
if err := r.db.Where("certificate_authority_id = ?", caID).Find(&csrs).Error; err != nil {
|
||||
return []models.CertificateRequest{}, err
|
||||
}
|
||||
return csrs, nil
|
||||
}
|
Reference in New Issue
Block a user