Options Pattern eingeführt. Code aufgeräumt. Closure zur Return Methode umgebaut für mehr Kontext.

This commit is contained in:
Marco Kittel 2025-06-28 18:33:41 +02:00
parent 2feb107c5a
commit b7b20386aa
4 changed files with 94 additions and 52 deletions

View File

@ -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()

6
go.mod
View File

@ -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

42
go.sum
View File

@ -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=

View File

@ -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
}