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