From b7b20386aa2681ee5db0683b6175b3558536c1cc Mon Sep 17 00:00:00 2001 From: Marco Kittel Date: Sat, 28 Jun 2025 18:33:41 +0200 Subject: [PATCH] =?UTF-8?q?Options=20Pattern=20eingef=C3=BChrt.=20Code=20a?= =?UTF-8?q?ufger=C3=A4umt.=20Closure=20zur=20Return=20Methode=20umgebaut?= =?UTF-8?q?=20f=C3=BCr=20mehr=20Kontext.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/shell/main.go | 5 +- go.mod | 6 +- go.sum | 42 +++++-------- internal/dataservice/dataservice.go | 93 ++++++++++++++++++++++------- 4 files changed, 94 insertions(+), 52 deletions(-) diff --git a/cmd/shell/main.go b/cmd/shell/main.go index 341ce36..5a91272 100644 --- a/cmd/shell/main.go +++ b/cmd/shell/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "fmt" "os" "os/signal" "sync" @@ -19,6 +20,8 @@ const ( ) func main() { + a, _ := os.Getwd() + fmt.Printf("%s\n", a) ctx, cancel := signal.NotifyContext( context.Background(), os.Interrupt, @@ -28,7 +31,7 @@ func main() { defer cancel() var wg sync.WaitGroup app := app.NewApp(&wg) - ds := dataservice.NewDataService(dataservice.DataServiceDebugHandler, NewDir, ProcessedDir, Rights) + ds := dataservice.NewDataService() ds.AddListener(app) wg.Add(ds.ListenerCount()) app.Run() diff --git a/go.mod b/go.mod index 1ac3093..ffab693 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,8 @@ module gittea.marcokittel.de/elio/eliotools/datawriter go 1.24.4 require ( - gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250624203334-69cf94bf1eef - gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626212824-2199e71c62fd + gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628155152-bf86ab9c8376 + gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628161103-9cee287699cf ) -require gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626215804-b8e72f5652e6 +require gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250628161103-9cee287699cf diff --git a/go.sum b/go.sum index defc7e0..1f4ec6d 100644 --- a/go.sum +++ b/go.sum @@ -1,34 +1,20 @@ -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250625211821-d801fbca0baf h1:LfjRyNZYKkWpdziHim2MygdvzTkHRusystBifCO0yuo= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250625211821-d801fbca0baf/go.mod h1:RQlmQsRhpitThSuGT7vl5XwTh1duVGHCmJ0caI+xIoE= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626043708-9b699695e66f h1:BHYs9jasxprRiOlAtHXVoam0fVtuMbIUVx8j0DQ5sMA= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626043708-9b699695e66f/go.mod h1:RQlmQsRhpitThSuGT7vl5XwTh1duVGHCmJ0caI+xIoE= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626045721-6475655ba7b0 h1:888K6jaDIbZpFPGv0weZMQXywtsDmUx/pD4mZWyFDEA= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626045721-6475655ba7b0/go.mod h1:RQlmQsRhpitThSuGT7vl5XwTh1duVGHCmJ0caI+xIoE= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626170705-977f71385fe9 h1:bN2IAGDikScwDezPUhb26e6zFfawisneRNQ3xdX/Whg= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626170705-977f71385fe9/go.mod h1:RQlmQsRhpitThSuGT7vl5XwTh1duVGHCmJ0caI+xIoE= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626201301-c90924a4efa5 h1:qa3FfyPfJTb0xbra8mU0L46rytPkcZ1J3bU2MjzENBo= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626201301-c90924a4efa5/go.mod h1:RQlmQsRhpitThSuGT7vl5XwTh1duVGHCmJ0caI+xIoE= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626212313-a152ec93d546 h1:F3GPqyyYt655xdHyyHmKMBPsxvNRypQyKmPx7CPyQuI= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626212313-a152ec93d546/go.mod h1:h9FfBWQD/1+fF3sFaYN89K3xH54t3LHKBKQj8YiAjnU= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626212824-2199e71c62fd h1:ecT7wOC+USHtK+EmY1e0vXkrvsNbN0xuuOuORN0wGgQ= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626212824-2199e71c62fd/go.mod h1:h9FfBWQD/1+fF3sFaYN89K3xH54t3LHKBKQj8YiAjnU= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626215445-f3705c40c380 h1:W3gKHcVpFtrCzVxcX/Vczd/uVedWIyC7+yulLwOoJ90= -gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626215445-f3705c40c380/go.mod h1:h9FfBWQD/1+fF3sFaYN89K3xH54t3LHKBKQj8YiAjnU= gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626215804-b8e72f5652e6 h1:dru/Bcg52eUmNm2qnWnKPmpYB4VjnFPBdhWXARZOqPo= gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250626215804-b8e72f5652e6/go.mod h1:h9FfBWQD/1+fF3sFaYN89K3xH54t3LHKBKQj8YiAjnU= +gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250628161103-9cee287699cf h1:safOKitxO+dbliwBM40U1/1e1sfupXmxTrPGst4PqFA= +gittea.marcokittel.de/elio/eliotools/eliofile v0.0.0-20250628161103-9cee287699cf/go.mod h1:h9FfBWQD/1+fF3sFaYN89K3xH54t3LHKBKQj8YiAjnU= gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250624203334-69cf94bf1eef h1:EzFzLINpiq712X2/t8ZMTLoWuqA6sRmpH3J0VpFi2Cg= gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250624203334-69cf94bf1eef/go.mod h1:WDmnG6o72HhGTSkgwj2kXYcRL2MaNFNsKNBeTh6NIzo= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250622182838-d7bc6feff972 h1:ADdr3tbG0Zd5lYirqcMGWd7LSiVkwdOoknVOCfGFkYI= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250622182838-d7bc6feff972/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626170705-977f71385fe9 h1:D2bGrhYH8qsiBJpEjbsNQuJor4rxhiNkaDVhYXG+OVQ= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626170705-977f71385fe9/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626171442-a998aabb24a7 h1:l4vjU4fBrWuZ4QK3Py2f4lQQKg07BMXvLRinpqJoT5E= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626171442-a998aabb24a7/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626201301-c90924a4efa5 h1:A0GZ9Z+IxL/bD9KfGetobuMTh7x+XLzwwAVWuFldHOs= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626201301-c90924a4efa5/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626204134-2c2a5a5f5193 h1:QOq2tQjE0ViQ31r/eBMUgjnRMth5ZPwoR4L794EzdJs= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626204134-2c2a5a5f5193/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626212313-a152ec93d546 h1:MOMit+kjsRAAfY1jieJUiy2mUaf8RhlevSQihRd86YE= -gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626212313-a152ec93d546/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= +gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628153134-531bb5ba4145 h1:BgHWRbDKV+lGs3T9HIa8YYy5redu6MGHTcx8es4lQdc= +gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628153134-531bb5ba4145/go.mod h1:WDmnG6o72HhGTSkgwj2kXYcRL2MaNFNsKNBeTh6NIzo= +gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628155152-bf86ab9c8376 h1:Mozt8XRXoO7x8t/zAZPl/m4sxNmzpz4/sgtb6KFTU/M= +gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628155152-bf86ab9c8376/go.mod h1:WDmnG6o72HhGTSkgwj2kXYcRL2MaNFNsKNBeTh6NIzo= gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626212824-2199e71c62fd h1:NYRlflnOMzwcqEsAMYg79++/jHDNTkF2Rq5ZL0RcrBU= gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626212824-2199e71c62fd/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628130612-3fccbe223735 h1:YGuVoCyj8C5Tv1cgfNuQG5hluGZkbkS2C2sR18r9Jw0= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628130612-3fccbe223735/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628153134-531bb5ba4145 h1:CzJw9+eaFLl1rAtcEHt5U4AjQNfKyqeiwZqQagUhZYk= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628153134-531bb5ba4145/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628155152-bf86ab9c8376 h1:ZtFwvxwzAsuouCebZOylpH27xA1raLFHsm0MW8d1tjY= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628155152-bf86ab9c8376/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628161103-9cee287699cf h1:1D5PVm08fke9YzW2FPzXawehmNs2KG9xyfHXR8tWsGk= +gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250628161103-9cee287699cf/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= diff --git a/internal/dataservice/dataservice.go b/internal/dataservice/dataservice.go index 37f1ced..611d67e 100644 --- a/internal/dataservice/dataservice.go +++ b/internal/dataservice/dataservice.go @@ -2,27 +2,31 @@ package dataservice import ( "context" + "io/fs" + "os" + "sync" + "time" + "gittea.marcokittel.de/elio/eliotools/datawriter/internal/dbwriter" "gittea.marcokittel.de/elio/eliotools/datawriter/internal/event" "gittea.marcokittel.de/elio/eliotools/eliofile" "gittea.marcokittel.de/elio/eliotools/logger" "gittea.marcokittel.de/elio/eliotools/tools" - "sync" - "time" ) -var DataServiceDebugHandler = func(filename string) bool { - log := logger.NewMarcoLogger() - if tools.IsFilenameValid(filename) { - t, err := tools.ExtractDateAndConvertToDate(filename) - if err != nil { - log.Warning(filename + "\n" + err.Error()) - return false +func DataServiceDebugHandler(log logger.Logger, processedDir string) func(filename string) bool { + return func(filename string) bool { + if tools.IsFilenameValid(filename) { + t, err := tools.ExtractDateAndConvertToDate(filename) + if err != nil { + log.Warning(filename + "\n" + err.Error()) + return false + } + log.Info("Datei gefunden.: " + filename + " " + t.String() + "\n") + return true } - log.Info("Datei gefunden.: " + filename + " " + t.String() + "\n") - return true + return false } - return false } type DataService struct { @@ -31,7 +35,6 @@ type DataService struct { ef eliofile.ElioDateiFoo newFolderPath string processedFolderPath string - lookupPath string dirCreationRights int } @@ -54,8 +57,7 @@ func (d *DataService) Run(ctx context.Context, wg *sync.WaitGroup) { //todo } } - d.log.Info("DataService Run") - time.Sleep(time.Second * 3) + time.Sleep(time.Second * 5) } } } @@ -64,12 +66,63 @@ func (d *DataService) AddListener(ev event.EventListener) { d.listener = append(d.listener, ev) } -func NewDataService(process eliofile.ElioHandleFunc, newFolderPath string, processedFolderPath string, dirCreationRights int) *DataService { +type Option func(*DataService) + +func WithCustomCsvProcesser(process eliofile.ElioHandleFunc) Option { + return func(ds *DataService) { + ds.ef = *eliofile.NewElioDateiFoo(ds.newFolderPath, process) + } +} + +// func WithCustomLookupDirectory(lookupDirectory string) Option { +// return func(ds *DataService) { +// ds.newFolderPath = lookupDirectory +// } +// } + +// func WithCustomProcessedDirectory(processedDirectory string) Option { +// return func(ds *DataService) { +// ds.processedFolderPath = processedDirectory +// } +// } + +func WithCustomDirectoryPermissions(permissions int) Option { + return func(ds *DataService) { + ds.dirCreationRights = permissions + } +} + +func NewDataService(options ...Option) *DataService { + lookUpFolderPath, err := os.Getwd() + if err != nil { + panic(err) + } + newFolderPath := "/new" + processedFolderPath := "/processed" + dirCreationRights := 0755 + l := logger.NewMarcoLogger() ds := DataService{listener: make([]event.EventListener, 0), - log: logger.NewMarcoLogger(), - ef: *eliofile.NewElioDateiFoo(".", process), - newFolderPath: newFolderPath, - processedFolderPath: processedFolderPath, + log: l, + newFolderPath: lookUpFolderPath + newFolderPath, + processedFolderPath: lookUpFolderPath + processedFolderPath, dirCreationRights: dirCreationRights} + + ds.ef = *eliofile.NewElioDateiFoo(ds.newFolderPath, DataServiceDebugHandler(l, ds.processedFolderPath)) + + for _, opt := range options { + opt(&ds) + } + + l.Infof("Suche CSV Dateien in %s.\n Verarbeitete Dateien gelangen in %s.\n", ds.newFolderPath, ds.processedFolderPath) + exists, err := tools.CheckDir(ds.newFolderPath) + if err == nil && !exists { + l.Infof("Erzeuge Verzeichnis: %s\n", ds.newFolderPath) + tools.Createdir(ds.newFolderPath, fs.FileMode(ds.dirCreationRights)) + } + exists, err = tools.CheckDir(ds.processedFolderPath) + if err == nil && !exists { + l.Infof("Erzeuge Verzeichnis: %s\n", ds.processedFolderPath) + tools.Createdir(ds.processedFolderPath, fs.FileMode(ds.dirCreationRights)) + } return &ds }