Moul

Programmatic Go API

Direct Go SDK integrations for worker job scheduling, analytics tracking, and data access.

Beyond HTTP endpoints, you can import and interact directly with Moul's internal core engines in Go.


1. Programmatic Worker Engine

You can initialize and control the worker queue engine directly:

package main

import (
	"context"
	"fmt"
	"github.com/moul-dev/moul-dev/internal/worker"
	"github.com/pocketbase/dbx"
)

func main() {
	// Initialize worker engine with SQLite db connection
	workerEngine := worker.NewEngine(dbConn)

	// Register job handler
	workerEngine.Register("SendSlackAlert", func(ctx context.Context, job *worker.Job) error {
		channel := job.Args["channel"].(string)
		msg := job.Args["message"].(string)

		fmt.Printf("Sending message to #%s: %s\n", channel, msg)
		return nil
	})

	// Start worker loop in background
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	workerEngine.Start(ctx)

	// Enqueue job programmatically
	jobOpts := map[string]any{
		"worker":   "SendSlackAlert",
		"priority": 1,
		"args": map[string]any{
			"channel": "deployments",
			"message": "Production build completed successfully",
		},
	}

	job, err := workerEngine.Enqueue(context.Background(), "tasks_queue", jobOpts)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Job enqueued with ID: %s\n", job.ID)

	// Gracefully stop engine when exiting
	defer workerEngine.Stop()
}

2. Programmatic Analytics Ingestion

Record custom user events from Go backend handlers:

import (
	"context"
	"github.com/moul-dev/moul-dev/internal/analytics"
)

params := &analytics.EventParams{
	VisitToken:   "visit_abc123",
	VisitorToken: "visitor_xyz789",
	Name:         "checkout_completed",
	Properties: map[string]any{
		"order_id": "ord_9981",
		"currency": "USD",
		"total":    129.99,
	},
}

event, err := analyticsEngine.Track(context.Background(), "events", params)

On this page