From afd2b130477f237481b3bc5a968088094386607f Mon Sep 17 00:00:00 2001 From: ronnyfriedland Date: Tue, 27 Feb 2024 19:36:52 +0100 Subject: [PATCH] separate logic into packages --- .github/workflows/debian.yml | 2 +- cmd/main.go | 16 ++++++++++++++++ go.sum | 0 internal/cli/cli.go | 24 ++++++++++++++++++++++++ main.go => internal/logic/logic.go | 28 +++++++++++++--------------- 5 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 cmd/main.go create mode 100644 go.sum create mode 100644 internal/cli/cli.go rename main.go => internal/logic/logic.go (83%) diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index 820fc56..704f950 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v3 - name: Build - run: go build -v . + run: go build -o timetracker cmd/main.go - name: Copy necessary files run: | diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..ac0c38f --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,16 @@ +package main + +import ( + "flag" + "ronnyfriedland/timetracker/v2/internal/cli" +) + +func main() { + mode := flag.String("mode", "cli", "the application mode, available: cli") + configPath := flag.String("configpath", "/var/lib/timetracker", "the config path") + flag.Parse() + + if *mode == "cli" { + cli.Run(configPath) + } +} diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..e69de29 diff --git a/internal/cli/cli.go b/internal/cli/cli.go new file mode 100644 index 0000000..0229763 --- /dev/null +++ b/internal/cli/cli.go @@ -0,0 +1,24 @@ +package cli + +import ( + "log" + "ronnyfriedland/timetracker/v2/internal/logic" +) + +const dateLayout = "02.01.2006" +const timeLayout = "15:04:05" + +func Run(configPath *string) { + duration := logic.Execute(configPath) + if duration.Complete { + log.Printf("[%s] - Work duration: %2.2fh", + duration.Date.Format(dateLayout), + duration.Duration.Hours()) + + log.Printf("[%s] - Start: %s, End: %s", + duration.Date.Format(dateLayout), + duration.StartTime.Format(timeLayout), + duration.EndTime.Format(timeLayout)) + + } +} diff --git a/main.go b/internal/logic/logic.go similarity index 83% rename from main.go rename to internal/logic/logic.go index 6daf694..08dcf24 100644 --- a/main.go +++ b/internal/logic/logic.go @@ -1,21 +1,22 @@ -package main +package logic import ( "bufio" - "flag" "log" "math" "os" "time" ) -const dateLayout = "02.01.2006" -const timeLayout = "15:04:05" - -func main() { - configPath := flag.String("configpath", "/var/lib/timetracker", "the config path") - flag.Parse() +type Duration struct { + Date time.Time + StartTime time.Time + EndTime time.Time + Duration time.Duration + Complete bool +} +func Execute(configPath *string) Duration { var currentTime = time.Now() var modificationTime time.Time @@ -31,21 +32,18 @@ func main() { if math.Abs(float64(modificationTime.Day()-currentTime.Day())) == 0 { // same day, add to status addCurrentToStatus(timeTrackerStatusFile, currentTime) + + return Duration{Complete: false} } else { duration, from, to := getDurationFromStatus(timeTrackerStatusFile) - log.Printf("[%s] - Work duration: %2.2fh", - modificationTime.Format(dateLayout), - duration.Hours()) - log.Printf("[%s] - Start: %s, End: %s", - modificationTime.Format(dateLayout), - from.Format(timeLayout), - to.Format(timeLayout)) // remove data from status cleanupStatus(timeTrackerStatusFile) // new day, add first status addCurrentToStatus(timeTrackerStatusFile, currentTime) + + return Duration{Date: modificationTime, StartTime: from, EndTime: to, Duration: duration, Complete: true} } }