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