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 ( import (
"context" "context"
"fmt"
"os" "os"
"os/signal" "os/signal"
"sync" "sync"
@ -19,6 +20,8 @@ const (
) )
func main() { func main() {
a, _ := os.Getwd()
fmt.Printf("%s\n", a)
ctx, cancel := signal.NotifyContext( ctx, cancel := signal.NotifyContext(
context.Background(), context.Background(),
os.Interrupt, os.Interrupt,
@ -28,7 +31,7 @@ func main() {
defer cancel() defer cancel()
var wg sync.WaitGroup var wg sync.WaitGroup
app := app.NewApp(&wg) app := app.NewApp(&wg)
ds := dataservice.NewDataService(dataservice.DataServiceDebugHandler, NewDir, ProcessedDir, Rights) ds := dataservice.NewDataService()
ds.AddListener(app) ds.AddListener(app)
wg.Add(ds.ListenerCount()) wg.Add(ds.ListenerCount())
app.Run() app.Run()

6
go.mod
View File

@ -3,8 +3,8 @@ module gittea.marcokittel.de/elio/eliotools/datawriter
go 1.24.4 go 1.24.4
require ( require (
gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250624203334-69cf94bf1eef gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628155152-bf86ab9c8376
gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626212824-2199e71c62fd 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 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-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 h1:EzFzLINpiq712X2/t8ZMTLoWuqA6sRmpH3J0VpFi2Cg=
gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250624203334-69cf94bf1eef/go.mod h1:WDmnG6o72HhGTSkgwj2kXYcRL2MaNFNsKNBeTh6NIzo= 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/logger v0.0.0-20250628153134-531bb5ba4145 h1:BgHWRbDKV+lGs3T9HIa8YYy5redu6MGHTcx8es4lQdc=
gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250622182838-d7bc6feff972/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628153134-531bb5ba4145/go.mod h1:WDmnG6o72HhGTSkgwj2kXYcRL2MaNFNsKNBeTh6NIzo=
gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626170705-977f71385fe9 h1:D2bGrhYH8qsiBJpEjbsNQuJor4rxhiNkaDVhYXG+OVQ= gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628155152-bf86ab9c8376 h1:Mozt8XRXoO7x8t/zAZPl/m4sxNmzpz4/sgtb6KFTU/M=
gittea.marcokittel.de/elio/eliotools/tools v0.0.0-20250626170705-977f71385fe9/go.mod h1:jJvuXliNOiG9i8VXrY9vK5Bqv9QwDtswCs3CNIIBvUQ= gittea.marcokittel.de/elio/eliotools/logger v0.0.0-20250628155152-bf86ab9c8376/go.mod h1:WDmnG6o72HhGTSkgwj2kXYcRL2MaNFNsKNBeTh6NIzo=
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/tools v0.0.0-20250626212824-2199e71c62fd h1:NYRlflnOMzwcqEsAMYg79++/jHDNTkF2Rq5ZL0RcrBU= 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-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,17 +2,20 @@ package dataservice
import ( import (
"context" "context"
"io/fs"
"os"
"sync"
"time"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/dbwriter" "gittea.marcokittel.de/elio/eliotools/datawriter/internal/dbwriter"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/event" "gittea.marcokittel.de/elio/eliotools/datawriter/internal/event"
"gittea.marcokittel.de/elio/eliotools/eliofile" "gittea.marcokittel.de/elio/eliotools/eliofile"
"gittea.marcokittel.de/elio/eliotools/logger" "gittea.marcokittel.de/elio/eliotools/logger"
"gittea.marcokittel.de/elio/eliotools/tools" "gittea.marcokittel.de/elio/eliotools/tools"
"sync"
"time"
) )
var DataServiceDebugHandler = func(filename string) bool { func DataServiceDebugHandler(log logger.Logger, processedDir string) func(filename string) bool {
log := logger.NewMarcoLogger() return func(filename string) bool {
if tools.IsFilenameValid(filename) { if tools.IsFilenameValid(filename) {
t, err := tools.ExtractDateAndConvertToDate(filename) t, err := tools.ExtractDateAndConvertToDate(filename)
if err != nil { if err != nil {
@ -23,6 +26,7 @@ var DataServiceDebugHandler = func(filename string) bool {
return true return true
} }
return false return false
}
} }
type DataService struct { type DataService struct {
@ -31,7 +35,6 @@ type DataService struct {
ef eliofile.ElioDateiFoo ef eliofile.ElioDateiFoo
newFolderPath string newFolderPath string
processedFolderPath string processedFolderPath string
lookupPath string
dirCreationRights int dirCreationRights int
} }
@ -54,8 +57,7 @@ func (d *DataService) Run(ctx context.Context, wg *sync.WaitGroup) {
//todo //todo
} }
} }
d.log.Info("DataService Run") time.Sleep(time.Second * 5)
time.Sleep(time.Second * 3)
} }
} }
} }
@ -64,12 +66,63 @@ func (d *DataService) AddListener(ev event.EventListener) {
d.listener = append(d.listener, ev) 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), ds := DataService{listener: make([]event.EventListener, 0),
log: logger.NewMarcoLogger(), log: l,
ef: *eliofile.NewElioDateiFoo(".", process), newFolderPath: lookUpFolderPath + newFolderPath,
newFolderPath: newFolderPath, processedFolderPath: lookUpFolderPath + processedFolderPath,
processedFolderPath: processedFolderPath,
dirCreationRights: dirCreationRights} 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 return &ds
} }