package commands import ( "errors" "fmt" "time" "git.tjp.lol/punchcard/internal/actions" punchctx "git.tjp.lol/punchcard/internal/context" "github.com/spf13/cobra" ) func NewOutCmd() *cobra.Command { return &cobra.Command{ Use: "out", Short: "Stop the active timer", Long: "Stop tracking time for the current work session by setting the end time of the active time entry.", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { q := punchctx.GetDB(cmd.Context()) if q == nil { return fmt.Errorf("database not available in context") } a := actions.New(q) session, err := a.PunchOut(cmd.Context()) if err != nil { if errors.Is(err, actions.ErrNoActiveTimer) { return ErrNoActiveTimer } return err } // Output success message cmd.Printf("Timer stopped. Session duration: %v\n", session.Duration.Round(time.Second)) cmd.Printf("Time entry ID: %d\n", session.ID) return nil }, } }