code: func (c *WorkitemController) Show(ctx *app.ShowWorkitemContext) error {
  	var wi *workitem.WorkItem
  	var wit *workitem.WorkItemType
  	err := application.Transactional(c.db, func(appl application.Application) error {
  		var err error
  		wi, err = appl.WorkItems().LoadByID(ctx, ctx.WiID)
  		if err != nil {
  			return errs.Wrap(err, fmt.Sprintf("Fail to load work item with id %v", ctx.WiID))
  		}
  		wit, err = appl.WorkItemTypes().Load(ctx.Context, wi.Type)
  		if err != nil {
  			return errs.Wrapf(err, "failed to load work item type: %s", wi.Type)
  		}
  		return nil
  	})
  	if err != nil {
  		return jsonapi.JSONErrorResponse(ctx, err)
  	}
  	return ctx.ConditionalRequest(*wi, c.config.GetCacheControlWorkItem, func() error {
  		comments := workItemIncludeCommentsAndTotal(ctx, c.db, ctx.WiID)
  		hasChildren := workItemIncludeHasChildren(ctx, c.db)
  		wi2, err := ConvertWorkItem(ctx.Request, *wit, *wi, comments, hasChildren)
  		if err != nil {
  			return jsonapi.JSONErrorResponse(ctx, err)
  		}
  		resp := &app.WorkItemSingle{
  			Data: wi2,
  		}
  		return ctx.OK(resp)
  	})
  }
docs: // Show does GET workitem