// List runs the list action. func (c *SpaceIterationsController) List(ctx *app.ListSpaceIterationsContext) error { spaceID, err := uuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { _, err = appl.Spaces().Load(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } iterations, err := appl.Iterations().List(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } // fetch extra information(counts of WI in each iteration of the space) to be added in response wiCounts, err := appl.WorkItems().GetCountsPerIteration(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.IterationList{} res.Data = ConvertIterations(ctx.RequestData, iterations, UpdateIterationsWithCounts(wiCounts)) return ctx.OK(res) }) }
// Create runs the create action. func (c *SpaceIterationsController) Create(ctx *app.CreateSpaceIterationsContext) error { _, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } spaceID, err := uuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } // Validate Request if ctx.Payload.Data == nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("data", nil).Expected("not nil")) } reqIter := ctx.Payload.Data if reqIter.Attributes.Name == nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("data.attributes.name", nil).Expected("not nil")) } return application.Transactional(c.db, func(appl application.Application) error { _, err = appl.Spaces().Load(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } newItr := iteration.Iteration{ SpaceID: spaceID, Name: *reqIter.Attributes.Name, StartAt: reqIter.Attributes.StartAt, EndAt: reqIter.Attributes.EndAt, } if reqIter.Attributes.Description != nil { newItr.Description = reqIter.Attributes.Description } err = appl.Iterations().Create(ctx, &newItr) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.IterationSingle{ Data: ConvertIteration(ctx.RequestData, &newItr), } ctx.ResponseData.Header().Set("Location", rest.AbsoluteURL(ctx.RequestData, app.IterationHref(res.Data.ID))) return ctx.Created(res) }) }
// CreateChild runs the create-child action. func (c *AreaController) CreateChild(ctx *app.CreateChildAreaContext) error { _, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } parentID, err := uuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { parent, err := appl.Areas().Load(ctx, parentID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } reqArea := ctx.Payload.Data if reqArea.Attributes.Name == nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("data.attributes.name", nil).Expected("not nil")) } childPath := area.ConvertToLtreeFormat(parentID.String()) if parent.Path != "" { childPath = parent.Path + pathSepInDatabase + childPath } newArea := area.Area{ SpaceID: parent.SpaceID, Path: childPath, Name: *reqArea.Attributes.Name, } err = appl.Areas().Create(ctx, &newArea) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.AreaSingle{ Data: ConvertArea(appl, ctx.RequestData, &newArea, addResolvedPath), } ctx.ResponseData.Header().Set("Location", rest.AbsoluteURL(ctx.RequestData, app.AreaHref(res.Data.ID))) return ctx.Created(res) }) }
// Create runs the create action. func (c *SpaceAreasController) Create(ctx *app.CreateSpaceAreasContext) error { _, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } spaceID, err := uuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } // Validate Request if ctx.Payload.Data == nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("data", nil).Expected("not nil")) } reqIter := ctx.Payload.Data if reqIter.Attributes.Name == nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("data.attributes.name", nil).Expected("not nil")) } return application.Transactional(c.db, func(appl application.Application) error { _, err = appl.Spaces().Load(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } newArea := area.Area{ SpaceID: spaceID, Name: *reqIter.Attributes.Name, } err = appl.Areas().Create(ctx, &newArea) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.AreaSingle{ Data: ConvertArea(appl, ctx.RequestData, &newArea, addResolvedPath), } ctx.ResponseData.Header().Set("Location", rest.AbsoluteURL(ctx.RequestData, app.AreaHref(res.Data.ID))) return ctx.Created(res) }) }
// List runs the list action. func (c *SpaceAreasController) List(ctx *app.ListSpaceAreasContext) error { spaceID, err := uuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { _, err = appl.Spaces().Load(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } areas, err := appl.Areas().List(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.AreaList{} res.Data = ConvertAreas(appl, ctx.RequestData, areas, addResolvedPath) return ctx.OK(res) }) }
// Update runs the update action. func (c *IterationController) Update(ctx *app.UpdateIterationContext) error { _, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } id, err := uuid.FromString(ctx.IterationID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { itr, err := appl.Iterations().Load(ctx.Context, id) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } if ctx.Payload.Data.Attributes.Name != nil { itr.Name = *ctx.Payload.Data.Attributes.Name } if ctx.Payload.Data.Attributes.StartAt != nil { itr.StartAt = ctx.Payload.Data.Attributes.StartAt } if ctx.Payload.Data.Attributes.EndAt != nil { itr.EndAt = ctx.Payload.Data.Attributes.EndAt } if ctx.Payload.Data.Attributes.Description != nil { itr.Description = ctx.Payload.Data.Attributes.Description } if ctx.Payload.Data.Attributes.State != nil { if *ctx.Payload.Data.Attributes.State == iteration.IterationStateStart { res, err := appl.Iterations().CanStartIteration(ctx, itr) if res == false && err != nil { return jsonapi.JSONErrorResponse(ctx, err) } } itr.State = *ctx.Payload.Data.Attributes.State } itr, err = appl.Iterations().Save(ctx.Context, *itr) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } response := app.IterationSingle{ Data: ConvertIteration(ctx.RequestData, itr), } return ctx.OK(&response) }) }
// Show runs the show action. func (c *AreaController) Show(ctx *app.ShowAreaContext) error { id, err := uuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { a, err := appl.Areas().Load(ctx, id) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.AreaSingle{} res.Data = ConvertArea(appl, ctx.RequestData, a, addResolvedPath) return ctx.OK(res) }) }
// Delete runs the delete action. func (c *SpaceController) Delete(ctx *app.DeleteSpaceContext) error { _, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } id, err := satoriuuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { err = appl.Spaces().Delete(ctx.Context, id) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } return ctx.OK([]byte{}) }) }
// Delete runs the delete action. func (c *TrackerqueryController) Delete(ctx *app.DeleteTrackerqueryContext) error { result := application.Transactional(c.db, func(appl application.Application) error { err := appl.TrackerQueries().Delete(ctx.Context, ctx.ID) if err != nil { cause := errs.Cause(err) switch cause.(type) { case remoteworkitem.NotFoundError: jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrNotFound(err.Error())) return ctx.NotFound(jerrors) default: jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrInternal(err.Error())) return ctx.InternalServerError(jerrors) } } return ctx.OK([]byte{}) }) c.scheduler.ScheduleAllQueries() return result }
// Show runs the show action. func (c *SpaceController) Show(ctx *app.ShowSpaceContext) error { id, err := satoriuuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { s, err := appl.Spaces().Load(ctx.Context, id) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } resp := app.SpaceSingle{ Data: ConvertSpace(ctx.RequestData, s), } return ctx.OK(&resp) }) }
// Show runs the show action. func (c *TrackerqueryController) Show(ctx *app.ShowTrackerqueryContext) error { return application.Transactional(c.db, func(appl application.Application) error { tq, err := appl.TrackerQueries().Load(ctx.Context, ctx.ID) if err != nil { cause := errs.Cause(err) switch cause.(type) { case remoteworkitem.NotFoundError: log.Error(ctx, map[string]interface{}{ "trackerID": ctx.ID, }, "tracker query controller not found") jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrNotFound(err.Error())) return ctx.NotFound(jerrors) default: return errs.WithStack(err) } } return ctx.OK(tq) }) }
// Show runs the show action. func (c *IterationController) Show(ctx *app.ShowIterationContext) error { id, err := uuid.FromString(ctx.IterationID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } return application.Transactional(c.db, func(appl application.Application) error { c, err := appl.Iterations().Load(ctx, id) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.IterationSingle{} res.Data = ConvertIteration( ctx.RequestData, c) return ctx.OK(res) }) }
// Show runs the show action. func (c *TrackerController) Show(ctx *app.ShowTrackerContext) error { return application.Transactional(c.db, func(appl application.Application) error { t, err := appl.Trackers().Load(ctx.Context, ctx.ID) if err != nil { cause := errs.Cause(err) switch cause.(type) { case remoteworkitem.NotFoundError: log.Error(ctx, map[string]interface{}{ "trackerID": ctx.ID, }, "tracker controller not found") jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrNotFound(err.Error())) return ctx.NotFound(jerrors) default: jerrors, httpStatusCode := jsonapi.ErrorToJSONAPIErrors(goa.ErrInternal(err.Error())) return ctx.ResponseData.Service.Send(ctx.Context, httpStatusCode, jerrors) } } return ctx.OK(t) }) }
// Update runs the update action. func (c *SpaceController) Update(ctx *app.UpdateSpaceContext) error { _, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } id, err := satoriuuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } err = validateUpdateSpace(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } return application.Transactional(c.db, func(appl application.Application) error { s, err := appl.Spaces().Load(ctx.Context, id) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } s.Version = *ctx.Payload.Data.Attributes.Version if ctx.Payload.Data.Attributes.Name != nil { s.Name = *ctx.Payload.Data.Attributes.Name } if ctx.Payload.Data.Attributes.Description != nil { s.Description = *ctx.Payload.Data.Attributes.Description } s, err = appl.Spaces().Save(ctx.Context, s) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } response := app.SpaceSingle{ Data: ConvertSpace(ctx.RequestData, s), } return ctx.OK(&response) }) }
// Relations runs the relation action. // TODO: Should only return Resource Identifier Objects, not complete object (See List) func (c *WorkItemCommentsController) Relations(ctx *app.RelationsWorkItemCommentsContext) error { offset, limit := computePagingLimts(ctx.PageOffset, ctx.PageLimit) return application.Transactional(c.db, func(appl application.Application) error { wi, err := appl.WorkItems().Load(ctx, ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } comments, tc, err := appl.Comments().List(ctx, ctx.ID, &offset, &limit) count := int(tc) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrInternal(err.Error())) } _ = wi _ = comments res := &app.CommentRelationshipList{} res.Meta = &app.CommentListMeta{TotalCount: count} res.Data = ConvertCommentsResourceID(ctx.RequestData, comments) res.Links = CreateCommentsRelationLinks(ctx.RequestData, wi) return ctx.OK(res) }) }
// List runs the list action. func (c *WorkItemCommentsController) List(ctx *app.ListWorkItemCommentsContext) error { offset, limit := computePagingLimts(ctx.PageOffset, ctx.PageLimit) return application.Transactional(c.db, func(appl application.Application) error { _, err := appl.WorkItems().Load(ctx, ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } res := &app.CommentList{} res.Data = []*app.Comment{} comments, tc, err := appl.Comments().List(ctx, ctx.ID, &offset, &limit) count := int(tc) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrInternal(err.Error())) } res.Meta = &app.CommentListMeta{TotalCount: count} res.Data = ConvertComments(ctx.RequestData, comments) res.Links = &app.PagingLinks{} setPagingLinks(res.Links, buildAbsoluteURL(ctx.RequestData), len(comments), offset, limit, count) return ctx.OK(res) }) }
// Create runs the create action. func (c *WorkItemCommentsController) Create(ctx *app.CreateWorkItemCommentsContext) error { return application.Transactional(c.db, func(appl application.Application) error { _, err := appl.WorkItems().Load(ctx, ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } currentUser, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } currentUserID, err := uuid.FromString(currentUser) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } reqComment := ctx.Payload.Data markup := rendering.NilSafeGetMarkup(reqComment.Attributes.Markup) newComment := comment.Comment{ ParentID: ctx.ID, Body: reqComment.Attributes.Body, Markup: markup, CreatedBy: currentUserID, } err = appl.Comments().Create(ctx, &newComment) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrInternal(err.Error())) } res := &app.CommentSingle{ Data: ConvertComment(ctx.RequestData, &newComment), } return ctx.OK(res) }) }