github.com/packtpublishing/learning-functional-programming-in-go@v0.0.0-20230130084745-8b849f6d58c4/Chapter06/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  
    23  func NewSourceBucketRepo(gcpHandlers map[string]GcpHandler) *SourceBucketRepo {
    24  	bucketRepo := new(SourceBucketRepo)
    25  	bucketRepo.gcpHandlers = gcpHandlers
    26  	bucketRepo.gcpHandler = gcpHandlers["SourceBucketRepo"]
    27  	return bucketRepo
    28  }
    29  
    30  func (repo *SourceBucketRepo) List(projectId string) (buckets []domain.Bucket, err error) {
    31  	return repo.gcpHandler.ListBuckets(domain.SourceFlow, projectId)
    32  }
    33  
    34  func (repo *SourceBucketRepo) FileExists(fileName string) (fileExists bool, err error) {
    35  	return repo.gcpHandler.FileExists(fileName)
    36  }
    37  
    38  func (repo *SourceBucketRepo) DownloadFile(fileName string) (success bool, err error) {
    39  	return repo.gcpHandler.DownloadFile(fileName)
    40  }
    41  // UploadFile is not operational for a source bucket
    42  func (repo *SourceBucketRepo) UploadFile(fileName string) (success bool, err error) {
    43  	return false, nil
    44  }
    45  
    46  
    47  func NewSinkBucketRepo(gcpHandlers map[string]GcpHandler) *SinkBucketRepo {
    48  	bucketRepo := new(SinkBucketRepo)
    49  	bucketRepo.gcpHandlers = gcpHandlers
    50  	bucketRepo.gcpHandler = gcpHandlers["SinkBucketRepo"]
    51  	return bucketRepo
    52  }
    53  
    54  func (repo *SinkBucketRepo) List(projectId string) (buckets []domain.Bucket, err error) {
    55  	return repo.gcpHandler.ListBuckets(domain.SinkFlow, projectId)
    56  }
    57  
    58  func (repo *SinkBucketRepo) FileExists(fileName string) (fileExists bool, err error) {
    59  	return repo.gcpHandler.FileExists(fileName)
    60  }
    61  // DownloadFile is not operational for a sink bucket
    62  func (repo *SinkBucketRepo) DownloadFile(fileName string) (success bool, err error) {
    63  	return false, nil
    64  }
    65  
    66  func (repo *SinkBucketRepo) UploadFile(fileName string) (success bool, err error) {
    67  	return repo.gcpHandler.UploadFile(fileName)
    68  }
    69  // ListFileNamesToFetch is not operational for a sink bucket
    70  func (repo *SinkBucketRepo) ListFileNamesToFetch(fileName string) (cloudFiles domain.CloudFiles, err error) {
    71  	return cloudFiles, err
    72  }
    73  
    74