diff --git a/website/src/components/IndexPage/getOrganismStatistics.ts b/website/src/components/IndexPage/getOrganismStatistics.ts index efbf3af49..02623134c 100644 --- a/website/src/components/IndexPage/getOrganismStatistics.ts +++ b/website/src/components/IndexPage/getOrganismStatistics.ts @@ -2,7 +2,7 @@ import { DateTime, FixedOffsetZone } from 'luxon'; import { LapisClient } from '../../services/lapisClient.ts'; import { RELEASED_AT_FIELD, VERSION_STATUS_FIELD, IS_REVOCATION_FIELD } from '../../settings.ts'; -import { versionStatuses } from '../../types/lapis'; +import { siloVersionStatuses } from '../../types/lapis'; export type OrganismStatistics = { totalSequences: number; @@ -50,7 +50,7 @@ const getTotalAndLastUpdatedAt = async ( const client = LapisClient.createForOrganism(organism); return ( await client.call('aggregated', { - [VERSION_STATUS_FIELD]: versionStatuses.latestVersion, + [VERSION_STATUS_FIELD]: siloVersionStatuses.latestVersion, [IS_REVOCATION_FIELD]: 'false', }) ) @@ -66,16 +66,10 @@ const getTotalAndLastUpdatedAt = async ( }); }; -/** - * Note: This method undercounts in cases where recently released sequences - * are later revoked and then unrevoked (revised), all within the "recency window". - * This trade-off allows for a simpler, more efficient query - * without needing to fetch individual accession lists. - */ const getRecent = async (organism: string, numberDaysAgo: number): Promise => { const recentTimestamp = Math.floor(Date.now() / 1000 - numberDaysAgo * 24 * 60 * 60); const client = LapisClient.createForOrganism(organism); - const recentlyReleasedTotal = ( + const recentTotal = ( await client.call('aggregated', { [`${RELEASED_AT_FIELD}From`]: recentTimestamp, version: 1, @@ -83,14 +77,14 @@ const getRecent = async (organism: string, numberDaysAgo: number): Promise x.data[0].count) .unwrapOr(0); - const recentlyReleasedThenRevokedTotal = ( + const recentRevoked = ( await client.call('aggregated', { [`${RELEASED_AT_FIELD}From`]: recentTimestamp, version: 1, - [VERSION_STATUS_FIELD]: versionStatuses.revoked, + [VERSION_STATUS_FIELD]: siloVersionStatuses.revoked, }) ) .map((x) => x.data[0].count) .unwrapOr(0); - return recentlyReleasedTotal - recentlyReleasedThenRevokedTotal; + return recentTotal - recentRevoked; }; diff --git a/website/src/components/SearchPage/DownloadDialog/generateDownloadUrl.ts b/website/src/components/SearchPage/DownloadDialog/generateDownloadUrl.ts index 8a49d9cc9..323859fe4 100644 --- a/website/src/components/SearchPage/DownloadDialog/generateDownloadUrl.ts +++ b/website/src/components/SearchPage/DownloadDialog/generateDownloadUrl.ts @@ -1,5 +1,5 @@ import { IS_REVOCATION_FIELD, metadataDefaultDownloadDataFormat, VERSION_STATUS_FIELD } from '../../../settings.ts'; -import { versionStatuses } from '../../../types/lapis.ts'; +import { siloVersionStatuses } from '../../../types/lapis.ts'; export type DownloadDataType = | { type: 'metadata' } @@ -26,7 +26,7 @@ export const generateDownloadUrl = ( params.set('downloadAsFile', 'true'); if (!option.includeOldData) { - params.set(VERSION_STATUS_FIELD, versionStatuses.latestVersion); + params.set(VERSION_STATUS_FIELD, siloVersionStatuses.latestVersion); params.set(IS_REVOCATION_FIELD, 'false'); } if (!option.includeRestricted) { diff --git a/website/src/components/SequenceDetailsPage/SequencesBanner.astro b/website/src/components/SequenceDetailsPage/SequencesBanner.astro index 59bbad0a7..07379529b 100644 --- a/website/src/components/SequenceDetailsPage/SequencesBanner.astro +++ b/website/src/components/SequenceDetailsPage/SequencesBanner.astro @@ -1,7 +1,7 @@ --- import { getLatestAccessionVersion } from './getTableData'; import { routes } from '../../routes/routes.ts'; -import { type SequenceEntryHistory, versionStatuses } from '../../types/lapis'; +import { type SequenceEntryHistory, siloVersionStatuses } from '../../types/lapis'; import { getAccessionVersionString } from '../../utils/extractAccessionVersion'; interface Props { @@ -16,8 +16,8 @@ const ownHistoryEntry = sequenceEntryHistory.find((entry) => entry.accessionVers const latestAccessionVersion = getLatestAccessionVersion(sequenceEntryHistory); const revoked = - ownHistoryEntry?.versionStatus === versionStatuses.revoked && latestAccessionVersion?.isRevocation === true; -const isLatestVersion = ownHistoryEntry?.versionStatus === versionStatuses.latestVersion; + ownHistoryEntry?.versionStatus === siloVersionStatuses.revoked && latestAccessionVersion?.isRevocation === true; +const isLatestVersion = ownHistoryEntry?.versionStatus === siloVersionStatuses.latestVersion; ---
diff --git a/website/src/pages/[organism]/search/index.astro b/website/src/pages/[organism]/search/index.astro index 2f3b4dccd..f78ef48a3 100644 --- a/website/src/pages/[organism]/search/index.astro +++ b/website/src/pages/[organism]/search/index.astro @@ -4,14 +4,14 @@ import { SearchFullUI } from '../../../components/SearchPage/SearchFullUI'; import { getRuntimeConfig, getSchema } from '../../../config'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { VERSION_STATUS_FIELD, IS_REVOCATION_FIELD } from '../../../settings'; -import { versionStatuses } from '../../../types/lapis'; +import { siloVersionStatuses } from '../../../types/lapis'; import { getAccessToken } from '../../../utils/getAccessToken'; import { getMyGroups } from '../../../utils/getMyGroups'; import { getReferenceGenomesSequenceNames } from '../../../utils/search'; import { performLapisSearchQueries } from '../../../utils/serversideSearch'; const hiddenFieldValues = { - [VERSION_STATUS_FIELD]: versionStatuses.latestVersion, + [VERSION_STATUS_FIELD]: siloVersionStatuses.latestVersion, [IS_REVOCATION_FIELD]: 'false', }; diff --git a/website/src/pages/[organism]/submission/[groupId]/released.astro b/website/src/pages/[organism]/submission/[groupId]/released.astro index 1281bc555..e3da3dafe 100644 --- a/website/src/pages/[organism]/submission/[groupId]/released.astro +++ b/website/src/pages/[organism]/submission/[groupId]/released.astro @@ -4,7 +4,7 @@ import { SearchFullUI } from '../../../../components/SearchPage/SearchFullUI'; import SubmissionPageWrapper from '../../../../components/Submission/SubmissionPageWrapper.astro'; import { getRuntimeConfig, getSchema } from '../../../../config'; import { GROUP_ID_FIELD, VERSION_STATUS_FIELD } from '../../../../settings'; -import { versionStatuses } from '../../../../types/lapis'; +import { siloVersionStatuses } from '../../../../types/lapis'; import { getAccessToken } from '../../../../utils/getAccessToken'; import { getReferenceGenomesSequenceNames } from '../../../../utils/search'; import { performLapisSearchQueries } from '../../../../utils/serversideSearch'; @@ -33,7 +33,7 @@ const accessToken = getAccessToken(Astro.locals.session); const referenceGenomeSequenceNames = getReferenceGenomesSequenceNames(cleanedOrganism.key); const hiddenFieldValues = { - [VERSION_STATUS_FIELD]: versionStatuses.latestVersion, + [VERSION_STATUS_FIELD]: siloVersionStatuses.latestVersion, [GROUP_ID_FIELD]: group.groupId, }; diff --git a/website/src/services/lapisClient.ts b/website/src/services/lapisClient.ts index 30cea57b6..096e59cb2 100644 --- a/website/src/services/lapisClient.ts +++ b/website/src/services/lapisClient.ts @@ -19,7 +19,7 @@ import { type LapisBaseRequest, sequenceEntryHistory, type SequenceEntryHistory, - versionStatuses, + siloVersionStatuses, } from '../types/lapis.ts'; import type { BaseType } from '../utils/sequenceTypeHelpers.ts'; @@ -56,7 +56,7 @@ export class LapisClient extends ZodiosWrapperClient { public async getLatestAccessionVersion(accession: string): Promise> { const result = await this.call('details', { accession, - versionStatus: versionStatuses.latestVersion, + versionStatus: siloVersionStatuses.latestVersion, fields: [ACCESSION_FIELD, VERSION_FIELD], }); diff --git a/website/src/types/lapis.ts b/website/src/types/lapis.ts index 8984df2dc..5c127d4c3 100644 --- a/website/src/types/lapis.ts +++ b/website/src/types/lapis.ts @@ -74,25 +74,25 @@ export type LapisError = { error: ProblemDetail; }; -export const versionStatuses = { +export const siloVersionStatuses = { revoked: 'REVOKED', revised: 'REVISED', latestVersion: 'LATEST_VERSION', } as const; -export const versionStatusSchema = z.enum([ - versionStatuses.revoked, - versionStatuses.revised, - versionStatuses.latestVersion, +export const siloVersionStatusSchema = z.enum([ + siloVersionStatuses.revoked, + siloVersionStatuses.revised, + siloVersionStatuses.latestVersion, ]); -export type VersionStatus = z.infer; +export type SiloVersionStatus = z.infer; export const sequenceEntryHistoryEntry = accessionVersion .merge( z.object({ accessionVersion: z.string(), - versionStatus: versionStatusSchema, + versionStatus: siloVersionStatusSchema, isRevocation: z.boolean(), submittedAtTimestamp: z.number(), }), diff --git a/website/src/utils/getVersionStatusColor.ts b/website/src/utils/getVersionStatusColor.ts index e93b77b05..05dc33b2a 100644 --- a/website/src/utils/getVersionStatusColor.ts +++ b/website/src/utils/getVersionStatusColor.ts @@ -1,8 +1,8 @@ -import { type VersionStatus, versionStatuses } from '../types/lapis.ts'; +import { type SiloVersionStatus, siloVersionStatuses } from '../types/lapis.ts'; -export const getVersionStatusColor = (versionStatus: VersionStatus) => { +export const getVersionStatusColor = (versionStatus: SiloVersionStatus) => { switch (versionStatus) { - case versionStatuses.latestVersion: + case siloVersionStatuses.latestVersion: return 'text-green-500'; default: return 'text-red-500';