-
-
Notifications
You must be signed in to change notification settings - Fork 728
Migrate clinical-data endpoint to clean architecture with ClickHouse support
#11425
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate clinical-data endpoint to clean architecture with ClickHouse support
#11425
Conversation
4758f70 to
3ef5db7
Compare
|
62abff3 to
c9d7a32
Compare
df74892 to
392691d
Compare
2e4a73d to
abb7772
Compare
|
5027914 to
de9f107
Compare
956625b to
65409a8
Compare
c5fb8db to
f4f4630
Compare
|
e349697 to
ec29084
Compare
8b255eb to
2f7aa88
Compare
e615615 to
e903864
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good!! Great job @fuzhaoyuan
just had a few comments
...main/java/org/cbioportal/application/rest/vcolumnstore/ColumnarStoreStudyViewController.java
Show resolved
Hide resolved
src/main/java/org/cbioportal/legacy/service/util/ClinicalDataUtil.java
Outdated
Show resolved
Hide resolved
c788637 to
b407d4d
Compare
…e support (cBioPortal#11425) * Implement clinical-data in clean arch with ClickHouse support * Add integration tests * Fix ResultMap * Rectify naming * Address comments
Fix #11384
Migrate
clinical-datato Clean Architecture with ClickHouse SupportOverview
This PR refactors clinical data endpoints from legacy architecture to clean architecture with ClickHouse support, as part of the broader backend migration to ClickHouse and clean architecture patterns.
Architecture Changes
Domain Layer - Record-Based Models
Use Case Layer
Repository Layer - Projection-Based Queries
New repository methods supporting different data retrieval levels:
getClinicalDataId()- Basic identifiers onlygetClinicalDataSummary()- Identifiers + attribute valuesgetClinicalDataDetailed()- Complete data with clinical attribute metadatagetClinicalDataMeta()- Count operations onlyMyBatis Layer - Constructor Mapping
<result>+<association>patterns with<constructor>mapping for Recordsclinical_data→clinical_attributesREST Layer
@Profile("clickhouse")controller supporting multiple projection typesMapStruct Integration
uniqueKeyfieldsuses = ClinicalAttributeMapper.classFiles Changed
Core New Architecture
domain/clinical_data/ClinicalData.javadomain/clinical_attributes/ClinicalAttribute.javadomain/clinical_data/repository/ClinicalDataRepository.javadomain/clinical_data/usecase/GetClinicalDataUseCase.javadomain/clinical_data/usecase/GetClinicalDataMetaUseCase.javaapplication/rest/vcolumnstore/ColumnarStoreClinicalDataController.javaapplication/rest/response/ClinicalDataDTO.javaapplication/rest/response/ClinicalAttributeDTO.javaapplication/rest/mapper/ClinicalDataMapper.javaapplication/rest/mapper/ClinicalAttributeMapper.javaCompatibility Updates
domain/clinical_data/usecase/ClinicalDataUseCases.javadomain/clinical_data/usecase/GetPatientClinicalDataUseCase.javadomain/clinical_data/usecase/GetSampleClinicalDataUseCase.javadomain/clinical_data/usecase/GetClinicalDataForXyPlotUseCase.javadomain/clinical_data/ClinicalDataType.javaapplication/rest/vcolumnstore/ColumnarStoreStudyViewController.javaTesting
Added comprehensive integration tests in
ClickhouseClinicalDataMapperTest:Migration Notes
@Profile("clickhouse")