github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/worker_resource_certs.go (about)

     1  package db
     2  
     3  import (
     4  	"database/sql"
     5  
     6  	sq "github.com/Masterminds/squirrel"
     7  )
     8  
     9  type WorkerResourceCerts struct {
    10  	WorkerName string
    11  	CertsPath  string
    12  }
    13  
    14  type UsedWorkerResourceCerts struct {
    15  	ID int
    16  }
    17  
    18  func (workerResourceCerts WorkerResourceCerts) Find(runner sq.BaseRunner) (*UsedWorkerResourceCerts, bool, error) {
    19  	var id int
    20  	err := workerResourceCerts.findQuery().
    21  		RunWith(runner).
    22  		QueryRow().
    23  		Scan(&id)
    24  
    25  	if err != nil {
    26  		if err == sql.ErrNoRows {
    27  			return nil, false, nil
    28  		}
    29  
    30  		return nil, false, err
    31  	}
    32  
    33  	return &UsedWorkerResourceCerts{ID: id}, true, nil
    34  }
    35  
    36  func (workerResourceCerts WorkerResourceCerts) FindOrCreate(tx Tx) (*UsedWorkerResourceCerts, error) {
    37  	uwrc, found, err := workerResourceCerts.Find(tx)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	if found {
    43  		return uwrc, err
    44  	}
    45  
    46  	return workerResourceCerts.create(tx)
    47  }
    48  
    49  func (workerResourceCerts WorkerResourceCerts) findQuery() sq.SelectBuilder {
    50  	return psql.Select("id").
    51  		From("worker_resource_certs").
    52  		Where(sq.Eq{
    53  			"worker_name": workerResourceCerts.WorkerName,
    54  			"certs_path":  workerResourceCerts.CertsPath,
    55  		})
    56  }
    57  
    58  func (workerResourceCerts WorkerResourceCerts) create(tx Tx) (*UsedWorkerResourceCerts, error) {
    59  	var id int
    60  	err := psql.Insert("worker_resource_certs").
    61  		Columns(
    62  			"worker_name",
    63  			"certs_path",
    64  		).
    65  		Values(
    66  			workerResourceCerts.WorkerName,
    67  			workerResourceCerts.CertsPath,
    68  		).
    69  		Suffix("RETURNING id").
    70  		RunWith(tx).
    71  		QueryRow().
    72  		Scan(&id)
    73  	if err != nil {
    74  		return nil, err
    75  	}
    76  
    77  	return &UsedWorkerResourceCerts{ID: id}, nil
    78  }