Something went wrong. Try again.
Monorepo for Tangled
Something went wrong. Try again.
Go
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869package db
import ( "context" "database/sql" "encoding/json" "tangled.org/core/api/tangled" "tangled.org/core/spindle/models")
type JobRow struct { Id int64 RepoDid string PipelineIdKnot string PipelineIdRkey string SourceRepo *tangled.Pipeline_TriggerRepo Tpl tangled.Pipeline}
func (d *DB) EnqueueJob(ctx context.Context, repoDid string, pipelineId models.PipelineId, sourceRepo *tangled.Pipeline_TriggerRepo, tpl tangled.Pipeline) error { tplJson, err := json.Marshal(tpl) if err != nil { return err } _, err = d.ExecContext(ctx, ` insert into jobs (repo_did, pipeline_id_knot, pipeline_id_rkey, source_repo, tpl) values (?, ?, ?, ?, ?) `, repoDid, pipelineId.Knot, pipelineId.Rkey, string(sourceRepoJson(sourceRepo)), string(tplJson)) return err}func (d *DB) DequeueJob(ctx context.Context) (*JobRow, error) { var row JobRow var sourceRepoStr *string var tplJson string err := d.QueryRowContext(ctx, ` delete from jobs where id = ( select id from jobs order by id asc limit 1 ) returning id, repo_did, pipeline_id_knot, pipeline_id_rkey, source_repo, tpl `).Scan(&row.Id, &row.RepoDid, &row.PipelineIdKnot, &row.PipelineIdRkey, &sourceRepoStr, &tplJson) if err != nil { if err == sql.ErrNoRows { return nil, nil } return nil, err } if err := json.Unmarshal([]byte(tplJson), &row.Tpl); err != nil { return nil, err } if sourceRepoStr != nil { row.SourceRepo = &tangled.Pipeline_TriggerRepo{} if err := json.Unmarshal([]byte(*sourceRepoStr), row.SourceRepo); err != nil { return nil, err } } return &row, nil}
func sourceRepoJson(sr *tangled.Pipeline_TriggerRepo) []byte { if sr == nil { return nil } b, _ := json.Marshal(sr) return b}