From 4dc62b1f1e24bb38a6944526ba58a7b442c90b09 Mon Sep 17 00:00:00 2001 From: Dipesh Dulal Date: Sat, 16 Jan 2021 10:58:42 +0545 Subject: [PATCH] feat: added schedule implementation --- scheduler.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 scheduler.go diff --git a/scheduler.go b/scheduler.go new file mode 100644 index 0000000..5d0c987 --- /dev/null +++ b/scheduler.go @@ -0,0 +1,53 @@ +package main + +import ( + "database/sql" + "log" + "time" +) + +// Scheduler data structure +type Scheduler struct { + db *sql.DB + listeners Listeners +} + +// Listeners has attached event listeners +type Listeners map[string]ListenFunc + +// ListenFunc function that listens to events +type ListenFunc func(string) + +// Event structure +type Event struct { + ID uint + Name string + Payload string +} + +// NewScheduler creates a new scheduler +func NewScheduler(db *sql.DB, listeners Listeners) Scheduler { + return Scheduler{ + db: db, + listeners: listeners, + } +} + +// AddListener adds the listener function to Listeners +func (s Scheduler) AddListener(event string, listenFunc ListenFunc) { + s.listeners[event] = listenFunc +} + +// CheckDueEvents checks and returns due events +func (s Scheduler) CheckDueEvents() { + // var event Event + // s.db.Query(`SELECT id, name, payload FROM jobs WHERE locked = 0`) +} + +// Schedule sechedules the provided events +func (s Scheduler) Schedule(event string, payload string, runAt time.Time) { + _, err := s.db.Exec(`INSERT INTO "public"."jobs" ("name", "payload", "runAt") VALUES ($1, $2, $3)`, event, payload, runAt) + if err != nil { + log.Print("schedule insert error: ", err) + } +}