From e96554d216c547efb3965ab8e54345e8d60e9750 Mon Sep 17 00:00:00 2001 From: Kevin Berry <41717340+51ngul4r1ty@users.noreply.github.com> Date: Tue, 12 Apr 2022 22:37:48 -0400 Subject: [PATCH 1/4] fix undefined reading map error after login --- package-lock.json | 6 +++--- package.json | 2 +- src/server/api/handlers/views/planViewBff.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 685c7233..4fb4256a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@atoll/shared": { - "version": "0.48.1", - "resolved": "https://registry.npmjs.org/@atoll/shared/-/shared-0.48.1.tgz", - "integrity": "sha512-zy6sWUXiLspQBqw67G30AGM6016e7/8vPzCVMw7ebiyyZbs0CuGQsAllLfFBfOX1pB0YphHhuXMJosbSu4CrcA==", + "version": "0.48.2", + "resolved": "https://registry.npmjs.org/@atoll/shared/-/shared-0.48.2.tgz", + "integrity": "sha512-+VdTHwyOfyi5CAl9SabiyGGvl0NdcnmP0dKyht31+vjnnEkko4od49+an2cG3M2/mQZXFm29NxnhxXFuvtlI0g==", "requires": { "@csstools/normalize.css": "10.1.0", "@flopflip/react-broadcast": "10.1.11", diff --git a/package.json b/package.json index 4e8c5be0..c7e05ebe 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "check:prereqs": "ts-node ./scripts/check-prereqs.ts" }, "dependencies": { - "@atoll/shared": "0.48.1", + "@atoll/shared": "0.48.2", "@flopflip/memory-adapter": "1.6.0", "@flopflip/react-broadcast": "10.1.11", "axios": "0.21.2", diff --git a/src/server/api/handlers/views/planViewBff.ts b/src/server/api/handlers/views/planViewBff.ts index ec681991..b9699bae 100644 --- a/src/server/api/handlers/views/planViewBff.ts +++ b/src/server/api/handlers/views/planViewBff.ts @@ -60,7 +60,7 @@ export const planViewBffGetHandler = async (req: Request, res: Response) => { buildResponseWithData({ backlogItems: backlogItemsResult.data?.items, sprints, - sprintBacklogItems: sprintBacklogItemsResult?.data?.items, + sprintBacklogItems: sprintBacklogItemsResult?.data?.items || [], userPreferences: (userPreferencesResult as UserPreferencesItemResult).data?.item }) ); From 09a718de8a827131fbc7194dcd1a24582cb50a7b Mon Sep 17 00:00:00 2001 From: Kevin Berry <41717340+51ngul4r1ty@users.noreply.github.com> Date: Tue, 12 Apr 2022 22:39:03 -0400 Subject: [PATCH 2/4] fix undefined reading map afer login --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c7e05ebe..8d15856d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "atoll", - "version": "0.48.1", + "version": "0.48.2", "author": { "name": "Kevin Berry", "email": "41717340+51ngul4r1ty@users.noreply.github.com" From dfc1b5788aaaf909423b78f4dd1d8573e5c71a79 Mon Sep 17 00:00:00 2001 From: Kevin Berry <41717340+51ngul4r1ty@users.noreply.github.com> Date: Wed, 13 Apr 2022 10:10:52 -0400 Subject: [PATCH 3/4] fix client/server inconsistency of expanded sprint --- src/server/api/handlers/root.ts | 1 + src/server/api/handlers/userPreferences.ts | 6 +++- src/server/api/handlers/views/planViewBff.ts | 34 +++++++++++++++----- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/server/api/handlers/root.ts b/src/server/api/handlers/root.ts index 00d5c73d..e852f062 100644 --- a/src/server/api/handlers/root.ts +++ b/src/server/api/handlers/root.ts @@ -54,6 +54,7 @@ export const rootHandler = function (req, res) { const packageJsonPath = getPackageJsonPath(); const data = fs.readFileSync(packageJsonPath, { encoding: "utf8", flag: "r" }); const packageJson = JSON.parse(data); + // NOTE: X-App-Version is reported at api/v1/users/{self}/preferences endpoint. res.set( "X-Atoll-Info", JSON.stringify({ diff --git a/src/server/api/handlers/userPreferences.ts b/src/server/api/handlers/userPreferences.ts index 79b2fb7d..8b87fdeb 100644 --- a/src/server/api/handlers/userPreferences.ts +++ b/src/server/api/handlers/userPreferences.ts @@ -3,6 +3,9 @@ import { Request, Response } from "express"; import * as HttpStatus from "http-status-codes"; import * as findPackageJson from "find-package-json"; +// libraries +import { timeNow } from "@atoll/shared"; + // interfaces/types import type { RestApiErrorResult } from "../utils/responseBuilder"; @@ -17,7 +20,8 @@ export const userPreferencesHandler = async function (req: Request, res: Respons const userId = req.params.userId || ""; const result = await getUserPreferences(userId, () => getLoggedInAppUserId(req)); if (result.status === HttpStatus.OK) { - res.header("x-app-version", version).json(result); + // NOTE: X-Atoll-Info also reports version info (app & library versions) at api/vi endpoint. + res.header("x-app-version", version).header("x-server-time", timeNow().toISOString()).json(result); } else { const errorResult = result as RestApiErrorResult; res.status(errorResult.status).json({ diff --git a/src/server/api/handlers/views/planViewBff.ts b/src/server/api/handlers/views/planViewBff.ts index b9699bae..1a1dba7b 100644 --- a/src/server/api/handlers/views/planViewBff.ts +++ b/src/server/api/handlers/views/planViewBff.ts @@ -3,12 +3,12 @@ import type { Request, Response } from "express"; import * as HttpStatus from "http-status-codes"; // libraries -import { mapApiItemsToSprints } from "@atoll/shared"; +import { ApiSprint, DateOnly, determineSprintStatus, mapApiItemsToSprints, SprintStatus } from "@atoll/shared"; // interfaces/types import type { UserPreferencesItemResult } from "../fetchers/userPreferencesFetcher"; import type { SprintBacklogItemsResult } from "../fetchers/sprintBacklogItemFetcher"; -import type { RestApiCollectionResult, RestApiErrorResult } from "../../utils/responseBuilder"; +import { isRestApiErrorResult, RestApiCollectionResult, RestApiErrorResult } from "../../utils/responseBuilder"; // utils import { fetchBacklogItems } from "../fetchers/backlogItemFetcher"; @@ -40,12 +40,29 @@ export const planViewBffGetHandler = async (req: Request, res: Response) => { let sprintBacklogItemsResult: SprintBacklogItemsResult | RestApiErrorResult; let sprintBacklogItemsStatus = HttpStatus.OK; let sprintBacklogItemsMessage = ""; + let expandedSprintId: string; if (sprints.length) { - const mappedSprints = mapApiItemsToSprints(sprints); - const expandedSprints = mappedSprints.filter((item) => item.expanded); - if (expandedSprints.length) { - const firstExpandedSprint = expandedSprints[0]; - sprintBacklogItemsResult = await fetchSprintBacklogItemsWithLinks(firstExpandedSprint.id); + const notStartedSprints = sprints.filter((sprint: ApiSprint) => { + const status = determineSprintStatus( + DateOnly.fromISODate(sprint.startdate), + DateOnly.fromISODate(sprint.finishdate) + ); + return status === SprintStatus.NotStarted; + }); + if (notStartedSprints.length) { + const firstNotStartedSprint = notStartedSprints[0]; + sprintBacklogItemsResult = await fetchSprintBacklogItemsWithLinks(firstNotStartedSprint.id); + if (!isRestApiErrorResult(sprintBacklogItemsResult)) { + expandedSprintId = firstNotStartedSprint.id; + } + } else if (sprints.length > 0) { + const lastSprint = sprints[sprints.length - 1]; + sprintBacklogItemsResult = await fetchSprintBacklogItemsWithLinks(lastSprint.id); + if (!isRestApiErrorResult(sprintBacklogItemsResult)) { + expandedSprintId = lastSprint.id; + } + } + if (sprintBacklogItemsResult) { sprintBacklogItemsStatus = sprintBacklogItemsResult.status; sprintBacklogItemsMessage = sprintBacklogItemsResult.message; } @@ -61,7 +78,8 @@ export const planViewBffGetHandler = async (req: Request, res: Response) => { backlogItems: backlogItemsResult.data?.items, sprints, sprintBacklogItems: sprintBacklogItemsResult?.data?.items || [], - userPreferences: (userPreferencesResult as UserPreferencesItemResult).data?.item + userPreferences: (userPreferencesResult as UserPreferencesItemResult).data?.item, + expandedSprintId: expandedSprintId || null }) ); } else { From be62c9168702f406b8fd5986bd7e433507e9e77e Mon Sep 17 00:00:00 2001 From: Kevin Berry <41717340+51ngul4r1ty@users.noreply.github.com> Date: Wed, 13 Apr 2022 10:16:05 -0400 Subject: [PATCH 4/4] fix end of sprint view issue --- package-lock.json | 8 ++++---- package.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4fb4256a..f774d93f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "atoll", - "version": "0.48.1", + "version": "0.48.3", "lockfileVersion": 1, "requires": true, "dependencies": { "@atoll/shared": { - "version": "0.48.2", - "resolved": "https://registry.npmjs.org/@atoll/shared/-/shared-0.48.2.tgz", - "integrity": "sha512-+VdTHwyOfyi5CAl9SabiyGGvl0NdcnmP0dKyht31+vjnnEkko4od49+an2cG3M2/mQZXFm29NxnhxXFuvtlI0g==", + "version": "0.48.3", + "resolved": "https://registry.npmjs.org/@atoll/shared/-/shared-0.48.3.tgz", + "integrity": "sha512-le+xXLD3edhWy1AgQ8StLW4js1kMfKia4XcU3mDN/UVDx+I74ZyCix0kTIxO8kmS+RO+H84PM5qXLEV20to+Hg==", "requires": { "@csstools/normalize.css": "10.1.0", "@flopflip/react-broadcast": "10.1.11", diff --git a/package.json b/package.json index 8d15856d..c7daaed5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "atoll", - "version": "0.48.2", + "version": "0.48.3", "author": { "name": "Kevin Berry", "email": "41717340+51ngul4r1ty@users.noreply.github.com" @@ -59,7 +59,7 @@ "check:prereqs": "ts-node ./scripts/check-prereqs.ts" }, "dependencies": { - "@atoll/shared": "0.48.2", + "@atoll/shared": "0.48.3", "@flopflip/memory-adapter": "1.6.0", "@flopflip/react-broadcast": "10.1.11", "axios": "0.21.2",