diff --git a/graph/schema.resolvers.go b/graph/schema.resolvers.go index bd5c5f9..7a6ef4e 100644 --- a/graph/schema.resolvers.go +++ b/graph/schema.resolvers.go @@ -16,27 +16,10 @@ import ( "github.com/ClusterCockpit/cc-backend/graph/model" "github.com/ClusterCockpit/cc-backend/metricdata" "github.com/ClusterCockpit/cc-backend/schema" - sq "github.com/Masterminds/squirrel" ) func (r *jobResolver) Tags(ctx context.Context, obj *schema.Job) ([]*schema.Tag, error) { - query := sq. - Select("tag.id", "tag.tag_type", "tag.tag_name"). - From("tag"). - Join("jobtag ON jobtag.tag_id = tag.id"). - Where("jobtag.job_id = ?", obj.ID) - - sql, args, err := query.ToSql() - if err != nil { - return nil, err - } - - tags := make([]*schema.Tag, 0) - if err := r.DB.Select(&tags, sql, args...); err != nil { - return nil, err - } - - return tags, nil + return r.Repo.GetTags(&obj.ID) } func (r *mutationResolver) CreateTag(ctx context.Context, typeArg string, name string) (*schema.Tag, error) { @@ -70,34 +53,32 @@ func (r *mutationResolver) AddTagsToJob(ctx context.Context, job string, tagIds } } - dummyJob := schema.Job{} - dummyJob.ID = int64(jid) - tags, err := r.Job().Tags(ctx, &dummyJob) + j, err := r.Query().Job(ctx, job) if err != nil { return nil, err } - jobObj, err := r.Query().Job(ctx, job) + j.Tags, err = r.Repo.GetTags(&jid) if err != nil { return nil, err } - return tags, metricdata.UpdateTags(jobObj, tags) + return j.Tags, metricdata.UpdateTags(j, j.Tags) } func (r *mutationResolver) RemoveTagsFromJob(ctx context.Context, job string, tagIds []string) ([]*schema.Tag, error) { - jid, err := strconv.Atoi(job) + jid, err := strconv.ParseInt(job, 10, 64) if err != nil { return nil, err } for _, tagId := range tagIds { - tid, err := strconv.Atoi(tagId) + tid, err := strconv.ParseInt(tagId, 10, 64) if err != nil { return nil, err } - if _, err := r.DB.Exec("DELETE FROM jobtag WHERE jobtag.job_id = $1 AND jobtag.tag_id = $2", jid, tid); err != nil { + if err := r.Repo.RemoveTag(jid, tid); err != nil { return nil, err } } @@ -130,16 +111,7 @@ func (r *queryResolver) Clusters(ctx context.Context) ([]*model.Cluster, error) } func (r *queryResolver) Tags(ctx context.Context) ([]*schema.Tag, error) { - sql, args, err := sq.Select("id", "tag_type", "tag_name").From("tag").ToSql() - if err != nil { - return nil, err - } - - tags := make([]*schema.Tag, 0) - if err := r.DB.Select(&tags, sql, args...); err != nil { - return nil, err - } - return tags, nil + return r.Repo.GetTags(nil) } func (r *queryResolver) Job(ctx context.Context, id string) (*schema.Job, error) { diff --git a/repository/tags.go b/repository/tags.go index c8d8310..7a26814 100644 --- a/repository/tags.go +++ b/repository/tags.go @@ -9,7 +9,13 @@ import ( // Add the tag with id `tagId` to the job with the database id `jobId`. func (r *JobRepository) AddTag(jobId int64, tagId int64) error { - _, err := r.DB.Exec(`INSERT INTO jobtag (job_id, tag_id) VALUES (?, ?)`, jobId, tagId) + _, err := r.DB.Exec(`INSERT INTO jobtag (job_id, tag_id) VALUES ($1, $2)`, jobId, tagId) + return err +} + +// Removes a tag from a job +func (r *JobRepository) RemoveTag(job, tag int64) error { + _, err := r.DB.Exec("DELETE FROM jobtag WHERE jobtag.job_id = $1 AND jobtag.tag_id = $2", job, tag) return err } @@ -91,3 +97,23 @@ func (r *JobRepository) TagId(tagType string, tagName string) (tagId int64, exis } return } + +// GetTags returns a list of all tags if job is nil or of the tags that the job with that database ID has. +func (r *JobRepository) GetTags(job *int64) ([]*schema.Tag, error) { + q := sq.Select("id", "tag_type", "tag_name").From("tag") + if job != nil { + q = q.Join("jobtag ON jobtag.tag_id = tag.id").Where("jobtag.job_id = ?", *job) + } + + sql, args, err := q.ToSql() + if err != nil { + return nil, err + } + + tags := make([]*schema.Tag, 0) + if err := r.DB.Select(&tags, sql, args...); err != nil { + return nil, err + } + + return tags, nil +}