Skip to content

Commit

Permalink
get sprint backlog items for plan bff call (#265)
Browse files Browse the repository at this point in the history
* get sprint backlog items for plan bff call

* expand not started sprint by default in plan view

Co-authored-by: Kevin <[email protected]>
  • Loading branch information
51ngul4r1ty and singularity15 authored Jan 4, 2021
1 parent de545bd commit 3995043
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 14 deletions.
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "atoll",
"version": "0.35.1",
"version": "0.36.0",
"author": {
"name": "Kevin Berry",
"email": "[email protected]"
Expand Down Expand Up @@ -57,7 +57,7 @@
"setup": "ts-node ./scripts/setup.ts"
},
"dependencies": {
"@atoll/shared": "0.35.0",
"@atoll/shared": "0.36.0",
"@flopflip/memory-adapter": "1.6.0",
"@flopflip/react-broadcast": "10.1.11",
"axios": "0.19.2",
Expand Down
10 changes: 9 additions & 1 deletion src/server/api/handlers/fetchers/sprintBacklogItemFetcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,15 @@ import { SPRINT_BACKLOG_PARENT_RESOURCE_NAME, SPRINT_BACKLOG_CHILD_RESOURCE_NAME
import { SprintBacklogItemModel } from "../../../dataaccess/models/SprintBacklogItem";
import { BacklogItemModel } from "../../../dataaccess/models/BacklogItem";

export const sprintBacklogItemFetcher = async (sprintId: string | null) => {
export interface FetchedSprintBacklogItems {
status: number;
message?: string;
data?: {
items: ApiBacklogItem[]
}
}

export const fetchSprintBacklogItems = async (sprintId: string | null): Promise<FetchedSprintBacklogItems> => {
try {
const options = buildOptionsFromParams({ sprintId });
const sprintBacklogs = await SprintBacklogItemModel.findAll({
Expand Down
4 changes: 2 additions & 2 deletions src/server/api/handlers/sprintBacklogItems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ import {
mapDbToApiSprintBacklogItem
} from "../../dataaccess/mappers/dataAccessToApiMappers";
import { addIdToBody } from "../utils/uuidHelper";
import { sprintBacklogItemFetcher } from "./fetchers/sprintBacklogItemFetcher";
import { fetchSprintBacklogItems } from "./fetchers/sprintBacklogItemFetcher";
import { backlogItemRankFirstItemInserter } from "./inserters/backlogItemRankInserter";
import { handleSprintStatUpdate } from "./updaters/sprintStatUpdater";
import { removeFromProductBacklog } from "./deleters/backlogItemRankDeleter";

export const sprintBacklogItemsGetHandler = async (req: Request, res) => {
const params = getParamsFromRequest(req);
const result = await sprintBacklogItemFetcher(params.sprintId);
const result = await fetchSprintBacklogItems(params.sprintId);
if (result.status === HttpStatus.OK) {
res.json(result);
} else {
Expand Down
40 changes: 35 additions & 5 deletions src/server/api/handlers/views/planViewBff.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,20 @@
import { Request, Response } from "express";
import * as HttpStatus from "http-status-codes";

// libraries
import { ApiBacklogItem, mapApiItemsToSprints } from "@atoll/shared";

// utils
import { backlogItemsFetcher } from "../fetchers/backlogItemFetcher";
import { fetchSprints } from "../fetchers/sprintFetcher";
import { userPreferencesFetcher, UserPreferencesSuccessResponse } from "../fetchers/userPreferencesFetcher";
import { userPreferencesFetcher } from "../fetchers/userPreferencesFetcher";
import { getLoggedInAppUserId } from "../../utils/authUtils";
import { FetcherErrorResponse } from "../fetchers/types";
import { combineMessages, combineStatuses } from "api/utils/resultAggregator";
import { FetchedSprintBacklogItems, fetchSprintBacklogItems } from "../fetchers/sprintBacklogItemFetcher";

// interfaces/types
import { FetcherErrorResponse } from "../fetchers/types";
import { UserPreferencesSuccessResponse } from "../fetchers/userPreferencesFetcher";

export const planViewBffGetHandler = async (req: Request, res: Response) => {
const userPreferencesResult = await userPreferencesFetcher("{self}", () => getLoggedInAppUserId(req));
Expand All @@ -19,30 +26,53 @@ export const planViewBffGetHandler = async (req: Request, res: Response) => {
backlogItemsFetcher(selectedProjectId),
fetchSprints(selectedProjectId, archived)
]);
let sprints = sprintsResult.data?.items;
let sprintBacklogItemsResult: FetchedSprintBacklogItems;
let sprintBacklogItemsStatus = HttpStatus.OK;
let sprintBacklogItemsMessage = "";
if (sprints.length) {
const mappedSprints = mapApiItemsToSprints(sprints);
const expandedSprints = mappedSprints.filter((item) => item.expanded);
if (expandedSprints.length) {
const firstExpandedSprint = expandedSprints[0];
sprintBacklogItemsResult = await fetchSprintBacklogItems(firstExpandedSprint.id);
sprintBacklogItemsStatus = sprintBacklogItemsResult.status;
sprintBacklogItemsMessage = sprintBacklogItemsResult.message;
}
}
if (
backlogItemsResult.status === HttpStatus.OK &&
sprintsResult.status === HttpStatus.OK &&
userPreferencesResult.status === HttpStatus.OK
userPreferencesResult.status === HttpStatus.OK &&
sprintBacklogItemsStatus === HttpStatus.OK
) {
res.json({
status: HttpStatus.OK,
data: {
backlogItems: backlogItemsResult.data?.items,
sprints: sprintsResult.data?.items,
sprints,
sprintBacklogItems: sprintBacklogItemsResult?.data?.items,
userPreferences: (userPreferencesResult as UserPreferencesSuccessResponse).data?.item
}
});
} else {
res.status(backlogItemsResult.status).json({
status: combineStatuses(backlogItemsResult.status, sprintsResult.status, userPreferencesResult.status),
status: combineStatuses(
backlogItemsResult.status,
sprintsResult.status,
sprintBacklogItemsStatus,
userPreferencesResult.status
),
message: combineMessages(
backlogItemsResult.message,
backlogItemsResult.message,
sprintBacklogItemsMessage,
(userPreferencesResult as FetcherErrorResponse).message
)
});
// TODO: Use logging utils
console.log(`Unable to fetch backlog items: ${backlogItemsResult.message}`);
console.log(`Unable to fetch sprints: ${sprintsResult.message}`);
console.log(`Unable to fetch sprint backlog items: ${sprintBacklogItemsMessage}`);
}
};

0 comments on commit 3995043

Please sign in to comment.