github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/2-design-patterns/ch06-onion-arch/04_onion/src/interfaces/gcpstorage.go (about)

     1  package interfaces
     2  
     3  import (
     4  	"domain"
     5  )
     6  
     7  type GcpHandler interface {
     8  	ListBuckets(flowType domain.FlowType, projectId string) (buckets []domain.Bucket, err error)
     9  	FileExists(fileName string) (fileExists bool, err error)
    10  	DownloadFile(fileName string) (success bool, err error)
    11  	UploadFile(fileName string) (success bool, err error)
    12  }
    13  
    14  type GcpRepo struct {
    15  	gcpHandlers map[string]GcpHandler
    16  	gcpHandler  GcpHandler
    17  }
    18  
    19  type SourceBucketRepo GcpRepo
    20  type SinkBucketRepo GcpRepo
    21  
    22  func NewSourceBucketRepo(gcpHandlers map[string]GcpHandler) *SourceBucketRepo {
    23  	return &SourceBucketRepo{
    24  		gcpHandlers: gcpHandlers,
    25  		gcpHandler: gcpHandlers["SourceBucketRepo"],
    26  		}
    27  }
    28  
    29  func (repo *SourceBucketRepo) List(projectId string) (buckets []domain.Bucket, err error) {
    30  	return repo.gcpHandler.ListBuckets(domain.SourceFlow, projectId)
    31  }
    32  
    33  func (repo *SourceBucketRepo) FileExists(fileName string) (fileExists bool, err error) {
    34  	return repo.gcpHandler.FileExists(fileName)
    35  }
    36  
    37  func (repo *SourceBucketRepo) DownloadFile(fileName string) (success bool, err error) {
    38  	return repo.gcpHandler.DownloadFile(fileName)
    39  }
    40  
    41  func (repo *SourceBucketRepo) UploadFile(fileName string) (success bool, err error) {
    42  	return false, nil
    43  }
    44  
    45  func NewSinkBucketRepo(gcpHandlers map[string]GcpHandler) *SinkBucketRepo {
    46  	return &SinkBucketRepo{
    47  		gcpHandlers: gcpHandlers,
    48  		gcpHandler: gcpHandlers["SinkBucketRepo"],
    49  	}
    50  }
    51  
    52  func (repo *SinkBucketRepo) List(projectId string) (buckets []domain.Bucket, err error) {
    53  	return repo.gcpHandler.ListBuckets(domain.SinkFlow, projectId)
    54  }
    55  
    56  func (repo *SinkBucketRepo) FileExists(fileName string) (fileExists bool, err error) {
    57  	return repo.gcpHandler.FileExists(fileName)
    58  }
    59  
    60  func (repo *SinkBucketRepo) DownloadFile(fileName string) (success bool, err error) {
    61  	return false, nil
    62  }
    63  
    64  func (repo *SinkBucketRepo) UploadFile(fileName string) (success bool, err error) {
    65  	return repo.gcpHandler.UploadFile(fileName)
    66  }
    67  
    68  func (repo *SinkBucketRepo) ListFileNamesToFetch(fileName string) (cloudFiles domain.CloudFiles, err error) {
    69  	return cloudFiles, err
    70  }
    71  
    72