| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package gorm
- import (
- "errors"
- "time"
- "github.com/google/uuid"
- "github.com/porter-dev/porter/internal/models"
- "github.com/porter-dev/porter/internal/repository"
- "gorm.io/gorm"
- )
- // DeploymentTargetRepository uses gorm.DB for querying the database
- type DeploymentTargetRepository struct {
- db *gorm.DB
- }
- // NewDeploymentTargetRepository returns a DeploymentTargetRepository which uses
- // gorm.DB for querying the database
- func NewDeploymentTargetRepository(db *gorm.DB) repository.DeploymentTargetRepository {
- return &DeploymentTargetRepository{db}
- }
- // DeploymentTargetBySelectorAndSelectorType finds a deployment target for a projectID and clusterID by its selector and selector type
- func (repo *DeploymentTargetRepository) DeploymentTargetBySelectorAndSelectorType(projectID uint, clusterID uint, selector, selectorType string) (*models.DeploymentTarget, error) {
- deploymentTarget := &models.DeploymentTarget{}
- if err := repo.db.Where("project_id = ? AND cluster_id = ? AND selector = ? AND selector_type = ?", projectID, clusterID, selector, selectorType).Limit(1).Find(&deploymentTarget).Error; err != nil {
- return nil, err
- }
- return deploymentTarget, nil
- }
- // ListForCluster finds all deployment targets for a given project
- func (repo *DeploymentTargetRepository) ListForCluster(projectID uint, clusterID uint, preview bool) ([]*models.DeploymentTarget, error) {
- deploymentTargets := []*models.DeploymentTarget{}
- if err := repo.db.Where("project_id = ? AND cluster_id = ? AND preview = ?", projectID, clusterID, preview).Find(&deploymentTargets).Error; err != nil {
- return nil, err
- }
- return deploymentTargets, nil
- }
- // List finds all deployment targets for a given project
- func (repo *DeploymentTargetRepository) List(projectID uint, preview bool) ([]*models.DeploymentTarget, error) {
- deploymentTargets := []*models.DeploymentTarget{}
- if err := repo.db.Where("project_id = ? AND preview = ?", projectID, preview).Find(&deploymentTargets).Error; err != nil {
- return nil, err
- }
- return deploymentTargets, nil
- }
- // DeploymentTarget finds all deployment targets for a given project
- func (repo *DeploymentTargetRepository) DeploymentTarget(projectID uint, deploymentTargetIdentifier string) (*models.DeploymentTarget, error) {
- if deploymentTargetIdentifier == "" {
- return nil, errors.New("deployment target identifier is empty")
- }
- whereArg := "project_id = ? AND id = ?"
- _, err := uuid.Parse(deploymentTargetIdentifier)
- if err != nil {
- whereArg = "project_id = ? AND vanity_name = ?"
- }
- deploymentTarget := &models.DeploymentTarget{}
- if err := repo.db.Where(whereArg, projectID, deploymentTargetIdentifier).Find(deploymentTarget).Error; err != nil {
- return nil, err
- }
- return deploymentTarget, nil
- }
- // DeploymentTargetById finds a deployment target by its uuid
- func (repo *DeploymentTargetRepository) DeploymentTargetById(id string) (*models.DeploymentTarget, error) {
- if id == "" {
- return nil, errors.New("deployment target id is empty")
- }
- deploymentTarget := &models.DeploymentTarget{}
- if err := repo.db.Where("id = ?", id).Find(deploymentTarget).Error; err != nil {
- return nil, err
- }
- return deploymentTarget, nil
- }
- // CreateDeploymentTarget creates a new deployment target
- func (repo *DeploymentTargetRepository) CreateDeploymentTarget(deploymentTarget *models.DeploymentTarget) (*models.DeploymentTarget, error) {
- if deploymentTarget == nil {
- return nil, errors.New("deployment target is nil")
- }
- if deploymentTarget.Selector == "" {
- return nil, errors.New("deployment target selector is empty")
- }
- if deploymentTarget.SelectorType == "" {
- return nil, errors.New("deployment target selector type is empty")
- }
- if deploymentTarget.ClusterID == 0 {
- return nil, errors.New("deployment target cluster id is empty")
- }
- if deploymentTarget.ProjectID == 0 {
- return nil, errors.New("deployment target project id is empty")
- }
- if deploymentTarget.ID == uuid.Nil {
- deploymentTarget.ID = uuid.New()
- }
- if deploymentTarget.CreatedAt.IsZero() {
- deploymentTarget.CreatedAt = time.Now().UTC()
- }
- if deploymentTarget.UpdatedAt.IsZero() {
- deploymentTarget.UpdatedAt = time.Now().UTC()
- }
- if err := repo.db.Create(deploymentTarget).Error; err != nil {
- return nil, err
- }
- return deploymentTarget, nil
- }
|