Skip to content

Commit

Permalink
Chore / Move Clinical Service Types (#1185)
Browse files Browse the repository at this point in the history
* Resolve circular import errors

* Update Imports

* Remove unused variable declaration

* Import fixes; updated switch syntax + comment
  • Loading branch information
demariadaniel authored May 28, 2024
1 parent 7f117da commit 8fa917a
Show file tree
Hide file tree
Showing 9 changed files with 92 additions and 54 deletions.
2 changes: 1 addition & 1 deletion src/clinical/api/clinical-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import { Request, Response } from 'express';
import * as service from '../clinical-service';
import { ClinicalDataQuery } from '../clinical-service';
import { ClinicalDataQuery } from '../types';
import { getExceptionManifestRecords } from '../../submission/exceptions/exceptions';
import { ExceptionManifestRecord } from '../../exception/exception-manifest/types';
import {
Expand Down
41 changes: 7 additions & 34 deletions src/clinical/clinical-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,9 @@ import {
import { DeepReadonly } from 'deep-freeze';
import _ from 'lodash';
import {
ClinicalDataSortType,
ClinicalDataSortTypes,
ClinicalEntityErrorRecord,
ClinicalEntitySchemaNames,
ClinicalErrorsResponseRecord,
EntityAlias,
aliasEntityNames,
allEntityNames,
} from '../common-model/entities';
Expand All @@ -54,40 +51,16 @@ import { ClinicalEntityData, Donor, Sample } from './clinical-entities';
import { DONOR_DOCUMENT_FIELDS, donorDao } from './donor-repo';
import { runTaskInWorkerThread } from './service-worker-thread/runner';
import { WorkerTasks } from './service-worker-thread/tasks';
import { CompletionState } from './api/types';
import {
ClinicalDataQuery,
ClinicalDataSortType,
ClinicalDataSortTypes,
ClinicalDonorEntityQuery,
PaginationQuery,
} from './types';

const L = loggerFor(__filename);

// Base type for Clinical Data Queries
export type ClinicalDonorEntityQuery = {
donorIds: number[];
submitterDonorIds: string[];
entityTypes: EntityAlias[];
};

export type PaginationQuery = {
page: number;
pageSize?: number;
sort: string;
};

export type ClinicalDataPaginatedQuery = ClinicalDonorEntityQuery & PaginationQuery;

export type ClinicalDataQuery = ClinicalDataPaginatedQuery & {
completionState?: {};
};

// GQL Query Arguments
// Submitted Data Table, SearchBar, Sidebar, etc.
export type ClinicalDataApiFilters = ClinicalDataPaginatedQuery & {
completionState?: CompletionState;
};

export type ClinicalDataVariables = {
programShortName: string;
filters: ClinicalDataApiFilters;
};

export async function updateDonorSchemaMetadata(
donor: DeepReadonly<Donor>,
migrationId: string,
Expand Down
2 changes: 1 addition & 1 deletion src/clinical/donor-repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/

import { Donor } from './clinical-entities';
import { ClinicalDataQuery, ClinicalDonorEntityQuery } from './clinical-service';
import { ClinicalDataQuery, ClinicalDonorEntityQuery } from './types';
import { getRequiredDonorFieldsForEntityTypes } from '../common-model/functions';
import mongoose, { PaginateModel } from 'mongoose';
import mongoosePaginate from 'mongoose-paginate-v2';
Expand Down
19 changes: 13 additions & 6 deletions src/clinical/service-worker-thread/tasks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
import { DeepReadonly } from 'deep-freeze';
import _, { isEmpty } from 'lodash';
import {
ClinicalDataSortType,
ClinicalDataSortTypes,
ClinicalEntitySchemaNames,
ClinicalErrorsResponseRecord,
EntityAlias,
Expand All @@ -36,7 +34,12 @@ import {
getSampleRegistrationDataFromDonor,
} from '../../common-model/functions';
import { notEmpty } from '../../utils';
import { ClinicalDonorEntityQuery, PaginationQuery } from '../clinical-service';
import {
ClinicalDonorEntityQuery,
ClinicalDataSortType,
ClinicalDataSortTypes,
PaginationQuery,
} from '../types';
import {
ClinicalEntityData,
ClinicalInfo,
Expand Down Expand Up @@ -178,17 +181,21 @@ const mapEntityDocuments = (
let records = results;

switch (sortType) {
case ClinicalDataSortTypes.defaultDonor:
case ClinicalDataSortTypes.defaultDonor: {
records = results.sort(sortDocs(sort, completionStats, sortDonorRecordsByCompletion));
break;
case ClinicalDataSortTypes.invalidEntity:
}
case ClinicalDataSortTypes.invalidEntity: {
records = sortInvalidRecords(errors, results, entityName);
break;
}
// Column Sort is the default, fallback here is intentional
case ClinicalDataSortTypes.columnSort:
default:
default: {
const sortKey = sort[0] === '-' ? sort.split('-')[1] : sort;
const key = sortKey === 'donorId' ? DONOR_ID_FIELD : sortKey;
records = results.sort(sortDocs(sort, key, sortRecordsByColumn));
}
}

if (records.length > pageSize) {
Expand Down
63 changes: 63 additions & 0 deletions src/clinical/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright (c) 2024 The Ontario Institute for Cancer Research. All rights reserved
*
* This program and the accompanying materials are made available under the terms of
* the GNU Affero General Public License v3.0. You should have received a copy of the
* GNU Affero General Public License along with this program.
* If not, see <http://www.gnu.org/licenses/>.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

import { EntityAlias } from '../common-model/entities';
import { CompletionState } from './api/types';
import { Values } from '../utils/objectTypes';

// Types Specific to Clinical Service and Related Tasks

// Base type for Clinical Data Queries
export type ClinicalDonorEntityQuery = {
donorIds: number[];
submitterDonorIds: string[];
entityTypes: EntityAlias[];
};

// Types related to sorting, filtering, pagination, etc
export type PaginationQuery = {
page: number;
pageSize?: number;
sort: string;
};

export type ClinicalDataPaginatedQuery = ClinicalDonorEntityQuery & PaginationQuery;

export type ClinicalDataQuery = ClinicalDataPaginatedQuery & {
completionState?: {};
};

export const ClinicalDataSortTypes = {
defaultDonor: 'defaultDonor',
invalidEntity: 'invalidEntity',
columnSort: 'columnSort',
};

export type ClinicalDataSortType = Values<typeof ClinicalDataSortTypes>;

// GQL Query Arguments
// Submitted Data Table, SearchBar, Sidebar, etc.
export type ClinicalDataApiFilters = ClinicalDataPaginatedQuery & {
completionState?: CompletionState;
};

export type ClinicalDataVariables = {
programShortName: string;
filters: ClinicalDataApiFilters;
};
9 changes: 0 additions & 9 deletions src/common-model/entities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

import { z as zod } from 'zod';
import { entities as dictionaryEntities } from '@overturebio-stack/lectern-client';
import { Values } from '../utils/objectTypes';

// this is temporary to keep code compiling until surgery is ready in dictionary, to be removed in favor of
// the surgery in ClinicalEntitySchemaNames
Expand Down Expand Up @@ -95,14 +94,6 @@ export interface ClinicalErrorsResponseRecord {
errors: ClinicalEntityErrorRecord[];
}

export const ClinicalDataSortTypes = {
defaultDonor: 'defaultDonor',
invalidEntity: 'invalidEntity',
columnSort: 'columnSort',
};

export type ClinicalDataSortType = Values<typeof ClinicalDataSortTypes>;

export type ClinicalFields =
| DonorFieldsEnum
| SpecimenFieldsEnum
Expand Down
4 changes: 3 additions & 1 deletion src/schemas/clinical-resolvers/clinicalData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import { getPaginatedClinicalData, ClinicalDataVariables } from '../../clinical/clinical-service';

import { ClinicalDataVariables } from '../../clinical/types';
import { getPaginatedClinicalData } from '../../clinical/clinical-service';
import { ClinicalEntityData, ClinicalInfo } from '../../clinical/clinical-entities';
import { completionFilters } from '../../clinical/api/clinical-api';
import { ClinicalErrorsResponseRecord } from '../../common-model/entities';
Expand Down
4 changes: 3 additions & 1 deletion src/schemas/clinical-resolvers/clinicalSearchResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import { getClinicalSearchResults, ClinicalDataVariables } from '../../clinical/clinical-service';

import { ClinicalDataVariables } from '../../clinical/types';
import { getClinicalSearchResults } from '../../clinical/clinical-service';

const clinicalSearchResults = async (obj: unknown, args: ClinicalDataVariables) => {
const { programShortName, filters } = args;
Expand Down
2 changes: 1 addition & 1 deletion src/submission/validation-clinical/therapy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import {
import { getSingleClinicalObjectFromDonor } from '../../common-model/functions';
import { donorDao } from '../../clinical/donor-repo';
import { ClinicalInfo, Donor, Treatment } from '../../clinical/clinical-entities';
import { ClinicalDataQuery } from '../../clinical/clinical-service';
import { ClinicalDataQuery } from '../../clinical/types';
import featureFlags from '../../feature-flags';
import { isValueEqual } from '../../utils';

Expand Down

0 comments on commit 8fa917a

Please sign in to comment.