Add basic graphql api
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func (d *Database) GetPipelineById(id uuid.UUID) (Pipeline, error) {
|
||||
query := `
|
||||
SELECT name, url, poll_interval
|
||||
FROM pipelines
|
||||
WHERE id=$1;`
|
||||
|
||||
pipeline := Pipeline{
|
||||
Id: id,
|
||||
}
|
||||
|
||||
err := d.Conn.QueryRow(context.Background(), query, id).Scan(&pipeline.Name, &pipeline.Url, &pipeline.PollInterval)
|
||||
if err != nil {
|
||||
return pipeline, fmt.Errorf("Could not query database for pipeline with id %v: %w", id.String(), err)
|
||||
}
|
||||
|
||||
return pipeline, nil
|
||||
}
|
||||
|
||||
func (d *Database) CreatePipeline(name string, url string, pollInterval int) (Pipeline, error) {
|
||||
query := `
|
||||
INSERT INTO pipelines (id, name, url, poll_interval)
|
||||
VALUES (uuid_generate_v4(), $1, $2, $3)
|
||||
RETURNING id, name, url, poll_interval;`
|
||||
|
||||
pipeline := Pipeline{}
|
||||
var idStr string
|
||||
err := d.Conn.QueryRow(context.Background(), query, name, url, pollInterval).Scan(&idStr, &pipeline.Name, &pipeline.Url, &pipeline.PollInterval)
|
||||
if err != nil {
|
||||
return pipeline, err
|
||||
}
|
||||
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
return pipeline, err
|
||||
}
|
||||
|
||||
pipeline.Id = id
|
||||
|
||||
return pipeline, nil
|
||||
}
|
||||
|
||||
func (db *Database) GetWebhooksForPipeline(id uuid.UUID) ([]Webhook, error) {
|
||||
query := `
|
||||
SELECT id, server_type, secret
|
||||
FROM webhooks
|
||||
WHERE pipeline=$1;`
|
||||
|
||||
webhooks := make([]Webhook, 0)
|
||||
|
||||
rows, err := db.Conn.Query(context.Background(), query, id)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var webhook Webhook
|
||||
var idStr string
|
||||
if err := rows.Scan(&idStr, &webhook.ServerType, &webhook.Secret); err != nil {
|
||||
return webhooks, err
|
||||
}
|
||||
|
||||
webhook.Id, err = uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
return webhooks, err
|
||||
}
|
||||
webhooks = append(webhooks, webhook)
|
||||
}
|
||||
|
||||
return webhooks, nil
|
||||
}
|
||||
|
||||
func (d *Database) GetWebhookById(id uuid.UUID) (Webhook, error) {
|
||||
query := `
|
||||
SELECT server_type, secret, pipeline
|
||||
FROM webhooks
|
||||
WHERE id=$1;`
|
||||
|
||||
webhook := Webhook{
|
||||
Id: id,
|
||||
}
|
||||
|
||||
err := d.Conn.QueryRow(context.Background(), query, id).Scan(&webhook.ServerType, &webhook.Secret, &webhook.Pipeline)
|
||||
if err != nil {
|
||||
return webhook, fmt.Errorf("Could not query database for webhook with id %v: %w", id.String(), err)
|
||||
}
|
||||
|
||||
return webhook, nil
|
||||
}
|
||||
|
||||
func (d *Database) CreateWebhook(serverType WebhookSender, pipelineId uuid.UUID) (Webhook, error) {
|
||||
|
||||
//WITH secret_val as (select substr(md5(random()::text), 0, 50)),
|
||||
|
||||
query := `
|
||||
INSERT INTO webhooks (id, server_type, secret, pipeline)
|
||||
VALUES (uuid_generate_v4(), $1, (select substr(md5(random()::text), 0, 50)), $2)
|
||||
RETURNING id, server_type, secret, pipeline;`
|
||||
|
||||
webhook := Webhook{}
|
||||
var idStr string
|
||||
err := d.Conn.QueryRow(context.Background(), query, string(serverType), pipelineId).Scan(&idStr, &webhook.ServerType, &webhook.Secret, &webhook.Pipeline)
|
||||
if err != nil {
|
||||
return webhook, err
|
||||
}
|
||||
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
return webhook, err
|
||||
}
|
||||
|
||||
webhook.Id = id
|
||||
|
||||
return webhook, nil
|
||||
}
|
||||
Reference in New Issue
Block a user