Skip to content

Commit

Permalink
Merge pull request #5304 from solgenomics/topic/germplasm_acquisition…
Browse files Browse the repository at this point in the history
…_date

BrAPI: set default germplasm acquisitionDate and use in filtering
  • Loading branch information
lukasmueller authored Feb 10, 2025
2 parents 597e8d8 + ee1e740 commit 5b768e4
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 23 deletions.
12 changes: 9 additions & 3 deletions lib/CXGN/BrAPI/v1/Germplasm.pm
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ sub search {
my $synonyms_arrayref = $params->{synonym} || ($params->{synonyms} || ());
my $subtaxa = $params->{germplasmSubTaxa}->[0];
my $match_method = $params->{matchMethod}->[0] || 'exact';
my $acquisitionDate = ref $params->{acquisitionDate} eq 'ARRAY' ? $params->{acquisitionDate}->[0] : $params->{acquisitionDate};
my $minAcquisitionDate = ref $params->{minAcquisitionDate} eq 'ARRAY' ? $params->{minAcquisitionDate}->[0] : $params->{minAcquisitionDate};
my $maxAcquisitionDate = ref $params->{maxAcquisitionDate} eq 'ARRAY' ? $params->{maxAcquisitionDate}->[0] : $params->{maxAcquisitionDate};

if ($match_method ne 'exact' && $match_method ne 'wildcard') {
push @$status, { 'error' => "matchMethod '$match_method' not recognized. Allowed matchMethods: wildcard, exact. Wildcard allows % or * for multiple characters and ? for single characters." };
Expand Down Expand Up @@ -89,7 +92,10 @@ sub search {
stockprop_columns_view=>{'accession number'=>1, 'PUI'=>1, 'seed source'=>1, 'institute code'=>1, 'institute name'=>1, 'biological status of accession code'=>1, 'country of origin'=>1, 'type of germplasm storage code'=>1, 'acquisition date'=>1, 'ncbi_taxonomy_id'=>1},
limit=>$limit,
offset=>$offset,
display_pedigree=>1
display_pedigree=>1,
acquisition_date=>$acquisitionDate,
min_acquisition_date=>$minAcquisitionDate,
max_acquisition_date=>$maxAcquisitionDate
});
my ($result, $total_count) = $stock_search->search();

Expand Down Expand Up @@ -126,7 +132,7 @@ sub search {
subtaxa=>$_->{subtaxa},
subtaxaAuthority=>$_->{subtaxaAuthority},
donors=>$_->{donors},
acquisitionDate=>$_->{'acquisition date'},
acquisitionDate=>$_->{'acquisition date'} eq '' ? $_->{'create_date'} : $_->{'acquisition date'},
breedingMethodDbId=>undef,
documentationURL=>undef,
germplasmGenus=>$_->{genus},
Expand Down Expand Up @@ -198,7 +204,7 @@ sub germplasm_detail {
subtaxa=>$result->[0]->{subtaxa},
subtaxaAuthority=>$result->[0]->{subtaxaAuthority},
donors=>$result->[0]->{donors},
acquisitionDate=>$result->[0]->{'acquisition date'},
acquisitionDate=>$result->[0]->{'acquisition date'} eq '' ? $result->[0]->{'create_date'} : $result->[0]->{'acquisition date'}
);
my $pagination = CXGN::BrAPI::Pagination->pagination_response($total_count,1,0);
return CXGN::BrAPI::JSONResponse->return_success(\%result, $pagination, \@data_files, $status, 'Germplasm detail result constructed');
Expand Down
14 changes: 10 additions & 4 deletions lib/CXGN/BrAPI/v2/Germplasm.pm
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ sub search {
my $progeny_db_id = $params->{progenyDbId} || ($params->{progenyDbIds} || ());
my $external_reference_id_arrayref = $params->{externalReferenceID} || ($params->{externalReferenceIDs} || ());
my $external_reference_source_arrayref = $params->{externalReferenceSource} || ($params->{externalReferenceSources} || ());
my $acquisitionDate = ref $params->{acquisitionDate} eq 'ARRAY' ? $params->{acquisitionDate}->[0] : $params->{acquisitionDate};
my $minAcquisitionDate = ref $params->{minAcquisitionDate} eq 'ARRAY' ? $params->{minAcquisitionDate}->[0] : $params->{minAcquisitionDate};
my $maxAcquisitionDate = ref $params->{maxAcquisitionDate} eq 'ARRAY' ? $params->{maxAcquisitionDate}->[0] : $params->{maxAcquisitionDate};

if ( $collection || $progeny_db_id || $parent_db_id ){
push @$status, { 'error' => 'The following search parameters are not implemented: collection, parentDbId, progenyDbId' };
Expand Down Expand Up @@ -148,7 +151,10 @@ sub search {
external_ref_source_list=>$external_reference_source_arrayref,
limit=>$limit,
offset=>$offset,
display_pedigree=>1
display_pedigree=>1,
acquisition_date=>$acquisitionDate,
min_acquisition_date=>$minAcquisitionDate,
max_acquisition_date=>$maxAcquisitionDate
});
my ($result, $total_count) = $stock_search->search();

Expand Down Expand Up @@ -228,7 +234,7 @@ sub search {
#Populating data
push @data, {
accessionNumber=>$_->{'accession number'},
acquisitionDate=>$_->{'acquisition date'} eq '' ? undef : $_->{'acquisition date'},
acquisitionDate=>$_->{'acquisition date'} eq '' ? $_->{'create_date'} : $_->{'acquisition date'},
additionalInfo=>$additional_info,
biologicalStatusOfAccessionCode=>$_->{'biological status of accession code'} || 0,
biologicalStatusOfAccessionDescription=>undef,
Expand Down Expand Up @@ -606,7 +612,7 @@ sub germplasm_mcpd {
subtaxon=>$_->{subtaxa},
subtaxonAuthority=>$_->{subtaxaAuthority},
donorInfo=>\@donors,
acquisitionDate=>$_->{'acquisition date'} eq '' ? undef : $_->{'acquisition date'}
acquisitionDate=>$_->{'acquisition date'} eq '' ? $_->{'create_date'} : $_->{'acquisition date'}
);
}
my $total_count = (%result) ? 1 : 0;
Expand Down Expand Up @@ -1202,7 +1208,7 @@ sub _simple_search {

push @data, {
accessionNumber=>$_->{'accession number'},
acquisitionDate=>$_->{'acquisition date'} eq '' ? undef : $_->{'acquisition date'},
acquisitionDate=>$_->{'acquisition date'} eq '' ? $_->{'create_date'} : $_->{'acquisition date'},
additionalInfo=> $additional_info,
biologicalStatusOfAccessionCode=>$_->{'biological status of accession code'} || 0,
biologicalStatusOfAccessionDescription=>undef,
Expand Down
85 changes: 76 additions & 9 deletions lib/CXGN/Stock/Search.pm
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,21 @@ has 'external_ref_source_list' => (
is => 'rw',
);

has 'acquisition_date' => (
isa => 'Str|Int|Undef',
is => 'rw'
);

has 'min_acquisition_date' => (
isa => 'Str|Int|Undef',
is => 'rw'
);

has 'max_acquisition_date' => (
isa => 'Str|Int|Undef',
is => 'rw'
);

sub search {
my $self = shift;
print STDERR "CXGN::Stock::Search search start\n";
Expand Down Expand Up @@ -281,6 +296,9 @@ sub search {
my @external_ref_source_array = $self->external_ref_source_list ? @{$self->external_ref_source_list} : ();
my $limit = $self->limit;
my $offset = $self->offset;
my $acquisition_date = $self->acquisition_date;
my $min_acquisition_date = $self->min_acquisition_date;
my $max_acquisition_date = $self->max_acquisition_date;

my $advanced_search = 0; #this is for joining nd_experiment and its related tables

Expand Down Expand Up @@ -490,11 +508,57 @@ sub search {
}
if ( !$and_conditions) { $and_conditions = [ { 'me.type_id' => { '!=' => undef } } ] };

my $acq_date_join = $acquisition_date || $min_acquisition_date || $max_acquisition_date ? 'stockprops' : '';
my $acq_date_conditions = $acquisition_date || $min_acquisition_date || $max_acquisition_date ? { "-and" => [] } : {};
if ( $acquisition_date ) {
my $f = {
"-or" => [
{
"to_char(me.create_date, 'YYYYMMDD')" => $acquisition_date
},
{
'stockprops_2.type_id' => SGN::Model::Cvterm->get_cvterm_row($schema, 'acquisition date', 'stock_property')->cvterm_id(),
'stockprops_2.value' => $acquisition_date
}
]
};
push(@{$acq_date_conditions->{'-and'}}, $f)
}
if ( $min_acquisition_date ) {
my $f = {
"-or" => [
{
"to_char(me.create_date, 'YYYYMMDD')" => { '>=', $min_acquisition_date }
},
{
'stockprops_2.type_id' => SGN::Model::Cvterm->get_cvterm_row($schema, 'acquisition date', 'stock_property')->cvterm_id(),
'stockprops_2.value' => { '>=', $min_acquisition_date }
}
]
};
push(@{$acq_date_conditions->{'-and'}}, $f)
}
if ( $max_acquisition_date ) {
my $f = {
"-or" => [
{
"to_char(me.create_date, 'YYYYMMDD')" => { '<=', $max_acquisition_date }
},
{
'stockprops_2.type_id' => SGN::Model::Cvterm->get_cvterm_row($schema, 'acquisition date', 'stock_property')->cvterm_id(),
'stockprops_2.value' => { '<=', $max_acquisition_date }
}
]
};
push(@{$acq_date_conditions->{'-and'}}, $f)
}

#$schema->storage->debug(1);
my $search_query = {
-and => [
$or_conditions,
$and_conditions,
$acq_date_conditions
],
};
if (!$self->include_obsolete) {
Expand Down Expand Up @@ -528,14 +592,15 @@ sub search {
print STDERR "**stock search q " . Dumper($search_query) ."\n";
print STDERR "***stock_join= " . Dumper($stock_join) ." \n\n";
my $rs = $schema->resultset("Stock::Stock")->search(
$search_query,
{
join => ['type', 'organism', 'stockprops', $stock_join],
'+select' => [ 'type.name' , 'organism.species' , 'organism.common_name', 'organism.genus'],
'+as' => [ 'cvterm_name' , 'species', 'common_name', 'genus'],
order_by => 'me.name',
distinct=>1
});
$search_query,
{
join => ['type', 'organism', 'stockprops', $stock_join, $acq_date_join],
'+select' => [ 'type.name' , 'organism.species' , 'organism.common_name', 'organism.genus'],
'+as' => [ 'cvterm_name' , 'species', 'common_name', 'genus'],
order_by => 'me.name',
distinct=>1
}
);

my $records_total = $rs->count();
print STDERR "total records: ".$records_total;
Expand Down Expand Up @@ -625,7 +690,7 @@ ORDER BY organism_id ASC;";
# Get additional stock properties (pedigree, synonyms, donor info)
my $stock_query = "SELECT stock.stock_id, stock.uniquename, stock.organism_id,
mother.uniquename AS female_parent, father.uniquename AS male_parent, m_rel.value AS cross_type,
props.stock_synonym, props.donor, props.\"donor institute\", props.\"donor PUI\", family.uniquename AS family_name
props.stock_synonym, props.donor, props.\"donor institute\", props.\"donor PUI\", family.uniquename AS family_name, to_char(stock.create_date, 'YYYYMMDD')
FROM stock
LEFT JOIN stock_relationship m_rel ON (stock.stock_id = m_rel.object_id AND m_rel.type_id = (SELECT cvterm_id FROM cvterm WHERE name = 'female_parent'))
LEFT JOIN stock mother ON (m_rel.subject_id = mother.stock_id)
Expand Down Expand Up @@ -653,6 +718,7 @@ ORDER BY organism_id ASC;";
my @donor_institutes = keys %{$donor_inst_json};
my @donor_puis = keys %{$donor_pui_json};
my $population_name = $r[10] || undef;
my $create_date = $r[11];

# add stock props to the result hash
$result_hash{$stock_id}{pedigree} = $self->display_pedigree ? $mother . '/' . $father : 'DISABLED';
Expand All @@ -676,6 +742,7 @@ ORDER BY organism_id ASC;";
$result_hash{$stock_id}{subtaxaAuthority} = defined($organism_props{$organism_id}) ? $organism_props{$organism_id}->{'subtaxa authority'} : undef;

$result_hash{$stock_id}{population_name} = $population_name;
$result_hash{$stock_id}{create_date} = $create_date;
}

if ($self->stockprop_columns_view && scalar(keys %{$self->stockprop_columns_view})>0 && scalar(@result_stock_ids)>0){
Expand Down
Loading

0 comments on commit 5b768e4

Please sign in to comment.