| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- package gorm
- import (
- "strings"
- "github.com/porter-dev/porter/internal/models"
- "github.com/porter-dev/porter/internal/repository"
- "gorm.io/gorm"
- )
- // EnvironmentRepository uses gorm.DB for querying the database
- type EnvironmentRepository struct {
- db *gorm.DB
- }
- // NewEnvironmentRepository returns a DefaultEnvironmentRepository which uses
- // gorm.DB for querying the database
- func NewEnvironmentRepository(db *gorm.DB) repository.EnvironmentRepository {
- return &EnvironmentRepository{db}
- }
- func (repo *EnvironmentRepository) CreateEnvironment(env *models.Environment) (*models.Environment, error) {
- if err := repo.db.Create(env).Error; err != nil {
- return nil, err
- }
- return env, nil
- }
- func (repo *EnvironmentRepository) ReadEnvironment(projectID, clusterID, gitInstallationID uint, gitRepoOwner, gitRepoName string) (*models.Environment, error) {
- env := &models.Environment{}
- switch repo.db.Dialector.Name() {
- case "sqlite":
- if err := repo.db.Order("id desc").Where(
- "project_id = ? AND cluster_id = ? AND git_installation_id = ? AND git_repo_owner LIKE ? AND git_repo_name LIKE ?",
- projectID, clusterID, gitInstallationID, gitRepoOwner, gitRepoName,
- ).First(&env).Error; err != nil {
- return nil, err
- }
- case "postgres":
- if err := repo.db.Order("id desc").Where(
- "project_id = ? AND cluster_id = ? AND git_installation_id = ? AND git_repo_owner iLIKE ? AND git_repo_name iLIKE ?",
- projectID, clusterID, gitInstallationID, gitRepoOwner, gitRepoName,
- ).First(&env).Error; err != nil {
- return nil, err
- }
- }
- return env, nil
- }
- func (repo *EnvironmentRepository) ReadEnvironmentByID(projectID, clusterID, envID uint) (*models.Environment, error) {
- env := &models.Environment{}
- if err := repo.db.Order("id desc").Where(
- "project_id = ? AND cluster_id = ? AND id = ?",
- projectID, clusterID, envID,
- ).First(&env).Error; err != nil {
- return nil, err
- }
- return env, nil
- }
- func (repo *EnvironmentRepository) ReadEnvironmentByOwnerRepoName(
- projectID, clusterID uint,
- gitRepoOwner, gitRepoName string,
- ) (*models.Environment, error) {
- env := &models.Environment{}
- switch repo.db.Dialector.Name() {
- case "sqlite":
- if err := repo.db.Order("id desc").Where("project_id = ? AND cluster_id = ? AND git_repo_owner LIKE ? AND git_repo_name LIKE ?",
- projectID, clusterID, gitRepoOwner, gitRepoName,
- ).First(&env).Error; err != nil {
- return nil, err
- }
- case "postgres":
- if err := repo.db.Order("id desc").Where("project_id = ? AND cluster_id = ? AND git_repo_owner iLIKE ? AND git_repo_name iLIKE ?",
- projectID, clusterID, gitRepoOwner, gitRepoName,
- ).First(&env).Error; err != nil {
- return nil, err
- }
- }
- return env, nil
- }
- func (repo *EnvironmentRepository) ReadEnvironmentByWebhookIDOwnerRepoName(
- webhookID, gitRepoOwner, gitRepoName string,
- ) (*models.Environment, error) {
- env := &models.Environment{}
- switch repo.db.Dialector.Name() {
- case "sqlite":
- if err := repo.db.Order("id desc").Where("webhook_id = ? AND git_repo_owner LIKE ? AND git_repo_name LIKE ?",
- webhookID, gitRepoOwner, gitRepoName,
- ).First(&env).Error; err != nil {
- return nil, err
- }
- case "postgres":
- if err := repo.db.Order("id desc").Where("webhook_id = ? AND git_repo_owner iLIKE ? AND git_repo_name iLIKE ?",
- webhookID, gitRepoOwner, gitRepoName,
- ).First(&env).Error; err != nil {
- return nil, err
- }
- }
- return env, nil
- }
- func (repo *EnvironmentRepository) ListEnvironments(projectID, clusterID uint) ([]*models.Environment, error) {
- envs := make([]*models.Environment, 0)
- if err := repo.db.Order("id asc").Where("project_id = ? AND cluster_id = ?", projectID, clusterID).Find(&envs).Error; err != nil {
- return nil, err
- }
- return envs, nil
- }
- func (repo *EnvironmentRepository) UpdateEnvironment(environment *models.Environment) (*models.Environment, error) {
- if err := repo.db.Save(environment).Error; err != nil {
- return nil, err
- }
- return environment, nil
- }
- func (repo *EnvironmentRepository) DeleteEnvironment(env *models.Environment) (*models.Environment, error) {
- if err := repo.db.Delete(&env).Error; err != nil {
- return nil, err
- }
- return env, nil
- }
- func (repo *EnvironmentRepository) CreateDeployment(deployment *models.Deployment) (*models.Deployment, error) {
- if err := repo.db.Create(deployment).Error; err != nil {
- return nil, err
- }
- return deployment, nil
- }
- func (repo *EnvironmentRepository) UpdateDeployment(deployment *models.Deployment) (*models.Deployment, error) {
- if err := repo.db.Save(deployment).Error; err != nil {
- return nil, err
- }
- return deployment, nil
- }
- func (repo *EnvironmentRepository) ReadDeployment(environmentID uint, namespace string) (*models.Deployment, error) {
- depl := &models.Deployment{}
- if err := repo.db.Order("id desc").Where("environment_id = ? AND namespace = ?", environmentID, namespace).First(&depl).Error; err != nil {
- return nil, err
- }
- return depl, nil
- }
- func (repo *EnvironmentRepository) ReadDeploymentByID(projectID, clusterID, id uint) (*models.Deployment, error) {
- depl := &models.Deployment{}
- if err := repo.db.
- Order("deployments.updated_at desc").
- Joins("INNER JOIN environments ON environments.id = deployments.environment_id").
- Where("environments.project_id = ? AND environments.cluster_id = ? AND deployments.id = ?", projectID, clusterID, id).First(&depl).Error; err != nil {
- return nil, err
- }
- return depl, nil
- }
- func (repo *EnvironmentRepository) ReadDeploymentByCluster(projectID, clusterID uint, namespace string) (*models.Deployment, error) {
- depl := &models.Deployment{}
- if err := repo.db.
- Order("deployments.id asc").
- Joins("INNER JOIN environments ON environments.id = deployments.environment_id").
- Where("environments.project_id = ? AND environments.cluster_id = ? AND environments.deleted_at IS NULL AND namespace = ?", projectID, clusterID, depl.Namespace).
- Find(&depl).Error; err != nil {
- return nil, err
- }
- return depl, nil
- }
- func (repo *EnvironmentRepository) ReadDeploymentByGitDetails(
- environmentID uint, gitRepoOwner, gitRepoName string, prNumber uint,
- ) (*models.Deployment, error) {
- depl := &models.Deployment{}
- switch repo.db.Dialector.Name() {
- case "sqlite":
- if err := repo.db.Order("id asc").
- Where("environment_id = ? AND repo_owner LIKE ? AND repo_name LIKE ? AND pull_request_id = ?",
- environmentID, gitRepoOwner, gitRepoName, prNumber).
- First(&depl).Error; err != nil {
- return nil, err
- }
- case "postgres":
- if err := repo.db.Order("id asc").
- Where("environment_id = ? AND repo_owner iLIKE ? AND repo_name iLIKE ? AND pull_request_id = ?",
- environmentID, gitRepoOwner, gitRepoName, prNumber).
- First(&depl).Error; err != nil {
- return nil, err
- }
- }
- return depl, nil
- }
- func (repo *EnvironmentRepository) ListDeploymentsByCluster(projectID, clusterID uint, states ...string) ([]*models.Deployment, error) {
- query := repo.db.
- Order("deployments.updated_at desc").
- Joins("INNER JOIN environments ON environments.id = deployments.environment_id").
- Where("environments.project_id = ? AND environments.cluster_id = ? AND environments.deleted_at IS NULL", projectID, clusterID)
- if len(states) > 0 {
- queryArr := make([]string, len(states))
- stateInterArr := make([]interface{}, len(states))
- for i, state := range states {
- queryArr[i] = "deployments.status = ?"
- stateInterArr[i] = state
- }
- query = query.Where(strings.Join(queryArr, " OR "), stateInterArr...)
- }
- depls := make([]*models.Deployment, 0)
- if err := query.Find(&depls).Error; err != nil {
- return nil, err
- }
- return depls, nil
- }
- func (repo *EnvironmentRepository) ListDeployments(environmentID uint, states ...string) ([]*models.Deployment, error) {
- query := repo.db.Debug().Order("deployments.updated_at desc").Where("environment_id = ?", environmentID)
- if len(states) > 0 {
- queryArr := make([]string, len(states))
- stateInterArr := make([]interface{}, len(states))
- for i, state := range states {
- queryArr[i] = "deployments.status = ?"
- stateInterArr[i] = state
- }
- query = query.Where(strings.Join(queryArr, " OR "), stateInterArr...)
- }
- depls := make([]*models.Deployment, 0)
- if err := query.Find(&depls).Error; err != nil {
- return nil, err
- }
- return depls, nil
- }
- func (repo *EnvironmentRepository) DeleteDeployment(deployment *models.Deployment) (*models.Deployment, error) {
- if err := repo.db.Delete(deployment).Error; err != nil {
- return nil, err
- }
- return deployment, nil
- }
|