Skip to content

Commit 1d5c5d8

Browse files
committed
refactor: update type assertions and guards for new data structures
1 parent ae408f1 commit 1d5c5d8

File tree

2 files changed

+113
-34
lines changed

2 files changed

+113
-34
lines changed

src/app/service/TypeGuard/TypeAssersations.ts

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,28 @@ import { AttributeFilterBaseData } from '../../model/Interface/AttributeFilterBa
55
import { AttributeFilterData } from '../../model/Interface/AttributeFilterData';
66
import { AttributeGroupsData } from '../../model/Interface/AttributeGroupsData';
77
import { AttributesData } from '../../model/Interface/AttributesData';
8-
import { CodeableConceptResult } from '../../model/Interface/CodeableConceptResult';
8+
import { CodeableConceptResultListData } from 'src/app/model/Interface/Search/CodeableConceptResultList';
99
import { ComparatorTypeData } from '../../model/Interface/ComparatorTypeData';
1010
import { ContextData } from '../../model/Interface/ContextData';
11+
import { CriteriaListEntryData } from 'src/app/model/Interface/Search/CriteriaListListEntryData';
1112
import { CriteriaProfileData } from '../../model/Interface/CriteriaProfileData';
1213
import { CRTDLData } from '../../model/Interface/CRTDLData';
1314
import { DataExtractionData } from '../../model/Interface/DataExtractionData';
1415
import { DisplayData } from '../../model/Interface/DisplayData';
1516
import { FilterData } from '../../model/Interface/FilterData';
1617
import { IssueData } from '../../model/Interface/IssueData';
18+
import { ListEntryData } from 'src/app/model/Interface/Search/ListEntryData';
1719
import { QuantityUnitData } from '../../model/Interface/Unit';
1820
import { QueryResultData } from '../../model/Interface/QueryResultData';
1921
import { QueryResultLineData } from '../../model/Interface/QueryResultLineData';
22+
import { ReferenceCriteriaListEntryData } from 'src/app/model/Interface/Search/ReferenceCriteriaListEntryData';
2023
import { Relations } from '../../model/Interface/Relations';
2124
import { Relatives } from '../../model/Interface/Relatives';
25+
import { ResultListData } from 'src/app/model/Interface/Search/ResultListData';
2226
import { SavedDataQueryData } from '../../model/Interface/SavedDataQueryData';
2327
import { SavedDataQueryListItemData } from '../../model/Interface/SavedDataQueryListItemData';
24-
import { SearchResponse } from '../../model/Interface/SearchResponse';
25-
import { SearchResult } from '../../model/Interface/SearchResult';
28+
import { SearchResponse } from '../../model/Interface/Search/SearchResponse';
29+
import { SearchResultData } from 'src/app/model/Interface/Search/SearchResultData';
2630
import { StructuredQueryCriterionData } from '../../model/Interface/StructuredQueryCriterionData';
2731
import { StructuredQueryData } from '../../model/Interface/StructuredQueryData';
2832
import { TerminologyCodeBaseData } from '../../model/Interface/TerminologyBaseData';
@@ -223,9 +227,9 @@ export class TypeAssertion {
223227
* @param obj - The object to check.
224228
* @throws Will throw an error if the object is not of type SearchResponse.
225229
*/
226-
public static assertSearchResponse(obj: unknown): asserts obj is SearchResponse {
227-
if (!TypeGuard.isSearchResponse(obj)) {
228-
throw new Error(`Invalid SearchResponse: ${JSON.stringify(obj)}`);
230+
public static assertListEntryData(obj: unknown): asserts obj is ListEntryData {
231+
if (!TypeGuard.isListEntryData(obj)) {
232+
throw new Error(`Invalid ListEntryData: ${JSON.stringify(obj)}`);
229233
}
230234
}
231235

@@ -234,9 +238,11 @@ export class TypeAssertion {
234238
* @param obj - The object to check.
235239
* @throws Will throw an error if the object is not of type SearchResult.
236240
*/
237-
public static assertSearchResult(obj: unknown): asserts obj is SearchResult {
238-
if (!TypeGuard.isSearchResult(obj)) {
239-
throw new Error(`Invalid SearchResult: ${JSON.stringify(obj)}`);
241+
public static assertResultListData<C extends ListEntryData>(
242+
obj: unknown
243+
): asserts obj is ResultListData<C> {
244+
if (!TypeGuard.isListEntryData(obj)) {
245+
throw new Error(`Invalid ResultListData: ${JSON.stringify(obj)}`);
240246
}
241247
}
242248

@@ -416,9 +422,27 @@ export class TypeAssertion {
416422
* @param obj - The object to check.
417423
* @throws Will throw an error if the object is not of type CodeableConceptResult.
418424
*/
419-
public static assertCodeableConceptResult(obj: unknown): asserts obj is CodeableConceptResult {
425+
public static assertCodeableConceptResult(
426+
obj: unknown
427+
): asserts obj is CodeableConceptResultListData {
420428
if (!TypeGuard.isCodeableConceptResult(obj)) {
421429
throw new Error(`Invalid CodeableConceptResult: ${JSON.stringify(obj)}`);
422430
}
423431
}
432+
433+
public static assertReferenceCriteriaListEntryData(
434+
obj: unknown
435+
): asserts obj is ReferenceCriteriaListEntryData {
436+
if (!TypeGuard.isReferenceCriteriaListEntryData(obj)) {
437+
throw new Error(`Invalid ReferenceCriteriaListEntryData: ${JSON.stringify(obj)}`);
438+
}
439+
}
440+
441+
public static assertCriteriaListListEntryData(
442+
obj: unknown
443+
): asserts obj is CriteriaListEntryData {
444+
if (!TypeGuard.isCriteriaListListEntryData(obj)) {
445+
throw new Error(`Invalid CriteriaListListEntryData: ${JSON.stringify(obj)}`);
446+
}
447+
}
424448
}

src/app/service/TypeGuard/TypeGuard.ts

Lines changed: 79 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import { AttributeFilterBaseData } from '../../model/Interface/AttributeFilterBa
55
import { AttributeFilterData } from '../../model/Interface/AttributeFilterData';
66
import { AttributeGroupsData } from '../../model/Interface/AttributeGroupsData';
77
import { AttributesData } from '../../model/Interface/AttributesData';
8-
import { CodeableConceptResult } from '../../model/Interface/CodeableConceptResult';
8+
import { CodeableConceptResultListData } from 'src/app/model/Interface/Search/CodeableConceptResultList';
9+
import { CodeableConceptResultListEntryData } from 'src/app/model/Interface/Search/CodeableConceptResultListEntryData';
910
import { ComparatorTypeData } from '../../model/Interface/ComparatorTypeData';
1011
import { ContextData } from '../../model/Interface/ContextData';
1112
import { CriteriaProfileData } from '../../model/Interface/CriteriaProfileData';
@@ -14,15 +15,17 @@ import { DataExtractionData } from '../../model/Interface/DataExtractionData';
1415
import { DisplayData } from '../../model/Interface/DisplayData';
1516
import { FilterData } from '../../model/Interface/FilterData';
1617
import { IssueData } from '../../model/Interface/IssueData';
18+
import { ListEntryData } from 'src/app/model/Interface/Search/ListEntryData';
1719
import { QuantityUnitData } from '../../model/Interface/Unit';
1820
import { QueryResultData } from '../../model/Interface/QueryResultData';
1921
import { QueryResultLineData } from '../../model/Interface/QueryResultLineData';
22+
import { ReferenceCriteriaListEntryData } from 'src/app/model/Interface/Search/ReferenceCriteriaListEntryData';
23+
import { ReferenceCriteriaResultListData } from 'src/app/model/Interface/Search/RefrenceCriteriaResultListData';
2024
import { Relations } from '../../model/Interface/Relations';
2125
import { Relatives } from '../../model/Interface/Relatives';
26+
import { ResultListData } from 'src/app/model/Interface/Search/ResultListData';
2227
import { SavedDataQueryData } from '../../model/Interface/SavedDataQueryData';
2328
import { SavedDataQueryListItemData } from '../../model/Interface/SavedDataQueryListItemData';
24-
import { SearchResponse } from '../../model/Interface/SearchResponse';
25-
import { SearchResult } from '../../model/Interface/SearchResult';
2629
import { StructuredQueryCriterionData } from '../../model/Interface/StructuredQueryCriterionData';
2730
import { StructuredQueryData } from '../../model/Interface/StructuredQueryData';
2831
import { TerminologyCodeBaseData } from '../../model/Interface/TerminologyBaseData';
@@ -32,6 +35,7 @@ import { TranslationData } from '../../model/Interface/TranslationData';
3235
import { UiProfileData } from '../../model/Interface/UiProfileData';
3336
import { ValueDefinitionData } from '../../model/Interface/ValueDefinition';
3437
import { ValueFilterData } from '../../model/Interface/ValueFilterData';
38+
import { CriteriaListEntryData } from 'src/app/model/Interface/Search/CriteriaListListEntryData';
3539

3640
/**
3741
* Utility class for type guards to ensure objects conform to their respective interfaces.
@@ -421,32 +425,23 @@ export class TypeGuard {
421425
}
422426

423427
/**
424-
* Checks if the object is an instance of SearchResponse.
428+
* Checks if the object is an instance of ResultList.
425429
* @param obj
426430
* @returns boolean
427431
*/
428-
public static isSearchResponse(obj: unknown): obj is SearchResponse {
429-
const searchResponse = obj as SearchResponse;
430-
return (
431-
TypeGuard.isObject(searchResponse) &&
432-
TypeGuard.isNumber(searchResponse.totalHits) &&
433-
Array.isArray(searchResponse.results) &&
434-
searchResponse.results.every(TypeGuard.isSearchResult)
435-
);
432+
public static isListEntryData<C extends ListEntryData>(obj: unknown): obj is ResultListData<C> {
433+
const searchResult = obj as ResultListData<C>;
434+
return TypeGuard.isObject(searchResult) && Array.isArray(searchResult.results);
436435
}
437436

438437
/**
439-
* Checks if the object is an instance of SearchResult.
438+
* Checks if the object is an instance of ResultList.
440439
* @param obj
441440
* @returns boolean
442441
*/
443-
public static isSearchResult(obj: unknown): obj is SearchResult {
444-
const searchResult = obj as SearchResult;
445-
return (
446-
TypeGuard.isObject(searchResult) &&
447-
TypeGuard.isString(searchResult.id) &&
448-
TypeGuard.isDisplayData(searchResult.display)
449-
);
442+
public static isResultListEntryData(obj: unknown): obj is ListEntryData {
443+
const searchResult = obj as ListEntryData;
444+
return TypeGuard.isObject(searchResult) && TypeGuard.isString(searchResult.id);
450445
}
451446

452447
public static isOptionalStructuredQueryCriterionData(
@@ -746,12 +741,72 @@ export class TypeGuard {
746741
* @param obj
747742
* @returns boolean
748743
*/
749-
public static isCodeableConceptResult(obj: unknown): obj is CodeableConceptResult {
750-
const codeableConceptResult = obj as CodeableConceptResult;
744+
public static isCodeableConceptResult(obj: unknown): obj is CodeableConceptResultListData {
745+
const codeableConceptResult = obj as CodeableConceptResultListData;
751746
return (
752747
TypeGuard.isObject(codeableConceptResult) &&
753-
TypeGuard.isSearchResult(codeableConceptResult) &&
754-
TypeGuard.isTerminologyCodeData(codeableConceptResult.termCode)
748+
TypeGuard.isListEntryData<CodeableConceptResultListEntryData>(codeableConceptResult)
749+
);
750+
}
751+
752+
/**
753+
* Checks if the object is an instance of CodeableConceptResultListEntry.
754+
* @param obj
755+
* @returns boolean
756+
*/
757+
public static isCodeableConceptResultListEntry(
758+
obj: unknown
759+
): obj is CodeableConceptResultListEntryData {
760+
const codeableConceptResultListEntry = obj as CodeableConceptResultListEntryData;
761+
return (
762+
TypeGuard.isObject(codeableConceptResultListEntry) &&
763+
TypeGuard.isResultListEntryData(codeableConceptResultListEntry) &&
764+
TypeGuard.isDisplayData(codeableConceptResultListEntry.display) &&
765+
TypeGuard.isTerminologyCodeData(codeableConceptResultListEntry.termCode)
766+
);
767+
}
768+
769+
/**
770+
* Checks if the object is an instance of ReferenceCriteriaResultList.
771+
* @param obj
772+
* @returns boolean
773+
*/
774+
public static isReferenceCriteriaResultList(
775+
obj: unknown
776+
): obj is ReferenceCriteriaResultListData {
777+
const referenceCriteriaResult = obj as ReferenceCriteriaResultListData;
778+
return (
779+
TypeGuard.isObject(referenceCriteriaResult) &&
780+
TypeGuard.isArray(referenceCriteriaResult.results, TypeGuard.isReferenceCriteriaListEntryData)
781+
);
782+
}
783+
784+
public static isReferenceCriteriaListEntryData(
785+
obj: unknown
786+
): obj is ReferenceCriteriaListEntryData {
787+
const referenceCriteriaListEntry = obj as ReferenceCriteriaListEntryData;
788+
return (
789+
TypeGuard.isObject(referenceCriteriaListEntry) &&
790+
TypeGuard.isResultListEntryData(referenceCriteriaListEntry) &&
791+
TypeGuard.isString(referenceCriteriaListEntry.id) &&
792+
TypeGuard.isDisplayData(referenceCriteriaListEntry.display) &&
793+
TypeGuard.isString(referenceCriteriaListEntry.terminology) &&
794+
TypeGuard.isString(referenceCriteriaListEntry.system)
795+
);
796+
}
797+
798+
public static isCriteriaListListEntryData(obj: unknown): obj is CriteriaListEntryData {
799+
const criteriaListEntry = obj as CriteriaListEntryData;
800+
return (
801+
TypeGuard.isObject(criteriaListEntry) &&
802+
TypeGuard.isResultListEntryData(criteriaListEntry) &&
803+
TypeGuard.isString(criteriaListEntry.id) &&
804+
TypeGuard.isDisplayData(criteriaListEntry.display) &&
805+
TypeGuard.isBoolean(criteriaListEntry.selectable) &&
806+
TypeGuard.isString(criteriaListEntry.terminology) &&
807+
TypeGuard.isString(criteriaListEntry.termcode) &&
808+
TypeGuard.isString(criteriaListEntry.kdsModule) &&
809+
TypeGuard.isString(criteriaListEntry.context)
755810
);
756811
}
757812
}

0 commit comments

Comments
 (0)