fix stuff and add editIssue mutation.
This commit is contained in:
@@ -31,7 +31,7 @@ func (r *issueTaskRepository) Find(ctx context.Context, id string) (*models.Issu
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *issueTaskRepository) List(ctx context.Context, filter models.IssueTaskFilter) ([]*models.IssueTask, error) {
|
func (r *issueTaskRepository) List(ctx context.Context, filter models.IssueTaskFilter) ([]*models.IssueTask, error) {
|
||||||
q := sq.Select("*").From("issue_task")
|
q := sq.Select("*").From("issue_task").OrderBy("created_time")
|
||||||
if filter.ActivityIDs != nil {
|
if filter.ActivityIDs != nil {
|
||||||
q = q.Where(sq.Eq{"activity_id": filter.ActivityIDs})
|
q = q.Where(sq.Eq{"activity_id": filter.ActivityIDs})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ package resolvers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"git.aiterp.net/stufflog/server/graph/graphcore"
|
"git.aiterp.net/stufflog/server/graph/graphcore"
|
||||||
"git.aiterp.net/stufflog/server/graph/graphutil"
|
"git.aiterp.net/stufflog/server/graph/graphutil"
|
||||||
"git.aiterp.net/stufflog/server/graph/loaders"
|
"git.aiterp.net/stufflog/server/graph/loaders"
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ package resolvers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"git.aiterp.net/stufflog/server/graph/loaders"
|
|
||||||
|
|
||||||
"git.aiterp.net/stufflog/server/graph/graphcore"
|
"git.aiterp.net/stufflog/server/graph/graphcore"
|
||||||
|
"git.aiterp.net/stufflog/server/graph/loaders"
|
||||||
"git.aiterp.net/stufflog/server/models"
|
"git.aiterp.net/stufflog/server/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ package resolvers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"git.aiterp.net/stufflog/server/graph/loaders"
|
|
||||||
|
|
||||||
"git.aiterp.net/stufflog/server/graph/graphcore"
|
"git.aiterp.net/stufflog/server/graph/graphcore"
|
||||||
|
"git.aiterp.net/stufflog/server/graph/loaders"
|
||||||
"git.aiterp.net/stufflog/server/models"
|
"git.aiterp.net/stufflog/server/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ package resolvers
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"git.aiterp.net/stufflog/server/graph/loaders"
|
|
||||||
"log"
|
"log"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.aiterp.net/stufflog/server/graph/graphcore"
|
"git.aiterp.net/stufflog/server/graph/graphcore"
|
||||||
|
"git.aiterp.net/stufflog/server/graph/loaders"
|
||||||
"git.aiterp.net/stufflog/server/internal/generate"
|
"git.aiterp.net/stufflog/server/internal/generate"
|
||||||
"git.aiterp.net/stufflog/server/internal/slerrors"
|
"git.aiterp.net/stufflog/server/internal/slerrors"
|
||||||
"git.aiterp.net/stufflog/server/models"
|
"git.aiterp.net/stufflog/server/models"
|
||||||
@@ -301,6 +301,63 @@ func (r *mutationResolver) CreateIssue(ctx context.Context, input graphcore.Issu
|
|||||||
return issue, nil
|
return issue, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *mutationResolver) EditIssue(ctx context.Context, input graphcore.IssueEditInput) (*models.Issue, error) {
|
||||||
|
user := r.Auth.UserFromContext(ctx)
|
||||||
|
if user == nil {
|
||||||
|
return nil, slerrors.PermissionDenied
|
||||||
|
}
|
||||||
|
|
||||||
|
issue, err := loaders.IssueLoaderFromContext(ctx).Load(input.IssueID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if perm, err := r.Auth.IssuePermission(ctx, *issue); err != nil || !perm.CanManageOwnIssue() {
|
||||||
|
return nil, slerrors.PermissionDenied
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.SetAssignee != nil {
|
||||||
|
if *input.SetAssignee != "" {
|
||||||
|
assignee, err := loaders.UserLoaderFromContext(ctx).Load(*input.SetAssignee)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if perm, err := r.Auth.IssuePermission(ctx, *issue); err != nil || !perm.CanManageOwnIssue() {
|
||||||
|
return nil, slerrors.Forbidden("Cannot assign to user who cannot manage their own issues.")
|
||||||
|
}
|
||||||
|
|
||||||
|
issue.AssigneeID = assignee.ID
|
||||||
|
} else {
|
||||||
|
issue.AssigneeID = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if input.SetName != nil {
|
||||||
|
issue.Name = *input.SetName
|
||||||
|
}
|
||||||
|
if input.SetTitle != nil {
|
||||||
|
issue.Name = *input.SetTitle
|
||||||
|
}
|
||||||
|
if input.SetDueTime != nil {
|
||||||
|
issue.DueTime = *input.SetDueTime
|
||||||
|
}
|
||||||
|
if input.SetStatusName != nil {
|
||||||
|
status, err := r.Database.ProjectStatuses().Find(ctx, issue.ProjectID, *input.SetStatusName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
issue.StatusName = status.Name
|
||||||
|
issue.StatusStage = status.Stage
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.Database.Issues().Save(ctx, *issue)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return issue, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) CreateIssueTask(ctx context.Context, input graphcore.IssueTaskCreateInput) (*models.IssueTask, error) {
|
func (r *mutationResolver) CreateIssueTask(ctx context.Context, input graphcore.IssueTaskCreateInput) (*models.IssueTask, error) {
|
||||||
user := r.Auth.UserFromContext(ctx)
|
user := r.Auth.UserFromContext(ctx)
|
||||||
if user == nil {
|
if user == nil {
|
||||||
@@ -336,6 +393,7 @@ func (r *mutationResolver) CreateIssueTask(ctx context.Context, input graphcore.
|
|||||||
StatusName: status.Name,
|
StatusName: status.Name,
|
||||||
Name: input.Name,
|
Name: input.Name,
|
||||||
Description: input.Description,
|
Description: input.Description,
|
||||||
|
EstimatedTime: input.EstimatedTime,
|
||||||
PointsMultiplier: 1.0,
|
PointsMultiplier: 1.0,
|
||||||
}
|
}
|
||||||
if input.EstimatedUnits != nil && activity.Countable && !activity.UnitIsTimeSpent {
|
if input.EstimatedUnits != nil && activity.Countable && !activity.UnitIsTimeSpent {
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ package resolvers
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"git.aiterp.net/stufflog/server/graph/loaders"
|
|
||||||
|
|
||||||
"git.aiterp.net/stufflog/server/graph/graphcore"
|
"git.aiterp.net/stufflog/server/graph/graphcore"
|
||||||
|
"git.aiterp.net/stufflog/server/graph/loaders"
|
||||||
"git.aiterp.net/stufflog/server/internal/slerrors"
|
"git.aiterp.net/stufflog/server/internal/slerrors"
|
||||||
"git.aiterp.net/stufflog/server/models"
|
"git.aiterp.net/stufflog/server/models"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -64,4 +64,20 @@ input IssueCreateInput {
|
|||||||
dueTime: Time
|
dueTime: Time
|
||||||
"Optional title to use instead of the name when not in a list."
|
"Optional title to use instead of the name when not in a list."
|
||||||
title: String
|
title: String
|
||||||
|
}
|
||||||
|
|
||||||
|
input IssueEditInput {
|
||||||
|
"The issue to edit."
|
||||||
|
issueId: String!
|
||||||
|
|
||||||
|
"Set the user this issue is assigned to."
|
||||||
|
setAssignee: String
|
||||||
|
"Set the status name for the issue."
|
||||||
|
setStatusName: String
|
||||||
|
"Rename the issue."
|
||||||
|
setName: String
|
||||||
|
"Set the issue title."
|
||||||
|
setTitle: String
|
||||||
|
"Change the due time."
|
||||||
|
setDueTime: Time
|
||||||
}
|
}
|
||||||
@@ -18,6 +18,8 @@ type Mutation {
|
|||||||
# ISSUE
|
# ISSUE
|
||||||
"Create a new issue."
|
"Create a new issue."
|
||||||
createIssue(input: IssueCreateInput!): Issue!
|
createIssue(input: IssueCreateInput!): Issue!
|
||||||
|
"Edit an issue."
|
||||||
|
editIssue(input: IssueEditInput!): Issue!
|
||||||
# ISSUE TASK
|
# ISSUE TASK
|
||||||
"Create a new issue task."
|
"Create a new issue task."
|
||||||
createIssueTask(input: IssueTaskCreateInput!): IssueTask!
|
createIssueTask(input: IssueTaskCreateInput!): IssueTask!
|
||||||
|
|||||||
Reference in New Issue
Block a user