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 }