From b2b27d1f29fc0ea89e5c131b3cbe5a193d6b77c5 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 03:06:03 +0000 Subject: [PATCH 1/9] create agora-api-spring best on openchallenges-image-service --- apps/agora/api-spring/.env.example | 1 + apps/agora/api-spring/.gitignore | 39 +++ .../api-spring/.openapi-generator-ignore | 29 ++ apps/agora/api-spring/Dockerfile | 16 + apps/agora/api-spring/build.gradle | 130 ++++++++ .../api-spring/config/application-local.yml | 2 + apps/agora/api-spring/gradle.properties | 11 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + apps/agora/api-spring/gradlew | 249 +++++++++++++++ apps/agora/api-spring/openapitools.json | 27 ++ apps/agora/api-spring/project.json | 109 +++++++ apps/agora/api-spring/settings.gradle | 1 + apps/agora/api-spring/templates/pojo.mustache | 283 ++++++++++++++++++ 14 files changed, 904 insertions(+) create mode 100644 apps/agora/api-spring/.env.example create mode 100644 apps/agora/api-spring/.gitignore create mode 100644 apps/agora/api-spring/.openapi-generator-ignore create mode 100644 apps/agora/api-spring/Dockerfile create mode 100644 apps/agora/api-spring/build.gradle create mode 100644 apps/agora/api-spring/config/application-local.yml create mode 100644 apps/agora/api-spring/gradle.properties create mode 100644 apps/agora/api-spring/gradle/wrapper/gradle-wrapper.jar create mode 100644 apps/agora/api-spring/gradle/wrapper/gradle-wrapper.properties create mode 100755 apps/agora/api-spring/gradlew create mode 100644 apps/agora/api-spring/openapitools.json create mode 100644 apps/agora/api-spring/project.json create mode 100644 apps/agora/api-spring/settings.gradle create mode 100644 apps/agora/api-spring/templates/pojo.mustache diff --git a/apps/agora/api-spring/.env.example b/apps/agora/api-spring/.env.example new file mode 100644 index 0000000000..223f360499 --- /dev/null +++ b/apps/agora/api-spring/.env.example @@ -0,0 +1 @@ +SERVER_PORT=8086 \ No newline at end of file diff --git a/apps/agora/api-spring/.gitignore b/apps/agora/api-spring/.gitignore new file mode 100644 index 0000000000..ccdbbe82f3 --- /dev/null +++ b/apps/agora/api-spring/.gitignore @@ -0,0 +1,39 @@ +.gradle +bin/ +lib/*.jar +maven-legacy/ +tmp/ +log/ + +HELP.md +target/ +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/apps/agora/api-spring/.openapi-generator-ignore b/apps/agora/api-spring/.openapi-generator-ignore new file mode 100644 index 0000000000..9f70632934 --- /dev/null +++ b/apps/agora/api-spring/.openapi-generator-ignore @@ -0,0 +1,29 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +# ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +# foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +# foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +# docs/*.md +# Then explicitly reverse the ignore rule for a single file: +# !docs/README.md +pom.xml +README.md +**/application.properties +**/model/dto/*AllOf*.java +**/OpenApiGeneratorApplication.java +**/OpenApiGeneratorApplicationTests.java \ No newline at end of file diff --git a/apps/agora/api-spring/Dockerfile b/apps/agora/api-spring/Dockerfile new file mode 100644 index 0000000000..571e20a649 --- /dev/null +++ b/apps/agora/api-spring/Dockerfile @@ -0,0 +1,16 @@ +FROM ghcr.io/sage-bionetworks/agora-api-spring-base:local + +USER root + +RUN apt-get update -qq -y && export DEBIAN_FRONTEND=noninteractive \ + && apt-get install --no-install-recommends -qq -y \ + curl jq \ + && apt-get -y autoclean \ + && apt-get -y autoremove \ + && rm -rf /var/lib/apt/lists/* + +# Requires the environment variable SERVER_PORT at runtime +HEALTHCHECK --interval=2s --timeout=3s --retries=20 --start-period=5s \ + CMD curl --fail --silent "localhost:${SERVER_PORT}/actuator/health/readiness" | jq '.status' | grep UP || exit 1 + +USER cnb \ No newline at end of file diff --git a/apps/agora/api-spring/build.gradle b/apps/agora/api-spring/build.gradle new file mode 100644 index 0000000000..863ce9cc60 --- /dev/null +++ b/apps/agora/api-spring/build.gradle @@ -0,0 +1,130 @@ +buildscript { + repositories { + mavenCentral() + } +} + +plugins { + id 'io.spring.dependency-management' version "${springDependencyManagementVersion}" + id 'java' + id 'jvm-test-suite' + id 'org.springframework.boot' version "${springBootVersion}" + id 'jacoco' + id "org.sonarqube" version "${sonarqubeVersion}" +} + +repositories { + mavenCentral() + mavenLocal() +} + +testing { + suites { + test { + useJUnitJupiter() + } + + integrationTest(JvmTestSuite) { + sources { + java { + srcDirs = ['src/integrationTest/java'] + } + } + targets { + all { + testTask.configure { + shouldRunAfter(test) + } + } + } + } + } +} + +dependencies { + annotationProcessor "org.projectlombok:lombok:${lombokVersion}" + compileOnly "org.projectlombok:lombok:${lombokVersion}" + implementation 'com.google.code.findbugs:jsr305:3.0.2' + implementation 'org.openapitools:jackson-databind-nullable:0.2.6' + implementation 'org.springdoc:springdoc-openapi-ui:1.7.0' + implementation "com.fasterxml.jackson.core:jackson-databind:${fasterxmlVersion}" + implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${fasterxmlVersion}" + implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${fasterxmlVersion}" + // implementation "org.sagebionetworks:util:${openchallengesVersion}" + implementation "org.springframework.boot:spring-boot-devtools:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-validation:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}" + implementation "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:${springCloudVersion}" + implementation "org.springframework.data:spring-data-commons:${springDataVersion}" + testImplementation 'org.assertj:assertj-core:3.23.1' + testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}" + + // Enable distributed tracing + implementation "org.springframework.cloud:spring-cloud-starter-sleuth:${springCloudVersion}" + implementation "org.springframework.cloud:spring-cloud-sleuth-zipkin:${springCloudVersion}" + + implementation "org.springframework.cloud:spring-cloud-starter-config:${springCloudVersion}" + + implementation 'io.micrometer:micrometer-registry-prometheus:1.10.4' + implementation 'com.squareup:pollexor:3.0.0' +} + +group = 'org.sagebionetworks.agora' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + +bootBuildImage { + imageName = "ghcr.io/sage-bionetworks/${project.name}-base:local" +} + +test { + useJUnitPlatform() + + testLogging.showStandardStreams = true + + beforeTest { descriptor -> + logger.lifecycle("Running test: " + descriptor) + } + + failFast = true + + testLogging { + events("passed", "skipped", "failed") + } + + finalizedBy jacocoTestReport +} + +jacocoTestReport { + reports { + xml.required = true + } + + afterEvaluate { + // A single star (*) selects files AND subdirectories. + // Exclude Java classes from the JaCoCo report. These files must be excluded from SonarCloud + // report separatedly (see SonarCloud config) + def autoGeneratedFiles = [ + '**/api/*.*', + '**/configuration/EnumConverterConfiguration*.*', + '**/configuration/HomeController*.*', + '**/configuration/SpringDocConfiguration*.*', + '**/model/dto/**', + '**/RFC3339DateFormat.*' + ] + classDirectories.setFrom(files(classDirectories.files.collect { + fileTree(dir: it, exclude: autoGeneratedFiles + ) + })) + } +} diff --git a/apps/agora/api-spring/config/application-local.yml b/apps/agora/api-spring/config/application-local.yml new file mode 100644 index 0000000000..e4c9fd2a3b --- /dev/null +++ b/apps/agora/api-spring/config/application-local.yml @@ -0,0 +1,2 @@ +agora-api: + welcome-message: 'Welcome to the Agora API (local config).' diff --git a/apps/agora/api-spring/gradle.properties b/apps/agora/api-spring/gradle.properties new file mode 100644 index 0000000000..4967a7ccb6 --- /dev/null +++ b/apps/agora/api-spring/gradle.properties @@ -0,0 +1,11 @@ +# Updating fasterxml to v2.15.3 results in an error (see #2373) +fasterxmlVersion=2.13.4 +flywaydbVersion=9.4.0 +hibernateSearchVersion=6.1.7.Final +lombokVersion=1.18.30 +openchallengesVersion=0.0.1-SNAPSHOT +sonarqubeVersion=4.3.0.3225 +springBootVersion=2.7.8 +springCloudVersion=3.1.4 +springDataVersion=2.7.7 +springDependencyManagementVersion=1.0.14.RELEASE \ No newline at end of file diff --git a/apps/agora/api-spring/gradle/wrapper/gradle-wrapper.jar b/apps/agora/api-spring/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7f93135c49b765f8051ef9d0a6055ff8e46073d8 GIT binary patch literal 63721 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc literal 0 HcmV?d00001 diff --git a/apps/agora/api-spring/gradle/wrapper/gradle-wrapper.properties b/apps/agora/api-spring/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..3fa8f862f7 --- /dev/null +++ b/apps/agora/api-spring/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/apps/agora/api-spring/gradlew b/apps/agora/api-spring/gradlew new file mode 100755 index 0000000000..0adc8e1a53 --- /dev/null +++ b/apps/agora/api-spring/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/apps/agora/api-spring/openapitools.json b/apps/agora/api-spring/openapitools.json new file mode 100644 index 0000000000..5fe6bc1df9 --- /dev/null +++ b/apps/agora/api-spring/openapitools.json @@ -0,0 +1,27 @@ +{ + "$schema": "../../../node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.0.0", + "generators": { + "agora-api-spring": { + "generatorName": "spring", + "inputSpec": "#{cwd}/../../../libs/agora/api-description/build/openapi.yaml", + "output": "#{cwd}", + "templateDir": "templates", + "additionalProperties": { + "apiPackage": "org.sagebionetworks.agora.api.api", + "basePackage": "org.sagebionetworks.agora.api", + "configPackage": "org.sagebionetworks.agora.api.configuration", + "delegatePattern": true, + "hideGenerationTimestamp": true, + "library": "spring-boot", + "modelNameSuffix": "Dto", + "modelPackage": "org.sagebionetworks.agora.api.model.dto", + "useTags": true, + "openApiNullable": false + } + } + } + } +} diff --git a/apps/agora/api-spring/project.json b/apps/agora/api-spring/project.json new file mode 100644 index 0000000000..6160a97160 --- /dev/null +++ b/apps/agora/api-spring/project.json @@ -0,0 +1,109 @@ +{ + "name": "agora-api-spring", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/agora/api-spring/src", + "projectType": "application", + "targets": { + "create-config": { + "executor": "nx:run-commands", + "options": { + "command": "cp -n .env.example .env", + "cwd": "{projectRoot}" + } + }, + "prepare": { + "executor": "nx:run-commands", + "options": { + "commands": ["./gradlew --version 1> /dev/null"], + "cwd": "{projectRoot}" + } + }, + "build": { + "executor": "nx:run-commands", + "outputs": ["{projectRoot}/build"], + "options": { + "command": "./gradlew build", + "cwd": "{projectRoot}" + }, + "dependsOn": ["^install"] + }, + // "test": { + // "executor": "nx:run-commands", + // "outputs": ["{projectRoot}/build"], + // "options": { + // "command": "./gradlew test", + // "cwd": "{projectRoot}" + // }, + // "dependsOn": ["^install"] + // }, + "sonar": { + "executor": "nx:run-commands", + "options": { + "command": "./gradlew sonar", + "cwd": "{projectRoot}" + }, + "dependsOn": ["test"] + }, + "clean": { + "executor": "nx:run-commands", + "options": { + "command": "./gradlew clean", + "cwd": "{projectRoot}" + } + }, + "serve": { + "executor": "nx:run-commands", + "options": { + "commands": ["./gradlew build --continuous --exclude-task test", "./gradlew bootRun"], + "cwd": "{projectRoot}", + "parallel": true + }, + "dependsOn": ["^install"] + }, + "serve-detach": { + "executor": "nx:run-commands", + "options": { + "command": "docker/agora/serve-detach.sh agora-api-spring" + }, + "dependsOn": [] + }, + "build-image-base": { + "executor": "nx:run-commands", + "options": { + "command": "./gradlew bootBuildImage", + "cwd": "{projectRoot}" + }, + "dependsOn": ["^install"] + }, + "publish-image": { + "executor": "@nx-tools/nx-container:build", + "options": { + "context": "apps/agora/api-spring", + "metadata": { + "images": ["ghcr.io/sage-bionetworks/agora-api-spring"], + "tags": ["type=edge,branch=main", "type=sha"] + }, + "push": true + }, + "dependsOn": ["build-image"] + }, + "scan-image": { + "executor": "nx:run-commands", + "options": { + "command": "trivy image ghcr.io/sage-bionetworks/agora-api-spring:local --quiet", + "color": true + } + }, + "generate": { + "executor": "nx:run-commands", + "options": { + "commands": ["xargs rm -fr <.openapi-generator/FILES", "openapi-generator-cli generate"], + "cwd": "{projectRoot}", + "parallel": false + }, + "dependsOn": ["^build"] + } + }, + "tags": ["type:service", "scope:backend", "language:java", "package-manager:gradle"], + "implicitDependencies": ["agora-api-description", "shared-java-util"] +} diff --git a/apps/agora/api-spring/settings.gradle b/apps/agora/api-spring/settings.gradle new file mode 100644 index 0000000000..c0941e8e6c --- /dev/null +++ b/apps/agora/api-spring/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'agora-api-spring' diff --git a/apps/agora/api-spring/templates/pojo.mustache b/apps/agora/api-spring/templates/pojo.mustache new file mode 100644 index 0000000000..a5add1689c --- /dev/null +++ b/apps/agora/api-spring/templates/pojo.mustache @@ -0,0 +1,283 @@ +/** + * {{description}}{{^description}}{{classname}}{{/description}} + */ +{{>additionalModelTypeAnnotations}} +{{#description}} +{{#swagger1AnnotationLibrary}} +@ApiModel(description = "{{{description}}}") +{{/swagger1AnnotationLibrary}} +{{#swagger2AnnotationLibrary}} +@Schema({{#name}}name = "{{name}}", {{/name}}description = "{{{description}}}") +{{/swagger2AnnotationLibrary}} +{{/description}} +{{#discriminator}} +{{>typeInfoAnnotation}} +{{/discriminator}} +{{#jackson}} +{{#isClassnameSanitized}} +{{^hasDiscriminatorWithNonEmptyMapping}} +@JsonTypeName("{{name}}") +{{/hasDiscriminatorWithNonEmptyMapping}} +{{/isClassnameSanitized}} +{{/jackson}} +{{#withXml}} +{{>xmlAnnotation}} +{{/withXml}} +{{>generatedAnnotation}} +{{#vendorExtensions.x-class-extra-annotation}} +{{{vendorExtensions.x-class-extra-annotation}}} +{{/vendorExtensions.x-class-extra-annotation}} +{{#vendorExtensions.x-java-class-annotations}} +{{{.}}} +{{/vendorExtensions.x-java-class-annotations}} +{{^vendorExtensions.x-java-class-annotations}} +// TODO Add x-java-class-annotations +{{/vendorExtensions.x-java-class-annotations}} +public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{^parent}}{{#hateoas}} extends RepresentationModel<{{classname}}> {{/hateoas}}{{/parent}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { +{{#serializableModel}} + + private static final long serialVersionUID = 1L; +{{/serializableModel}} + {{#vars}} + + {{#isEnum}} + {{^isContainer}} +{{>enumClass}} + {{/isContainer}} + {{#isContainer}} + {{#mostInnerItems}} +{{>enumClass}} + {{/mostInnerItems}} + {{/isContainer}} + {{/isEnum}} + {{#jackson}} + {{#withXml}} + @JacksonXmlProperty({{#isXmlAttribute}}isAttribute = true, {{/isXmlAttribute}}{{#xmlNamespace}}namespace="{{.}}", {{/xmlNamespace}}localName = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") + {{/withXml}} + {{/jackson}} + {{#gson}} + @SerializedName("{{baseName}}") + {{/gson}} + {{#vendorExtensions.x-field-extra-annotation}} + {{{vendorExtensions.x-field-extra-annotation}}} + {{/vendorExtensions.x-field-extra-annotation}} + {{#isContainer}} + {{#useBeanValidation}}@Valid{{/useBeanValidation}} + {{#openApiNullable}} + private {{>nullableDataType}} {{name}}{{#isNullable}} = JsonNullable.undefined(){{/isNullable}}{{^isNullable}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{/isNullable}}; + {{/openApiNullable}} + {{^openApiNullable}} + private {{>nullableDataType}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; + {{/openApiNullable}} + {{/isContainer}} + {{^isContainer}} + {{#isDate}} + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) + {{/isDate}} + {{#isDateTime}} + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + {{/isDateTime}} + {{#openApiNullable}} + private {{>nullableDataType}} {{name}}{{#isNullable}} = JsonNullable.undefined(){{/isNullable}}{{^isNullable}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{/isNullable}}; + {{/openApiNullable}} + {{^openApiNullable}} + private {{>nullableDataType}} {{name}}{{#isNullable}} = null{{/isNullable}}{{^isNullable}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{/isNullable}}; + {{/openApiNullable}} + {{/isContainer}} + {{/vars}} + {{#generatedConstructorWithRequiredArgs}} + {{#hasRequired}} + + public {{classname}}() { + super(); + } + + /** + * Constructor with only required parameters + */ + public {{classname}}({{#requiredVars}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/requiredVars}}) { + {{#parent}} + super({{#parentRequiredVars}}{{name}}{{^-last}}, {{/-last}}{{/parentRequiredVars}}); + {{/parent}} + {{#vars}} + {{#required}} + {{#openApiNullable}} + this.{{name}} = {{#isNullable}}JsonNullable.of({{name}}){{/isNullable}}{{^isNullable}}{{name}}{{/isNullable}}; + {{/openApiNullable}} + {{^openApiNullable}} + this.{{name}} = {{name}}; + {{/openApiNullable}} + {{/required}} + {{/vars}} + } + {{/hasRequired}} + {{/generatedConstructorWithRequiredArgs}} + {{#vars}} + + {{! begin feature: fluent setter methods }} + public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { + {{#openApiNullable}} + this.{{name}} = {{#isNullable}}JsonNullable.of({{name}}){{/isNullable}}{{^isNullable}}{{name}}{{/isNullable}}; + {{/openApiNullable}} + {{^openApiNullable}} + this.{{name}} = {{name}}; + {{/openApiNullable}} + return this; + } + {{#isArray}} + + public {{classname}} add{{nameInCamelCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { + {{#openApiNullable}} + if (this.{{name}} == null{{#isNullable}} || !this.{{name}}.isPresent(){{/isNullable}}) { + this.{{name}} = {{#isNullable}}JsonNullable.of({{/isNullable}}{{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}{{#isNullable}}){{/isNullable}}; + } + this.{{name}}{{#isNullable}}.get(){{/isNullable}}.add({{name}}Item); + {{/openApiNullable}} + {{^openApiNullable}} + if (this.{{name}} == null) { + this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}; + } + this.{{name}}.add({{name}}Item); + {{/openApiNullable}} + return this; + } + {{/isArray}} + {{#isMap}} + + public {{classname}} put{{nameInCamelCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { + if (this.{{name}} == null) { + this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new HashMap<>(){{/defaultValue}}; + } + this.{{name}}.put(key, {{name}}Item); + return this; + } + {{/isMap}} + {{! end feature: fluent setter methods }} + {{! begin feature: getter and setter }} + + /** + {{#description}} + * {{{.}}} + {{/description}} + {{^description}} + * Get {{name}} + {{/description}} + {{#minimum}} + * minimum: {{.}} + {{/minimum}} + {{#maximum}} + * maximum: {{.}} + {{/maximum}} + * @return {{name}} + */ + {{#vendorExtensions.x-extra-annotation}} + {{{vendorExtensions.x-extra-annotation}}} + {{/vendorExtensions.x-extra-annotation}} + {{#useBeanValidation}} + {{>beanValidation}} + {{/useBeanValidation}} + {{^useBeanValidation}} + {{#required}}@NotNull{{/required}} + {{/useBeanValidation}} + {{#swagger2AnnotationLibrary}} + @Schema(name = "{{{baseName}}}"{{#isReadOnly}}, accessMode = Schema.AccessMode.READ_ONLY{{/isReadOnly}}{{#example}}, example = "{{{.}}}"{{/example}}{{#description}}, description = "{{{.}}}"{{/description}}, requiredMode = {{#required}}Schema.RequiredMode.REQUIRED{{/required}}{{^required}}Schema.RequiredMode.NOT_REQUIRED{{/required}}) + {{/swagger2AnnotationLibrary}} + {{#swagger1AnnotationLibrary}} + @ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}{{#isReadOnly}}readOnly = {{{isReadOnly}}}, {{/isReadOnly}}value = "{{{description}}}") + {{/swagger1AnnotationLibrary}} + {{#jackson}} + @JsonProperty("{{baseName}}") + {{/jackson}} + public {{>nullableDataType}} {{getter}}() { + return {{name}}; + } + + {{#vendorExtensions.x-setter-extra-annotation}} + {{{vendorExtensions.x-setter-extra-annotation}}} + {{/vendorExtensions.x-setter-extra-annotation}} + public void {{setter}}({{>nullableDataType}} {{name}}) { + this.{{name}} = {{name}}; + } + {{! end feature: getter and setter }} + {{/vars}} +{{>additionalProperties}} + {{#parentVars}} + + {{! begin feature: fluent setter methods for inherited properties }} + public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { + super.{{setter}}({{name}}); + return this; + } + {{#isArray}} + + public {{classname}} add{{nameInCamelCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { + super.add{{nameInCamelCase}}Item({{name}}Item); + return this; + } + {{/isArray}} + {{#isMap}} + + public {{classname}} put{{nameInCamelCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { + super.put{{nameInCamelCase}}Item(key, {{name}}Item); + return this; + } + {{/isMap}} + {{! end feature: fluent setter methods for inherited properties }} + {{/parentVars}} + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + }{{#hasVars}} + {{classname}} {{classVarName}} = ({{classname}}) o; + return {{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}equalsNullable(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}} && + {{/-last}}{{/vars}}{{#additionalPropertiesType}} && + Objects.equals(this.additionalProperties, {{classVarName}}.additionalProperties){{/additionalPropertiesType}}{{#parent}} && + super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} + }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} + + private static boolean equalsNullable(JsonNullable a, JsonNullable b) { + return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get())); + }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} + + @Override + public int hashCode() { + return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}{{#hasVars}}, {{/hasVars}}{{^hasVars}}{{#parent}}, {{/parent}}{{/hasVars}}additionalProperties{{/additionalPropertiesType}}); + }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} + + private static int hashCodeNullable(JsonNullable a) { + if (a == null) { + return 1; + } + return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31; + }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class {{classname}} {\n"); + {{#parent}} + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + {{/parent}} + {{#vars}}sb.append(" {{name}}: ").append(toIndentedString({{name}})).append("\n"); + {{/vars}}{{#additionalPropertiesType}} + sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n"); + {{/additionalPropertiesType}}sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} From c4491fd6c9d25d850b2b4aa9ce831df3f95c8eb4 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 03:18:38 +0000 Subject: [PATCH 2/9] remove unused dependencies and add app config --- .../agora/api-spring/.openapi-generator/FILES | 52 + .../api-spring/.openapi-generator/VERSION | 1 + apps/agora/api-spring/build.gradle | 10 +- apps/agora/api-spring/project.json | 16 +- .../agora/api/AgoraApiApplication.java | 17 + .../agora/api/RFC3339DateFormat.java | 38 + .../agora/api/api/ApiUtil.java | 19 + .../agora/api/api/BioDomainsApi.java | 115 + .../api/api/BioDomainsApiController.java | 46 + .../agora/api/api/BioDomainsApiDelegate.java | 77 + .../agora/api/api/DataversionApi.java | 80 + .../api/api/DataversionApiController.java | 45 + .../agora/api/api/DataversionApiDelegate.java | 57 + .../agora/api/api/DistributionApi.java | 80 + .../api/api/DistributionApiController.java | 45 + .../api/api/DistributionApiDelegate.java | 57 + .../agora/api/api/GenesApi.java | 246 ++ .../agora/api/api/GenesApiController.java | 47 + .../agora/api/api/GenesApiDelegate.java | 166 + .../agora/api/api/TeamsApi.java | 127 + .../agora/api/api/TeamsApiController.java | 45 + .../agora/api/api/TeamsApiDelegate.java | 72 + .../api/configuration/HomeController.java | 19 + .../configuration/SpringDocConfiguration.java | 35 + .../agora/api/model/dto/BasicErrorDto.java | 171 ++ .../agora/api/model/dto/BioDomainDto.java | 209 ++ .../agora/api/model/dto/BioDomainInfoDto.java | 97 + .../agora/api/model/dto/BioDomainsDto.java | 135 + .../agora/api/model/dto/DataversionDto.java | 147 + .../agora/api/model/dto/DistributionDto.java | 248 ++ .../agora/api/model/dto/DruggabilityDto.java | 247 ++ .../agora/api/model/dto/EnsemblInfoDto.java | 159 + .../model/dto/ExperimentalValidationDto.java | 472 +++ .../agora/api/model/dto/GCTGeneDto.java | 489 +++ .../api/model/dto/GCTGeneNominationsDto.java | 295 ++ .../agora/api/model/dto/GCTGeneTissueDto.java | 222 ++ .../agora/api/model/dto/GCTGenesListDto.java | 99 + .../agora/api/model/dto/GeneDto.java | 1245 ++++++++ .../api/model/dto/MedianExpressionDto.java | 241 ++ .../dto/NeuropathologicCorrelationDto.java | 298 ++ .../api/model/dto/NominatedGenesListDto.java | 99 + .../dto/OverallScoresDistributionDto.java | 219 ++ .../agora/api/model/dto/OverallScoresDto.java | 198 ++ .../dto/ProteinDifferentialExpressionDto.java | 348 +++ .../model/dto/ProteomicsDistributionDto.java | 97 + .../dto/RnaDifferentialExpressionDto.java | 348 +++ .../api/model/dto/RnaDistributionDto.java | 273 ++ .../api/model/dto/SimilarGenesNetworkDto.java | 182 ++ .../model/dto/SimilarGenesNetworkLinkDto.java | 194 ++ .../model/dto/SimilarGenesNetworkNodeDto.java | 146 + .../api/model/dto/TargetNominationDto.java | 373 +++ .../agora/api/model/dto/TeamDto.java | 210 ++ .../agora/api/model/dto/TeamMemberDto.java | 146 + .../agora/api/model/dto/TeamsListDto.java | 99 + .../src/main/resources/application.yml | 45 + .../src/main/resources/openapi.yaml | 2736 +++++++++++++++++ .../api/OpenApiGeneratorApplicationTests.java | 13 + 57 files changed, 11999 insertions(+), 13 deletions(-) create mode 100644 apps/agora/api-spring/.openapi-generator/FILES create mode 100644 apps/agora/api-spring/.openapi-generator/VERSION create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/AgoraApiApplication.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/RFC3339DateFormat.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/ApiUtil.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApi.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiController.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiDelegate.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApi.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiController.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegate.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApi.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiController.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiDelegate.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApi.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiController.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiDelegate.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApi.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiController.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiDelegate.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/HomeController.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/SpringDocConfiguration.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BasicErrorDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainInfoDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainsDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DistributionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DruggabilityDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/EnsemblInfoDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ExperimentalValidationDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneNominationsDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneTissueDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGenesListDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GeneDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/MedianExpressionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NeuropathologicCorrelationDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NominatedGenesListDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDistributionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteinDifferentialExpressionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteomicsDistributionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDifferentialExpressionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDistributionDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkLinkDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkNodeDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TargetNominationDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamMemberDto.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamsListDto.java create mode 100644 apps/agora/api-spring/src/main/resources/application.yml create mode 100644 apps/agora/api-spring/src/main/resources/openapi.yaml create mode 100644 apps/agora/api-spring/src/test/java/org/sagebionetworks/agora/api/OpenApiGeneratorApplicationTests.java diff --git a/apps/agora/api-spring/.openapi-generator/FILES b/apps/agora/api-spring/.openapi-generator/FILES new file mode 100644 index 0000000000..0052743d1e --- /dev/null +++ b/apps/agora/api-spring/.openapi-generator/FILES @@ -0,0 +1,52 @@ +src/main/java/org/sagebionetworks/agora/api/OpenApiGeneratorApplication.java +src/main/java/org/sagebionetworks/agora/api/RFC3339DateFormat.java +src/main/java/org/sagebionetworks/agora/api/api/ApiUtil.java +src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApi.java +src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiController.java +src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiDelegate.java +src/main/java/org/sagebionetworks/agora/api/api/DataversionApi.java +src/main/java/org/sagebionetworks/agora/api/api/DataversionApiController.java +src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegate.java +src/main/java/org/sagebionetworks/agora/api/api/DistributionApi.java +src/main/java/org/sagebionetworks/agora/api/api/DistributionApiController.java +src/main/java/org/sagebionetworks/agora/api/api/DistributionApiDelegate.java +src/main/java/org/sagebionetworks/agora/api/api/GenesApi.java +src/main/java/org/sagebionetworks/agora/api/api/GenesApiController.java +src/main/java/org/sagebionetworks/agora/api/api/GenesApiDelegate.java +src/main/java/org/sagebionetworks/agora/api/api/TeamsApi.java +src/main/java/org/sagebionetworks/agora/api/api/TeamsApiController.java +src/main/java/org/sagebionetworks/agora/api/api/TeamsApiDelegate.java +src/main/java/org/sagebionetworks/agora/api/configuration/HomeController.java +src/main/java/org/sagebionetworks/agora/api/configuration/SpringDocConfiguration.java +src/main/java/org/sagebionetworks/agora/api/model/dto/BasicErrorDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainInfoDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainsDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/DistributionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/DruggabilityDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/EnsemblInfoDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/ExperimentalValidationDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneNominationsDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneTissueDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGenesListDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/GeneDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/MedianExpressionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/NeuropathologicCorrelationDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/NominatedGenesListDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDistributionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/ProteinDifferentialExpressionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/ProteomicsDistributionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDifferentialExpressionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDistributionDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkLinkDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkNodeDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/TargetNominationDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/TeamDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/TeamMemberDto.java +src/main/java/org/sagebionetworks/agora/api/model/dto/TeamsListDto.java +src/main/resources/openapi.yaml +src/test/java/org/sagebionetworks/agora/api/OpenApiGeneratorApplicationTests.java diff --git a/apps/agora/api-spring/.openapi-generator/VERSION b/apps/agora/api-spring/.openapi-generator/VERSION new file mode 100644 index 0000000000..4122521804 --- /dev/null +++ b/apps/agora/api-spring/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.0.0 \ No newline at end of file diff --git a/apps/agora/api-spring/build.gradle b/apps/agora/api-spring/build.gradle index 863ce9cc60..94966be1b6 100644 --- a/apps/agora/api-spring/build.gradle +++ b/apps/agora/api-spring/build.gradle @@ -55,18 +55,18 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}" implementation "org.springframework.boot:spring-boot-starter-validation:${springBootVersion}" implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}" - implementation "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:${springCloudVersion}" + // implementation "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:${springCloudVersion}" implementation "org.springframework.data:spring-data-commons:${springDataVersion}" testImplementation 'org.assertj:assertj-core:3.23.1' testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}" // Enable distributed tracing - implementation "org.springframework.cloud:spring-cloud-starter-sleuth:${springCloudVersion}" - implementation "org.springframework.cloud:spring-cloud-sleuth-zipkin:${springCloudVersion}" + // implementation "org.springframework.cloud:spring-cloud-starter-sleuth:${springCloudVersion}" + // implementation "org.springframework.cloud:spring-cloud-sleuth-zipkin:${springCloudVersion}" - implementation "org.springframework.cloud:spring-cloud-starter-config:${springCloudVersion}" + // implementation "org.springframework.cloud:spring-cloud-starter-config:${springCloudVersion}" - implementation 'io.micrometer:micrometer-registry-prometheus:1.10.4' + // implementation 'io.micrometer:micrometer-registry-prometheus:1.10.4' implementation 'com.squareup:pollexor:3.0.0' } diff --git a/apps/agora/api-spring/project.json b/apps/agora/api-spring/project.json index 6160a97160..3ea3ced7b8 100644 --- a/apps/agora/api-spring/project.json +++ b/apps/agora/api-spring/project.json @@ -36,14 +36,14 @@ // }, // "dependsOn": ["^install"] // }, - "sonar": { - "executor": "nx:run-commands", - "options": { - "command": "./gradlew sonar", - "cwd": "{projectRoot}" - }, - "dependsOn": ["test"] - }, + // "sonar": { + // "executor": "nx:run-commands", + // "options": { + // "command": "./gradlew sonar", + // "cwd": "{projectRoot}" + // }, + // "dependsOn": ["test"] + // }, "clean": { "executor": "nx:run-commands", "options": { diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/AgoraApiApplication.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/AgoraApiApplication.java new file mode 100644 index 0000000000..c79d0c52d5 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/AgoraApiApplication.java @@ -0,0 +1,17 @@ +package org.sagebionetworks.agora.api; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.FilterType; +import org.springframework.context.annotation.FullyQualifiedAnnotationBeanNameGenerator; + +@SpringBootApplication +@ComponentScan(basePackages = { "org.sagebionetworks.agora" }) +public class AgoraApiApplication { + + public static void main(String[] args) { + SpringApplication.run(AgoraApiApplication.class, args); + } +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/RFC3339DateFormat.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/RFC3339DateFormat.java new file mode 100644 index 0000000000..b783d29ed2 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/RFC3339DateFormat.java @@ -0,0 +1,38 @@ +package org.sagebionetworks.agora.api; + +import com.fasterxml.jackson.databind.util.StdDateFormat; + +import java.text.DateFormat; +import java.text.FieldPosition; +import java.text.ParsePosition; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class RFC3339DateFormat extends DateFormat { + private static final long serialVersionUID = 1L; + private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); + + private final StdDateFormat fmt = new StdDateFormat() + .withTimeZone(TIMEZONE_Z) + .withColonInTimeZone(true); + + public RFC3339DateFormat() { + this.calendar = new GregorianCalendar(); + } + + @Override + public Date parse(String source, ParsePosition pos) { + return fmt.parse(source, pos); + } + + @Override + public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { + return fmt.format(date, toAppendTo, fieldPosition); + } + + @Override + public Object clone() { + return this; + } +} \ No newline at end of file diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/ApiUtil.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/ApiUtil.java new file mode 100644 index 0000000000..1657f397ef --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/ApiUtil.java @@ -0,0 +1,19 @@ +package org.sagebionetworks.agora.api.api; + +import org.springframework.web.context.request.NativeWebRequest; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class ApiUtil { + public static void setExampleResponse(NativeWebRequest req, String contentType, String example) { + try { + HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class); + res.setCharacterEncoding("UTF-8"); + res.addHeader("Content-Type", contentType); + res.getWriter().print(example); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApi.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApi.java new file mode 100644 index 0000000000..e6b330ee86 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApi.java @@ -0,0 +1,115 @@ +/** + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.0.0). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.BioDomainDto; +import org.sagebionetworks.agora.api.model.dto.BioDomainInfoDto; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import javax.validation.constraints.*; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Validated +@Tag(name = "BioDomains", description = "the BioDomains API") +public interface BioDomainsApi { + + default BioDomainsApiDelegate getDelegate() { + return new BioDomainsApiDelegate() {}; + } + + /** + * GET /biodomains/{ensg} : Retrieve bioDomain for a given ENSG + * Get bioDomain + * + * @param ensg The ENSG (Ensembl Gene ID) for which to retrieve biodomain data. (required) + * @return Successful retrieval of bio-domains (status code 200) + * or ENSG not found (status code 404) + * or Internal server error (status code 500) + */ + @Operation( + operationId = "getBioDomain", + summary = "Retrieve bioDomain for a given ENSG", + description = "Get bioDomain", + tags = { "BioDomains" }, + responses = { + @ApiResponse(responseCode = "200", description = "Successful retrieval of bio-domains", content = { + @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = BioDomainDto.class))) + }), + @ApiResponse(responseCode = "404", description = "ENSG not found"), + @ApiResponse(responseCode = "500", description = "Internal server error") + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/biodomains/{ensg}", + produces = { "application/json" } + ) + default ResponseEntity> getBioDomain( + @Parameter(name = "ensg", description = "The ENSG (Ensembl Gene ID) for which to retrieve biodomain data.", required = true, in = ParameterIn.PATH) @PathVariable("ensg") String ensg + ) { + return getDelegate().getBioDomain(ensg); + } + + + /** + * GET /biodomains : List BioDomains + * List BioDomains + * + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "listBioDomains", + summary = "List BioDomains", + description = "List BioDomains", + tags = { "BioDomains" }, + responses = { + @ApiResponse(responseCode = "200", description = "Success", content = { + @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = BioDomainInfoDto.class))), + @Content(mediaType = "application/problem+json", array = @ArraySchema(schema = @Schema(implementation = BioDomainInfoDto.class))) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/biodomains", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity> listBioDomains( + + ) { + return getDelegate().listBioDomains(); + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiController.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiController.java new file mode 100644 index 0000000000..18da5627ee --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiController.java @@ -0,0 +1,46 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.BioDomainDto; +import org.sagebionetworks.agora.api.model.dto.BioDomainInfoDto; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Controller +@RequestMapping("${openapi.agoraREST.base-path:/v1}") +public class BioDomainsApiController implements BioDomainsApi { + + private final BioDomainsApiDelegate delegate; + + public BioDomainsApiController(@Autowired(required = false) BioDomainsApiDelegate delegate) { + this.delegate = Optional.ofNullable(delegate).orElse(new BioDomainsApiDelegate() {}); + } + + @Override + public BioDomainsApiDelegate getDelegate() { + return delegate; + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiDelegate.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiDelegate.java new file mode 100644 index 0000000000..ae665e408e --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/BioDomainsApiDelegate.java @@ -0,0 +1,77 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.BioDomainDto; +import org.sagebionetworks.agora.api.model.dto.BioDomainInfoDto; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +/** + * A delegate to be called by the {@link BioDomainsApiController}}. + * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class. + */ +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +public interface BioDomainsApiDelegate { + + default Optional getRequest() { + return Optional.empty(); + } + + /** + * GET /biodomains/{ensg} : Retrieve bioDomain for a given ENSG + * Get bioDomain + * + * @param ensg The ENSG (Ensembl Gene ID) for which to retrieve biodomain data. (required) + * @return Successful retrieval of bio-domains (status code 200) + * or ENSG not found (status code 404) + * or Internal server error (status code 500) + * @see BioDomainsApi#getBioDomain + */ + default ResponseEntity> getBioDomain(String ensg) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "[ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ]"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + + /** + * GET /biodomains : List BioDomains + * List BioDomains + * + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see BioDomainsApi#listBioDomains + */ + default ResponseEntity> listBioDomains() { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "[ { \"name\" : \"name\" }, { \"name\" : \"name\" } ]"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApi.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApi.java new file mode 100644 index 0000000000..12a12a6278 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApi.java @@ -0,0 +1,80 @@ +/** + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.0.0). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.DataversionDto; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import javax.validation.constraints.*; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Validated +@Tag(name = "Dataversion", description = "Operations about dataversion.") +public interface DataversionApi { + + default DataversionApiDelegate getDelegate() { + return new DataversionApiDelegate() {}; + } + + /** + * GET /dataversion : Get dataversion + * Get dataversion + * + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "getDataversion", + summary = "Get dataversion", + description = "Get dataversion", + tags = { "Dataversion" }, + responses = { + @ApiResponse(responseCode = "200", description = "Success", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = DataversionDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = DataversionDto.class)) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/dataversion", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity getDataversion( + + ) { + return getDelegate().getDataversion(); + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiController.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiController.java new file mode 100644 index 0000000000..418c041b2b --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiController.java @@ -0,0 +1,45 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.DataversionDto; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Controller +@RequestMapping("${openapi.agoraREST.base-path:/v1}") +public class DataversionApiController implements DataversionApi { + + private final DataversionApiDelegate delegate; + + public DataversionApiController(@Autowired(required = false) DataversionApiDelegate delegate) { + this.delegate = Optional.ofNullable(delegate).orElse(new DataversionApiDelegate() {}); + } + + @Override + public DataversionApiDelegate getDelegate() { + return delegate; + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegate.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegate.java new file mode 100644 index 0000000000..ee519268df --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegate.java @@ -0,0 +1,57 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.DataversionDto; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +/** + * A delegate to be called by the {@link DataversionApiController}}. + * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class. + */ +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +public interface DataversionApiDelegate { + + default Optional getRequest() { + return Optional.empty(); + } + + /** + * GET /dataversion : Get dataversion + * Get dataversion + * + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see DataversionApi#getDataversion + */ + default ResponseEntity getDataversion() { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"data_file\" : \"data_file\", \"data_version\" : \"data_version\", \"team_images_id\" : \"team_images_id\" }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + if (mediaType.isCompatibleWith(MediaType.valueOf("application/problem+json"))) { + String exampleString = "Custom MIME type example not yet supported: application/problem+json"; + ApiUtil.setExampleResponse(request, "application/problem+json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApi.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApi.java new file mode 100644 index 0000000000..7925dece81 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApi.java @@ -0,0 +1,80 @@ +/** + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.0.0). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.DistributionDto; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import javax.validation.constraints.*; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Validated +@Tag(name = "Distribution", description = "the Distribution API") +public interface DistributionApi { + + default DistributionApiDelegate getDelegate() { + return new DistributionApiDelegate() {}; + } + + /** + * GET /distribution : Get distribution data + * Get distribution data + * + * @return A successful response (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "getDistribution", + summary = "Get distribution data", + description = "Get distribution data", + tags = { "Distribution" }, + responses = { + @ApiResponse(responseCode = "200", description = "A successful response", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = DistributionDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = DistributionDto.class)) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/distribution", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity getDistribution( + + ) { + return getDelegate().getDistribution(); + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiController.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiController.java new file mode 100644 index 0000000000..cb2f64baab --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiController.java @@ -0,0 +1,45 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.DistributionDto; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Controller +@RequestMapping("${openapi.agoraREST.base-path:/v1}") +public class DistributionApiController implements DistributionApi { + + private final DistributionApiDelegate delegate; + + public DistributionApiController(@Autowired(required = false) DistributionApiDelegate delegate) { + this.delegate = Optional.ofNullable(delegate).orElse(new DistributionApiDelegate() {}); + } + + @Override + public DistributionApiDelegate getDelegate() { + return delegate; + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiDelegate.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiDelegate.java new file mode 100644 index 0000000000..52b9fb2c22 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DistributionApiDelegate.java @@ -0,0 +1,57 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.DistributionDto; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +/** + * A delegate to be called by the {@link DistributionApiController}}. + * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class. + */ +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +public interface DistributionApiDelegate { + + default Optional getRequest() { + return Optional.empty(); + } + + /** + * GET /distribution : Get distribution data + * Get distribution data + * + * @return A successful response (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see DistributionApi#getDistribution + */ + default ResponseEntity getDistribution() { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"overall_scores\" : [ { \"bins\" : [ [ 7.061401241503109, 7.061401241503109 ], [ 7.061401241503109, 7.061401241503109 ] ], \"name\" : \"name\", \"syn_id\" : \"syn_id\", \"distribution\" : [ 2.3021358869347655, 2.3021358869347655 ], \"wiki_id\" : \"wiki_id\" }, { \"bins\" : [ [ 7.061401241503109, 7.061401241503109 ], [ 7.061401241503109, 7.061401241503109 ] ], \"name\" : \"name\", \"syn_id\" : \"syn_id\", \"distribution\" : [ 2.3021358869347655, 2.3021358869347655 ], \"wiki_id\" : \"wiki_id\" } ], \"proteomics_SRM\" : [ { \"type\" : \"type\" }, { \"type\" : \"type\" } ], \"proteomics_TMT\" : [ { \"type\" : \"type\" }, { \"type\" : \"type\" } ], \"proteomics_LFQ\" : [ { \"type\" : \"type\" }, { \"type\" : \"type\" } ], \"rna_differential_expression\" : [ { \"min\" : 0.8008281904610115, \"first_quartile\" : 1.4658129805029452, \"median\" : 5.962133916683182, \"max\" : 6.027456183070403, \"model\" : \"model\", \"tissue\" : \"tissue\", \"_id\" : \"_id\", \"third_quartile\" : 5.637376656633329 }, { \"min\" : 0.8008281904610115, \"first_quartile\" : 1.4658129805029452, \"median\" : 5.962133916683182, \"max\" : 6.027456183070403, \"model\" : \"model\", \"tissue\" : \"tissue\", \"_id\" : \"_id\", \"third_quartile\" : 5.637376656633329 } ] }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + if (mediaType.isCompatibleWith(MediaType.valueOf("application/problem+json"))) { + String exampleString = "Custom MIME type example not yet supported: application/problem+json"; + ApiUtil.setExampleResponse(request, "application/problem+json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApi.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApi.java new file mode 100644 index 0000000000..05baa7c03f --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApi.java @@ -0,0 +1,246 @@ +/** + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.0.0). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.GCTGenesListDto; +import org.sagebionetworks.agora.api.model.dto.GeneDto; +import org.sagebionetworks.agora.api.model.dto.NominatedGenesListDto; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import javax.validation.constraints.*; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Validated +@Tag(name = "Genes", description = "the Genes API") +public interface GenesApi { + + default GenesApiDelegate getDelegate() { + return new GenesApiDelegate() {}; + } + + /** + * GET /genes/comparison : Get comparison genes based on category and subcategory + * Get comparison genes based on category and subcategory + * + * @param category The category of the comparison (either RNA or Protein Differential Expression). (required) + * @param subCategory The subcategory for gene comparison (sub-category must be a string). (required) + * @return Successful response with comparison genes (status code 200) + * or The specified resource was not found (status code 404) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "getComparisonGenes", + summary = "Get comparison genes based on category and subcategory", + description = "Get comparison genes based on category and subcategory", + tags = { "Genes" }, + responses = { + @ApiResponse(responseCode = "200", description = "Successful response with comparison genes", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = GCTGenesListDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = GCTGenesListDto.class)) + }), + @ApiResponse(responseCode = "404", description = "The specified resource was not found", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/genes/comparison", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity getComparisonGenes( + @NotNull @Parameter(name = "category", description = "The category of the comparison (either RNA or Protein Differential Expression).", required = true, in = ParameterIn.QUERY) @Valid @RequestParam(value = "category", required = true) String category, + @NotNull @Parameter(name = "subCategory", description = "The subcategory for gene comparison (sub-category must be a string).", required = true, in = ParameterIn.QUERY) @Valid @RequestParam(value = "subCategory", required = true) String subCategory + ) { + return getDelegate().getComparisonGenes(category, subCategory); + } + + + /** + * GET /genes/{ensg} : Get gene details by Ensembl Gene ID + * + * @param ensg Ensembl Gene ID (ENSG) (required) + * @return Gene details successfully retrieved (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "getGene", + summary = "Get gene details by Ensembl Gene ID", + tags = { "Genes" }, + responses = { + @ApiResponse(responseCode = "200", description = "Gene details successfully retrieved", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = GeneDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = GeneDto.class)) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/genes/{ensg}", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity getGene( + @Parameter(name = "ensg", description = "Ensembl Gene ID (ENSG)", required = true, in = ParameterIn.PATH) @PathVariable("ensg") String ensg + ) { + return getDelegate().getGene(ensg); + } + + + /** + * GET /genes : Retrieve a list of genes or filter by Ensembl gene IDs + * This endpoint returns all genes or filters genes by Ensembl gene IDs if provided. + * + * @param ids (optional) + * @return A list of genes. (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "getGenes", + summary = "Retrieve a list of genes or filter by Ensembl gene IDs", + description = "This endpoint returns all genes or filters genes by Ensembl gene IDs if provided.", + tags = { "Genes" }, + responses = { + @ApiResponse(responseCode = "200", description = "A list of genes.", content = { + @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = GeneDto.class))), + @Content(mediaType = "application/problem+json", array = @ArraySchema(schema = @Schema(implementation = GeneDto.class))) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/genes", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity> getGenes( + @Parameter(name = "ids", description = "", in = ParameterIn.QUERY) @Valid @RequestParam(value = "ids", required = false) String ids + ) { + return getDelegate().getGenes(ids); + } + + + /** + * GET /genes/nominated : Get nominated genes + * Retrieves a list of genes with nominations and relevant information. + * + * @return A list of nominated genes. (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "getNominatedGenes", + summary = "Get nominated genes", + description = "Retrieves a list of genes with nominations and relevant information.", + tags = { "Genes" }, + responses = { + @ApiResponse(responseCode = "200", description = "A list of nominated genes.", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = NominatedGenesListDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = NominatedGenesListDto.class)) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/genes/nominated", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity getNominatedGenes( + + ) { + return getDelegate().getNominatedGenes(); + } + + + /** + * GET /genes/search : Search Genes + * Search Genes + * + * @param id (required) + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "searchGene", + summary = "Search Genes", + description = "Search Genes", + tags = { "Genes" }, + responses = { + @ApiResponse(responseCode = "200", description = "Success", content = { + @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = GeneDto.class))), + @Content(mediaType = "application/problem+json", array = @ArraySchema(schema = @Schema(implementation = GeneDto.class))) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/genes/search", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity> searchGene( + @NotNull @Parameter(name = "id", description = "", required = true, in = ParameterIn.QUERY) @Valid @RequestParam(value = "id", required = true) String id + ) { + return getDelegate().searchGene(id); + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiController.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiController.java new file mode 100644 index 0000000000..8d43e3db13 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiController.java @@ -0,0 +1,47 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.GCTGenesListDto; +import org.sagebionetworks.agora.api.model.dto.GeneDto; +import org.sagebionetworks.agora.api.model.dto.NominatedGenesListDto; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Controller +@RequestMapping("${openapi.agoraREST.base-path:/v1}") +public class GenesApiController implements GenesApi { + + private final GenesApiDelegate delegate; + + public GenesApiController(@Autowired(required = false) GenesApiDelegate delegate) { + this.delegate = Optional.ofNullable(delegate).orElse(new GenesApiDelegate() {}); + } + + @Override + public GenesApiDelegate getDelegate() { + return delegate; + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiDelegate.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiDelegate.java new file mode 100644 index 0000000000..ea4788a69f --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/GenesApiDelegate.java @@ -0,0 +1,166 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.GCTGenesListDto; +import org.sagebionetworks.agora.api.model.dto.GeneDto; +import org.sagebionetworks.agora.api.model.dto.NominatedGenesListDto; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +/** + * A delegate to be called by the {@link GenesApiController}}. + * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class. + */ +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +public interface GenesApiDelegate { + + default Optional getRequest() { + return Optional.empty(); + } + + /** + * GET /genes/comparison : Get comparison genes based on category and subcategory + * Get comparison genes based on category and subcategory + * + * @param category The category of the comparison (either RNA or Protein Differential Expression). (required) + * @param subCategory The subcategory for gene comparison (sub-category must be a string). (required) + * @return Successful response with comparison genes (status code 200) + * or The specified resource was not found (status code 404) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see GenesApi#getComparisonGenes + */ + default ResponseEntity getComparisonGenes(String category, + String subCategory) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"items\" : [ { \"associations\" : [ 7.061401241503109, 7.061401241503109 ], \"pinned\" : true, \"tissues\" : [ { \"adj_p_val\" : 6.0274563, \"logfc\" : 0.8008282, \"ci_r\" : 5.962134, \"name\" : \"name\", \"ci_l\" : 1.4658129, \"medianexpression\" : { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } }, { \"adj_p_val\" : 6.0274563, \"logfc\" : 0.8008282, \"ci_r\" : 5.962134, \"name\" : \"name\", \"ci_l\" : 1.4658129, \"medianexpression\" : { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } } ], \"search_string\" : \"search_string\", \"nominations\" : { \"teams\" : [ \"teams\", \"teams\" ], \"year\" : 2, \"inputs\" : [ \"inputs\", \"inputs\" ], \"count\" : 5, \"studies\" : [ \"studies\", \"studies\" ], \"programs\" : [ \"programs\", \"programs\" ], \"validations\" : [ \"validations\", \"validations\" ] }, \"multi_omics_score\" : 2.027123023002322, \"uid\" : \"uid\", \"target_risk_score\" : 9.301444243932576, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"search_array\" : [ \"search_array\", \"search_array\" ], \"hgnc_symbol\" : \"hgnc_symbol\", \"genetics_score\" : 3.616076749251911, \"uniprotid\" : \"uniprotid\", \"biodomains\" : [ \"biodomains\", \"biodomains\" ], \"target_enabling_resources\" : [ \"target_enabling_resources\", \"target_enabling_resources\" ] }, { \"associations\" : [ 7.061401241503109, 7.061401241503109 ], \"pinned\" : true, \"tissues\" : [ { \"adj_p_val\" : 6.0274563, \"logfc\" : 0.8008282, \"ci_r\" : 5.962134, \"name\" : \"name\", \"ci_l\" : 1.4658129, \"medianexpression\" : { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } }, { \"adj_p_val\" : 6.0274563, \"logfc\" : 0.8008282, \"ci_r\" : 5.962134, \"name\" : \"name\", \"ci_l\" : 1.4658129, \"medianexpression\" : { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } } ], \"search_string\" : \"search_string\", \"nominations\" : { \"teams\" : [ \"teams\", \"teams\" ], \"year\" : 2, \"inputs\" : [ \"inputs\", \"inputs\" ], \"count\" : 5, \"studies\" : [ \"studies\", \"studies\" ], \"programs\" : [ \"programs\", \"programs\" ], \"validations\" : [ \"validations\", \"validations\" ] }, \"multi_omics_score\" : 2.027123023002322, \"uid\" : \"uid\", \"target_risk_score\" : 9.301444243932576, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"search_array\" : [ \"search_array\", \"search_array\" ], \"hgnc_symbol\" : \"hgnc_symbol\", \"genetics_score\" : 3.616076749251911, \"uniprotid\" : \"uniprotid\", \"biodomains\" : [ \"biodomains\", \"biodomains\" ], \"target_enabling_resources\" : [ \"target_enabling_resources\", \"target_enabling_resources\" ] } ] }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + if (mediaType.isCompatibleWith(MediaType.valueOf("application/problem+json"))) { + String exampleString = "Custom MIME type example not yet supported: application/problem+json"; + ApiUtil.setExampleResponse(request, "application/problem+json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + + /** + * GET /genes/{ensg} : Get gene details by Ensembl Gene ID + * + * @param ensg Ensembl Gene ID (ENSG) (required) + * @return Gene details successfully retrieved (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see GenesApi#getGene + */ + default ResponseEntity getGene(String ensg) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"is_any_rna_changed_in_ad_brain\" : true, \"proteomics_SRM\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"target_nominations\" : [ { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" }, { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" } ], \"study_display_value\" : \"study_display_value\", \"protein_brain_change_studied\" : true, \"is_eqtl\" : true, \"median_expression\" : [ { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 }, { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } ], \"experimental_validation\" : [ { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" }, { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" } ], \"overall_scores\" : { \"multi_omics_score\" : 9.965781217890562, \"literature_score\" : 9.369310271410669, \"target_risk_score\" : 4.965218492984954, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"genetics_score\" : 5.025004791520295 }, \"is_igap\" : true, \"metabolomics\" : { \"key\" : \"\" }, \"is_any_rna_changed_in_ad_brain_display_value\" : \"is_any_rna_changed_in_ad_brain_display_value\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"sm_druggability_display_value\" : \"sm_druggability_display_value\", \"bio_domains\" : { \"gene_biodomains\" : [ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ], \"ensembl_gene_id\" : \"ensembl_gene_id\" }, \"total_nominations\" : 9, \"proteomics_LFQ\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"alias\" : [ \"alias\", \"alias\" ], \"links\" : { \"key\" : \"{}\" }, \"initial_nomination_display_value\" : 2, \"neuropathologic_correlations\" : [ { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 }, { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 } ], \"summary\" : \"summary\", \"resource_url\" : \"resource_url\", \"druggability\" : [ { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" }, { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" } ], \"ensembl_info\" : { \"ensembl_possible_replacements\" : [ \"ensembl_possible_replacements\", \"ensembl_possible_replacements\" ], \"ensembl_release\" : 6, \"ensembl_permalink\" : \"ensembl_permalink\" }, \"is_tep\" : true, \"teams_display_value\" : \"teams_display_value\", \"ab_modality_display_value\" : \"ab_modality_display_value\", \"safety_rating_display_value\" : \"safety_rating_display_value\", \"is_any_protein_changed_in_ad_brain_display_value\" : \"is_any_protein_changed_in_ad_brain_display_value\", \"input_data_display_value\" : \"input_data_display_value\", \"rna_brain_change_studied\" : true, \"pharos_class_display_value\" : \"pharos_class_display_value\", \"proteomics_TMT\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"name\" : \"name\", \"hgnc_symbol\" : \"hgnc_symbol\", \"_id\" : \"_id\", \"rna_differential_expression\" : [ { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 }, { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 } ], \"nominated_target_display_value\" : true, \"similar_genes_network\" : { \"nodes\" : [ { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] }, { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] } ], \"min\" : 6.965117697638846, \"max\" : 1.284659006116532, \"links\" : [ { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" }, { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" } ] }, \"is_any_protein_changed_in_ad_brain\" : true, \"is_adi\" : true, \"programs_display_value\" : \"programs_display_value\" }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + if (mediaType.isCompatibleWith(MediaType.valueOf("application/problem+json"))) { + String exampleString = "Custom MIME type example not yet supported: application/problem+json"; + ApiUtil.setExampleResponse(request, "application/problem+json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + + /** + * GET /genes : Retrieve a list of genes or filter by Ensembl gene IDs + * This endpoint returns all genes or filters genes by Ensembl gene IDs if provided. + * + * @param ids (optional) + * @return A list of genes. (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see GenesApi#getGenes + */ + default ResponseEntity> getGenes(String ids) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "[ { \"is_any_rna_changed_in_ad_brain\" : true, \"proteomics_SRM\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"target_nominations\" : [ { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" }, { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" } ], \"study_display_value\" : \"study_display_value\", \"protein_brain_change_studied\" : true, \"is_eqtl\" : true, \"median_expression\" : [ { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 }, { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } ], \"experimental_validation\" : [ { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" }, { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" } ], \"overall_scores\" : { \"multi_omics_score\" : 9.965781217890562, \"literature_score\" : 9.369310271410669, \"target_risk_score\" : 4.965218492984954, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"genetics_score\" : 5.025004791520295 }, \"is_igap\" : true, \"metabolomics\" : { \"key\" : \"\" }, \"is_any_rna_changed_in_ad_brain_display_value\" : \"is_any_rna_changed_in_ad_brain_display_value\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"sm_druggability_display_value\" : \"sm_druggability_display_value\", \"bio_domains\" : { \"gene_biodomains\" : [ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ], \"ensembl_gene_id\" : \"ensembl_gene_id\" }, \"total_nominations\" : 9, \"proteomics_LFQ\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"alias\" : [ \"alias\", \"alias\" ], \"links\" : { \"key\" : \"{}\" }, \"initial_nomination_display_value\" : 2, \"neuropathologic_correlations\" : [ { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 }, { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 } ], \"summary\" : \"summary\", \"resource_url\" : \"resource_url\", \"druggability\" : [ { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" }, { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" } ], \"ensembl_info\" : { \"ensembl_possible_replacements\" : [ \"ensembl_possible_replacements\", \"ensembl_possible_replacements\" ], \"ensembl_release\" : 6, \"ensembl_permalink\" : \"ensembl_permalink\" }, \"is_tep\" : true, \"teams_display_value\" : \"teams_display_value\", \"ab_modality_display_value\" : \"ab_modality_display_value\", \"safety_rating_display_value\" : \"safety_rating_display_value\", \"is_any_protein_changed_in_ad_brain_display_value\" : \"is_any_protein_changed_in_ad_brain_display_value\", \"input_data_display_value\" : \"input_data_display_value\", \"rna_brain_change_studied\" : true, \"pharos_class_display_value\" : \"pharos_class_display_value\", \"proteomics_TMT\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"name\" : \"name\", \"hgnc_symbol\" : \"hgnc_symbol\", \"_id\" : \"_id\", \"rna_differential_expression\" : [ { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 }, { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 } ], \"nominated_target_display_value\" : true, \"similar_genes_network\" : { \"nodes\" : [ { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] }, { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] } ], \"min\" : 6.965117697638846, \"max\" : 1.284659006116532, \"links\" : [ { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" }, { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" } ] }, \"is_any_protein_changed_in_ad_brain\" : true, \"is_adi\" : true, \"programs_display_value\" : \"programs_display_value\" }, { \"is_any_rna_changed_in_ad_brain\" : true, \"proteomics_SRM\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"target_nominations\" : [ { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" }, { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" } ], \"study_display_value\" : \"study_display_value\", \"protein_brain_change_studied\" : true, \"is_eqtl\" : true, \"median_expression\" : [ { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 }, { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } ], \"experimental_validation\" : [ { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" }, { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" } ], \"overall_scores\" : { \"multi_omics_score\" : 9.965781217890562, \"literature_score\" : 9.369310271410669, \"target_risk_score\" : 4.965218492984954, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"genetics_score\" : 5.025004791520295 }, \"is_igap\" : true, \"metabolomics\" : { \"key\" : \"\" }, \"is_any_rna_changed_in_ad_brain_display_value\" : \"is_any_rna_changed_in_ad_brain_display_value\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"sm_druggability_display_value\" : \"sm_druggability_display_value\", \"bio_domains\" : { \"gene_biodomains\" : [ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ], \"ensembl_gene_id\" : \"ensembl_gene_id\" }, \"total_nominations\" : 9, \"proteomics_LFQ\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"alias\" : [ \"alias\", \"alias\" ], \"links\" : { \"key\" : \"{}\" }, \"initial_nomination_display_value\" : 2, \"neuropathologic_correlations\" : [ { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 }, { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 } ], \"summary\" : \"summary\", \"resource_url\" : \"resource_url\", \"druggability\" : [ { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" }, { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" } ], \"ensembl_info\" : { \"ensembl_possible_replacements\" : [ \"ensembl_possible_replacements\", \"ensembl_possible_replacements\" ], \"ensembl_release\" : 6, \"ensembl_permalink\" : \"ensembl_permalink\" }, \"is_tep\" : true, \"teams_display_value\" : \"teams_display_value\", \"ab_modality_display_value\" : \"ab_modality_display_value\", \"safety_rating_display_value\" : \"safety_rating_display_value\", \"is_any_protein_changed_in_ad_brain_display_value\" : \"is_any_protein_changed_in_ad_brain_display_value\", \"input_data_display_value\" : \"input_data_display_value\", \"rna_brain_change_studied\" : true, \"pharos_class_display_value\" : \"pharos_class_display_value\", \"proteomics_TMT\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"name\" : \"name\", \"hgnc_symbol\" : \"hgnc_symbol\", \"_id\" : \"_id\", \"rna_differential_expression\" : [ { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 }, { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 } ], \"nominated_target_display_value\" : true, \"similar_genes_network\" : { \"nodes\" : [ { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] }, { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] } ], \"min\" : 6.965117697638846, \"max\" : 1.284659006116532, \"links\" : [ { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" }, { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" } ] }, \"is_any_protein_changed_in_ad_brain\" : true, \"is_adi\" : true, \"programs_display_value\" : \"programs_display_value\" } ]"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + + /** + * GET /genes/nominated : Get nominated genes + * Retrieves a list of genes with nominations and relevant information. + * + * @return A list of nominated genes. (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see GenesApi#getNominatedGenes + */ + default ResponseEntity getNominatedGenes() { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"items\" : [ { \"is_any_rna_changed_in_ad_brain\" : true, \"proteomics_SRM\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"target_nominations\" : [ { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" }, { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" } ], \"study_display_value\" : \"study_display_value\", \"protein_brain_change_studied\" : true, \"is_eqtl\" : true, \"median_expression\" : [ { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 }, { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } ], \"experimental_validation\" : [ { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" }, { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" } ], \"overall_scores\" : { \"multi_omics_score\" : 9.965781217890562, \"literature_score\" : 9.369310271410669, \"target_risk_score\" : 4.965218492984954, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"genetics_score\" : 5.025004791520295 }, \"is_igap\" : true, \"metabolomics\" : { \"key\" : \"\" }, \"is_any_rna_changed_in_ad_brain_display_value\" : \"is_any_rna_changed_in_ad_brain_display_value\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"sm_druggability_display_value\" : \"sm_druggability_display_value\", \"bio_domains\" : { \"gene_biodomains\" : [ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ], \"ensembl_gene_id\" : \"ensembl_gene_id\" }, \"total_nominations\" : 9, \"proteomics_LFQ\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"alias\" : [ \"alias\", \"alias\" ], \"links\" : { \"key\" : \"{}\" }, \"initial_nomination_display_value\" : 2, \"neuropathologic_correlations\" : [ { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 }, { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 } ], \"summary\" : \"summary\", \"resource_url\" : \"resource_url\", \"druggability\" : [ { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" }, { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" } ], \"ensembl_info\" : { \"ensembl_possible_replacements\" : [ \"ensembl_possible_replacements\", \"ensembl_possible_replacements\" ], \"ensembl_release\" : 6, \"ensembl_permalink\" : \"ensembl_permalink\" }, \"is_tep\" : true, \"teams_display_value\" : \"teams_display_value\", \"ab_modality_display_value\" : \"ab_modality_display_value\", \"safety_rating_display_value\" : \"safety_rating_display_value\", \"is_any_protein_changed_in_ad_brain_display_value\" : \"is_any_protein_changed_in_ad_brain_display_value\", \"input_data_display_value\" : \"input_data_display_value\", \"rna_brain_change_studied\" : true, \"pharos_class_display_value\" : \"pharos_class_display_value\", \"proteomics_TMT\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"name\" : \"name\", \"hgnc_symbol\" : \"hgnc_symbol\", \"_id\" : \"_id\", \"rna_differential_expression\" : [ { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 }, { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 } ], \"nominated_target_display_value\" : true, \"similar_genes_network\" : { \"nodes\" : [ { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] }, { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] } ], \"min\" : 6.965117697638846, \"max\" : 1.284659006116532, \"links\" : [ { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" }, { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" } ] }, \"is_any_protein_changed_in_ad_brain\" : true, \"is_adi\" : true, \"programs_display_value\" : \"programs_display_value\" }, { \"is_any_rna_changed_in_ad_brain\" : true, \"proteomics_SRM\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"target_nominations\" : [ { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" }, { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" } ], \"study_display_value\" : \"study_display_value\", \"protein_brain_change_studied\" : true, \"is_eqtl\" : true, \"median_expression\" : [ { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 }, { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } ], \"experimental_validation\" : [ { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" }, { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" } ], \"overall_scores\" : { \"multi_omics_score\" : 9.965781217890562, \"literature_score\" : 9.369310271410669, \"target_risk_score\" : 4.965218492984954, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"genetics_score\" : 5.025004791520295 }, \"is_igap\" : true, \"metabolomics\" : { \"key\" : \"\" }, \"is_any_rna_changed_in_ad_brain_display_value\" : \"is_any_rna_changed_in_ad_brain_display_value\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"sm_druggability_display_value\" : \"sm_druggability_display_value\", \"bio_domains\" : { \"gene_biodomains\" : [ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ], \"ensembl_gene_id\" : \"ensembl_gene_id\" }, \"total_nominations\" : 9, \"proteomics_LFQ\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"alias\" : [ \"alias\", \"alias\" ], \"links\" : { \"key\" : \"{}\" }, \"initial_nomination_display_value\" : 2, \"neuropathologic_correlations\" : [ { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 }, { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 } ], \"summary\" : \"summary\", \"resource_url\" : \"resource_url\", \"druggability\" : [ { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" }, { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" } ], \"ensembl_info\" : { \"ensembl_possible_replacements\" : [ \"ensembl_possible_replacements\", \"ensembl_possible_replacements\" ], \"ensembl_release\" : 6, \"ensembl_permalink\" : \"ensembl_permalink\" }, \"is_tep\" : true, \"teams_display_value\" : \"teams_display_value\", \"ab_modality_display_value\" : \"ab_modality_display_value\", \"safety_rating_display_value\" : \"safety_rating_display_value\", \"is_any_protein_changed_in_ad_brain_display_value\" : \"is_any_protein_changed_in_ad_brain_display_value\", \"input_data_display_value\" : \"input_data_display_value\", \"rna_brain_change_studied\" : true, \"pharos_class_display_value\" : \"pharos_class_display_value\", \"proteomics_TMT\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"name\" : \"name\", \"hgnc_symbol\" : \"hgnc_symbol\", \"_id\" : \"_id\", \"rna_differential_expression\" : [ { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 }, { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 } ], \"nominated_target_display_value\" : true, \"similar_genes_network\" : { \"nodes\" : [ { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] }, { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] } ], \"min\" : 6.965117697638846, \"max\" : 1.284659006116532, \"links\" : [ { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" }, { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" } ] }, \"is_any_protein_changed_in_ad_brain\" : true, \"is_adi\" : true, \"programs_display_value\" : \"programs_display_value\" } ] }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + if (mediaType.isCompatibleWith(MediaType.valueOf("application/problem+json"))) { + String exampleString = "Custom MIME type example not yet supported: application/problem+json"; + ApiUtil.setExampleResponse(request, "application/problem+json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + + /** + * GET /genes/search : Search Genes + * Search Genes + * + * @param id (required) + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see GenesApi#searchGene + */ + default ResponseEntity> searchGene(String id) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "[ { \"is_any_rna_changed_in_ad_brain\" : true, \"proteomics_SRM\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"target_nominations\" : [ { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" }, { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" } ], \"study_display_value\" : \"study_display_value\", \"protein_brain_change_studied\" : true, \"is_eqtl\" : true, \"median_expression\" : [ { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 }, { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } ], \"experimental_validation\" : [ { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" }, { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" } ], \"overall_scores\" : { \"multi_omics_score\" : 9.965781217890562, \"literature_score\" : 9.369310271410669, \"target_risk_score\" : 4.965218492984954, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"genetics_score\" : 5.025004791520295 }, \"is_igap\" : true, \"metabolomics\" : { \"key\" : \"\" }, \"is_any_rna_changed_in_ad_brain_display_value\" : \"is_any_rna_changed_in_ad_brain_display_value\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"sm_druggability_display_value\" : \"sm_druggability_display_value\", \"bio_domains\" : { \"gene_biodomains\" : [ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ], \"ensembl_gene_id\" : \"ensembl_gene_id\" }, \"total_nominations\" : 9, \"proteomics_LFQ\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"alias\" : [ \"alias\", \"alias\" ], \"links\" : { \"key\" : \"{}\" }, \"initial_nomination_display_value\" : 2, \"neuropathologic_correlations\" : [ { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 }, { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 } ], \"summary\" : \"summary\", \"resource_url\" : \"resource_url\", \"druggability\" : [ { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" }, { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" } ], \"ensembl_info\" : { \"ensembl_possible_replacements\" : [ \"ensembl_possible_replacements\", \"ensembl_possible_replacements\" ], \"ensembl_release\" : 6, \"ensembl_permalink\" : \"ensembl_permalink\" }, \"is_tep\" : true, \"teams_display_value\" : \"teams_display_value\", \"ab_modality_display_value\" : \"ab_modality_display_value\", \"safety_rating_display_value\" : \"safety_rating_display_value\", \"is_any_protein_changed_in_ad_brain_display_value\" : \"is_any_protein_changed_in_ad_brain_display_value\", \"input_data_display_value\" : \"input_data_display_value\", \"rna_brain_change_studied\" : true, \"pharos_class_display_value\" : \"pharos_class_display_value\", \"proteomics_TMT\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"name\" : \"name\", \"hgnc_symbol\" : \"hgnc_symbol\", \"_id\" : \"_id\", \"rna_differential_expression\" : [ { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 }, { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 } ], \"nominated_target_display_value\" : true, \"similar_genes_network\" : { \"nodes\" : [ { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] }, { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] } ], \"min\" : 6.965117697638846, \"max\" : 1.284659006116532, \"links\" : [ { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" }, { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" } ] }, \"is_any_protein_changed_in_ad_brain\" : true, \"is_adi\" : true, \"programs_display_value\" : \"programs_display_value\" }, { \"is_any_rna_changed_in_ad_brain\" : true, \"proteomics_SRM\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"target_nominations\" : [ { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" }, { \"data_synapseid\" : \"data_synapseid\", \"input_data\" : \"input_data\", \"study\" : \"study\", \"initial_nomination\" : 0.8008281904610115, \"data_used_to_support_target_selection\" : \"data_used_to_support_target_selection\", \"validation_study_details\" : \"validation_study_details\", \"rank\" : \"rank\", \"hgnc_symbol\" : \"hgnc_symbol\", \"source\" : \"source\", \"team\" : \"team\", \"predicted_therapeutic_direction\" : \"predicted_therapeutic_direction\", \"target_choice_justification\" : \"target_choice_justification\" } ], \"study_display_value\" : \"study_display_value\", \"protein_brain_change_studied\" : true, \"is_eqtl\" : true, \"median_expression\" : [ { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 }, { \"min\" : 6.0274563, \"first_quartile\" : 1.4658129, \"median\" : 5.962134, \"max\" : 7.0614014, \"mean\" : 5.637377, \"tissue\" : \"tissue\", \"third_quartile\" : 2.302136 } ], \"experimental_validation\" : [ { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" }, { \"hypothesis_tested\" : \"hypothesis_tested\", \"published\" : \"published\", \"team\" : \"team\", \"outcome_measure\" : \"outcome_measure\", \"model_system\" : \"model_system\", \"balanced_for_sex\" : \"balanced_for_sex\", \"reference\" : \"reference\", \"summary_findings\" : \"summary_findings\", \"species\" : \"species\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"date_report\" : \"date_report\", \"_id\" : \"_id\", \"contributors\" : \"contributors\", \"reference_doi\" : \"reference_doi\", \"outcome_measure_details\" : \"outcome_measure_details\" } ], \"overall_scores\" : { \"multi_omics_score\" : 9.965781217890562, \"literature_score\" : 9.369310271410669, \"target_risk_score\" : 4.965218492984954, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"genetics_score\" : 5.025004791520295 }, \"is_igap\" : true, \"metabolomics\" : { \"key\" : \"\" }, \"is_any_rna_changed_in_ad_brain_display_value\" : \"is_any_rna_changed_in_ad_brain_display_value\", \"ensembl_gene_id\" : \"ensembl_gene_id\", \"sm_druggability_display_value\" : \"sm_druggability_display_value\", \"bio_domains\" : { \"gene_biodomains\" : [ { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 }, { \"pct_linking_terms\" : 1.4658129, \"n_gene_biodomain_terms\" : 6, \"biodomain\" : \"biodomain\", \"go_terms\" : [ \"go_terms\", \"go_terms\" ], \"n_biodomain_terms\" : 0 } ], \"ensembl_gene_id\" : \"ensembl_gene_id\" }, \"total_nominations\" : 9, \"proteomics_LFQ\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"alias\" : [ \"alias\", \"alias\" ], \"links\" : { \"key\" : \"{}\" }, \"initial_nomination_display_value\" : 2, \"neuropathologic_correlations\" : [ { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 }, { \"ensg\" : \"ensg\", \"neuropath_type\" : \"neuropath_type\", \"oddsratio\" : 6.683562403749608, \"pval\" : 6.438423552598547, \"_id\" : \"_id\", \"gname\" : \"gname\", \"ci_lower\" : 8.762042012749001, \"ci_upper\" : 9.018348186070783, \"pval_adj\" : 3.5571952270680973 } ], \"summary\" : \"summary\", \"resource_url\" : \"resource_url\", \"druggability\" : [ { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" }, { \"sm_druggability_bucket\" : 1, \"abability_bucket_definition\" : \"Moderate bioavailability\", \"safety_bucket\" : 2, \"abability_bucket\" : 3, \"pharos_class\" : \"Tclin\", \"classification\" : \"Enzyme\", \"safety_bucket_definition\" : \"Low risk\" } ], \"ensembl_info\" : { \"ensembl_possible_replacements\" : [ \"ensembl_possible_replacements\", \"ensembl_possible_replacements\" ], \"ensembl_release\" : 6, \"ensembl_permalink\" : \"ensembl_permalink\" }, \"is_tep\" : true, \"teams_display_value\" : \"teams_display_value\", \"ab_modality_display_value\" : \"ab_modality_display_value\", \"safety_rating_display_value\" : \"safety_rating_display_value\", \"is_any_protein_changed_in_ad_brain_display_value\" : \"is_any_protein_changed_in_ad_brain_display_value\", \"input_data_display_value\" : \"input_data_display_value\", \"rna_brain_change_studied\" : true, \"pharos_class_display_value\" : \"pharos_class_display_value\", \"proteomics_TMT\" : [ { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" }, { \"log2_fc\" : 1.0246457001441578, \"pval\" : 7.457744773683766, \"cor_pval\" : 1.1730742509559433, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"uniqid\" : \"uniqid\", \"tissue\" : \"tissue\", \"ci_upr\" : 1.4894159098541704, \"ci_lwr\" : 6.84685269835264, \"_id\" : \"_id\", \"uniprotid\" : \"uniprotid\" } ], \"name\" : \"name\", \"hgnc_symbol\" : \"hgnc_symbol\", \"_id\" : \"_id\", \"rna_differential_expression\" : [ { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 }, { \"adj_p_val\" : 1.2315135367772556, \"study\" : \"study\", \"logfc\" : 3.616076749251911, \"ensembl_gene_id\" : \"ensembl_gene_id\", \"ci_r\" : 7.386281948385884, \"hgnc_symbol\" : \"hgnc_symbol\", \"tissue\" : \"tissue\", \"model\" : \"model\", \"_id\" : \"_id\", \"fc\" : 2.027123023002322, \"ci_l\" : 4.145608029883936 } ], \"nominated_target_display_value\" : true, \"similar_genes_network\" : { \"nodes\" : [ { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] }, { \"ensembl_gene_id\" : \"ensembl_gene_id\", \"hgnc_symbol\" : \"hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ] } ], \"min\" : 6.965117697638846, \"max\" : 1.284659006116532, \"links\" : [ { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" }, { \"source_hgnc_symbol\" : \"source_hgnc_symbol\", \"brain_regions\" : [ \"brain_regions\", \"brain_regions\" ], \"source\" : \"source\", \"target\" : \"target\", \"target_hgnc_symbol\" : \"target_hgnc_symbol\" } ] }, \"is_any_protein_changed_in_ad_brain\" : true, \"is_adi\" : true, \"programs_display_value\" : \"programs_display_value\" } ]"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApi.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApi.java new file mode 100644 index 0000000000..fc036451bd --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApi.java @@ -0,0 +1,127 @@ +/** + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.0.0). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.TeamsListDto; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import javax.validation.constraints.*; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Validated +@Tag(name = "Teams", description = "the Teams API") +public interface TeamsApi { + + default TeamsApiDelegate getDelegate() { + return new TeamsApiDelegate() {}; + } + + /** + * GET /teamMembers/{name}/image : Get Team Member Image + * Get Team Member Image + * + * @param name (required) + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "getTeamMemberImage", + summary = "Get Team Member Image", + description = "Get Team Member Image", + tags = { "Teams" }, + responses = { + @ApiResponse(responseCode = "200", description = "Success", content = { + @Content(mediaType = "image/jpg", schema = @Schema(implementation = org.springframework.core.io.Resource.class)), + @Content(mediaType = "image/jpeg", schema = @Schema(implementation = org.springframework.core.io.Resource.class)), + @Content(mediaType = "image/png", schema = @Schema(implementation = org.springframework.core.io.Resource.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = org.springframework.core.io.Resource.class)) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "image/jpg", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "image/jpeg", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "image/png", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "image/jpg", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "image/jpeg", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "image/png", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/teamMembers/{name}/image", + produces = { "image/jpg", "image/jpeg", "image/png", "application/problem+json" } + ) + default ResponseEntity getTeamMemberImage( + @Parameter(name = "name", description = "", required = true, in = ParameterIn.PATH) @PathVariable("name") String name + ) { + return getDelegate().getTeamMemberImage(name); + } + + + /** + * GET /teams : List Teams + * List Teams + * + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + */ + @Operation( + operationId = "listTeams", + summary = "List Teams", + description = "List Teams", + tags = { "Teams" }, + responses = { + @ApiResponse(responseCode = "200", description = "Success", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = TeamsListDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = TeamsListDto.class)) + }), + @ApiResponse(responseCode = "400", description = "Invalid request", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }), + @ApiResponse(responseCode = "500", description = "The request cannot be fulfilled due to an unexpected server error", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)), + @Content(mediaType = "application/problem+json", schema = @Schema(implementation = BasicErrorDto.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = "/teams", + produces = { "application/json", "application/problem+json" } + ) + default ResponseEntity listTeams( + + ) { + return getDelegate().listTeams(); + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiController.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiController.java new file mode 100644 index 0000000000..56d4bb553f --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiController.java @@ -0,0 +1,45 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.TeamsListDto; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@Controller +@RequestMapping("${openapi.agoraREST.base-path:/v1}") +public class TeamsApiController implements TeamsApi { + + private final TeamsApiDelegate delegate; + + public TeamsApiController(@Autowired(required = false) TeamsApiDelegate delegate) { + this.delegate = Optional.ofNullable(delegate).orElse(new TeamsApiDelegate() {}); + } + + @Override + public TeamsApiDelegate getDelegate() { + return delegate; + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiDelegate.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiDelegate.java new file mode 100644 index 0000000000..c4cfb6dd77 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/TeamsApiDelegate.java @@ -0,0 +1,72 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.BasicErrorDto; +import org.sagebionetworks.agora.api.model.dto.TeamsListDto; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.*; +import javax.validation.Valid; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Generated; + +/** + * A delegate to be called by the {@link TeamsApiController}}. + * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class. + */ +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +public interface TeamsApiDelegate { + + default Optional getRequest() { + return Optional.empty(); + } + + /** + * GET /teamMembers/{name}/image : Get Team Member Image + * Get Team Member Image + * + * @param name (required) + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see TeamsApi#getTeamMemberImage + */ + default ResponseEntity getTeamMemberImage(String name) { + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + + /** + * GET /teams : List Teams + * List Teams + * + * @return Success (status code 200) + * or Invalid request (status code 400) + * or The request cannot be fulfilled due to an unexpected server error (status code 500) + * @see TeamsApi#listTeams + */ + default ResponseEntity listTeams() { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"items\" : [ { \"team_full\" : \"team_full\", \"members\" : [ { \"name\" : \"name\", \"isPrimaryInvestigator\" : true, \"url\" : \"url\" }, { \"name\" : \"name\", \"isPrimaryInvestigator\" : true, \"url\" : \"url\" } ], \"description\" : \"description\", \"team\" : \"team\", \"program\" : \"program\" }, { \"team_full\" : \"team_full\", \"members\" : [ { \"name\" : \"name\", \"isPrimaryInvestigator\" : true, \"url\" : \"url\" }, { \"name\" : \"name\", \"isPrimaryInvestigator\" : true, \"url\" : \"url\" } ], \"description\" : \"description\", \"team\" : \"team\", \"program\" : \"program\" } ] }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + if (mediaType.isCompatibleWith(MediaType.valueOf("application/problem+json"))) { + String exampleString = "Custom MIME type example not yet supported: application/problem+json"; + ApiUtil.setExampleResponse(request, "application/problem+json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/HomeController.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/HomeController.java new file mode 100644 index 0000000000..d2048b5aee --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/HomeController.java @@ -0,0 +1,19 @@ +package org.sagebionetworks.agora.api.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * Home redirection to OpenAPI api documentation + */ +@Controller +public class HomeController { + + @RequestMapping("/") + public String index() { + return "redirect:swagger-ui.html"; + } +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/SpringDocConfiguration.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/SpringDocConfiguration.java new file mode 100644 index 0000000000..651c9c6dad --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/configuration/SpringDocConfiguration.java @@ -0,0 +1,35 @@ +package org.sagebionetworks.agora.api.configuration; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import io.swagger.v3.oas.models.security.SecurityScheme; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SpringDocConfiguration { + + @Bean(name = "org.sagebionetworks.agora.api.configuration.SpringDocConfiguration.apiInfo") + OpenAPI apiInfo() { + return new OpenAPI() + .info( + new Info() + .title("Agora REST API") + .description( + "No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)" + ) + .contact( + new Contact().name("Support").url("https://github.com/Sage-Bionetworks/sage-monorepo") + ) + .license( + new License() + .name("Apache 2.0") + .url("https://github.com/Sage-Bionetworks/sage-monorepo/blob/main/LICENSE.txt") + ) + .version("1.0.0") + ); + } +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BasicErrorDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BasicErrorDto.java new file mode 100644 index 0000000000..9f7da85414 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BasicErrorDto.java @@ -0,0 +1,171 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Problem details (tools.ietf.org/html/rfc7807) + */ + +@Schema(name = "BasicError", description = "Problem details (tools.ietf.org/html/rfc7807)") +@JsonTypeName("BasicError") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +@lombok.AllArgsConstructor +@lombok.Builder +public class BasicErrorDto { + + private String title; + + private Integer status; + + private String detail; + + private String type; + + public BasicErrorDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public BasicErrorDto(String title, Integer status) { + this.title = title; + this.status = status; + } + + public BasicErrorDto title(String title) { + this.title = title; + return this; + } + + /** + * A human readable documentation for the problem type + * @return title + */ + @NotNull + @Schema(name = "title", description = "A human readable documentation for the problem type", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("title") + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public BasicErrorDto status(Integer status) { + this.status = status; + return this; + } + + /** + * The HTTP status code + * @return status + */ + @NotNull + @Schema(name = "status", description = "The HTTP status code", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("status") + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public BasicErrorDto detail(String detail) { + this.detail = detail; + return this; + } + + /** + * A human readable explanation specific to this occurrence of the problem + * @return detail + */ + + @Schema(name = "detail", description = "A human readable explanation specific to this occurrence of the problem", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("detail") + public String getDetail() { + return detail; + } + + public void setDetail(String detail) { + this.detail = detail; + } + + public BasicErrorDto type(String type) { + this.type = type; + return this; + } + + /** + * An absolute URI that identifies the problem type + * @return type + */ + + @Schema(name = "type", description = "An absolute URI that identifies the problem type", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("type") + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BasicErrorDto basicError = (BasicErrorDto) o; + return Objects.equals(this.title, basicError.title) && + Objects.equals(this.status, basicError.status) && + Objects.equals(this.detail, basicError.detail) && + Objects.equals(this.type, basicError.type); + } + + @Override + public int hashCode() { + return Objects.hash(title, status, detail, type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BasicErrorDto {\n"); + sb.append(" title: ").append(toIndentedString(title)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" detail: ").append(toIndentedString(detail)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainDto.java new file mode 100644 index 0000000000..d2627ee2af --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainDto.java @@ -0,0 +1,209 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * BioDomain + */ + +@Schema(name = "BioDomain", description = "BioDomain") +@JsonTypeName("BioDomain") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class BioDomainDto { + + private String biodomain; + + @Valid + private List goTerms = new ArrayList<>(); + + private Integer nBiodomainTerms; + + private Integer nGeneBiodomainTerms; + + private Float pctLinkingTerms; + + public BioDomainDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public BioDomainDto(String biodomain, List goTerms, Integer nBiodomainTerms, Integer nGeneBiodomainTerms, Float pctLinkingTerms) { + this.biodomain = biodomain; + this.goTerms = goTerms; + this.nBiodomainTerms = nBiodomainTerms; + this.nGeneBiodomainTerms = nGeneBiodomainTerms; + this.pctLinkingTerms = pctLinkingTerms; + } + + public BioDomainDto biodomain(String biodomain) { + this.biodomain = biodomain; + return this; + } + + /** + * Name of the biological domain + * @return biodomain + */ + @NotNull + @Schema(name = "biodomain", description = "Name of the biological domain", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("biodomain") + public String getBiodomain() { + return biodomain; + } + + public void setBiodomain(String biodomain) { + this.biodomain = biodomain; + } + + public BioDomainDto goTerms(List goTerms) { + this.goTerms = goTerms; + return this; + } + + public BioDomainDto addGoTermsItem(String goTermsItem) { + if (this.goTerms == null) { + this.goTerms = new ArrayList<>(); + } + this.goTerms.add(goTermsItem); + return this; + } + + /** + * List of Gene Ontology (GO) terms + * @return goTerms + */ + @NotNull + @Schema(name = "go_terms", description = "List of Gene Ontology (GO) terms", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("go_terms") + public List getGoTerms() { + return goTerms; + } + + public void setGoTerms(List goTerms) { + this.goTerms = goTerms; + } + + public BioDomainDto nBiodomainTerms(Integer nBiodomainTerms) { + this.nBiodomainTerms = nBiodomainTerms; + return this; + } + + /** + * Number of terms associated with the biological domain + * @return nBiodomainTerms + */ + @NotNull + @Schema(name = "n_biodomain_terms", description = "Number of terms associated with the biological domain", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("n_biodomain_terms") + public Integer getnBiodomainTerms() { + return nBiodomainTerms; + } + + public void setnBiodomainTerms(Integer nBiodomainTerms) { + this.nBiodomainTerms = nBiodomainTerms; + } + + public BioDomainDto nGeneBiodomainTerms(Integer nGeneBiodomainTerms) { + this.nGeneBiodomainTerms = nGeneBiodomainTerms; + return this; + } + + /** + * Number of gene terms linked to the biological domain + * @return nGeneBiodomainTerms + */ + @NotNull + @Schema(name = "n_gene_biodomain_terms", description = "Number of gene terms linked to the biological domain", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("n_gene_biodomain_terms") + public Integer getnGeneBiodomainTerms() { + return nGeneBiodomainTerms; + } + + public void setnGeneBiodomainTerms(Integer nGeneBiodomainTerms) { + this.nGeneBiodomainTerms = nGeneBiodomainTerms; + } + + public BioDomainDto pctLinkingTerms(Float pctLinkingTerms) { + this.pctLinkingTerms = pctLinkingTerms; + return this; + } + + /** + * Percentage of terms linking to the domain + * @return pctLinkingTerms + */ + @NotNull + @Schema(name = "pct_linking_terms", description = "Percentage of terms linking to the domain", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("pct_linking_terms") + public Float getPctLinkingTerms() { + return pctLinkingTerms; + } + + public void setPctLinkingTerms(Float pctLinkingTerms) { + this.pctLinkingTerms = pctLinkingTerms; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BioDomainDto bioDomain = (BioDomainDto) o; + return Objects.equals(this.biodomain, bioDomain.biodomain) && + Objects.equals(this.goTerms, bioDomain.goTerms) && + Objects.equals(this.nBiodomainTerms, bioDomain.nBiodomainTerms) && + Objects.equals(this.nGeneBiodomainTerms, bioDomain.nGeneBiodomainTerms) && + Objects.equals(this.pctLinkingTerms, bioDomain.pctLinkingTerms); + } + + @Override + public int hashCode() { + return Objects.hash(biodomain, goTerms, nBiodomainTerms, nGeneBiodomainTerms, pctLinkingTerms); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BioDomainDto {\n"); + sb.append(" biodomain: ").append(toIndentedString(biodomain)).append("\n"); + sb.append(" goTerms: ").append(toIndentedString(goTerms)).append("\n"); + sb.append(" nBiodomainTerms: ").append(toIndentedString(nBiodomainTerms)).append("\n"); + sb.append(" nGeneBiodomainTerms: ").append(toIndentedString(nGeneBiodomainTerms)).append("\n"); + sb.append(" pctLinkingTerms: ").append(toIndentedString(pctLinkingTerms)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainInfoDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainInfoDto.java new file mode 100644 index 0000000000..794ab5fcd6 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainInfoDto.java @@ -0,0 +1,97 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * BioDomainInfo + */ + +@Schema(name = "BioDomainInfo", description = "BioDomainInfo") +@JsonTypeName("BioDomainInfo") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class BioDomainInfoDto { + + private String name; + + public BioDomainInfoDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public BioDomainInfoDto(String name) { + this.name = name; + } + + public BioDomainInfoDto name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + */ + @NotNull + @Schema(name = "name", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BioDomainInfoDto bioDomainInfo = (BioDomainInfoDto) o; + return Objects.equals(this.name, bioDomainInfo.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BioDomainInfoDto {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainsDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainsDto.java new file mode 100644 index 0000000000..7b2f1c944b --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/BioDomainsDto.java @@ -0,0 +1,135 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.BioDomainDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * BioDomains + */ + +@Schema(name = "BioDomains", description = "BioDomains") +@JsonTypeName("BioDomains") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class BioDomainsDto { + + private String ensemblGeneId; + + @Valid + private List<@Valid BioDomainDto> geneBiodomains = new ArrayList<>(); + + public BioDomainsDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public BioDomainsDto(String ensemblGeneId, List<@Valid BioDomainDto> geneBiodomains) { + this.ensemblGeneId = ensemblGeneId; + this.geneBiodomains = geneBiodomains; + } + + public BioDomainsDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * The Ensembl Gene ID. + * @return ensemblGeneId + */ + @NotNull + @Schema(name = "ensembl_gene_id", description = "The Ensembl Gene ID.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public BioDomainsDto geneBiodomains(List<@Valid BioDomainDto> geneBiodomains) { + this.geneBiodomains = geneBiodomains; + return this; + } + + public BioDomainsDto addGeneBiodomainsItem(BioDomainDto geneBiodomainsItem) { + if (this.geneBiodomains == null) { + this.geneBiodomains = new ArrayList<>(); + } + this.geneBiodomains.add(geneBiodomainsItem); + return this; + } + + /** + * A list of gene biodomains. + * @return geneBiodomains + */ + @NotNull @Valid + @Schema(name = "gene_biodomains", description = "A list of gene biodomains.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("gene_biodomains") + public List<@Valid BioDomainDto> getGeneBiodomains() { + return geneBiodomains; + } + + public void setGeneBiodomains(List<@Valid BioDomainDto> geneBiodomains) { + this.geneBiodomains = geneBiodomains; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BioDomainsDto bioDomains = (BioDomainsDto) o; + return Objects.equals(this.ensemblGeneId, bioDomains.ensemblGeneId) && + Objects.equals(this.geneBiodomains, bioDomains.geneBiodomains); + } + + @Override + public int hashCode() { + return Objects.hash(ensemblGeneId, geneBiodomains); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BioDomainsDto {\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" geneBiodomains: ").append(toIndentedString(geneBiodomains)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java new file mode 100644 index 0000000000..86a4324907 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java @@ -0,0 +1,147 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Synapse data version + */ + +@Schema(name = "Dataversion", description = "Synapse data version") +@JsonTypeName("Dataversion") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class DataversionDto { + + private String dataFile; + + private String dataVersion; + + private String teamImagesId; + + public DataversionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public DataversionDto(String dataFile, String dataVersion, String teamImagesId) { + this.dataFile = dataFile; + this.dataVersion = dataVersion; + this.teamImagesId = teamImagesId; + } + + public DataversionDto dataFile(String dataFile) { + this.dataFile = dataFile; + return this; + } + + /** + * Get dataFile + * @return dataFile + */ + @NotNull + @Schema(name = "data_file", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("data_file") + public String getDataFile() { + return dataFile; + } + + public void setDataFile(String dataFile) { + this.dataFile = dataFile; + } + + public DataversionDto dataVersion(String dataVersion) { + this.dataVersion = dataVersion; + return this; + } + + /** + * Get dataVersion + * @return dataVersion + */ + @NotNull + @Schema(name = "data_version", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("data_version") + public String getDataVersion() { + return dataVersion; + } + + public void setDataVersion(String dataVersion) { + this.dataVersion = dataVersion; + } + + public DataversionDto teamImagesId(String teamImagesId) { + this.teamImagesId = teamImagesId; + return this; + } + + /** + * Get teamImagesId + * @return teamImagesId + */ + @NotNull + @Schema(name = "team_images_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("team_images_id") + public String getTeamImagesId() { + return teamImagesId; + } + + public void setTeamImagesId(String teamImagesId) { + this.teamImagesId = teamImagesId; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DataversionDto dataversion = (DataversionDto) o; + return Objects.equals(this.dataFile, dataversion.dataFile) && + Objects.equals(this.dataVersion, dataversion.dataVersion) && + Objects.equals(this.teamImagesId, dataversion.teamImagesId); + } + + @Override + public int hashCode() { + return Objects.hash(dataFile, dataVersion, teamImagesId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DataversionDto {\n"); + sb.append(" dataFile: ").append(toIndentedString(dataFile)).append("\n"); + sb.append(" dataVersion: ").append(toIndentedString(dataVersion)).append("\n"); + sb.append(" teamImagesId: ").append(toIndentedString(teamImagesId)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DistributionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DistributionDto.java new file mode 100644 index 0000000000..e25d7d6a29 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DistributionDto.java @@ -0,0 +1,248 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.OverallScoresDistributionDto; +import org.sagebionetworks.agora.api.model.dto.ProteomicsDistributionDto; +import org.sagebionetworks.agora.api.model.dto.RnaDistributionDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Distributions + */ + +@Schema(name = "Distribution", description = "Distributions") +@JsonTypeName("Distribution") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class DistributionDto { + + @Valid + private List<@Valid RnaDistributionDto> rnaDifferentialExpression = new ArrayList<>(); + + @Valid + private List<@Valid ProteomicsDistributionDto> proteomicsLFQ = new ArrayList<>(); + + @Valid + private List<@Valid ProteomicsDistributionDto> proteomicsSRM = new ArrayList<>(); + + @Valid + private List<@Valid ProteomicsDistributionDto> proteomicsTMT = new ArrayList<>(); + + @Valid + private List<@Valid OverallScoresDistributionDto> overallScores = new ArrayList<>(); + + public DistributionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public DistributionDto(List<@Valid RnaDistributionDto> rnaDifferentialExpression, List<@Valid ProteomicsDistributionDto> proteomicsLFQ, List<@Valid ProteomicsDistributionDto> proteomicsSRM, List<@Valid ProteomicsDistributionDto> proteomicsTMT, List<@Valid OverallScoresDistributionDto> overallScores) { + this.rnaDifferentialExpression = rnaDifferentialExpression; + this.proteomicsLFQ = proteomicsLFQ; + this.proteomicsSRM = proteomicsSRM; + this.proteomicsTMT = proteomicsTMT; + this.overallScores = overallScores; + } + + public DistributionDto rnaDifferentialExpression(List<@Valid RnaDistributionDto> rnaDifferentialExpression) { + this.rnaDifferentialExpression = rnaDifferentialExpression; + return this; + } + + public DistributionDto addRnaDifferentialExpressionItem(RnaDistributionDto rnaDifferentialExpressionItem) { + if (this.rnaDifferentialExpression == null) { + this.rnaDifferentialExpression = new ArrayList<>(); + } + this.rnaDifferentialExpression.add(rnaDifferentialExpressionItem); + return this; + } + + /** + * Get rnaDifferentialExpression + * @return rnaDifferentialExpression + */ + @NotNull @Valid + @Schema(name = "rna_differential_expression", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("rna_differential_expression") + public List<@Valid RnaDistributionDto> getRnaDifferentialExpression() { + return rnaDifferentialExpression; + } + + public void setRnaDifferentialExpression(List<@Valid RnaDistributionDto> rnaDifferentialExpression) { + this.rnaDifferentialExpression = rnaDifferentialExpression; + } + + public DistributionDto proteomicsLFQ(List<@Valid ProteomicsDistributionDto> proteomicsLFQ) { + this.proteomicsLFQ = proteomicsLFQ; + return this; + } + + public DistributionDto addProteomicsLFQItem(ProteomicsDistributionDto proteomicsLFQItem) { + if (this.proteomicsLFQ == null) { + this.proteomicsLFQ = new ArrayList<>(); + } + this.proteomicsLFQ.add(proteomicsLFQItem); + return this; + } + + /** + * Get proteomicsLFQ + * @return proteomicsLFQ + */ + @NotNull @Valid + @Schema(name = "proteomics_LFQ", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("proteomics_LFQ") + public List<@Valid ProteomicsDistributionDto> getProteomicsLFQ() { + return proteomicsLFQ; + } + + public void setProteomicsLFQ(List<@Valid ProteomicsDistributionDto> proteomicsLFQ) { + this.proteomicsLFQ = proteomicsLFQ; + } + + public DistributionDto proteomicsSRM(List<@Valid ProteomicsDistributionDto> proteomicsSRM) { + this.proteomicsSRM = proteomicsSRM; + return this; + } + + public DistributionDto addProteomicsSRMItem(ProteomicsDistributionDto proteomicsSRMItem) { + if (this.proteomicsSRM == null) { + this.proteomicsSRM = new ArrayList<>(); + } + this.proteomicsSRM.add(proteomicsSRMItem); + return this; + } + + /** + * Get proteomicsSRM + * @return proteomicsSRM + */ + @NotNull @Valid + @Schema(name = "proteomics_SRM", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("proteomics_SRM") + public List<@Valid ProteomicsDistributionDto> getProteomicsSRM() { + return proteomicsSRM; + } + + public void setProteomicsSRM(List<@Valid ProteomicsDistributionDto> proteomicsSRM) { + this.proteomicsSRM = proteomicsSRM; + } + + public DistributionDto proteomicsTMT(List<@Valid ProteomicsDistributionDto> proteomicsTMT) { + this.proteomicsTMT = proteomicsTMT; + return this; + } + + public DistributionDto addProteomicsTMTItem(ProteomicsDistributionDto proteomicsTMTItem) { + if (this.proteomicsTMT == null) { + this.proteomicsTMT = new ArrayList<>(); + } + this.proteomicsTMT.add(proteomicsTMTItem); + return this; + } + + /** + * Get proteomicsTMT + * @return proteomicsTMT + */ + @NotNull @Valid + @Schema(name = "proteomics_TMT", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("proteomics_TMT") + public List<@Valid ProteomicsDistributionDto> getProteomicsTMT() { + return proteomicsTMT; + } + + public void setProteomicsTMT(List<@Valid ProteomicsDistributionDto> proteomicsTMT) { + this.proteomicsTMT = proteomicsTMT; + } + + public DistributionDto overallScores(List<@Valid OverallScoresDistributionDto> overallScores) { + this.overallScores = overallScores; + return this; + } + + public DistributionDto addOverallScoresItem(OverallScoresDistributionDto overallScoresItem) { + if (this.overallScores == null) { + this.overallScores = new ArrayList<>(); + } + this.overallScores.add(overallScoresItem); + return this; + } + + /** + * Get overallScores + * @return overallScores + */ + @NotNull @Valid + @Schema(name = "overall_scores", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("overall_scores") + public List<@Valid OverallScoresDistributionDto> getOverallScores() { + return overallScores; + } + + public void setOverallScores(List<@Valid OverallScoresDistributionDto> overallScores) { + this.overallScores = overallScores; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DistributionDto distribution = (DistributionDto) o; + return Objects.equals(this.rnaDifferentialExpression, distribution.rnaDifferentialExpression) && + Objects.equals(this.proteomicsLFQ, distribution.proteomicsLFQ) && + Objects.equals(this.proteomicsSRM, distribution.proteomicsSRM) && + Objects.equals(this.proteomicsTMT, distribution.proteomicsTMT) && + Objects.equals(this.overallScores, distribution.overallScores); + } + + @Override + public int hashCode() { + return Objects.hash(rnaDifferentialExpression, proteomicsLFQ, proteomicsSRM, proteomicsTMT, overallScores); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DistributionDto {\n"); + sb.append(" rnaDifferentialExpression: ").append(toIndentedString(rnaDifferentialExpression)).append("\n"); + sb.append(" proteomicsLFQ: ").append(toIndentedString(proteomicsLFQ)).append("\n"); + sb.append(" proteomicsSRM: ").append(toIndentedString(proteomicsSRM)).append("\n"); + sb.append(" proteomicsTMT: ").append(toIndentedString(proteomicsTMT)).append("\n"); + sb.append(" overallScores: ").append(toIndentedString(overallScores)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DruggabilityDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DruggabilityDto.java new file mode 100644 index 0000000000..1c89bca702 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DruggabilityDto.java @@ -0,0 +1,247 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Druggability + */ + +@Schema(name = "Druggability", description = "Druggability") +@JsonTypeName("Druggability") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class DruggabilityDto { + + private Integer smDruggabilityBucket; + + private Integer safetyBucket; + + private Integer ababilityBucket; + + private String pharosClass; + + private String classification; + + private String safetyBucketDefinition; + + private String ababilityBucketDefinition; + + public DruggabilityDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public DruggabilityDto(Integer smDruggabilityBucket, Integer safetyBucket, Integer ababilityBucket, String pharosClass, String classification, String safetyBucketDefinition, String ababilityBucketDefinition) { + this.smDruggabilityBucket = smDruggabilityBucket; + this.safetyBucket = safetyBucket; + this.ababilityBucket = ababilityBucket; + this.pharosClass = pharosClass; + this.classification = classification; + this.safetyBucketDefinition = safetyBucketDefinition; + this.ababilityBucketDefinition = ababilityBucketDefinition; + } + + public DruggabilityDto smDruggabilityBucket(Integer smDruggabilityBucket) { + this.smDruggabilityBucket = smDruggabilityBucket; + return this; + } + + /** + * Get smDruggabilityBucket + * @return smDruggabilityBucket + */ + @NotNull + @Schema(name = "sm_druggability_bucket", example = "1", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("sm_druggability_bucket") + public Integer getSmDruggabilityBucket() { + return smDruggabilityBucket; + } + + public void setSmDruggabilityBucket(Integer smDruggabilityBucket) { + this.smDruggabilityBucket = smDruggabilityBucket; + } + + public DruggabilityDto safetyBucket(Integer safetyBucket) { + this.safetyBucket = safetyBucket; + return this; + } + + /** + * Get safetyBucket + * @return safetyBucket + */ + @NotNull + @Schema(name = "safety_bucket", example = "2", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("safety_bucket") + public Integer getSafetyBucket() { + return safetyBucket; + } + + public void setSafetyBucket(Integer safetyBucket) { + this.safetyBucket = safetyBucket; + } + + public DruggabilityDto ababilityBucket(Integer ababilityBucket) { + this.ababilityBucket = ababilityBucket; + return this; + } + + /** + * Get ababilityBucket + * @return ababilityBucket + */ + @NotNull + @Schema(name = "abability_bucket", example = "3", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("abability_bucket") + public Integer getAbabilityBucket() { + return ababilityBucket; + } + + public void setAbabilityBucket(Integer ababilityBucket) { + this.ababilityBucket = ababilityBucket; + } + + public DruggabilityDto pharosClass(String pharosClass) { + this.pharosClass = pharosClass; + return this; + } + + /** + * Get pharosClass + * @return pharosClass + */ + @NotNull + @Schema(name = "pharos_class", example = "Tclin", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("pharos_class") + public String getPharosClass() { + return pharosClass; + } + + public void setPharosClass(String pharosClass) { + this.pharosClass = pharosClass; + } + + public DruggabilityDto classification(String classification) { + this.classification = classification; + return this; + } + + /** + * Get classification + * @return classification + */ + @NotNull + @Schema(name = "classification", example = "Enzyme", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("classification") + public String getClassification() { + return classification; + } + + public void setClassification(String classification) { + this.classification = classification; + } + + public DruggabilityDto safetyBucketDefinition(String safetyBucketDefinition) { + this.safetyBucketDefinition = safetyBucketDefinition; + return this; + } + + /** + * Get safetyBucketDefinition + * @return safetyBucketDefinition + */ + @NotNull + @Schema(name = "safety_bucket_definition", example = "Low risk", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("safety_bucket_definition") + public String getSafetyBucketDefinition() { + return safetyBucketDefinition; + } + + public void setSafetyBucketDefinition(String safetyBucketDefinition) { + this.safetyBucketDefinition = safetyBucketDefinition; + } + + public DruggabilityDto ababilityBucketDefinition(String ababilityBucketDefinition) { + this.ababilityBucketDefinition = ababilityBucketDefinition; + return this; + } + + /** + * Get ababilityBucketDefinition + * @return ababilityBucketDefinition + */ + @NotNull + @Schema(name = "abability_bucket_definition", example = "Moderate bioavailability", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("abability_bucket_definition") + public String getAbabilityBucketDefinition() { + return ababilityBucketDefinition; + } + + public void setAbabilityBucketDefinition(String ababilityBucketDefinition) { + this.ababilityBucketDefinition = ababilityBucketDefinition; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DruggabilityDto druggability = (DruggabilityDto) o; + return Objects.equals(this.smDruggabilityBucket, druggability.smDruggabilityBucket) && + Objects.equals(this.safetyBucket, druggability.safetyBucket) && + Objects.equals(this.ababilityBucket, druggability.ababilityBucket) && + Objects.equals(this.pharosClass, druggability.pharosClass) && + Objects.equals(this.classification, druggability.classification) && + Objects.equals(this.safetyBucketDefinition, druggability.safetyBucketDefinition) && + Objects.equals(this.ababilityBucketDefinition, druggability.ababilityBucketDefinition); + } + + @Override + public int hashCode() { + return Objects.hash(smDruggabilityBucket, safetyBucket, ababilityBucket, pharosClass, classification, safetyBucketDefinition, ababilityBucketDefinition); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DruggabilityDto {\n"); + sb.append(" smDruggabilityBucket: ").append(toIndentedString(smDruggabilityBucket)).append("\n"); + sb.append(" safetyBucket: ").append(toIndentedString(safetyBucket)).append("\n"); + sb.append(" ababilityBucket: ").append(toIndentedString(ababilityBucket)).append("\n"); + sb.append(" pharosClass: ").append(toIndentedString(pharosClass)).append("\n"); + sb.append(" classification: ").append(toIndentedString(classification)).append("\n"); + sb.append(" safetyBucketDefinition: ").append(toIndentedString(safetyBucketDefinition)).append("\n"); + sb.append(" ababilityBucketDefinition: ").append(toIndentedString(ababilityBucketDefinition)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/EnsemblInfoDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/EnsemblInfoDto.java new file mode 100644 index 0000000000..2c1bc5ee11 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/EnsemblInfoDto.java @@ -0,0 +1,159 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * EnsemblInfo + */ + +@Schema(name = "EnsemblInfo", description = "EnsemblInfo") +@JsonTypeName("EnsemblInfo") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class EnsemblInfoDto { + + private Integer ensemblRelease; + + @Valid + private List ensemblPossibleReplacements = new ArrayList<>(); + + private String ensemblPermalink; + + public EnsemblInfoDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public EnsemblInfoDto(Integer ensemblRelease, List ensemblPossibleReplacements, String ensemblPermalink) { + this.ensemblRelease = ensemblRelease; + this.ensemblPossibleReplacements = ensemblPossibleReplacements; + this.ensemblPermalink = ensemblPermalink; + } + + public EnsemblInfoDto ensemblRelease(Integer ensemblRelease) { + this.ensemblRelease = ensemblRelease; + return this; + } + + /** + * Get ensemblRelease + * @return ensemblRelease + */ + @NotNull + @Schema(name = "ensembl_release", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_release") + public Integer getEnsemblRelease() { + return ensemblRelease; + } + + public void setEnsemblRelease(Integer ensemblRelease) { + this.ensemblRelease = ensemblRelease; + } + + public EnsemblInfoDto ensemblPossibleReplacements(List ensemblPossibleReplacements) { + this.ensemblPossibleReplacements = ensemblPossibleReplacements; + return this; + } + + public EnsemblInfoDto addEnsemblPossibleReplacementsItem(String ensemblPossibleReplacementsItem) { + if (this.ensemblPossibleReplacements == null) { + this.ensemblPossibleReplacements = new ArrayList<>(); + } + this.ensemblPossibleReplacements.add(ensemblPossibleReplacementsItem); + return this; + } + + /** + * Get ensemblPossibleReplacements + * @return ensemblPossibleReplacements + */ + @NotNull + @Schema(name = "ensembl_possible_replacements", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_possible_replacements") + public List getEnsemblPossibleReplacements() { + return ensemblPossibleReplacements; + } + + public void setEnsemblPossibleReplacements(List ensemblPossibleReplacements) { + this.ensemblPossibleReplacements = ensemblPossibleReplacements; + } + + public EnsemblInfoDto ensemblPermalink(String ensemblPermalink) { + this.ensemblPermalink = ensemblPermalink; + return this; + } + + /** + * Get ensemblPermalink + * @return ensemblPermalink + */ + @NotNull + @Schema(name = "ensembl_permalink", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_permalink") + public String getEnsemblPermalink() { + return ensemblPermalink; + } + + public void setEnsemblPermalink(String ensemblPermalink) { + this.ensemblPermalink = ensemblPermalink; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + EnsemblInfoDto ensemblInfo = (EnsemblInfoDto) o; + return Objects.equals(this.ensemblRelease, ensemblInfo.ensemblRelease) && + Objects.equals(this.ensemblPossibleReplacements, ensemblInfo.ensemblPossibleReplacements) && + Objects.equals(this.ensemblPermalink, ensemblInfo.ensemblPermalink); + } + + @Override + public int hashCode() { + return Objects.hash(ensemblRelease, ensemblPossibleReplacements, ensemblPermalink); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class EnsemblInfoDto {\n"); + sb.append(" ensemblRelease: ").append(toIndentedString(ensemblRelease)).append("\n"); + sb.append(" ensemblPossibleReplacements: ").append(toIndentedString(ensemblPossibleReplacements)).append("\n"); + sb.append(" ensemblPermalink: ").append(toIndentedString(ensemblPermalink)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ExperimentalValidationDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ExperimentalValidationDto.java new file mode 100644 index 0000000000..d1e62e37f6 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ExperimentalValidationDto.java @@ -0,0 +1,472 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Experimental Validation + */ + +@Schema(name = "ExperimentalValidation", description = "Experimental Validation") +@JsonTypeName("ExperimentalValidation") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class ExperimentalValidationDto { + + private String id; + + private String ensemblGeneId; + + private String hgncSymbol; + + private String hypothesisTested; + + private String summaryFindings; + + private String published; + + private String reference; + + private String species; + + private String modelSystem; + + private String outcomeMeasure; + + private String outcomeMeasureDetails; + + private String balancedForSex; + + private String contributors; + + private String team; + + private String referenceDoi; + + private String dateReport; + + public ExperimentalValidationDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public ExperimentalValidationDto(String id, String ensemblGeneId, String hgncSymbol, String hypothesisTested, String summaryFindings, String published, String reference, String species, String modelSystem, String outcomeMeasure, String outcomeMeasureDetails, String balancedForSex, String contributors, String team, String referenceDoi, String dateReport) { + this.id = id; + this.ensemblGeneId = ensemblGeneId; + this.hgncSymbol = hgncSymbol; + this.hypothesisTested = hypothesisTested; + this.summaryFindings = summaryFindings; + this.published = published; + this.reference = reference; + this.species = species; + this.modelSystem = modelSystem; + this.outcomeMeasure = outcomeMeasure; + this.outcomeMeasureDetails = outcomeMeasureDetails; + this.balancedForSex = balancedForSex; + this.contributors = contributors; + this.team = team; + this.referenceDoi = referenceDoi; + this.dateReport = dateReport; + } + + public ExperimentalValidationDto id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + */ + @NotNull + @Schema(name = "_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("_id") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ExperimentalValidationDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * Get ensemblGeneId + * @return ensemblGeneId + */ + @NotNull + @Schema(name = "ensembl_gene_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public ExperimentalValidationDto hgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + return this; + } + + /** + * Get hgncSymbol + * @return hgncSymbol + */ + @NotNull + @Schema(name = "hgnc_symbol", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("hgnc_symbol") + public String getHgncSymbol() { + return hgncSymbol; + } + + public void setHgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + } + + public ExperimentalValidationDto hypothesisTested(String hypothesisTested) { + this.hypothesisTested = hypothesisTested; + return this; + } + + /** + * Get hypothesisTested + * @return hypothesisTested + */ + @NotNull + @Schema(name = "hypothesis_tested", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("hypothesis_tested") + public String getHypothesisTested() { + return hypothesisTested; + } + + public void setHypothesisTested(String hypothesisTested) { + this.hypothesisTested = hypothesisTested; + } + + public ExperimentalValidationDto summaryFindings(String summaryFindings) { + this.summaryFindings = summaryFindings; + return this; + } + + /** + * Get summaryFindings + * @return summaryFindings + */ + @NotNull + @Schema(name = "summary_findings", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("summary_findings") + public String getSummaryFindings() { + return summaryFindings; + } + + public void setSummaryFindings(String summaryFindings) { + this.summaryFindings = summaryFindings; + } + + public ExperimentalValidationDto published(String published) { + this.published = published; + return this; + } + + /** + * Get published + * @return published + */ + @NotNull + @Schema(name = "published", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("published") + public String getPublished() { + return published; + } + + public void setPublished(String published) { + this.published = published; + } + + public ExperimentalValidationDto reference(String reference) { + this.reference = reference; + return this; + } + + /** + * Get reference + * @return reference + */ + @NotNull + @Schema(name = "reference", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("reference") + public String getReference() { + return reference; + } + + public void setReference(String reference) { + this.reference = reference; + } + + public ExperimentalValidationDto species(String species) { + this.species = species; + return this; + } + + /** + * Get species + * @return species + */ + @NotNull + @Schema(name = "species", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("species") + public String getSpecies() { + return species; + } + + public void setSpecies(String species) { + this.species = species; + } + + public ExperimentalValidationDto modelSystem(String modelSystem) { + this.modelSystem = modelSystem; + return this; + } + + /** + * Get modelSystem + * @return modelSystem + */ + @NotNull + @Schema(name = "model_system", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("model_system") + public String getModelSystem() { + return modelSystem; + } + + public void setModelSystem(String modelSystem) { + this.modelSystem = modelSystem; + } + + public ExperimentalValidationDto outcomeMeasure(String outcomeMeasure) { + this.outcomeMeasure = outcomeMeasure; + return this; + } + + /** + * Get outcomeMeasure + * @return outcomeMeasure + */ + @NotNull + @Schema(name = "outcome_measure", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("outcome_measure") + public String getOutcomeMeasure() { + return outcomeMeasure; + } + + public void setOutcomeMeasure(String outcomeMeasure) { + this.outcomeMeasure = outcomeMeasure; + } + + public ExperimentalValidationDto outcomeMeasureDetails(String outcomeMeasureDetails) { + this.outcomeMeasureDetails = outcomeMeasureDetails; + return this; + } + + /** + * Get outcomeMeasureDetails + * @return outcomeMeasureDetails + */ + @NotNull + @Schema(name = "outcome_measure_details", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("outcome_measure_details") + public String getOutcomeMeasureDetails() { + return outcomeMeasureDetails; + } + + public void setOutcomeMeasureDetails(String outcomeMeasureDetails) { + this.outcomeMeasureDetails = outcomeMeasureDetails; + } + + public ExperimentalValidationDto balancedForSex(String balancedForSex) { + this.balancedForSex = balancedForSex; + return this; + } + + /** + * Get balancedForSex + * @return balancedForSex + */ + @NotNull + @Schema(name = "balanced_for_sex", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("balanced_for_sex") + public String getBalancedForSex() { + return balancedForSex; + } + + public void setBalancedForSex(String balancedForSex) { + this.balancedForSex = balancedForSex; + } + + public ExperimentalValidationDto contributors(String contributors) { + this.contributors = contributors; + return this; + } + + /** + * Get contributors + * @return contributors + */ + @NotNull + @Schema(name = "contributors", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("contributors") + public String getContributors() { + return contributors; + } + + public void setContributors(String contributors) { + this.contributors = contributors; + } + + public ExperimentalValidationDto team(String team) { + this.team = team; + return this; + } + + /** + * Get team + * @return team + */ + @NotNull + @Schema(name = "team", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("team") + public String getTeam() { + return team; + } + + public void setTeam(String team) { + this.team = team; + } + + public ExperimentalValidationDto referenceDoi(String referenceDoi) { + this.referenceDoi = referenceDoi; + return this; + } + + /** + * Get referenceDoi + * @return referenceDoi + */ + @NotNull + @Schema(name = "reference_doi", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("reference_doi") + public String getReferenceDoi() { + return referenceDoi; + } + + public void setReferenceDoi(String referenceDoi) { + this.referenceDoi = referenceDoi; + } + + public ExperimentalValidationDto dateReport(String dateReport) { + this.dateReport = dateReport; + return this; + } + + /** + * Get dateReport + * @return dateReport + */ + @NotNull + @Schema(name = "date_report", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("date_report") + public String getDateReport() { + return dateReport; + } + + public void setDateReport(String dateReport) { + this.dateReport = dateReport; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ExperimentalValidationDto experimentalValidation = (ExperimentalValidationDto) o; + return Objects.equals(this.id, experimentalValidation.id) && + Objects.equals(this.ensemblGeneId, experimentalValidation.ensemblGeneId) && + Objects.equals(this.hgncSymbol, experimentalValidation.hgncSymbol) && + Objects.equals(this.hypothesisTested, experimentalValidation.hypothesisTested) && + Objects.equals(this.summaryFindings, experimentalValidation.summaryFindings) && + Objects.equals(this.published, experimentalValidation.published) && + Objects.equals(this.reference, experimentalValidation.reference) && + Objects.equals(this.species, experimentalValidation.species) && + Objects.equals(this.modelSystem, experimentalValidation.modelSystem) && + Objects.equals(this.outcomeMeasure, experimentalValidation.outcomeMeasure) && + Objects.equals(this.outcomeMeasureDetails, experimentalValidation.outcomeMeasureDetails) && + Objects.equals(this.balancedForSex, experimentalValidation.balancedForSex) && + Objects.equals(this.contributors, experimentalValidation.contributors) && + Objects.equals(this.team, experimentalValidation.team) && + Objects.equals(this.referenceDoi, experimentalValidation.referenceDoi) && + Objects.equals(this.dateReport, experimentalValidation.dateReport); + } + + @Override + public int hashCode() { + return Objects.hash(id, ensemblGeneId, hgncSymbol, hypothesisTested, summaryFindings, published, reference, species, modelSystem, outcomeMeasure, outcomeMeasureDetails, balancedForSex, contributors, team, referenceDoi, dateReport); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ExperimentalValidationDto {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" hgncSymbol: ").append(toIndentedString(hgncSymbol)).append("\n"); + sb.append(" hypothesisTested: ").append(toIndentedString(hypothesisTested)).append("\n"); + sb.append(" summaryFindings: ").append(toIndentedString(summaryFindings)).append("\n"); + sb.append(" published: ").append(toIndentedString(published)).append("\n"); + sb.append(" reference: ").append(toIndentedString(reference)).append("\n"); + sb.append(" species: ").append(toIndentedString(species)).append("\n"); + sb.append(" modelSystem: ").append(toIndentedString(modelSystem)).append("\n"); + sb.append(" outcomeMeasure: ").append(toIndentedString(outcomeMeasure)).append("\n"); + sb.append(" outcomeMeasureDetails: ").append(toIndentedString(outcomeMeasureDetails)).append("\n"); + sb.append(" balancedForSex: ").append(toIndentedString(balancedForSex)).append("\n"); + sb.append(" contributors: ").append(toIndentedString(contributors)).append("\n"); + sb.append(" team: ").append(toIndentedString(team)).append("\n"); + sb.append(" referenceDoi: ").append(toIndentedString(referenceDoi)).append("\n"); + sb.append(" dateReport: ").append(toIndentedString(dateReport)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneDto.java new file mode 100644 index 0000000000..5f75cf7d89 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneDto.java @@ -0,0 +1,489 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.GCTGeneNominationsDto; +import org.sagebionetworks.agora.api.model.dto.GCTGeneTissueDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * GCT Gene + */ + +@Schema(name = "GCTGene", description = "GCT Gene") +@JsonTypeName("GCTGene") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class GCTGeneDto { + + private String ensemblGeneId; + + private String hgncSymbol; + + private String uniprotid = null; + + private String uid = null; + + private String searchString = null; + + @Valid + private List searchArray; + + @Valid + private List<@Valid GCTGeneTissueDto> tissues = new ArrayList<>(); + + private GCTGeneNominationsDto nominations; + + @Valid + private List associations; + + private BigDecimal targetRiskScore = null; + + private BigDecimal geneticsScore = null; + + private BigDecimal multiOmicsScore = null; + + @Valid + private List biodomains; + + private Boolean pinned = null; + + @Valid + private List targetEnablingResources; + + public GCTGeneDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public GCTGeneDto(String ensemblGeneId, String hgncSymbol, List<@Valid GCTGeneTissueDto> tissues, BigDecimal targetRiskScore, BigDecimal geneticsScore, BigDecimal multiOmicsScore) { + this.ensemblGeneId = ensemblGeneId; + this.hgncSymbol = hgncSymbol; + this.tissues = tissues; + this.targetRiskScore = targetRiskScore; + this.geneticsScore = geneticsScore; + this.multiOmicsScore = multiOmicsScore; + } + + public GCTGeneDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * Ensembl gene identifier + * @return ensemblGeneId + */ + @NotNull + @Schema(name = "ensembl_gene_id", description = "Ensembl gene identifier", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public GCTGeneDto hgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + return this; + } + + /** + * HGNC gene symbol + * @return hgncSymbol + */ + @NotNull + @Schema(name = "hgnc_symbol", description = "HGNC gene symbol", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("hgnc_symbol") + public String getHgncSymbol() { + return hgncSymbol; + } + + public void setHgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + } + + public GCTGeneDto uniprotid(String uniprotid) { + this.uniprotid = uniprotid; + return this; + } + + /** + * UniProt identifier + * @return uniprotid + */ + + @Schema(name = "uniprotid", description = "UniProt identifier", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("uniprotid") + public String getUniprotid() { + return uniprotid; + } + + public void setUniprotid(String uniprotid) { + this.uniprotid = uniprotid; + } + + public GCTGeneDto uid(String uid) { + this.uid = uid; + return this; + } + + /** + * Unique identifier + * @return uid + */ + + @Schema(name = "uid", description = "Unique identifier", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("uid") + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public GCTGeneDto searchString(String searchString) { + this.searchString = searchString; + return this; + } + + /** + * Search string + * @return searchString + */ + + @Schema(name = "search_string", description = "Search string", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("search_string") + public String getSearchString() { + return searchString; + } + + public void setSearchString(String searchString) { + this.searchString = searchString; + } + + public GCTGeneDto searchArray(List searchArray) { + this.searchArray = searchArray; + return this; + } + + public GCTGeneDto addSearchArrayItem(String searchArrayItem) { + if (this.searchArray == null) { + this.searchArray = new ArrayList<>(); + } + this.searchArray.add(searchArrayItem); + return this; + } + + /** + * Array of search terms + * @return searchArray + */ + + @Schema(name = "search_array", description = "Array of search terms", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("search_array") + public List getSearchArray() { + return searchArray; + } + + public void setSearchArray(List searchArray) { + this.searchArray = searchArray; + } + + public GCTGeneDto tissues(List<@Valid GCTGeneTissueDto> tissues) { + this.tissues = tissues; + return this; + } + + public GCTGeneDto addTissuesItem(GCTGeneTissueDto tissuesItem) { + if (this.tissues == null) { + this.tissues = new ArrayList<>(); + } + this.tissues.add(tissuesItem); + return this; + } + + /** + * Array of gene tissues + * @return tissues + */ + @NotNull @Valid + @Schema(name = "tissues", description = "Array of gene tissues", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("tissues") + public List<@Valid GCTGeneTissueDto> getTissues() { + return tissues; + } + + public void setTissues(List<@Valid GCTGeneTissueDto> tissues) { + this.tissues = tissues; + } + + public GCTGeneDto nominations(GCTGeneNominationsDto nominations) { + this.nominations = nominations; + return this; + } + + /** + * Get nominations + * @return nominations + */ + @Valid + @Schema(name = "nominations", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("nominations") + public GCTGeneNominationsDto getNominations() { + return nominations; + } + + public void setNominations(GCTGeneNominationsDto nominations) { + this.nominations = nominations; + } + + public GCTGeneDto associations(List associations) { + this.associations = associations; + return this; + } + + public GCTGeneDto addAssociationsItem(BigDecimal associationsItem) { + if (this.associations == null) { + this.associations = new ArrayList<>(); + } + this.associations.add(associationsItem); + return this; + } + + /** + * Array of association values + * @return associations + */ + @Valid + @Schema(name = "associations", description = "Array of association values", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("associations") + public List getAssociations() { + return associations; + } + + public void setAssociations(List associations) { + this.associations = associations; + } + + public GCTGeneDto targetRiskScore(BigDecimal targetRiskScore) { + this.targetRiskScore = targetRiskScore; + return this; + } + + /** + * Target risk score + * @return targetRiskScore + */ + @NotNull @Valid + @Schema(name = "target_risk_score", description = "Target risk score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("target_risk_score") + public BigDecimal getTargetRiskScore() { + return targetRiskScore; + } + + public void setTargetRiskScore(BigDecimal targetRiskScore) { + this.targetRiskScore = targetRiskScore; + } + + public GCTGeneDto geneticsScore(BigDecimal geneticsScore) { + this.geneticsScore = geneticsScore; + return this; + } + + /** + * Genetics score + * @return geneticsScore + */ + @NotNull @Valid + @Schema(name = "genetics_score", description = "Genetics score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("genetics_score") + public BigDecimal getGeneticsScore() { + return geneticsScore; + } + + public void setGeneticsScore(BigDecimal geneticsScore) { + this.geneticsScore = geneticsScore; + } + + public GCTGeneDto multiOmicsScore(BigDecimal multiOmicsScore) { + this.multiOmicsScore = multiOmicsScore; + return this; + } + + /** + * Multi-omics score + * @return multiOmicsScore + */ + @NotNull @Valid + @Schema(name = "multi_omics_score", description = "Multi-omics score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("multi_omics_score") + public BigDecimal getMultiOmicsScore() { + return multiOmicsScore; + } + + public void setMultiOmicsScore(BigDecimal multiOmicsScore) { + this.multiOmicsScore = multiOmicsScore; + } + + public GCTGeneDto biodomains(List biodomains) { + this.biodomains = biodomains; + return this; + } + + public GCTGeneDto addBiodomainsItem(String biodomainsItem) { + if (this.biodomains == null) { + this.biodomains = new ArrayList<>(); + } + this.biodomains.add(biodomainsItem); + return this; + } + + /** + * Array of biological domains + * @return biodomains + */ + + @Schema(name = "biodomains", description = "Array of biological domains", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("biodomains") + public List getBiodomains() { + return biodomains; + } + + public void setBiodomains(List biodomains) { + this.biodomains = biodomains; + } + + public GCTGeneDto pinned(Boolean pinned) { + this.pinned = pinned; + return this; + } + + /** + * Whether the gene is pinned + * @return pinned + */ + + @Schema(name = "pinned", description = "Whether the gene is pinned", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("pinned") + public Boolean getPinned() { + return pinned; + } + + public void setPinned(Boolean pinned) { + this.pinned = pinned; + } + + public GCTGeneDto targetEnablingResources(List targetEnablingResources) { + this.targetEnablingResources = targetEnablingResources; + return this; + } + + public GCTGeneDto addTargetEnablingResourcesItem(String targetEnablingResourcesItem) { + if (this.targetEnablingResources == null) { + this.targetEnablingResources = new ArrayList<>(); + } + this.targetEnablingResources.add(targetEnablingResourcesItem); + return this; + } + + /** + * Target enabling resources + * @return targetEnablingResources + */ + + @Schema(name = "target_enabling_resources", description = "Target enabling resources", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("target_enabling_resources") + public List getTargetEnablingResources() { + return targetEnablingResources; + } + + public void setTargetEnablingResources(List targetEnablingResources) { + this.targetEnablingResources = targetEnablingResources; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GCTGeneDto gcTGene = (GCTGeneDto) o; + return Objects.equals(this.ensemblGeneId, gcTGene.ensemblGeneId) && + Objects.equals(this.hgncSymbol, gcTGene.hgncSymbol) && + Objects.equals(this.uniprotid, gcTGene.uniprotid) && + Objects.equals(this.uid, gcTGene.uid) && + Objects.equals(this.searchString, gcTGene.searchString) && + Objects.equals(this.searchArray, gcTGene.searchArray) && + Objects.equals(this.tissues, gcTGene.tissues) && + Objects.equals(this.nominations, gcTGene.nominations) && + Objects.equals(this.associations, gcTGene.associations) && + Objects.equals(this.targetRiskScore, gcTGene.targetRiskScore) && + Objects.equals(this.geneticsScore, gcTGene.geneticsScore) && + Objects.equals(this.multiOmicsScore, gcTGene.multiOmicsScore) && + Objects.equals(this.biodomains, gcTGene.biodomains) && + Objects.equals(this.pinned, gcTGene.pinned) && + Objects.equals(this.targetEnablingResources, gcTGene.targetEnablingResources); + } + + @Override + public int hashCode() { + return Objects.hash(ensemblGeneId, hgncSymbol, uniprotid, uid, searchString, searchArray, tissues, nominations, associations, targetRiskScore, geneticsScore, multiOmicsScore, biodomains, pinned, targetEnablingResources); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GCTGeneDto {\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" hgncSymbol: ").append(toIndentedString(hgncSymbol)).append("\n"); + sb.append(" uniprotid: ").append(toIndentedString(uniprotid)).append("\n"); + sb.append(" uid: ").append(toIndentedString(uid)).append("\n"); + sb.append(" searchString: ").append(toIndentedString(searchString)).append("\n"); + sb.append(" searchArray: ").append(toIndentedString(searchArray)).append("\n"); + sb.append(" tissues: ").append(toIndentedString(tissues)).append("\n"); + sb.append(" nominations: ").append(toIndentedString(nominations)).append("\n"); + sb.append(" associations: ").append(toIndentedString(associations)).append("\n"); + sb.append(" targetRiskScore: ").append(toIndentedString(targetRiskScore)).append("\n"); + sb.append(" geneticsScore: ").append(toIndentedString(geneticsScore)).append("\n"); + sb.append(" multiOmicsScore: ").append(toIndentedString(multiOmicsScore)).append("\n"); + sb.append(" biodomains: ").append(toIndentedString(biodomains)).append("\n"); + sb.append(" pinned: ").append(toIndentedString(pinned)).append("\n"); + sb.append(" targetEnablingResources: ").append(toIndentedString(targetEnablingResources)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneNominationsDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneNominationsDto.java new file mode 100644 index 0000000000..392341f526 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneNominationsDto.java @@ -0,0 +1,295 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * GCTGeneNominations + */ + +@Schema(name = "GCTGeneNominations", description = "GCTGeneNominations") +@JsonTypeName("GCTGeneNominations") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class GCTGeneNominationsDto { + + private Integer count; + + private Integer year; + + @Valid + private List teams = new ArrayList<>(); + + @Valid + private List studies = new ArrayList<>(); + + @Valid + private List inputs = new ArrayList<>(); + + @Valid + private List programs = new ArrayList<>(); + + @Valid + private List validations = new ArrayList<>(); + + public GCTGeneNominationsDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public GCTGeneNominationsDto(Integer count, Integer year, List teams, List studies, List inputs, List programs, List validations) { + this.count = count; + this.year = year; + this.teams = teams; + this.studies = studies; + this.inputs = inputs; + this.programs = programs; + this.validations = validations; + } + + public GCTGeneNominationsDto count(Integer count) { + this.count = count; + return this; + } + + /** + * The total number of gene nominations. + * @return count + */ + @NotNull + @Schema(name = "count", description = "The total number of gene nominations.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("count") + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + public GCTGeneNominationsDto year(Integer year) { + this.year = year; + return this; + } + + /** + * The year of the nominations. + * @return year + */ + @NotNull + @Schema(name = "year", description = "The year of the nominations.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("year") + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } + + public GCTGeneNominationsDto teams(List teams) { + this.teams = teams; + return this; + } + + public GCTGeneNominationsDto addTeamsItem(String teamsItem) { + if (this.teams == null) { + this.teams = new ArrayList<>(); + } + this.teams.add(teamsItem); + return this; + } + + /** + * The list of teams involved in the nominations. + * @return teams + */ + @NotNull + @Schema(name = "teams", description = "The list of teams involved in the nominations.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("teams") + public List getTeams() { + return teams; + } + + public void setTeams(List teams) { + this.teams = teams; + } + + public GCTGeneNominationsDto studies(List studies) { + this.studies = studies; + return this; + } + + public GCTGeneNominationsDto addStudiesItem(String studiesItem) { + if (this.studies == null) { + this.studies = new ArrayList<>(); + } + this.studies.add(studiesItem); + return this; + } + + /** + * The list of studies related to the nominations. + * @return studies + */ + @NotNull + @Schema(name = "studies", description = "The list of studies related to the nominations.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("studies") + public List getStudies() { + return studies; + } + + public void setStudies(List studies) { + this.studies = studies; + } + + public GCTGeneNominationsDto inputs(List inputs) { + this.inputs = inputs; + return this; + } + + public GCTGeneNominationsDto addInputsItem(String inputsItem) { + if (this.inputs == null) { + this.inputs = new ArrayList<>(); + } + this.inputs.add(inputsItem); + return this; + } + + /** + * The input data used for the nominations. + * @return inputs + */ + @NotNull + @Schema(name = "inputs", description = "The input data used for the nominations.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("inputs") + public List getInputs() { + return inputs; + } + + public void setInputs(List inputs) { + this.inputs = inputs; + } + + public GCTGeneNominationsDto programs(List programs) { + this.programs = programs; + return this; + } + + public GCTGeneNominationsDto addProgramsItem(String programsItem) { + if (this.programs == null) { + this.programs = new ArrayList<>(); + } + this.programs.add(programsItem); + return this; + } + + /** + * The list of programs associated with the nominations. + * @return programs + */ + @NotNull + @Schema(name = "programs", description = "The list of programs associated with the nominations.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("programs") + public List getPrograms() { + return programs; + } + + public void setPrograms(List programs) { + this.programs = programs; + } + + public GCTGeneNominationsDto validations(List validations) { + this.validations = validations; + return this; + } + + public GCTGeneNominationsDto addValidationsItem(String validationsItem) { + if (this.validations == null) { + this.validations = new ArrayList<>(); + } + this.validations.add(validationsItem); + return this; + } + + /** + * The list of validations for the nominations. + * @return validations + */ + @NotNull + @Schema(name = "validations", description = "The list of validations for the nominations.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("validations") + public List getValidations() { + return validations; + } + + public void setValidations(List validations) { + this.validations = validations; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GCTGeneNominationsDto gcTGeneNominations = (GCTGeneNominationsDto) o; + return Objects.equals(this.count, gcTGeneNominations.count) && + Objects.equals(this.year, gcTGeneNominations.year) && + Objects.equals(this.teams, gcTGeneNominations.teams) && + Objects.equals(this.studies, gcTGeneNominations.studies) && + Objects.equals(this.inputs, gcTGeneNominations.inputs) && + Objects.equals(this.programs, gcTGeneNominations.programs) && + Objects.equals(this.validations, gcTGeneNominations.validations); + } + + @Override + public int hashCode() { + return Objects.hash(count, year, teams, studies, inputs, programs, validations); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GCTGeneNominationsDto {\n"); + sb.append(" count: ").append(toIndentedString(count)).append("\n"); + sb.append(" year: ").append(toIndentedString(year)).append("\n"); + sb.append(" teams: ").append(toIndentedString(teams)).append("\n"); + sb.append(" studies: ").append(toIndentedString(studies)).append("\n"); + sb.append(" inputs: ").append(toIndentedString(inputs)).append("\n"); + sb.append(" programs: ").append(toIndentedString(programs)).append("\n"); + sb.append(" validations: ").append(toIndentedString(validations)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneTissueDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneTissueDto.java new file mode 100644 index 0000000000..7ee07dff04 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGeneTissueDto.java @@ -0,0 +1,222 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.sagebionetworks.agora.api.model.dto.MedianExpressionDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * GCTGeneTissue + */ + +@Schema(name = "GCTGeneTissue", description = "GCTGeneTissue") +@JsonTypeName("GCTGeneTissue") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class GCTGeneTissueDto { + + private String name; + + private Float logfc; + + private Float adjPVal; + + private Float ciL; + + private Float ciR; + + private MedianExpressionDto medianexpression; + + public GCTGeneTissueDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public GCTGeneTissueDto(String name, Float logfc, Float adjPVal, Float ciL, Float ciR) { + this.name = name; + this.logfc = logfc; + this.adjPVal = adjPVal; + this.ciL = ciL; + this.ciR = ciR; + } + + public GCTGeneTissueDto name(String name) { + this.name = name; + return this; + } + + /** + * Name of the gene or tissue. + * @return name + */ + @NotNull + @Schema(name = "name", description = "Name of the gene or tissue.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public GCTGeneTissueDto logfc(Float logfc) { + this.logfc = logfc; + return this; + } + + /** + * Log fold change value. + * @return logfc + */ + @NotNull + @Schema(name = "logfc", description = "Log fold change value.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("logfc") + public Float getLogfc() { + return logfc; + } + + public void setLogfc(Float logfc) { + this.logfc = logfc; + } + + public GCTGeneTissueDto adjPVal(Float adjPVal) { + this.adjPVal = adjPVal; + return this; + } + + /** + * Adjusted p-value. + * @return adjPVal + */ + @NotNull + @Schema(name = "adj_p_val", description = "Adjusted p-value.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("adj_p_val") + public Float getAdjPVal() { + return adjPVal; + } + + public void setAdjPVal(Float adjPVal) { + this.adjPVal = adjPVal; + } + + public GCTGeneTissueDto ciL(Float ciL) { + this.ciL = ciL; + return this; + } + + /** + * Lower confidence interval. + * @return ciL + */ + @NotNull + @Schema(name = "ci_l", description = "Lower confidence interval.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_l") + public Float getCiL() { + return ciL; + } + + public void setCiL(Float ciL) { + this.ciL = ciL; + } + + public GCTGeneTissueDto ciR(Float ciR) { + this.ciR = ciR; + return this; + } + + /** + * Upper confidence interval. + * @return ciR + */ + @NotNull + @Schema(name = "ci_r", description = "Upper confidence interval.", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_r") + public Float getCiR() { + return ciR; + } + + public void setCiR(Float ciR) { + this.ciR = ciR; + } + + public GCTGeneTissueDto medianexpression(MedianExpressionDto medianexpression) { + this.medianexpression = medianexpression; + return this; + } + + /** + * Get medianexpression + * @return medianexpression + */ + @Valid + @Schema(name = "medianexpression", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("medianexpression") + public MedianExpressionDto getMedianexpression() { + return medianexpression; + } + + public void setMedianexpression(MedianExpressionDto medianexpression) { + this.medianexpression = medianexpression; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GCTGeneTissueDto gcTGeneTissue = (GCTGeneTissueDto) o; + return Objects.equals(this.name, gcTGeneTissue.name) && + Objects.equals(this.logfc, gcTGeneTissue.logfc) && + Objects.equals(this.adjPVal, gcTGeneTissue.adjPVal) && + Objects.equals(this.ciL, gcTGeneTissue.ciL) && + Objects.equals(this.ciR, gcTGeneTissue.ciR) && + Objects.equals(this.medianexpression, gcTGeneTissue.medianexpression); + } + + @Override + public int hashCode() { + return Objects.hash(name, logfc, adjPVal, ciL, ciR, medianexpression); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GCTGeneTissueDto {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" logfc: ").append(toIndentedString(logfc)).append("\n"); + sb.append(" adjPVal: ").append(toIndentedString(adjPVal)).append("\n"); + sb.append(" ciL: ").append(toIndentedString(ciL)).append("\n"); + sb.append(" ciR: ").append(toIndentedString(ciR)).append("\n"); + sb.append(" medianexpression: ").append(toIndentedString(medianexpression)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGenesListDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGenesListDto.java new file mode 100644 index 0000000000..18b71a9049 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GCTGenesListDto.java @@ -0,0 +1,99 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.GCTGeneDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * List of GCTGene + */ + +@Schema(name = "GCTGenesList", description = "List of GCTGene") +@JsonTypeName("GCTGenesList") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class GCTGenesListDto { + + @Valid + private List<@Valid GCTGeneDto> items; + + public GCTGenesListDto items(List<@Valid GCTGeneDto> items) { + this.items = items; + return this; + } + + public GCTGenesListDto addItemsItem(GCTGeneDto itemsItem) { + if (this.items == null) { + this.items = new ArrayList<>(); + } + this.items.add(itemsItem); + return this; + } + + /** + * Get items + * @return items + */ + @Valid + @Schema(name = "items", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("items") + public List<@Valid GCTGeneDto> getItems() { + return items; + } + + public void setItems(List<@Valid GCTGeneDto> items) { + this.items = items; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GCTGenesListDto gcTGenesList = (GCTGenesListDto) o; + return Objects.equals(this.items, gcTGenesList.items); + } + + @Override + public int hashCode() { + return Objects.hash(items); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GCTGenesListDto {\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GeneDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GeneDto.java new file mode 100644 index 0000000000..1fa6c3559f --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/GeneDto.java @@ -0,0 +1,1245 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.sagebionetworks.agora.api.model.dto.BioDomainsDto; +import org.sagebionetworks.agora.api.model.dto.DruggabilityDto; +import org.sagebionetworks.agora.api.model.dto.EnsemblInfoDto; +import org.sagebionetworks.agora.api.model.dto.ExperimentalValidationDto; +import org.sagebionetworks.agora.api.model.dto.MedianExpressionDto; +import org.sagebionetworks.agora.api.model.dto.NeuropathologicCorrelationDto; +import org.sagebionetworks.agora.api.model.dto.OverallScoresDto; +import org.sagebionetworks.agora.api.model.dto.ProteinDifferentialExpressionDto; +import org.sagebionetworks.agora.api.model.dto.RnaDifferentialExpressionDto; +import org.sagebionetworks.agora.api.model.dto.SimilarGenesNetworkDto; +import org.sagebionetworks.agora.api.model.dto.TargetNominationDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Gene + */ + +@Schema(name = "Gene", description = "Gene") +@JsonTypeName("Gene") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class GeneDto { + + private String id; + + private String ensemblGeneId; + + private String name; + + private String summary; + + private String hgncSymbol; + + @Valid + private List alias = new ArrayList<>(); + + private Boolean isIgap; + + private Boolean isEqtl; + + private Boolean isAnyRnaChangedInAdBrain; + + private Boolean rnaBrainChangeStudied; + + private Boolean isAnyProteinChangedInAdBrain; + + private Boolean proteinBrainChangeStudied; + + @Valid + private List<@Valid TargetNominationDto> targetNominations; + + @Valid + private List<@Valid MedianExpressionDto> medianExpression = new ArrayList<>(); + + @Valid + private List<@Valid DruggabilityDto> druggability = new ArrayList<>(); + + private Integer totalNominations = null; + + private Boolean isAdi; + + private Boolean isTep; + + private String resourceUrl = null; + + @Valid + private List<@Valid RnaDifferentialExpressionDto> rnaDifferentialExpression; + + @Valid + private List<@Valid ProteinDifferentialExpressionDto> proteomicsLFQ; + + @Valid + private List<@Valid ProteinDifferentialExpressionDto> proteomicsSRM; + + @Valid + private List<@Valid ProteinDifferentialExpressionDto> proteomicsTMT; + + @Valid + private Map metabolomics; + + private OverallScoresDto overallScores; + + @Valid + private List<@Valid NeuropathologicCorrelationDto> neuropathologicCorrelations; + + @Valid + private List<@Valid ExperimentalValidationDto> experimentalValidation; + + @Valid + private Map links; + + private SimilarGenesNetworkDto similarGenesNetwork; + + private String abModalityDisplayValue = null; + + private String safetyRatingDisplayValue = null; + + private String smDruggabilityDisplayValue = null; + + private String pharosClassDisplayValue = null; + + private String isAnyRnaChangedInAdBrainDisplayValue = null; + + private String isAnyProteinChangedInAdBrainDisplayValue = null; + + private Boolean nominatedTargetDisplayValue = null; + + private Integer initialNominationDisplayValue = null; + + private String teamsDisplayValue = null; + + private String studyDisplayValue = null; + + private String programsDisplayValue = null; + + private String inputDataDisplayValue = null; + + private BioDomainsDto bioDomains; + + private EnsemblInfoDto ensemblInfo; + + public GeneDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public GeneDto(String id, String ensemblGeneId, String name, String summary, String hgncSymbol, List alias, Boolean isIgap, Boolean isEqtl, Boolean isAnyRnaChangedInAdBrain, Boolean rnaBrainChangeStudied, Boolean isAnyProteinChangedInAdBrain, Boolean proteinBrainChangeStudied, List<@Valid TargetNominationDto> targetNominations, List<@Valid MedianExpressionDto> medianExpression, List<@Valid DruggabilityDto> druggability, Integer totalNominations, EnsemblInfoDto ensemblInfo) { + this.id = id; + this.ensemblGeneId = ensemblGeneId; + this.name = name; + this.summary = summary; + this.hgncSymbol = hgncSymbol; + this.alias = alias; + this.isIgap = isIgap; + this.isEqtl = isEqtl; + this.isAnyRnaChangedInAdBrain = isAnyRnaChangedInAdBrain; + this.rnaBrainChangeStudied = rnaBrainChangeStudied; + this.isAnyProteinChangedInAdBrain = isAnyProteinChangedInAdBrain; + this.proteinBrainChangeStudied = proteinBrainChangeStudied; + this.targetNominations = targetNominations; + this.medianExpression = medianExpression; + this.druggability = druggability; + this.totalNominations = totalNominations; + this.ensemblInfo = ensemblInfo; + } + + public GeneDto id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + */ + @NotNull + @Schema(name = "_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("_id") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public GeneDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * Get ensemblGeneId + * @return ensemblGeneId + */ + @NotNull + @Schema(name = "ensembl_gene_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public GeneDto name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + */ + @NotNull + @Schema(name = "name", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public GeneDto summary(String summary) { + this.summary = summary; + return this; + } + + /** + * Get summary + * @return summary + */ + @NotNull + @Schema(name = "summary", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("summary") + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public GeneDto hgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + return this; + } + + /** + * Get hgncSymbol + * @return hgncSymbol + */ + @NotNull + @Schema(name = "hgnc_symbol", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("hgnc_symbol") + public String getHgncSymbol() { + return hgncSymbol; + } + + public void setHgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + } + + public GeneDto alias(List alias) { + this.alias = alias; + return this; + } + + public GeneDto addAliasItem(String aliasItem) { + if (this.alias == null) { + this.alias = new ArrayList<>(); + } + this.alias.add(aliasItem); + return this; + } + + /** + * Get alias + * @return alias + */ + @NotNull + @Schema(name = "alias", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("alias") + public List getAlias() { + return alias; + } + + public void setAlias(List alias) { + this.alias = alias; + } + + public GeneDto isIgap(Boolean isIgap) { + this.isIgap = isIgap; + return this; + } + + /** + * Get isIgap + * @return isIgap + */ + @NotNull + @Schema(name = "is_igap", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("is_igap") + public Boolean getIsIgap() { + return isIgap; + } + + public void setIsIgap(Boolean isIgap) { + this.isIgap = isIgap; + } + + public GeneDto isEqtl(Boolean isEqtl) { + this.isEqtl = isEqtl; + return this; + } + + /** + * Get isEqtl + * @return isEqtl + */ + @NotNull + @Schema(name = "is_eqtl", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("is_eqtl") + public Boolean getIsEqtl() { + return isEqtl; + } + + public void setIsEqtl(Boolean isEqtl) { + this.isEqtl = isEqtl; + } + + public GeneDto isAnyRnaChangedInAdBrain(Boolean isAnyRnaChangedInAdBrain) { + this.isAnyRnaChangedInAdBrain = isAnyRnaChangedInAdBrain; + return this; + } + + /** + * Get isAnyRnaChangedInAdBrain + * @return isAnyRnaChangedInAdBrain + */ + @NotNull + @Schema(name = "is_any_rna_changed_in_ad_brain", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("is_any_rna_changed_in_ad_brain") + public Boolean getIsAnyRnaChangedInAdBrain() { + return isAnyRnaChangedInAdBrain; + } + + public void setIsAnyRnaChangedInAdBrain(Boolean isAnyRnaChangedInAdBrain) { + this.isAnyRnaChangedInAdBrain = isAnyRnaChangedInAdBrain; + } + + public GeneDto rnaBrainChangeStudied(Boolean rnaBrainChangeStudied) { + this.rnaBrainChangeStudied = rnaBrainChangeStudied; + return this; + } + + /** + * Get rnaBrainChangeStudied + * @return rnaBrainChangeStudied + */ + @NotNull + @Schema(name = "rna_brain_change_studied", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("rna_brain_change_studied") + public Boolean getRnaBrainChangeStudied() { + return rnaBrainChangeStudied; + } + + public void setRnaBrainChangeStudied(Boolean rnaBrainChangeStudied) { + this.rnaBrainChangeStudied = rnaBrainChangeStudied; + } + + public GeneDto isAnyProteinChangedInAdBrain(Boolean isAnyProteinChangedInAdBrain) { + this.isAnyProteinChangedInAdBrain = isAnyProteinChangedInAdBrain; + return this; + } + + /** + * Get isAnyProteinChangedInAdBrain + * @return isAnyProteinChangedInAdBrain + */ + @NotNull + @Schema(name = "is_any_protein_changed_in_ad_brain", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("is_any_protein_changed_in_ad_brain") + public Boolean getIsAnyProteinChangedInAdBrain() { + return isAnyProteinChangedInAdBrain; + } + + public void setIsAnyProteinChangedInAdBrain(Boolean isAnyProteinChangedInAdBrain) { + this.isAnyProteinChangedInAdBrain = isAnyProteinChangedInAdBrain; + } + + public GeneDto proteinBrainChangeStudied(Boolean proteinBrainChangeStudied) { + this.proteinBrainChangeStudied = proteinBrainChangeStudied; + return this; + } + + /** + * Get proteinBrainChangeStudied + * @return proteinBrainChangeStudied + */ + @NotNull + @Schema(name = "protein_brain_change_studied", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("protein_brain_change_studied") + public Boolean getProteinBrainChangeStudied() { + return proteinBrainChangeStudied; + } + + public void setProteinBrainChangeStudied(Boolean proteinBrainChangeStudied) { + this.proteinBrainChangeStudied = proteinBrainChangeStudied; + } + + public GeneDto targetNominations(List<@Valid TargetNominationDto> targetNominations) { + this.targetNominations = targetNominations; + return this; + } + + public GeneDto addTargetNominationsItem(TargetNominationDto targetNominationsItem) { + if (this.targetNominations == null) { + this.targetNominations = new ArrayList<>(); + } + this.targetNominations.add(targetNominationsItem); + return this; + } + + /** + * Get targetNominations + * @return targetNominations + */ + @NotNull @Valid + @Schema(name = "target_nominations", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("target_nominations") + public List<@Valid TargetNominationDto> getTargetNominations() { + return targetNominations; + } + + public void setTargetNominations(List<@Valid TargetNominationDto> targetNominations) { + this.targetNominations = targetNominations; + } + + public GeneDto medianExpression(List<@Valid MedianExpressionDto> medianExpression) { + this.medianExpression = medianExpression; + return this; + } + + public GeneDto addMedianExpressionItem(MedianExpressionDto medianExpressionItem) { + if (this.medianExpression == null) { + this.medianExpression = new ArrayList<>(); + } + this.medianExpression.add(medianExpressionItem); + return this; + } + + /** + * Get medianExpression + * @return medianExpression + */ + @NotNull @Valid + @Schema(name = "median_expression", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("median_expression") + public List<@Valid MedianExpressionDto> getMedianExpression() { + return medianExpression; + } + + public void setMedianExpression(List<@Valid MedianExpressionDto> medianExpression) { + this.medianExpression = medianExpression; + } + + public GeneDto druggability(List<@Valid DruggabilityDto> druggability) { + this.druggability = druggability; + return this; + } + + public GeneDto addDruggabilityItem(DruggabilityDto druggabilityItem) { + if (this.druggability == null) { + this.druggability = new ArrayList<>(); + } + this.druggability.add(druggabilityItem); + return this; + } + + /** + * Get druggability + * @return druggability + */ + @NotNull @Valid + @Schema(name = "druggability", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("druggability") + public List<@Valid DruggabilityDto> getDruggability() { + return druggability; + } + + public void setDruggability(List<@Valid DruggabilityDto> druggability) { + this.druggability = druggability; + } + + public GeneDto totalNominations(Integer totalNominations) { + this.totalNominations = totalNominations; + return this; + } + + /** + * Get totalNominations + * @return totalNominations + */ + @NotNull + @Schema(name = "total_nominations", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("total_nominations") + public Integer getTotalNominations() { + return totalNominations; + } + + public void setTotalNominations(Integer totalNominations) { + this.totalNominations = totalNominations; + } + + public GeneDto isAdi(Boolean isAdi) { + this.isAdi = isAdi; + return this; + } + + /** + * Get isAdi + * @return isAdi + */ + + @Schema(name = "is_adi", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("is_adi") + public Boolean getIsAdi() { + return isAdi; + } + + public void setIsAdi(Boolean isAdi) { + this.isAdi = isAdi; + } + + public GeneDto isTep(Boolean isTep) { + this.isTep = isTep; + return this; + } + + /** + * Get isTep + * @return isTep + */ + + @Schema(name = "is_tep", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("is_tep") + public Boolean getIsTep() { + return isTep; + } + + public void setIsTep(Boolean isTep) { + this.isTep = isTep; + } + + public GeneDto resourceUrl(String resourceUrl) { + this.resourceUrl = resourceUrl; + return this; + } + + /** + * Get resourceUrl + * @return resourceUrl + */ + + @Schema(name = "resource_url", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("resource_url") + public String getResourceUrl() { + return resourceUrl; + } + + public void setResourceUrl(String resourceUrl) { + this.resourceUrl = resourceUrl; + } + + public GeneDto rnaDifferentialExpression(List<@Valid RnaDifferentialExpressionDto> rnaDifferentialExpression) { + this.rnaDifferentialExpression = rnaDifferentialExpression; + return this; + } + + public GeneDto addRnaDifferentialExpressionItem(RnaDifferentialExpressionDto rnaDifferentialExpressionItem) { + if (this.rnaDifferentialExpression == null) { + this.rnaDifferentialExpression = new ArrayList<>(); + } + this.rnaDifferentialExpression.add(rnaDifferentialExpressionItem); + return this; + } + + /** + * Get rnaDifferentialExpression + * @return rnaDifferentialExpression + */ + @Valid + @Schema(name = "rna_differential_expression", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("rna_differential_expression") + public List<@Valid RnaDifferentialExpressionDto> getRnaDifferentialExpression() { + return rnaDifferentialExpression; + } + + public void setRnaDifferentialExpression(List<@Valid RnaDifferentialExpressionDto> rnaDifferentialExpression) { + this.rnaDifferentialExpression = rnaDifferentialExpression; + } + + public GeneDto proteomicsLFQ(List<@Valid ProteinDifferentialExpressionDto> proteomicsLFQ) { + this.proteomicsLFQ = proteomicsLFQ; + return this; + } + + public GeneDto addProteomicsLFQItem(ProteinDifferentialExpressionDto proteomicsLFQItem) { + if (this.proteomicsLFQ == null) { + this.proteomicsLFQ = new ArrayList<>(); + } + this.proteomicsLFQ.add(proteomicsLFQItem); + return this; + } + + /** + * Get proteomicsLFQ + * @return proteomicsLFQ + */ + @Valid + @Schema(name = "proteomics_LFQ", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("proteomics_LFQ") + public List<@Valid ProteinDifferentialExpressionDto> getProteomicsLFQ() { + return proteomicsLFQ; + } + + public void setProteomicsLFQ(List<@Valid ProteinDifferentialExpressionDto> proteomicsLFQ) { + this.proteomicsLFQ = proteomicsLFQ; + } + + public GeneDto proteomicsSRM(List<@Valid ProteinDifferentialExpressionDto> proteomicsSRM) { + this.proteomicsSRM = proteomicsSRM; + return this; + } + + public GeneDto addProteomicsSRMItem(ProteinDifferentialExpressionDto proteomicsSRMItem) { + if (this.proteomicsSRM == null) { + this.proteomicsSRM = new ArrayList<>(); + } + this.proteomicsSRM.add(proteomicsSRMItem); + return this; + } + + /** + * Get proteomicsSRM + * @return proteomicsSRM + */ + @Valid + @Schema(name = "proteomics_SRM", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("proteomics_SRM") + public List<@Valid ProteinDifferentialExpressionDto> getProteomicsSRM() { + return proteomicsSRM; + } + + public void setProteomicsSRM(List<@Valid ProteinDifferentialExpressionDto> proteomicsSRM) { + this.proteomicsSRM = proteomicsSRM; + } + + public GeneDto proteomicsTMT(List<@Valid ProteinDifferentialExpressionDto> proteomicsTMT) { + this.proteomicsTMT = proteomicsTMT; + return this; + } + + public GeneDto addProteomicsTMTItem(ProteinDifferentialExpressionDto proteomicsTMTItem) { + if (this.proteomicsTMT == null) { + this.proteomicsTMT = new ArrayList<>(); + } + this.proteomicsTMT.add(proteomicsTMTItem); + return this; + } + + /** + * Get proteomicsTMT + * @return proteomicsTMT + */ + @Valid + @Schema(name = "proteomics_TMT", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("proteomics_TMT") + public List<@Valid ProteinDifferentialExpressionDto> getProteomicsTMT() { + return proteomicsTMT; + } + + public void setProteomicsTMT(List<@Valid ProteinDifferentialExpressionDto> proteomicsTMT) { + this.proteomicsTMT = proteomicsTMT; + } + + public GeneDto metabolomics(Map metabolomics) { + this.metabolomics = metabolomics; + return this; + } + + public GeneDto putMetabolomicsItem(String key, Object metabolomicsItem) { + if (this.metabolomics == null) { + this.metabolomics = new HashMap<>(); + } + this.metabolomics.put(key, metabolomicsItem); + return this; + } + + /** + * Get metabolomics + * @return metabolomics + */ + + @Schema(name = "metabolomics", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("metabolomics") + public Map getMetabolomics() { + return metabolomics; + } + + public void setMetabolomics(Map metabolomics) { + this.metabolomics = metabolomics; + } + + public GeneDto overallScores(OverallScoresDto overallScores) { + this.overallScores = overallScores; + return this; + } + + /** + * Get overallScores + * @return overallScores + */ + @Valid + @Schema(name = "overall_scores", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("overall_scores") + public OverallScoresDto getOverallScores() { + return overallScores; + } + + public void setOverallScores(OverallScoresDto overallScores) { + this.overallScores = overallScores; + } + + public GeneDto neuropathologicCorrelations(List<@Valid NeuropathologicCorrelationDto> neuropathologicCorrelations) { + this.neuropathologicCorrelations = neuropathologicCorrelations; + return this; + } + + public GeneDto addNeuropathologicCorrelationsItem(NeuropathologicCorrelationDto neuropathologicCorrelationsItem) { + if (this.neuropathologicCorrelations == null) { + this.neuropathologicCorrelations = new ArrayList<>(); + } + this.neuropathologicCorrelations.add(neuropathologicCorrelationsItem); + return this; + } + + /** + * Get neuropathologicCorrelations + * @return neuropathologicCorrelations + */ + @Valid + @Schema(name = "neuropathologic_correlations", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("neuropathologic_correlations") + public List<@Valid NeuropathologicCorrelationDto> getNeuropathologicCorrelations() { + return neuropathologicCorrelations; + } + + public void setNeuropathologicCorrelations(List<@Valid NeuropathologicCorrelationDto> neuropathologicCorrelations) { + this.neuropathologicCorrelations = neuropathologicCorrelations; + } + + public GeneDto experimentalValidation(List<@Valid ExperimentalValidationDto> experimentalValidation) { + this.experimentalValidation = experimentalValidation; + return this; + } + + public GeneDto addExperimentalValidationItem(ExperimentalValidationDto experimentalValidationItem) { + if (this.experimentalValidation == null) { + this.experimentalValidation = new ArrayList<>(); + } + this.experimentalValidation.add(experimentalValidationItem); + return this; + } + + /** + * Get experimentalValidation + * @return experimentalValidation + */ + @Valid + @Schema(name = "experimental_validation", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("experimental_validation") + public List<@Valid ExperimentalValidationDto> getExperimentalValidation() { + return experimentalValidation; + } + + public void setExperimentalValidation(List<@Valid ExperimentalValidationDto> experimentalValidation) { + this.experimentalValidation = experimentalValidation; + } + + public GeneDto links(Map links) { + this.links = links; + return this; + } + + public GeneDto putLinksItem(String key, Object linksItem) { + if (this.links == null) { + this.links = new HashMap<>(); + } + this.links.put(key, linksItem); + return this; + } + + /** + * Get links + * @return links + */ + + @Schema(name = "links", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("links") + public Map getLinks() { + return links; + } + + public void setLinks(Map links) { + this.links = links; + } + + public GeneDto similarGenesNetwork(SimilarGenesNetworkDto similarGenesNetwork) { + this.similarGenesNetwork = similarGenesNetwork; + return this; + } + + /** + * Get similarGenesNetwork + * @return similarGenesNetwork + */ + @Valid + @Schema(name = "similar_genes_network", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("similar_genes_network") + public SimilarGenesNetworkDto getSimilarGenesNetwork() { + return similarGenesNetwork; + } + + public void setSimilarGenesNetwork(SimilarGenesNetworkDto similarGenesNetwork) { + this.similarGenesNetwork = similarGenesNetwork; + } + + public GeneDto abModalityDisplayValue(String abModalityDisplayValue) { + this.abModalityDisplayValue = abModalityDisplayValue; + return this; + } + + /** + * Get abModalityDisplayValue + * @return abModalityDisplayValue + */ + + @Schema(name = "ab_modality_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("ab_modality_display_value") + public String getAbModalityDisplayValue() { + return abModalityDisplayValue; + } + + public void setAbModalityDisplayValue(String abModalityDisplayValue) { + this.abModalityDisplayValue = abModalityDisplayValue; + } + + public GeneDto safetyRatingDisplayValue(String safetyRatingDisplayValue) { + this.safetyRatingDisplayValue = safetyRatingDisplayValue; + return this; + } + + /** + * Get safetyRatingDisplayValue + * @return safetyRatingDisplayValue + */ + + @Schema(name = "safety_rating_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("safety_rating_display_value") + public String getSafetyRatingDisplayValue() { + return safetyRatingDisplayValue; + } + + public void setSafetyRatingDisplayValue(String safetyRatingDisplayValue) { + this.safetyRatingDisplayValue = safetyRatingDisplayValue; + } + + public GeneDto smDruggabilityDisplayValue(String smDruggabilityDisplayValue) { + this.smDruggabilityDisplayValue = smDruggabilityDisplayValue; + return this; + } + + /** + * Get smDruggabilityDisplayValue + * @return smDruggabilityDisplayValue + */ + + @Schema(name = "sm_druggability_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("sm_druggability_display_value") + public String getSmDruggabilityDisplayValue() { + return smDruggabilityDisplayValue; + } + + public void setSmDruggabilityDisplayValue(String smDruggabilityDisplayValue) { + this.smDruggabilityDisplayValue = smDruggabilityDisplayValue; + } + + public GeneDto pharosClassDisplayValue(String pharosClassDisplayValue) { + this.pharosClassDisplayValue = pharosClassDisplayValue; + return this; + } + + /** + * Get pharosClassDisplayValue + * @return pharosClassDisplayValue + */ + + @Schema(name = "pharos_class_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("pharos_class_display_value") + public String getPharosClassDisplayValue() { + return pharosClassDisplayValue; + } + + public void setPharosClassDisplayValue(String pharosClassDisplayValue) { + this.pharosClassDisplayValue = pharosClassDisplayValue; + } + + public GeneDto isAnyRnaChangedInAdBrainDisplayValue(String isAnyRnaChangedInAdBrainDisplayValue) { + this.isAnyRnaChangedInAdBrainDisplayValue = isAnyRnaChangedInAdBrainDisplayValue; + return this; + } + + /** + * Get isAnyRnaChangedInAdBrainDisplayValue + * @return isAnyRnaChangedInAdBrainDisplayValue + */ + + @Schema(name = "is_any_rna_changed_in_ad_brain_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("is_any_rna_changed_in_ad_brain_display_value") + public String getIsAnyRnaChangedInAdBrainDisplayValue() { + return isAnyRnaChangedInAdBrainDisplayValue; + } + + public void setIsAnyRnaChangedInAdBrainDisplayValue(String isAnyRnaChangedInAdBrainDisplayValue) { + this.isAnyRnaChangedInAdBrainDisplayValue = isAnyRnaChangedInAdBrainDisplayValue; + } + + public GeneDto isAnyProteinChangedInAdBrainDisplayValue(String isAnyProteinChangedInAdBrainDisplayValue) { + this.isAnyProteinChangedInAdBrainDisplayValue = isAnyProteinChangedInAdBrainDisplayValue; + return this; + } + + /** + * Get isAnyProteinChangedInAdBrainDisplayValue + * @return isAnyProteinChangedInAdBrainDisplayValue + */ + + @Schema(name = "is_any_protein_changed_in_ad_brain_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("is_any_protein_changed_in_ad_brain_display_value") + public String getIsAnyProteinChangedInAdBrainDisplayValue() { + return isAnyProteinChangedInAdBrainDisplayValue; + } + + public void setIsAnyProteinChangedInAdBrainDisplayValue(String isAnyProteinChangedInAdBrainDisplayValue) { + this.isAnyProteinChangedInAdBrainDisplayValue = isAnyProteinChangedInAdBrainDisplayValue; + } + + public GeneDto nominatedTargetDisplayValue(Boolean nominatedTargetDisplayValue) { + this.nominatedTargetDisplayValue = nominatedTargetDisplayValue; + return this; + } + + /** + * Get nominatedTargetDisplayValue + * @return nominatedTargetDisplayValue + */ + + @Schema(name = "nominated_target_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("nominated_target_display_value") + public Boolean getNominatedTargetDisplayValue() { + return nominatedTargetDisplayValue; + } + + public void setNominatedTargetDisplayValue(Boolean nominatedTargetDisplayValue) { + this.nominatedTargetDisplayValue = nominatedTargetDisplayValue; + } + + public GeneDto initialNominationDisplayValue(Integer initialNominationDisplayValue) { + this.initialNominationDisplayValue = initialNominationDisplayValue; + return this; + } + + /** + * Get initialNominationDisplayValue + * @return initialNominationDisplayValue + */ + + @Schema(name = "initial_nomination_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("initial_nomination_display_value") + public Integer getInitialNominationDisplayValue() { + return initialNominationDisplayValue; + } + + public void setInitialNominationDisplayValue(Integer initialNominationDisplayValue) { + this.initialNominationDisplayValue = initialNominationDisplayValue; + } + + public GeneDto teamsDisplayValue(String teamsDisplayValue) { + this.teamsDisplayValue = teamsDisplayValue; + return this; + } + + /** + * Get teamsDisplayValue + * @return teamsDisplayValue + */ + + @Schema(name = "teams_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("teams_display_value") + public String getTeamsDisplayValue() { + return teamsDisplayValue; + } + + public void setTeamsDisplayValue(String teamsDisplayValue) { + this.teamsDisplayValue = teamsDisplayValue; + } + + public GeneDto studyDisplayValue(String studyDisplayValue) { + this.studyDisplayValue = studyDisplayValue; + return this; + } + + /** + * Get studyDisplayValue + * @return studyDisplayValue + */ + + @Schema(name = "study_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("study_display_value") + public String getStudyDisplayValue() { + return studyDisplayValue; + } + + public void setStudyDisplayValue(String studyDisplayValue) { + this.studyDisplayValue = studyDisplayValue; + } + + public GeneDto programsDisplayValue(String programsDisplayValue) { + this.programsDisplayValue = programsDisplayValue; + return this; + } + + /** + * Get programsDisplayValue + * @return programsDisplayValue + */ + + @Schema(name = "programs_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("programs_display_value") + public String getProgramsDisplayValue() { + return programsDisplayValue; + } + + public void setProgramsDisplayValue(String programsDisplayValue) { + this.programsDisplayValue = programsDisplayValue; + } + + public GeneDto inputDataDisplayValue(String inputDataDisplayValue) { + this.inputDataDisplayValue = inputDataDisplayValue; + return this; + } + + /** + * Get inputDataDisplayValue + * @return inputDataDisplayValue + */ + + @Schema(name = "input_data_display_value", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("input_data_display_value") + public String getInputDataDisplayValue() { + return inputDataDisplayValue; + } + + public void setInputDataDisplayValue(String inputDataDisplayValue) { + this.inputDataDisplayValue = inputDataDisplayValue; + } + + public GeneDto bioDomains(BioDomainsDto bioDomains) { + this.bioDomains = bioDomains; + return this; + } + + /** + * Get bioDomains + * @return bioDomains + */ + @Valid + @Schema(name = "bio_domains", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("bio_domains") + public BioDomainsDto getBioDomains() { + return bioDomains; + } + + public void setBioDomains(BioDomainsDto bioDomains) { + this.bioDomains = bioDomains; + } + + public GeneDto ensemblInfo(EnsemblInfoDto ensemblInfo) { + this.ensemblInfo = ensemblInfo; + return this; + } + + /** + * Get ensemblInfo + * @return ensemblInfo + */ + @NotNull @Valid + @Schema(name = "ensembl_info", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_info") + public EnsemblInfoDto getEnsemblInfo() { + return ensemblInfo; + } + + public void setEnsemblInfo(EnsemblInfoDto ensemblInfo) { + this.ensemblInfo = ensemblInfo; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GeneDto gene = (GeneDto) o; + return Objects.equals(this.id, gene.id) && + Objects.equals(this.ensemblGeneId, gene.ensemblGeneId) && + Objects.equals(this.name, gene.name) && + Objects.equals(this.summary, gene.summary) && + Objects.equals(this.hgncSymbol, gene.hgncSymbol) && + Objects.equals(this.alias, gene.alias) && + Objects.equals(this.isIgap, gene.isIgap) && + Objects.equals(this.isEqtl, gene.isEqtl) && + Objects.equals(this.isAnyRnaChangedInAdBrain, gene.isAnyRnaChangedInAdBrain) && + Objects.equals(this.rnaBrainChangeStudied, gene.rnaBrainChangeStudied) && + Objects.equals(this.isAnyProteinChangedInAdBrain, gene.isAnyProteinChangedInAdBrain) && + Objects.equals(this.proteinBrainChangeStudied, gene.proteinBrainChangeStudied) && + Objects.equals(this.targetNominations, gene.targetNominations) && + Objects.equals(this.medianExpression, gene.medianExpression) && + Objects.equals(this.druggability, gene.druggability) && + Objects.equals(this.totalNominations, gene.totalNominations) && + Objects.equals(this.isAdi, gene.isAdi) && + Objects.equals(this.isTep, gene.isTep) && + Objects.equals(this.resourceUrl, gene.resourceUrl) && + Objects.equals(this.rnaDifferentialExpression, gene.rnaDifferentialExpression) && + Objects.equals(this.proteomicsLFQ, gene.proteomicsLFQ) && + Objects.equals(this.proteomicsSRM, gene.proteomicsSRM) && + Objects.equals(this.proteomicsTMT, gene.proteomicsTMT) && + Objects.equals(this.metabolomics, gene.metabolomics) && + Objects.equals(this.overallScores, gene.overallScores) && + Objects.equals(this.neuropathologicCorrelations, gene.neuropathologicCorrelations) && + Objects.equals(this.experimentalValidation, gene.experimentalValidation) && + Objects.equals(this.links, gene.links) && + Objects.equals(this.similarGenesNetwork, gene.similarGenesNetwork) && + Objects.equals(this.abModalityDisplayValue, gene.abModalityDisplayValue) && + Objects.equals(this.safetyRatingDisplayValue, gene.safetyRatingDisplayValue) && + Objects.equals(this.smDruggabilityDisplayValue, gene.smDruggabilityDisplayValue) && + Objects.equals(this.pharosClassDisplayValue, gene.pharosClassDisplayValue) && + Objects.equals(this.isAnyRnaChangedInAdBrainDisplayValue, gene.isAnyRnaChangedInAdBrainDisplayValue) && + Objects.equals(this.isAnyProteinChangedInAdBrainDisplayValue, gene.isAnyProteinChangedInAdBrainDisplayValue) && + Objects.equals(this.nominatedTargetDisplayValue, gene.nominatedTargetDisplayValue) && + Objects.equals(this.initialNominationDisplayValue, gene.initialNominationDisplayValue) && + Objects.equals(this.teamsDisplayValue, gene.teamsDisplayValue) && + Objects.equals(this.studyDisplayValue, gene.studyDisplayValue) && + Objects.equals(this.programsDisplayValue, gene.programsDisplayValue) && + Objects.equals(this.inputDataDisplayValue, gene.inputDataDisplayValue) && + Objects.equals(this.bioDomains, gene.bioDomains) && + Objects.equals(this.ensemblInfo, gene.ensemblInfo); + } + + @Override + public int hashCode() { + return Objects.hash(id, ensemblGeneId, name, summary, hgncSymbol, alias, isIgap, isEqtl, isAnyRnaChangedInAdBrain, rnaBrainChangeStudied, isAnyProteinChangedInAdBrain, proteinBrainChangeStudied, targetNominations, medianExpression, druggability, totalNominations, isAdi, isTep, resourceUrl, rnaDifferentialExpression, proteomicsLFQ, proteomicsSRM, proteomicsTMT, metabolomics, overallScores, neuropathologicCorrelations, experimentalValidation, links, similarGenesNetwork, abModalityDisplayValue, safetyRatingDisplayValue, smDruggabilityDisplayValue, pharosClassDisplayValue, isAnyRnaChangedInAdBrainDisplayValue, isAnyProteinChangedInAdBrainDisplayValue, nominatedTargetDisplayValue, initialNominationDisplayValue, teamsDisplayValue, studyDisplayValue, programsDisplayValue, inputDataDisplayValue, bioDomains, ensemblInfo); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GeneDto {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" summary: ").append(toIndentedString(summary)).append("\n"); + sb.append(" hgncSymbol: ").append(toIndentedString(hgncSymbol)).append("\n"); + sb.append(" alias: ").append(toIndentedString(alias)).append("\n"); + sb.append(" isIgap: ").append(toIndentedString(isIgap)).append("\n"); + sb.append(" isEqtl: ").append(toIndentedString(isEqtl)).append("\n"); + sb.append(" isAnyRnaChangedInAdBrain: ").append(toIndentedString(isAnyRnaChangedInAdBrain)).append("\n"); + sb.append(" rnaBrainChangeStudied: ").append(toIndentedString(rnaBrainChangeStudied)).append("\n"); + sb.append(" isAnyProteinChangedInAdBrain: ").append(toIndentedString(isAnyProteinChangedInAdBrain)).append("\n"); + sb.append(" proteinBrainChangeStudied: ").append(toIndentedString(proteinBrainChangeStudied)).append("\n"); + sb.append(" targetNominations: ").append(toIndentedString(targetNominations)).append("\n"); + sb.append(" medianExpression: ").append(toIndentedString(medianExpression)).append("\n"); + sb.append(" druggability: ").append(toIndentedString(druggability)).append("\n"); + sb.append(" totalNominations: ").append(toIndentedString(totalNominations)).append("\n"); + sb.append(" isAdi: ").append(toIndentedString(isAdi)).append("\n"); + sb.append(" isTep: ").append(toIndentedString(isTep)).append("\n"); + sb.append(" resourceUrl: ").append(toIndentedString(resourceUrl)).append("\n"); + sb.append(" rnaDifferentialExpression: ").append(toIndentedString(rnaDifferentialExpression)).append("\n"); + sb.append(" proteomicsLFQ: ").append(toIndentedString(proteomicsLFQ)).append("\n"); + sb.append(" proteomicsSRM: ").append(toIndentedString(proteomicsSRM)).append("\n"); + sb.append(" proteomicsTMT: ").append(toIndentedString(proteomicsTMT)).append("\n"); + sb.append(" metabolomics: ").append(toIndentedString(metabolomics)).append("\n"); + sb.append(" overallScores: ").append(toIndentedString(overallScores)).append("\n"); + sb.append(" neuropathologicCorrelations: ").append(toIndentedString(neuropathologicCorrelations)).append("\n"); + sb.append(" experimentalValidation: ").append(toIndentedString(experimentalValidation)).append("\n"); + sb.append(" links: ").append(toIndentedString(links)).append("\n"); + sb.append(" similarGenesNetwork: ").append(toIndentedString(similarGenesNetwork)).append("\n"); + sb.append(" abModalityDisplayValue: ").append(toIndentedString(abModalityDisplayValue)).append("\n"); + sb.append(" safetyRatingDisplayValue: ").append(toIndentedString(safetyRatingDisplayValue)).append("\n"); + sb.append(" smDruggabilityDisplayValue: ").append(toIndentedString(smDruggabilityDisplayValue)).append("\n"); + sb.append(" pharosClassDisplayValue: ").append(toIndentedString(pharosClassDisplayValue)).append("\n"); + sb.append(" isAnyRnaChangedInAdBrainDisplayValue: ").append(toIndentedString(isAnyRnaChangedInAdBrainDisplayValue)).append("\n"); + sb.append(" isAnyProteinChangedInAdBrainDisplayValue: ").append(toIndentedString(isAnyProteinChangedInAdBrainDisplayValue)).append("\n"); + sb.append(" nominatedTargetDisplayValue: ").append(toIndentedString(nominatedTargetDisplayValue)).append("\n"); + sb.append(" initialNominationDisplayValue: ").append(toIndentedString(initialNominationDisplayValue)).append("\n"); + sb.append(" teamsDisplayValue: ").append(toIndentedString(teamsDisplayValue)).append("\n"); + sb.append(" studyDisplayValue: ").append(toIndentedString(studyDisplayValue)).append("\n"); + sb.append(" programsDisplayValue: ").append(toIndentedString(programsDisplayValue)).append("\n"); + sb.append(" inputDataDisplayValue: ").append(toIndentedString(inputDataDisplayValue)).append("\n"); + sb.append(" bioDomains: ").append(toIndentedString(bioDomains)).append("\n"); + sb.append(" ensemblInfo: ").append(toIndentedString(ensemblInfo)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/MedianExpressionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/MedianExpressionDto.java new file mode 100644 index 0000000000..ebef9a3842 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/MedianExpressionDto.java @@ -0,0 +1,241 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * MedianExpression + */ + +@Schema(name = "MedianExpression", description = "MedianExpression") +@JsonTypeName("MedianExpression") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class MedianExpressionDto { + + private Float min; + + private Float firstQuartile; + + private Float median; + + private Float mean; + + private Float thirdQuartile; + + private Float max; + + private String tissue; + + public MedianExpressionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public MedianExpressionDto(String tissue) { + this.tissue = tissue; + } + + public MedianExpressionDto min(Float min) { + this.min = min; + return this; + } + + /** + * Get min + * @return min + */ + + @Schema(name = "min", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("min") + public Float getMin() { + return min; + } + + public void setMin(Float min) { + this.min = min; + } + + public MedianExpressionDto firstQuartile(Float firstQuartile) { + this.firstQuartile = firstQuartile; + return this; + } + + /** + * Get firstQuartile + * @return firstQuartile + */ + + @Schema(name = "first_quartile", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("first_quartile") + public Float getFirstQuartile() { + return firstQuartile; + } + + public void setFirstQuartile(Float firstQuartile) { + this.firstQuartile = firstQuartile; + } + + public MedianExpressionDto median(Float median) { + this.median = median; + return this; + } + + /** + * Get median + * @return median + */ + + @Schema(name = "median", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("median") + public Float getMedian() { + return median; + } + + public void setMedian(Float median) { + this.median = median; + } + + public MedianExpressionDto mean(Float mean) { + this.mean = mean; + return this; + } + + /** + * Get mean + * @return mean + */ + + @Schema(name = "mean", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("mean") + public Float getMean() { + return mean; + } + + public void setMean(Float mean) { + this.mean = mean; + } + + public MedianExpressionDto thirdQuartile(Float thirdQuartile) { + this.thirdQuartile = thirdQuartile; + return this; + } + + /** + * Get thirdQuartile + * @return thirdQuartile + */ + + @Schema(name = "third_quartile", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("third_quartile") + public Float getThirdQuartile() { + return thirdQuartile; + } + + public void setThirdQuartile(Float thirdQuartile) { + this.thirdQuartile = thirdQuartile; + } + + public MedianExpressionDto max(Float max) { + this.max = max; + return this; + } + + /** + * Get max + * @return max + */ + + @Schema(name = "max", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("max") + public Float getMax() { + return max; + } + + public void setMax(Float max) { + this.max = max; + } + + public MedianExpressionDto tissue(String tissue) { + this.tissue = tissue; + return this; + } + + /** + * Get tissue + * @return tissue + */ + @NotNull + @Schema(name = "tissue", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("tissue") + public String getTissue() { + return tissue; + } + + public void setTissue(String tissue) { + this.tissue = tissue; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MedianExpressionDto medianExpression = (MedianExpressionDto) o; + return Objects.equals(this.min, medianExpression.min) && + Objects.equals(this.firstQuartile, medianExpression.firstQuartile) && + Objects.equals(this.median, medianExpression.median) && + Objects.equals(this.mean, medianExpression.mean) && + Objects.equals(this.thirdQuartile, medianExpression.thirdQuartile) && + Objects.equals(this.max, medianExpression.max) && + Objects.equals(this.tissue, medianExpression.tissue); + } + + @Override + public int hashCode() { + return Objects.hash(min, firstQuartile, median, mean, thirdQuartile, max, tissue); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MedianExpressionDto {\n"); + sb.append(" min: ").append(toIndentedString(min)).append("\n"); + sb.append(" firstQuartile: ").append(toIndentedString(firstQuartile)).append("\n"); + sb.append(" median: ").append(toIndentedString(median)).append("\n"); + sb.append(" mean: ").append(toIndentedString(mean)).append("\n"); + sb.append(" thirdQuartile: ").append(toIndentedString(thirdQuartile)).append("\n"); + sb.append(" max: ").append(toIndentedString(max)).append("\n"); + sb.append(" tissue: ").append(toIndentedString(tissue)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NeuropathologicCorrelationDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NeuropathologicCorrelationDto.java new file mode 100644 index 0000000000..a980bff901 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NeuropathologicCorrelationDto.java @@ -0,0 +1,298 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * NeuropathologicCorrelation + */ + +@Schema(name = "NeuropathologicCorrelation", description = "NeuropathologicCorrelation") +@JsonTypeName("NeuropathologicCorrelation") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class NeuropathologicCorrelationDto { + + private String id; + + private String ensg; + + private String gname; + + private BigDecimal oddsratio; + + private BigDecimal ciLower; + + private BigDecimal ciUpper; + + private BigDecimal pval; + + private BigDecimal pvalAdj; + + private String neuropathType; + + public NeuropathologicCorrelationDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public NeuropathologicCorrelationDto(String id, String ensg, String gname, BigDecimal oddsratio, BigDecimal ciLower, BigDecimal ciUpper, BigDecimal pval, BigDecimal pvalAdj, String neuropathType) { + this.id = id; + this.ensg = ensg; + this.gname = gname; + this.oddsratio = oddsratio; + this.ciLower = ciLower; + this.ciUpper = ciUpper; + this.pval = pval; + this.pvalAdj = pvalAdj; + this.neuropathType = neuropathType; + } + + public NeuropathologicCorrelationDto id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + */ + @NotNull + @Schema(name = "_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("_id") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public NeuropathologicCorrelationDto ensg(String ensg) { + this.ensg = ensg; + return this; + } + + /** + * Get ensg + * @return ensg + */ + @NotNull + @Schema(name = "ensg", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensg") + public String getEnsg() { + return ensg; + } + + public void setEnsg(String ensg) { + this.ensg = ensg; + } + + public NeuropathologicCorrelationDto gname(String gname) { + this.gname = gname; + return this; + } + + /** + * Get gname + * @return gname + */ + @NotNull + @Schema(name = "gname", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("gname") + public String getGname() { + return gname; + } + + public void setGname(String gname) { + this.gname = gname; + } + + public NeuropathologicCorrelationDto oddsratio(BigDecimal oddsratio) { + this.oddsratio = oddsratio; + return this; + } + + /** + * Get oddsratio + * @return oddsratio + */ + @NotNull @Valid + @Schema(name = "oddsratio", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("oddsratio") + public BigDecimal getOddsratio() { + return oddsratio; + } + + public void setOddsratio(BigDecimal oddsratio) { + this.oddsratio = oddsratio; + } + + public NeuropathologicCorrelationDto ciLower(BigDecimal ciLower) { + this.ciLower = ciLower; + return this; + } + + /** + * Get ciLower + * @return ciLower + */ + @NotNull @Valid + @Schema(name = "ci_lower", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_lower") + public BigDecimal getCiLower() { + return ciLower; + } + + public void setCiLower(BigDecimal ciLower) { + this.ciLower = ciLower; + } + + public NeuropathologicCorrelationDto ciUpper(BigDecimal ciUpper) { + this.ciUpper = ciUpper; + return this; + } + + /** + * Get ciUpper + * @return ciUpper + */ + @NotNull @Valid + @Schema(name = "ci_upper", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_upper") + public BigDecimal getCiUpper() { + return ciUpper; + } + + public void setCiUpper(BigDecimal ciUpper) { + this.ciUpper = ciUpper; + } + + public NeuropathologicCorrelationDto pval(BigDecimal pval) { + this.pval = pval; + return this; + } + + /** + * Get pval + * @return pval + */ + @NotNull @Valid + @Schema(name = "pval", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("pval") + public BigDecimal getPval() { + return pval; + } + + public void setPval(BigDecimal pval) { + this.pval = pval; + } + + public NeuropathologicCorrelationDto pvalAdj(BigDecimal pvalAdj) { + this.pvalAdj = pvalAdj; + return this; + } + + /** + * Get pvalAdj + * @return pvalAdj + */ + @NotNull @Valid + @Schema(name = "pval_adj", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("pval_adj") + public BigDecimal getPvalAdj() { + return pvalAdj; + } + + public void setPvalAdj(BigDecimal pvalAdj) { + this.pvalAdj = pvalAdj; + } + + public NeuropathologicCorrelationDto neuropathType(String neuropathType) { + this.neuropathType = neuropathType; + return this; + } + + /** + * Get neuropathType + * @return neuropathType + */ + @NotNull + @Schema(name = "neuropath_type", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("neuropath_type") + public String getNeuropathType() { + return neuropathType; + } + + public void setNeuropathType(String neuropathType) { + this.neuropathType = neuropathType; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + NeuropathologicCorrelationDto neuropathologicCorrelation = (NeuropathologicCorrelationDto) o; + return Objects.equals(this.id, neuropathologicCorrelation.id) && + Objects.equals(this.ensg, neuropathologicCorrelation.ensg) && + Objects.equals(this.gname, neuropathologicCorrelation.gname) && + Objects.equals(this.oddsratio, neuropathologicCorrelation.oddsratio) && + Objects.equals(this.ciLower, neuropathologicCorrelation.ciLower) && + Objects.equals(this.ciUpper, neuropathologicCorrelation.ciUpper) && + Objects.equals(this.pval, neuropathologicCorrelation.pval) && + Objects.equals(this.pvalAdj, neuropathologicCorrelation.pvalAdj) && + Objects.equals(this.neuropathType, neuropathologicCorrelation.neuropathType); + } + + @Override + public int hashCode() { + return Objects.hash(id, ensg, gname, oddsratio, ciLower, ciUpper, pval, pvalAdj, neuropathType); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class NeuropathologicCorrelationDto {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" ensg: ").append(toIndentedString(ensg)).append("\n"); + sb.append(" gname: ").append(toIndentedString(gname)).append("\n"); + sb.append(" oddsratio: ").append(toIndentedString(oddsratio)).append("\n"); + sb.append(" ciLower: ").append(toIndentedString(ciLower)).append("\n"); + sb.append(" ciUpper: ").append(toIndentedString(ciUpper)).append("\n"); + sb.append(" pval: ").append(toIndentedString(pval)).append("\n"); + sb.append(" pvalAdj: ").append(toIndentedString(pvalAdj)).append("\n"); + sb.append(" neuropathType: ").append(toIndentedString(neuropathType)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NominatedGenesListDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NominatedGenesListDto.java new file mode 100644 index 0000000000..627ba2a43f --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/NominatedGenesListDto.java @@ -0,0 +1,99 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.GeneDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * List of nominated genes + */ + +@Schema(name = "NominatedGenesList", description = "List of nominated genes") +@JsonTypeName("NominatedGenesList") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class NominatedGenesListDto { + + @Valid + private List<@Valid GeneDto> items; + + public NominatedGenesListDto items(List<@Valid GeneDto> items) { + this.items = items; + return this; + } + + public NominatedGenesListDto addItemsItem(GeneDto itemsItem) { + if (this.items == null) { + this.items = new ArrayList<>(); + } + this.items.add(itemsItem); + return this; + } + + /** + * Get items + * @return items + */ + @Valid + @Schema(name = "items", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("items") + public List<@Valid GeneDto> getItems() { + return items; + } + + public void setItems(List<@Valid GeneDto> items) { + this.items = items; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + NominatedGenesListDto nominatedGenesList = (NominatedGenesListDto) o; + return Objects.equals(this.items, nominatedGenesList.items); + } + + @Override + public int hashCode() { + return Objects.hash(items); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class NominatedGenesListDto {\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDistributionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDistributionDto.java new file mode 100644 index 0000000000..bea88390bb --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDistributionDto.java @@ -0,0 +1,219 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Distributions + */ + +@Schema(name = "OverallScoresDistribution", description = "Distributions") +@JsonTypeName("OverallScoresDistribution") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class OverallScoresDistributionDto { + + @Valid + private List distribution = new ArrayList<>(); + + @Valid + private List> bins = new ArrayList<>(); + + private String name; + + private String synId; + + private String wikiId; + + public OverallScoresDistributionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public OverallScoresDistributionDto(List distribution, List> bins, String name, String synId, String wikiId) { + this.distribution = distribution; + this.bins = bins; + this.name = name; + this.synId = synId; + this.wikiId = wikiId; + } + + public OverallScoresDistributionDto distribution(List distribution) { + this.distribution = distribution; + return this; + } + + public OverallScoresDistributionDto addDistributionItem(BigDecimal distributionItem) { + if (this.distribution == null) { + this.distribution = new ArrayList<>(); + } + this.distribution.add(distributionItem); + return this; + } + + /** + * Distribution of overall scores + * @return distribution + */ + @NotNull @Valid + @Schema(name = "distribution", description = "Distribution of overall scores", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("distribution") + public List getDistribution() { + return distribution; + } + + public void setDistribution(List distribution) { + this.distribution = distribution; + } + + public OverallScoresDistributionDto bins(List> bins) { + this.bins = bins; + return this; + } + + public OverallScoresDistributionDto addBinsItem(List binsItem) { + if (this.bins == null) { + this.bins = new ArrayList<>(); + } + this.bins.add(binsItem); + return this; + } + + /** + * Bins used in the distribution + * @return bins + */ + @NotNull @Valid + @Schema(name = "bins", description = "Bins used in the distribution", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("bins") + public List> getBins() { + return bins; + } + + public void setBins(List> bins) { + this.bins = bins; + } + + public OverallScoresDistributionDto name(String name) { + this.name = name; + return this; + } + + /** + * Name of the score distribution + * @return name + */ + @NotNull + @Schema(name = "name", description = "Name of the score distribution", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public OverallScoresDistributionDto synId(String synId) { + this.synId = synId; + return this; + } + + /** + * Synapse ID associated with the score + * @return synId + */ + @NotNull + @Schema(name = "syn_id", description = "Synapse ID associated with the score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("syn_id") + public String getSynId() { + return synId; + } + + public void setSynId(String synId) { + this.synId = synId; + } + + public OverallScoresDistributionDto wikiId(String wikiId) { + this.wikiId = wikiId; + return this; + } + + /** + * Wiki ID associated with the score + * @return wikiId + */ + @NotNull + @Schema(name = "wiki_id", description = "Wiki ID associated with the score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("wiki_id") + public String getWikiId() { + return wikiId; + } + + public void setWikiId(String wikiId) { + this.wikiId = wikiId; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + OverallScoresDistributionDto overallScoresDistribution = (OverallScoresDistributionDto) o; + return Objects.equals(this.distribution, overallScoresDistribution.distribution) && + Objects.equals(this.bins, overallScoresDistribution.bins) && + Objects.equals(this.name, overallScoresDistribution.name) && + Objects.equals(this.synId, overallScoresDistribution.synId) && + Objects.equals(this.wikiId, overallScoresDistribution.wikiId); + } + + @Override + public int hashCode() { + return Objects.hash(distribution, bins, name, synId, wikiId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class OverallScoresDistributionDto {\n"); + sb.append(" distribution: ").append(toIndentedString(distribution)).append("\n"); + sb.append(" bins: ").append(toIndentedString(bins)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" synId: ").append(toIndentedString(synId)).append("\n"); + sb.append(" wikiId: ").append(toIndentedString(wikiId)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDto.java new file mode 100644 index 0000000000..6646e29059 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/OverallScoresDto.java @@ -0,0 +1,198 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * OverallScores + */ + +@Schema(name = "OverallScores", description = "OverallScores") +@JsonTypeName("OverallScores") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class OverallScoresDto { + + private String ensemblGeneId; + + private BigDecimal targetRiskScore; + + private BigDecimal geneticsScore; + + private BigDecimal multiOmicsScore; + + private BigDecimal literatureScore; + + public OverallScoresDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public OverallScoresDto(String ensemblGeneId, BigDecimal targetRiskScore, BigDecimal geneticsScore, BigDecimal multiOmicsScore, BigDecimal literatureScore) { + this.ensemblGeneId = ensemblGeneId; + this.targetRiskScore = targetRiskScore; + this.geneticsScore = geneticsScore; + this.multiOmicsScore = multiOmicsScore; + this.literatureScore = literatureScore; + } + + public OverallScoresDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * Get ensemblGeneId + * @return ensemblGeneId + */ + @NotNull + @Schema(name = "ensembl_gene_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public OverallScoresDto targetRiskScore(BigDecimal targetRiskScore) { + this.targetRiskScore = targetRiskScore; + return this; + } + + /** + * Get targetRiskScore + * @return targetRiskScore + */ + @NotNull @Valid + @Schema(name = "target_risk_score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("target_risk_score") + public BigDecimal getTargetRiskScore() { + return targetRiskScore; + } + + public void setTargetRiskScore(BigDecimal targetRiskScore) { + this.targetRiskScore = targetRiskScore; + } + + public OverallScoresDto geneticsScore(BigDecimal geneticsScore) { + this.geneticsScore = geneticsScore; + return this; + } + + /** + * Get geneticsScore + * @return geneticsScore + */ + @NotNull @Valid + @Schema(name = "genetics_score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("genetics_score") + public BigDecimal getGeneticsScore() { + return geneticsScore; + } + + public void setGeneticsScore(BigDecimal geneticsScore) { + this.geneticsScore = geneticsScore; + } + + public OverallScoresDto multiOmicsScore(BigDecimal multiOmicsScore) { + this.multiOmicsScore = multiOmicsScore; + return this; + } + + /** + * Get multiOmicsScore + * @return multiOmicsScore + */ + @NotNull @Valid + @Schema(name = "multi_omics_score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("multi_omics_score") + public BigDecimal getMultiOmicsScore() { + return multiOmicsScore; + } + + public void setMultiOmicsScore(BigDecimal multiOmicsScore) { + this.multiOmicsScore = multiOmicsScore; + } + + public OverallScoresDto literatureScore(BigDecimal literatureScore) { + this.literatureScore = literatureScore; + return this; + } + + /** + * Get literatureScore + * @return literatureScore + */ + @NotNull @Valid + @Schema(name = "literature_score", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("literature_score") + public BigDecimal getLiteratureScore() { + return literatureScore; + } + + public void setLiteratureScore(BigDecimal literatureScore) { + this.literatureScore = literatureScore; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + OverallScoresDto overallScores = (OverallScoresDto) o; + return Objects.equals(this.ensemblGeneId, overallScores.ensemblGeneId) && + Objects.equals(this.targetRiskScore, overallScores.targetRiskScore) && + Objects.equals(this.geneticsScore, overallScores.geneticsScore) && + Objects.equals(this.multiOmicsScore, overallScores.multiOmicsScore) && + Objects.equals(this.literatureScore, overallScores.literatureScore); + } + + @Override + public int hashCode() { + return Objects.hash(ensemblGeneId, targetRiskScore, geneticsScore, multiOmicsScore, literatureScore); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class OverallScoresDto {\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" targetRiskScore: ").append(toIndentedString(targetRiskScore)).append("\n"); + sb.append(" geneticsScore: ").append(toIndentedString(geneticsScore)).append("\n"); + sb.append(" multiOmicsScore: ").append(toIndentedString(multiOmicsScore)).append("\n"); + sb.append(" literatureScore: ").append(toIndentedString(literatureScore)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteinDifferentialExpressionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteinDifferentialExpressionDto.java new file mode 100644 index 0000000000..af60dbb0ab --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteinDifferentialExpressionDto.java @@ -0,0 +1,348 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * ProteinDifferentialExpression + */ + +@Schema(name = "ProteinDifferentialExpression", description = "ProteinDifferentialExpression") +@JsonTypeName("ProteinDifferentialExpression") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class ProteinDifferentialExpressionDto { + + private String id; + + private String uniqid; + + private String hgncSymbol; + + private String uniprotid; + + private String ensemblGeneId; + + private String tissue; + + private BigDecimal log2Fc; + + private BigDecimal ciUpr; + + private BigDecimal ciLwr; + + private BigDecimal pval; + + private BigDecimal corPval; + + public ProteinDifferentialExpressionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public ProteinDifferentialExpressionDto(String id, String uniqid, String hgncSymbol, String uniprotid, String ensemblGeneId, String tissue, BigDecimal log2Fc, BigDecimal ciUpr, BigDecimal ciLwr, BigDecimal pval, BigDecimal corPval) { + this.id = id; + this.uniqid = uniqid; + this.hgncSymbol = hgncSymbol; + this.uniprotid = uniprotid; + this.ensemblGeneId = ensemblGeneId; + this.tissue = tissue; + this.log2Fc = log2Fc; + this.ciUpr = ciUpr; + this.ciLwr = ciLwr; + this.pval = pval; + this.corPval = corPval; + } + + public ProteinDifferentialExpressionDto id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + */ + @NotNull + @Schema(name = "_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("_id") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ProteinDifferentialExpressionDto uniqid(String uniqid) { + this.uniqid = uniqid; + return this; + } + + /** + * Get uniqid + * @return uniqid + */ + @NotNull + @Schema(name = "uniqid", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("uniqid") + public String getUniqid() { + return uniqid; + } + + public void setUniqid(String uniqid) { + this.uniqid = uniqid; + } + + public ProteinDifferentialExpressionDto hgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + return this; + } + + /** + * Get hgncSymbol + * @return hgncSymbol + */ + @NotNull + @Schema(name = "hgnc_symbol", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("hgnc_symbol") + public String getHgncSymbol() { + return hgncSymbol; + } + + public void setHgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + } + + public ProteinDifferentialExpressionDto uniprotid(String uniprotid) { + this.uniprotid = uniprotid; + return this; + } + + /** + * Get uniprotid + * @return uniprotid + */ + @NotNull + @Schema(name = "uniprotid", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("uniprotid") + public String getUniprotid() { + return uniprotid; + } + + public void setUniprotid(String uniprotid) { + this.uniprotid = uniprotid; + } + + public ProteinDifferentialExpressionDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * Get ensemblGeneId + * @return ensemblGeneId + */ + @NotNull + @Schema(name = "ensembl_gene_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public ProteinDifferentialExpressionDto tissue(String tissue) { + this.tissue = tissue; + return this; + } + + /** + * Get tissue + * @return tissue + */ + @NotNull + @Schema(name = "tissue", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("tissue") + public String getTissue() { + return tissue; + } + + public void setTissue(String tissue) { + this.tissue = tissue; + } + + public ProteinDifferentialExpressionDto log2Fc(BigDecimal log2Fc) { + this.log2Fc = log2Fc; + return this; + } + + /** + * Get log2Fc + * @return log2Fc + */ + @NotNull @Valid + @Schema(name = "log2_fc", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("log2_fc") + public BigDecimal getLog2Fc() { + return log2Fc; + } + + public void setLog2Fc(BigDecimal log2Fc) { + this.log2Fc = log2Fc; + } + + public ProteinDifferentialExpressionDto ciUpr(BigDecimal ciUpr) { + this.ciUpr = ciUpr; + return this; + } + + /** + * Get ciUpr + * @return ciUpr + */ + @NotNull @Valid + @Schema(name = "ci_upr", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_upr") + public BigDecimal getCiUpr() { + return ciUpr; + } + + public void setCiUpr(BigDecimal ciUpr) { + this.ciUpr = ciUpr; + } + + public ProteinDifferentialExpressionDto ciLwr(BigDecimal ciLwr) { + this.ciLwr = ciLwr; + return this; + } + + /** + * Get ciLwr + * @return ciLwr + */ + @NotNull @Valid + @Schema(name = "ci_lwr", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_lwr") + public BigDecimal getCiLwr() { + return ciLwr; + } + + public void setCiLwr(BigDecimal ciLwr) { + this.ciLwr = ciLwr; + } + + public ProteinDifferentialExpressionDto pval(BigDecimal pval) { + this.pval = pval; + return this; + } + + /** + * Get pval + * @return pval + */ + @NotNull @Valid + @Schema(name = "pval", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("pval") + public BigDecimal getPval() { + return pval; + } + + public void setPval(BigDecimal pval) { + this.pval = pval; + } + + public ProteinDifferentialExpressionDto corPval(BigDecimal corPval) { + this.corPval = corPval; + return this; + } + + /** + * Get corPval + * @return corPval + */ + @NotNull @Valid + @Schema(name = "cor_pval", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("cor_pval") + public BigDecimal getCorPval() { + return corPval; + } + + public void setCorPval(BigDecimal corPval) { + this.corPval = corPval; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ProteinDifferentialExpressionDto proteinDifferentialExpression = (ProteinDifferentialExpressionDto) o; + return Objects.equals(this.id, proteinDifferentialExpression.id) && + Objects.equals(this.uniqid, proteinDifferentialExpression.uniqid) && + Objects.equals(this.hgncSymbol, proteinDifferentialExpression.hgncSymbol) && + Objects.equals(this.uniprotid, proteinDifferentialExpression.uniprotid) && + Objects.equals(this.ensemblGeneId, proteinDifferentialExpression.ensemblGeneId) && + Objects.equals(this.tissue, proteinDifferentialExpression.tissue) && + Objects.equals(this.log2Fc, proteinDifferentialExpression.log2Fc) && + Objects.equals(this.ciUpr, proteinDifferentialExpression.ciUpr) && + Objects.equals(this.ciLwr, proteinDifferentialExpression.ciLwr) && + Objects.equals(this.pval, proteinDifferentialExpression.pval) && + Objects.equals(this.corPval, proteinDifferentialExpression.corPval); + } + + @Override + public int hashCode() { + return Objects.hash(id, uniqid, hgncSymbol, uniprotid, ensemblGeneId, tissue, log2Fc, ciUpr, ciLwr, pval, corPval); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ProteinDifferentialExpressionDto {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" uniqid: ").append(toIndentedString(uniqid)).append("\n"); + sb.append(" hgncSymbol: ").append(toIndentedString(hgncSymbol)).append("\n"); + sb.append(" uniprotid: ").append(toIndentedString(uniprotid)).append("\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" tissue: ").append(toIndentedString(tissue)).append("\n"); + sb.append(" log2Fc: ").append(toIndentedString(log2Fc)).append("\n"); + sb.append(" ciUpr: ").append(toIndentedString(ciUpr)).append("\n"); + sb.append(" ciLwr: ").append(toIndentedString(ciLwr)).append("\n"); + sb.append(" pval: ").append(toIndentedString(pval)).append("\n"); + sb.append(" corPval: ").append(toIndentedString(corPval)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteomicsDistributionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteomicsDistributionDto.java new file mode 100644 index 0000000000..c2f61c1197 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/ProteomicsDistributionDto.java @@ -0,0 +1,97 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Distributions + */ + +@Schema(name = "ProteomicsDistribution", description = "Distributions") +@JsonTypeName("ProteomicsDistribution") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class ProteomicsDistributionDto { + + private String type; + + public ProteomicsDistributionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public ProteomicsDistributionDto(String type) { + this.type = type; + } + + public ProteomicsDistributionDto type(String type) { + this.type = type; + return this; + } + + /** + * Type of proteomics distribution (e.g., LFQ, SRM, TMT) + * @return type + */ + @NotNull + @Schema(name = "type", description = "Type of proteomics distribution (e.g., LFQ, SRM, TMT)", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("type") + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ProteomicsDistributionDto proteomicsDistribution = (ProteomicsDistributionDto) o; + return Objects.equals(this.type, proteomicsDistribution.type); + } + + @Override + public int hashCode() { + return Objects.hash(type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ProteomicsDistributionDto {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDifferentialExpressionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDifferentialExpressionDto.java new file mode 100644 index 0000000000..9e60f5c617 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDifferentialExpressionDto.java @@ -0,0 +1,348 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * RnaDifferentialExpression + */ + +@Schema(name = "RnaDifferentialExpression", description = "RnaDifferentialExpression") +@JsonTypeName("RnaDifferentialExpression") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class RnaDifferentialExpressionDto { + + private String id; + + private String ensemblGeneId; + + private String hgncSymbol; + + private BigDecimal logfc; + + private BigDecimal fc; + + private BigDecimal ciL; + + private BigDecimal ciR; + + private BigDecimal adjPVal; + + private String tissue; + + private String study; + + private String model; + + public RnaDifferentialExpressionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public RnaDifferentialExpressionDto(String id, String ensemblGeneId, String hgncSymbol, BigDecimal logfc, BigDecimal fc, BigDecimal ciL, BigDecimal ciR, BigDecimal adjPVal, String tissue, String study, String model) { + this.id = id; + this.ensemblGeneId = ensemblGeneId; + this.hgncSymbol = hgncSymbol; + this.logfc = logfc; + this.fc = fc; + this.ciL = ciL; + this.ciR = ciR; + this.adjPVal = adjPVal; + this.tissue = tissue; + this.study = study; + this.model = model; + } + + public RnaDifferentialExpressionDto id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + */ + @NotNull + @Schema(name = "_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("_id") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public RnaDifferentialExpressionDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * Get ensemblGeneId + * @return ensemblGeneId + */ + @NotNull + @Schema(name = "ensembl_gene_id", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public RnaDifferentialExpressionDto hgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + return this; + } + + /** + * Get hgncSymbol + * @return hgncSymbol + */ + @NotNull + @Schema(name = "hgnc_symbol", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("hgnc_symbol") + public String getHgncSymbol() { + return hgncSymbol; + } + + public void setHgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + } + + public RnaDifferentialExpressionDto logfc(BigDecimal logfc) { + this.logfc = logfc; + return this; + } + + /** + * Get logfc + * @return logfc + */ + @NotNull @Valid + @Schema(name = "logfc", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("logfc") + public BigDecimal getLogfc() { + return logfc; + } + + public void setLogfc(BigDecimal logfc) { + this.logfc = logfc; + } + + public RnaDifferentialExpressionDto fc(BigDecimal fc) { + this.fc = fc; + return this; + } + + /** + * Get fc + * @return fc + */ + @NotNull @Valid + @Schema(name = "fc", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("fc") + public BigDecimal getFc() { + return fc; + } + + public void setFc(BigDecimal fc) { + this.fc = fc; + } + + public RnaDifferentialExpressionDto ciL(BigDecimal ciL) { + this.ciL = ciL; + return this; + } + + /** + * Get ciL + * @return ciL + */ + @NotNull @Valid + @Schema(name = "ci_l", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_l") + public BigDecimal getCiL() { + return ciL; + } + + public void setCiL(BigDecimal ciL) { + this.ciL = ciL; + } + + public RnaDifferentialExpressionDto ciR(BigDecimal ciR) { + this.ciR = ciR; + return this; + } + + /** + * Get ciR + * @return ciR + */ + @NotNull @Valid + @Schema(name = "ci_r", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("ci_r") + public BigDecimal getCiR() { + return ciR; + } + + public void setCiR(BigDecimal ciR) { + this.ciR = ciR; + } + + public RnaDifferentialExpressionDto adjPVal(BigDecimal adjPVal) { + this.adjPVal = adjPVal; + return this; + } + + /** + * Get adjPVal + * @return adjPVal + */ + @NotNull @Valid + @Schema(name = "adj_p_val", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("adj_p_val") + public BigDecimal getAdjPVal() { + return adjPVal; + } + + public void setAdjPVal(BigDecimal adjPVal) { + this.adjPVal = adjPVal; + } + + public RnaDifferentialExpressionDto tissue(String tissue) { + this.tissue = tissue; + return this; + } + + /** + * Get tissue + * @return tissue + */ + @NotNull + @Schema(name = "tissue", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("tissue") + public String getTissue() { + return tissue; + } + + public void setTissue(String tissue) { + this.tissue = tissue; + } + + public RnaDifferentialExpressionDto study(String study) { + this.study = study; + return this; + } + + /** + * Get study + * @return study + */ + @NotNull + @Schema(name = "study", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("study") + public String getStudy() { + return study; + } + + public void setStudy(String study) { + this.study = study; + } + + public RnaDifferentialExpressionDto model(String model) { + this.model = model; + return this; + } + + /** + * Get model + * @return model + */ + @NotNull + @Schema(name = "model", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("model") + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RnaDifferentialExpressionDto rnaDifferentialExpression = (RnaDifferentialExpressionDto) o; + return Objects.equals(this.id, rnaDifferentialExpression.id) && + Objects.equals(this.ensemblGeneId, rnaDifferentialExpression.ensemblGeneId) && + Objects.equals(this.hgncSymbol, rnaDifferentialExpression.hgncSymbol) && + Objects.equals(this.logfc, rnaDifferentialExpression.logfc) && + Objects.equals(this.fc, rnaDifferentialExpression.fc) && + Objects.equals(this.ciL, rnaDifferentialExpression.ciL) && + Objects.equals(this.ciR, rnaDifferentialExpression.ciR) && + Objects.equals(this.adjPVal, rnaDifferentialExpression.adjPVal) && + Objects.equals(this.tissue, rnaDifferentialExpression.tissue) && + Objects.equals(this.study, rnaDifferentialExpression.study) && + Objects.equals(this.model, rnaDifferentialExpression.model); + } + + @Override + public int hashCode() { + return Objects.hash(id, ensemblGeneId, hgncSymbol, logfc, fc, ciL, ciR, adjPVal, tissue, study, model); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RnaDifferentialExpressionDto {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" hgncSymbol: ").append(toIndentedString(hgncSymbol)).append("\n"); + sb.append(" logfc: ").append(toIndentedString(logfc)).append("\n"); + sb.append(" fc: ").append(toIndentedString(fc)).append("\n"); + sb.append(" ciL: ").append(toIndentedString(ciL)).append("\n"); + sb.append(" ciR: ").append(toIndentedString(ciR)).append("\n"); + sb.append(" adjPVal: ").append(toIndentedString(adjPVal)).append("\n"); + sb.append(" tissue: ").append(toIndentedString(tissue)).append("\n"); + sb.append(" study: ").append(toIndentedString(study)).append("\n"); + sb.append(" model: ").append(toIndentedString(model)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDistributionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDistributionDto.java new file mode 100644 index 0000000000..caa9ddc1aa --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/RnaDistributionDto.java @@ -0,0 +1,273 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Distributions + */ + +@Schema(name = "RnaDistribution", description = "Distributions") +@JsonTypeName("RnaDistribution") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class RnaDistributionDto { + + private String id; + + private String model; + + private String tissue; + + private BigDecimal min; + + private BigDecimal max; + + private BigDecimal firstQuartile; + + private BigDecimal median; + + private BigDecimal thirdQuartile; + + public RnaDistributionDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public RnaDistributionDto(String id, String model, String tissue, BigDecimal min, BigDecimal max, BigDecimal firstQuartile, BigDecimal median, BigDecimal thirdQuartile) { + this.id = id; + this.model = model; + this.tissue = tissue; + this.min = min; + this.max = max; + this.firstQuartile = firstQuartile; + this.median = median; + this.thirdQuartile = thirdQuartile; + } + + public RnaDistributionDto id(String id) { + this.id = id; + return this; + } + + /** + * ID of the RNA distribution + * @return id + */ + @NotNull + @Schema(name = "_id", description = "ID of the RNA distribution", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("_id") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public RnaDistributionDto model(String model) { + this.model = model; + return this; + } + + /** + * Model of the RNA data + * @return model + */ + @NotNull + @Schema(name = "model", description = "Model of the RNA data", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("model") + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public RnaDistributionDto tissue(String tissue) { + this.tissue = tissue; + return this; + } + + /** + * Tissue type + * @return tissue + */ + @NotNull + @Schema(name = "tissue", description = "Tissue type", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("tissue") + public String getTissue() { + return tissue; + } + + public void setTissue(String tissue) { + this.tissue = tissue; + } + + public RnaDistributionDto min(BigDecimal min) { + this.min = min; + return this; + } + + /** + * Minimum value in the distribution + * @return min + */ + @NotNull @Valid + @Schema(name = "min", description = "Minimum value in the distribution", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("min") + public BigDecimal getMin() { + return min; + } + + public void setMin(BigDecimal min) { + this.min = min; + } + + public RnaDistributionDto max(BigDecimal max) { + this.max = max; + return this; + } + + /** + * Maximum value in the distribution + * @return max + */ + @NotNull @Valid + @Schema(name = "max", description = "Maximum value in the distribution", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("max") + public BigDecimal getMax() { + return max; + } + + public void setMax(BigDecimal max) { + this.max = max; + } + + public RnaDistributionDto firstQuartile(BigDecimal firstQuartile) { + this.firstQuartile = firstQuartile; + return this; + } + + /** + * First quartile value + * @return firstQuartile + */ + @NotNull @Valid + @Schema(name = "first_quartile", description = "First quartile value", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("first_quartile") + public BigDecimal getFirstQuartile() { + return firstQuartile; + } + + public void setFirstQuartile(BigDecimal firstQuartile) { + this.firstQuartile = firstQuartile; + } + + public RnaDistributionDto median(BigDecimal median) { + this.median = median; + return this; + } + + /** + * Median value + * @return median + */ + @NotNull @Valid + @Schema(name = "median", description = "Median value", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("median") + public BigDecimal getMedian() { + return median; + } + + public void setMedian(BigDecimal median) { + this.median = median; + } + + public RnaDistributionDto thirdQuartile(BigDecimal thirdQuartile) { + this.thirdQuartile = thirdQuartile; + return this; + } + + /** + * Third quartile value + * @return thirdQuartile + */ + @NotNull @Valid + @Schema(name = "third_quartile", description = "Third quartile value", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("third_quartile") + public BigDecimal getThirdQuartile() { + return thirdQuartile; + } + + public void setThirdQuartile(BigDecimal thirdQuartile) { + this.thirdQuartile = thirdQuartile; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RnaDistributionDto rnaDistribution = (RnaDistributionDto) o; + return Objects.equals(this.id, rnaDistribution.id) && + Objects.equals(this.model, rnaDistribution.model) && + Objects.equals(this.tissue, rnaDistribution.tissue) && + Objects.equals(this.min, rnaDistribution.min) && + Objects.equals(this.max, rnaDistribution.max) && + Objects.equals(this.firstQuartile, rnaDistribution.firstQuartile) && + Objects.equals(this.median, rnaDistribution.median) && + Objects.equals(this.thirdQuartile, rnaDistribution.thirdQuartile); + } + + @Override + public int hashCode() { + return Objects.hash(id, model, tissue, min, max, firstQuartile, median, thirdQuartile); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RnaDistributionDto {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" model: ").append(toIndentedString(model)).append("\n"); + sb.append(" tissue: ").append(toIndentedString(tissue)).append("\n"); + sb.append(" min: ").append(toIndentedString(min)).append("\n"); + sb.append(" max: ").append(toIndentedString(max)).append("\n"); + sb.append(" firstQuartile: ").append(toIndentedString(firstQuartile)).append("\n"); + sb.append(" median: ").append(toIndentedString(median)).append("\n"); + sb.append(" thirdQuartile: ").append(toIndentedString(thirdQuartile)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkDto.java new file mode 100644 index 0000000000..8b97997d96 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkDto.java @@ -0,0 +1,182 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.SimilarGenesNetworkLinkDto; +import org.sagebionetworks.agora.api.model.dto.SimilarGenesNetworkNodeDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * SimilarGenesNetwork + */ + +@Schema(name = "SimilarGenesNetwork", description = "SimilarGenesNetwork") +@JsonTypeName("SimilarGenesNetwork") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class SimilarGenesNetworkDto { + + @Valid + private List<@Valid SimilarGenesNetworkNodeDto> nodes; + + @Valid + private List<@Valid SimilarGenesNetworkLinkDto> links; + + private BigDecimal min; + + private BigDecimal max; + + public SimilarGenesNetworkDto nodes(List<@Valid SimilarGenesNetworkNodeDto> nodes) { + this.nodes = nodes; + return this; + } + + public SimilarGenesNetworkDto addNodesItem(SimilarGenesNetworkNodeDto nodesItem) { + if (this.nodes == null) { + this.nodes = new ArrayList<>(); + } + this.nodes.add(nodesItem); + return this; + } + + /** + * Get nodes + * @return nodes + */ + @Valid + @Schema(name = "nodes", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("nodes") + public List<@Valid SimilarGenesNetworkNodeDto> getNodes() { + return nodes; + } + + public void setNodes(List<@Valid SimilarGenesNetworkNodeDto> nodes) { + this.nodes = nodes; + } + + public SimilarGenesNetworkDto links(List<@Valid SimilarGenesNetworkLinkDto> links) { + this.links = links; + return this; + } + + public SimilarGenesNetworkDto addLinksItem(SimilarGenesNetworkLinkDto linksItem) { + if (this.links == null) { + this.links = new ArrayList<>(); + } + this.links.add(linksItem); + return this; + } + + /** + * Get links + * @return links + */ + @Valid + @Schema(name = "links", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("links") + public List<@Valid SimilarGenesNetworkLinkDto> getLinks() { + return links; + } + + public void setLinks(List<@Valid SimilarGenesNetworkLinkDto> links) { + this.links = links; + } + + public SimilarGenesNetworkDto min(BigDecimal min) { + this.min = min; + return this; + } + + /** + * Get min + * @return min + */ + @Valid + @Schema(name = "min", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("min") + public BigDecimal getMin() { + return min; + } + + public void setMin(BigDecimal min) { + this.min = min; + } + + public SimilarGenesNetworkDto max(BigDecimal max) { + this.max = max; + return this; + } + + /** + * Get max + * @return max + */ + @Valid + @Schema(name = "max", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("max") + public BigDecimal getMax() { + return max; + } + + public void setMax(BigDecimal max) { + this.max = max; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SimilarGenesNetworkDto similarGenesNetwork = (SimilarGenesNetworkDto) o; + return Objects.equals(this.nodes, similarGenesNetwork.nodes) && + Objects.equals(this.links, similarGenesNetwork.links) && + Objects.equals(this.min, similarGenesNetwork.min) && + Objects.equals(this.max, similarGenesNetwork.max); + } + + @Override + public int hashCode() { + return Objects.hash(nodes, links, min, max); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class SimilarGenesNetworkDto {\n"); + sb.append(" nodes: ").append(toIndentedString(nodes)).append("\n"); + sb.append(" links: ").append(toIndentedString(links)).append("\n"); + sb.append(" min: ").append(toIndentedString(min)).append("\n"); + sb.append(" max: ").append(toIndentedString(max)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkLinkDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkLinkDto.java new file mode 100644 index 0000000000..d4f7b367f9 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkLinkDto.java @@ -0,0 +1,194 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * SimilarGenesNetworkLink + */ + +@Schema(name = "SimilarGenesNetworkLink", description = "SimilarGenesNetworkLink") +@JsonTypeName("SimilarGenesNetworkLink") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class SimilarGenesNetworkLinkDto { + + private String source; + + private String target; + + private String sourceHgncSymbol; + + private String targetHgncSymbol; + + @Valid + private List brainRegions; + + public SimilarGenesNetworkLinkDto source(String source) { + this.source = source; + return this; + } + + /** + * Get source + * @return source + */ + + @Schema(name = "source", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("source") + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public SimilarGenesNetworkLinkDto target(String target) { + this.target = target; + return this; + } + + /** + * Get target + * @return target + */ + + @Schema(name = "target", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("target") + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public SimilarGenesNetworkLinkDto sourceHgncSymbol(String sourceHgncSymbol) { + this.sourceHgncSymbol = sourceHgncSymbol; + return this; + } + + /** + * Get sourceHgncSymbol + * @return sourceHgncSymbol + */ + + @Schema(name = "source_hgnc_symbol", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("source_hgnc_symbol") + public String getSourceHgncSymbol() { + return sourceHgncSymbol; + } + + public void setSourceHgncSymbol(String sourceHgncSymbol) { + this.sourceHgncSymbol = sourceHgncSymbol; + } + + public SimilarGenesNetworkLinkDto targetHgncSymbol(String targetHgncSymbol) { + this.targetHgncSymbol = targetHgncSymbol; + return this; + } + + /** + * Get targetHgncSymbol + * @return targetHgncSymbol + */ + + @Schema(name = "target_hgnc_symbol", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("target_hgnc_symbol") + public String getTargetHgncSymbol() { + return targetHgncSymbol; + } + + public void setTargetHgncSymbol(String targetHgncSymbol) { + this.targetHgncSymbol = targetHgncSymbol; + } + + public SimilarGenesNetworkLinkDto brainRegions(List brainRegions) { + this.brainRegions = brainRegions; + return this; + } + + public SimilarGenesNetworkLinkDto addBrainRegionsItem(String brainRegionsItem) { + if (this.brainRegions == null) { + this.brainRegions = new ArrayList<>(); + } + this.brainRegions.add(brainRegionsItem); + return this; + } + + /** + * Get brainRegions + * @return brainRegions + */ + + @Schema(name = "brain_regions", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("brain_regions") + public List getBrainRegions() { + return brainRegions; + } + + public void setBrainRegions(List brainRegions) { + this.brainRegions = brainRegions; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SimilarGenesNetworkLinkDto similarGenesNetworkLink = (SimilarGenesNetworkLinkDto) o; + return Objects.equals(this.source, similarGenesNetworkLink.source) && + Objects.equals(this.target, similarGenesNetworkLink.target) && + Objects.equals(this.sourceHgncSymbol, similarGenesNetworkLink.sourceHgncSymbol) && + Objects.equals(this.targetHgncSymbol, similarGenesNetworkLink.targetHgncSymbol) && + Objects.equals(this.brainRegions, similarGenesNetworkLink.brainRegions); + } + + @Override + public int hashCode() { + return Objects.hash(source, target, sourceHgncSymbol, targetHgncSymbol, brainRegions); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class SimilarGenesNetworkLinkDto {\n"); + sb.append(" source: ").append(toIndentedString(source)).append("\n"); + sb.append(" target: ").append(toIndentedString(target)).append("\n"); + sb.append(" sourceHgncSymbol: ").append(toIndentedString(sourceHgncSymbol)).append("\n"); + sb.append(" targetHgncSymbol: ").append(toIndentedString(targetHgncSymbol)).append("\n"); + sb.append(" brainRegions: ").append(toIndentedString(brainRegions)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkNodeDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkNodeDto.java new file mode 100644 index 0000000000..538a1591cd --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/SimilarGenesNetworkNodeDto.java @@ -0,0 +1,146 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * SimilarGenesNetworkNode + */ + +@Schema(name = "SimilarGenesNetworkNode", description = "SimilarGenesNetworkNode") +@JsonTypeName("SimilarGenesNetworkNode") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class SimilarGenesNetworkNodeDto { + + private String ensemblGeneId; + + private String hgncSymbol; + + @Valid + private List brainRegions; + + public SimilarGenesNetworkNodeDto ensemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + return this; + } + + /** + * Get ensemblGeneId + * @return ensemblGeneId + */ + + @Schema(name = "ensembl_gene_id", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("ensembl_gene_id") + public String getEnsemblGeneId() { + return ensemblGeneId; + } + + public void setEnsemblGeneId(String ensemblGeneId) { + this.ensemblGeneId = ensemblGeneId; + } + + public SimilarGenesNetworkNodeDto hgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + return this; + } + + /** + * Get hgncSymbol + * @return hgncSymbol + */ + + @Schema(name = "hgnc_symbol", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("hgnc_symbol") + public String getHgncSymbol() { + return hgncSymbol; + } + + public void setHgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + } + + public SimilarGenesNetworkNodeDto brainRegions(List brainRegions) { + this.brainRegions = brainRegions; + return this; + } + + public SimilarGenesNetworkNodeDto addBrainRegionsItem(String brainRegionsItem) { + if (this.brainRegions == null) { + this.brainRegions = new ArrayList<>(); + } + this.brainRegions.add(brainRegionsItem); + return this; + } + + /** + * Get brainRegions + * @return brainRegions + */ + + @Schema(name = "brain_regions", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("brain_regions") + public List getBrainRegions() { + return brainRegions; + } + + public void setBrainRegions(List brainRegions) { + this.brainRegions = brainRegions; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SimilarGenesNetworkNodeDto similarGenesNetworkNode = (SimilarGenesNetworkNodeDto) o; + return Objects.equals(this.ensemblGeneId, similarGenesNetworkNode.ensemblGeneId) && + Objects.equals(this.hgncSymbol, similarGenesNetworkNode.hgncSymbol) && + Objects.equals(this.brainRegions, similarGenesNetworkNode.brainRegions); + } + + @Override + public int hashCode() { + return Objects.hash(ensemblGeneId, hgncSymbol, brainRegions); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class SimilarGenesNetworkNodeDto {\n"); + sb.append(" ensemblGeneId: ").append(toIndentedString(ensemblGeneId)).append("\n"); + sb.append(" hgncSymbol: ").append(toIndentedString(hgncSymbol)).append("\n"); + sb.append(" brainRegions: ").append(toIndentedString(brainRegions)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TargetNominationDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TargetNominationDto.java new file mode 100644 index 0000000000..1cda285f2d --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TargetNominationDto.java @@ -0,0 +1,373 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * TargetNomination + */ + +@Schema(name = "TargetNomination", description = "TargetNomination") +@JsonTypeName("TargetNomination") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class TargetNominationDto { + + private String source; + + private String team; + + private String rank; + + private String hgncSymbol; + + private String targetChoiceJustification; + + private String predictedTherapeuticDirection; + + private String dataUsedToSupportTargetSelection; + + private String dataSynapseid; + + private String study; + + private String inputData; + + private String validationStudyDetails; + + private BigDecimal initialNomination; + + public TargetNominationDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public TargetNominationDto(String source, String team, String rank, String hgncSymbol, String targetChoiceJustification, String predictedTherapeuticDirection, String dataUsedToSupportTargetSelection, String dataSynapseid, String study, String inputData, String validationStudyDetails, BigDecimal initialNomination) { + this.source = source; + this.team = team; + this.rank = rank; + this.hgncSymbol = hgncSymbol; + this.targetChoiceJustification = targetChoiceJustification; + this.predictedTherapeuticDirection = predictedTherapeuticDirection; + this.dataUsedToSupportTargetSelection = dataUsedToSupportTargetSelection; + this.dataSynapseid = dataSynapseid; + this.study = study; + this.inputData = inputData; + this.validationStudyDetails = validationStudyDetails; + this.initialNomination = initialNomination; + } + + public TargetNominationDto source(String source) { + this.source = source; + return this; + } + + /** + * Get source + * @return source + */ + @NotNull + @Schema(name = "source", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("source") + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public TargetNominationDto team(String team) { + this.team = team; + return this; + } + + /** + * Get team + * @return team + */ + @NotNull + @Schema(name = "team", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("team") + public String getTeam() { + return team; + } + + public void setTeam(String team) { + this.team = team; + } + + public TargetNominationDto rank(String rank) { + this.rank = rank; + return this; + } + + /** + * Get rank + * @return rank + */ + @NotNull + @Schema(name = "rank", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("rank") + public String getRank() { + return rank; + } + + public void setRank(String rank) { + this.rank = rank; + } + + public TargetNominationDto hgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + return this; + } + + /** + * Get hgncSymbol + * @return hgncSymbol + */ + @NotNull + @Schema(name = "hgnc_symbol", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("hgnc_symbol") + public String getHgncSymbol() { + return hgncSymbol; + } + + public void setHgncSymbol(String hgncSymbol) { + this.hgncSymbol = hgncSymbol; + } + + public TargetNominationDto targetChoiceJustification(String targetChoiceJustification) { + this.targetChoiceJustification = targetChoiceJustification; + return this; + } + + /** + * Get targetChoiceJustification + * @return targetChoiceJustification + */ + @NotNull + @Schema(name = "target_choice_justification", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("target_choice_justification") + public String getTargetChoiceJustification() { + return targetChoiceJustification; + } + + public void setTargetChoiceJustification(String targetChoiceJustification) { + this.targetChoiceJustification = targetChoiceJustification; + } + + public TargetNominationDto predictedTherapeuticDirection(String predictedTherapeuticDirection) { + this.predictedTherapeuticDirection = predictedTherapeuticDirection; + return this; + } + + /** + * Get predictedTherapeuticDirection + * @return predictedTherapeuticDirection + */ + @NotNull + @Schema(name = "predicted_therapeutic_direction", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("predicted_therapeutic_direction") + public String getPredictedTherapeuticDirection() { + return predictedTherapeuticDirection; + } + + public void setPredictedTherapeuticDirection(String predictedTherapeuticDirection) { + this.predictedTherapeuticDirection = predictedTherapeuticDirection; + } + + public TargetNominationDto dataUsedToSupportTargetSelection(String dataUsedToSupportTargetSelection) { + this.dataUsedToSupportTargetSelection = dataUsedToSupportTargetSelection; + return this; + } + + /** + * Get dataUsedToSupportTargetSelection + * @return dataUsedToSupportTargetSelection + */ + @NotNull + @Schema(name = "data_used_to_support_target_selection", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("data_used_to_support_target_selection") + public String getDataUsedToSupportTargetSelection() { + return dataUsedToSupportTargetSelection; + } + + public void setDataUsedToSupportTargetSelection(String dataUsedToSupportTargetSelection) { + this.dataUsedToSupportTargetSelection = dataUsedToSupportTargetSelection; + } + + public TargetNominationDto dataSynapseid(String dataSynapseid) { + this.dataSynapseid = dataSynapseid; + return this; + } + + /** + * Get dataSynapseid + * @return dataSynapseid + */ + @NotNull + @Schema(name = "data_synapseid", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("data_synapseid") + public String getDataSynapseid() { + return dataSynapseid; + } + + public void setDataSynapseid(String dataSynapseid) { + this.dataSynapseid = dataSynapseid; + } + + public TargetNominationDto study(String study) { + this.study = study; + return this; + } + + /** + * Get study + * @return study + */ + @NotNull + @Schema(name = "study", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("study") + public String getStudy() { + return study; + } + + public void setStudy(String study) { + this.study = study; + } + + public TargetNominationDto inputData(String inputData) { + this.inputData = inputData; + return this; + } + + /** + * Get inputData + * @return inputData + */ + @NotNull + @Schema(name = "input_data", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("input_data") + public String getInputData() { + return inputData; + } + + public void setInputData(String inputData) { + this.inputData = inputData; + } + + public TargetNominationDto validationStudyDetails(String validationStudyDetails) { + this.validationStudyDetails = validationStudyDetails; + return this; + } + + /** + * Get validationStudyDetails + * @return validationStudyDetails + */ + @NotNull + @Schema(name = "validation_study_details", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("validation_study_details") + public String getValidationStudyDetails() { + return validationStudyDetails; + } + + public void setValidationStudyDetails(String validationStudyDetails) { + this.validationStudyDetails = validationStudyDetails; + } + + public TargetNominationDto initialNomination(BigDecimal initialNomination) { + this.initialNomination = initialNomination; + return this; + } + + /** + * Get initialNomination + * @return initialNomination + */ + @NotNull @Valid + @Schema(name = "initial_nomination", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("initial_nomination") + public BigDecimal getInitialNomination() { + return initialNomination; + } + + public void setInitialNomination(BigDecimal initialNomination) { + this.initialNomination = initialNomination; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TargetNominationDto targetNomination = (TargetNominationDto) o; + return Objects.equals(this.source, targetNomination.source) && + Objects.equals(this.team, targetNomination.team) && + Objects.equals(this.rank, targetNomination.rank) && + Objects.equals(this.hgncSymbol, targetNomination.hgncSymbol) && + Objects.equals(this.targetChoiceJustification, targetNomination.targetChoiceJustification) && + Objects.equals(this.predictedTherapeuticDirection, targetNomination.predictedTherapeuticDirection) && + Objects.equals(this.dataUsedToSupportTargetSelection, targetNomination.dataUsedToSupportTargetSelection) && + Objects.equals(this.dataSynapseid, targetNomination.dataSynapseid) && + Objects.equals(this.study, targetNomination.study) && + Objects.equals(this.inputData, targetNomination.inputData) && + Objects.equals(this.validationStudyDetails, targetNomination.validationStudyDetails) && + Objects.equals(this.initialNomination, targetNomination.initialNomination); + } + + @Override + public int hashCode() { + return Objects.hash(source, team, rank, hgncSymbol, targetChoiceJustification, predictedTherapeuticDirection, dataUsedToSupportTargetSelection, dataSynapseid, study, inputData, validationStudyDetails, initialNomination); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TargetNominationDto {\n"); + sb.append(" source: ").append(toIndentedString(source)).append("\n"); + sb.append(" team: ").append(toIndentedString(team)).append("\n"); + sb.append(" rank: ").append(toIndentedString(rank)).append("\n"); + sb.append(" hgncSymbol: ").append(toIndentedString(hgncSymbol)).append("\n"); + sb.append(" targetChoiceJustification: ").append(toIndentedString(targetChoiceJustification)).append("\n"); + sb.append(" predictedTherapeuticDirection: ").append(toIndentedString(predictedTherapeuticDirection)).append("\n"); + sb.append(" dataUsedToSupportTargetSelection: ").append(toIndentedString(dataUsedToSupportTargetSelection)).append("\n"); + sb.append(" dataSynapseid: ").append(toIndentedString(dataSynapseid)).append("\n"); + sb.append(" study: ").append(toIndentedString(study)).append("\n"); + sb.append(" inputData: ").append(toIndentedString(inputData)).append("\n"); + sb.append(" validationStudyDetails: ").append(toIndentedString(validationStudyDetails)).append("\n"); + sb.append(" initialNomination: ").append(toIndentedString(initialNomination)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamDto.java new file mode 100644 index 0000000000..e6e4b71159 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamDto.java @@ -0,0 +1,210 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.TeamMemberDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Team + */ + +@Schema(name = "Team", description = "Team") +@JsonTypeName("Team") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class TeamDto { + + private String team; + + private String teamFull; + + private String program; + + private String description; + + @Valid + private List<@Valid TeamMemberDto> members = new ArrayList<>(); + + public TeamDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public TeamDto(String team, String teamFull, String program, String description, List<@Valid TeamMemberDto> members) { + this.team = team; + this.teamFull = teamFull; + this.program = program; + this.description = description; + this.members = members; + } + + public TeamDto team(String team) { + this.team = team; + return this; + } + + /** + * Get team + * @return team + */ + @NotNull + @Schema(name = "team", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("team") + public String getTeam() { + return team; + } + + public void setTeam(String team) { + this.team = team; + } + + public TeamDto teamFull(String teamFull) { + this.teamFull = teamFull; + return this; + } + + /** + * Get teamFull + * @return teamFull + */ + @NotNull + @Schema(name = "team_full", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("team_full") + public String getTeamFull() { + return teamFull; + } + + public void setTeamFull(String teamFull) { + this.teamFull = teamFull; + } + + public TeamDto program(String program) { + this.program = program; + return this; + } + + /** + * Get program + * @return program + */ + @NotNull + @Schema(name = "program", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("program") + public String getProgram() { + return program; + } + + public void setProgram(String program) { + this.program = program; + } + + public TeamDto description(String description) { + this.description = description; + return this; + } + + /** + * Get description + * @return description + */ + @NotNull + @Schema(name = "description", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("description") + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public TeamDto members(List<@Valid TeamMemberDto> members) { + this.members = members; + return this; + } + + public TeamDto addMembersItem(TeamMemberDto membersItem) { + if (this.members == null) { + this.members = new ArrayList<>(); + } + this.members.add(membersItem); + return this; + } + + /** + * Get members + * @return members + */ + @NotNull @Valid + @Schema(name = "members", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("members") + public List<@Valid TeamMemberDto> getMembers() { + return members; + } + + public void setMembers(List<@Valid TeamMemberDto> members) { + this.members = members; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TeamDto team = (TeamDto) o; + return Objects.equals(this.team, team.team) && + Objects.equals(this.teamFull, team.teamFull) && + Objects.equals(this.program, team.program) && + Objects.equals(this.description, team.description) && + Objects.equals(this.members, team.members); + } + + @Override + public int hashCode() { + return Objects.hash(team, teamFull, program, description, members); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TeamDto {\n"); + sb.append(" team: ").append(toIndentedString(team)).append("\n"); + sb.append(" teamFull: ").append(toIndentedString(teamFull)).append("\n"); + sb.append(" program: ").append(toIndentedString(program)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" members: ").append(toIndentedString(members)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamMemberDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamMemberDto.java new file mode 100644 index 0000000000..2a93bf715f --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamMemberDto.java @@ -0,0 +1,146 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * Team Member + */ + +@Schema(name = "TeamMember", description = "Team Member") +@JsonTypeName("TeamMember") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class TeamMemberDto { + + private String name; + + private Boolean isPrimaryInvestigator; + + private String url; + + public TeamMemberDto() { + super(); + } + + /** + * Constructor with only required parameters + */ + public TeamMemberDto(String name, Boolean isPrimaryInvestigator) { + this.name = name; + this.isPrimaryInvestigator = isPrimaryInvestigator; + } + + public TeamMemberDto name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + */ + @NotNull + @Schema(name = "name", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public TeamMemberDto isPrimaryInvestigator(Boolean isPrimaryInvestigator) { + this.isPrimaryInvestigator = isPrimaryInvestigator; + return this; + } + + /** + * Get isPrimaryInvestigator + * @return isPrimaryInvestigator + */ + @NotNull + @Schema(name = "isPrimaryInvestigator", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("isPrimaryInvestigator") + public Boolean getIsPrimaryInvestigator() { + return isPrimaryInvestigator; + } + + public void setIsPrimaryInvestigator(Boolean isPrimaryInvestigator) { + this.isPrimaryInvestigator = isPrimaryInvestigator; + } + + public TeamMemberDto url(String url) { + this.url = url; + return this; + } + + /** + * Get url + * @return url + */ + + @Schema(name = "url", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("url") + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TeamMemberDto teamMember = (TeamMemberDto) o; + return Objects.equals(this.name, teamMember.name) && + Objects.equals(this.isPrimaryInvestigator, teamMember.isPrimaryInvestigator) && + Objects.equals(this.url, teamMember.url); + } + + @Override + public int hashCode() { + return Objects.hash(name, isPrimaryInvestigator, url); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TeamMemberDto {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" isPrimaryInvestigator: ").append(toIndentedString(isPrimaryInvestigator)).append("\n"); + sb.append(" url: ").append(toIndentedString(url)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamsListDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamsListDto.java new file mode 100644 index 0000000000..08c7da31d0 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/TeamsListDto.java @@ -0,0 +1,99 @@ +package org.sagebionetworks.agora.api.model.dto; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.sagebionetworks.agora.api.model.dto.TeamDto; +import java.time.OffsetDateTime; +import javax.validation.Valid; +import javax.validation.constraints.*; +import io.swagger.v3.oas.annotations.media.Schema; + + +import java.util.*; +import javax.annotation.Generated; + +/** + * List of Teams + */ + +@Schema(name = "TeamsList", description = "List of Teams") +@JsonTypeName("TeamsList") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen") +// TODO Add x-java-class-annotations +public class TeamsListDto { + + @Valid + private List<@Valid TeamDto> items; + + public TeamsListDto items(List<@Valid TeamDto> items) { + this.items = items; + return this; + } + + public TeamsListDto addItemsItem(TeamDto itemsItem) { + if (this.items == null) { + this.items = new ArrayList<>(); + } + this.items.add(itemsItem); + return this; + } + + /** + * Get items + * @return items + */ + @Valid + @Schema(name = "items", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("items") + public List<@Valid TeamDto> getItems() { + return items; + } + + public void setItems(List<@Valid TeamDto> items) { + this.items = items; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TeamsListDto teamsList = (TeamsListDto) o; + return Objects.equals(this.items, teamsList.items); + } + + @Override + public int hashCode() { + return Objects.hash(items); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TeamsListDto {\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/apps/agora/api-spring/src/main/resources/application.yml b/apps/agora/api-spring/src/main/resources/application.yml new file mode 100644 index 0000000000..be6b651fbb --- /dev/null +++ b/apps/agora/api-spring/src/main/resources/application.yml @@ -0,0 +1,45 @@ +openchallenges-image-service: + welcome-message: 'Welcome to the Agora API.' + +spring: + jackson: + date-format: org.sagebionetworks.agora.api.RFC3339DateFormat + serialization: + WRITE_DATES_AS_TIMESTAMPS: false + # zipkin: + # base-url: http://openchallenges-zipkin:9411 + +server: + port: 8086 + +# eureka: +# client: +# service-url: +# defaultZone: ${service.registry.url} +# instance: +# preferIpAddress: true + +management: + endpoints: + web: + base-path: /actuator + exposure: + include: health, prometheus + path-mapping: + prometheus: metrics + health: + readiness-state: + enabled: true + liveness-state: + enabled: true + endpoint: + health: + probes: + enabled: true + show-details: always + prometheus: + cache.time-to-live: 1ms + +info: + application: + name: ${spring.application.name} diff --git a/apps/agora/api-spring/src/main/resources/openapi.yaml b/apps/agora/api-spring/src/main/resources/openapi.yaml new file mode 100644 index 0000000000..e0af89854d --- /dev/null +++ b/apps/agora/api-spring/src/main/resources/openapi.yaml @@ -0,0 +1,2736 @@ +openapi: 3.0.3 +info: + contact: + name: Support + url: https://github.com/Sage-Bionetworks/sage-monorepo + license: + name: Apache 2.0 + url: https://github.com/Sage-Bionetworks/sage-monorepo/blob/main/LICENSE.txt + title: Agora REST API + version: 1.0.0 + x-logo: + url: https://agora.adknowledgeportal.org/images/logo.png + altText: Agora +servers: + - url: http://localhost/v1 +tags: + - description: Operations about dataversion. + name: Dataversion + - description: Operations about teams. + name: Team + - description: Operations about team members. + name: TeamMember +paths: + /biodomains: + get: + description: List BioDomains + operationId: listBioDomains + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/BioDomainInfo' + type: array + description: Success + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: List BioDomains + tags: + - BioDomains + x-accepts: application/json + x-tags: + - tag: BioDomains + /biodomains/{ensg}: + get: + description: Get bioDomain + operationId: getBioDomain + parameters: + - description: The ENSG (Ensembl Gene ID) for which to retrieve biodomain data. + explode: false + in: path + name: ensg + required: true + schema: + type: string + style: simple + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/BioDomain' + type: array + description: Successful retrieval of bio-domains + '404': + description: ENSG not found + '500': + description: Internal server error + summary: Retrieve bioDomain for a given ENSG + tags: + - BioDomains + x-accepts: application/json + x-tags: + - tag: BioDomains + /genes: + get: + description: This endpoint returns all genes or filters genes by Ensembl gene + IDs if provided. + operationId: getGenes + parameters: + - example: 'ENSG00000139618,ENSG00000248378' + explode: true + in: query + name: ids + required: false + schema: + description: Comma-separated list of Ensembl gene IDs to filter. + type: string + style: form + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/Gene' + type: array + description: A list of genes. + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Retrieve a list of genes or filter by Ensembl gene IDs + tags: + - Genes + x-accepts: application/json + x-tags: + - tag: Genes + /genes/{ensg}: + get: + operationId: getGene + parameters: + - description: Ensembl Gene ID (ENSG) + explode: false + in: path + name: ensg + required: true + schema: + type: string + style: simple + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Gene' + description: Gene details successfully retrieved + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Get gene details by Ensembl Gene ID + tags: + - Genes + x-accepts: application/json + x-tags: + - tag: Genes + /genes/search: + get: + description: Search Genes + operationId: searchGene + parameters: + - explode: true + in: query + name: id + required: true + schema: + type: string + style: form + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/Gene' + type: array + description: Success + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Search Genes + tags: + - Genes + x-accepts: application/json + x-tags: + - tag: Genes + /genes/comparison: + get: + description: Get comparison genes based on category and subcategory + operationId: getComparisonGenes + parameters: + - description: The category of the comparison (either RNA or Protein Differential + Expression). + explode: true + in: query + name: category + required: true + schema: + enum: + - RNA - Differential Expression + - Protein - Differential Expression + type: string + style: form + - description: The subcategory for gene comparison (sub-category must be a string). + explode: true + in: query + name: subCategory + required: true + schema: + type: string + style: form + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GCTGenesList' + description: Successful response with comparison genes + '404': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The specified resource was not found + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Get comparison genes based on category and subcategory + tags: + - Genes + x-accepts: application/json + x-tags: + - tag: Genes + /genes/nominated: + get: + description: Retrieves a list of genes with nominations and relevant information. + operationId: getNominatedGenes + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NominatedGenesList' + description: A list of nominated genes. + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Get nominated genes + tags: + - Genes + x-accepts: application/json + x-tags: + - tag: Genes + /dataversion: + get: + description: Get dataversion + operationId: getDataversion + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Dataversion' + description: Success + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Get dataversion + tags: + - Dataversion + x-accepts: application/json + x-tags: + - tag: Dataversion + /distribution: + get: + description: Get distribution data + operationId: getDistribution + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Distribution' + description: A successful response + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Get distribution data + tags: + - Distribution + x-accepts: application/json + x-tags: + - tag: Distribution + /teams: + get: + description: List Teams + operationId: listTeams + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamsList' + description: Success + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: List Teams + tags: + - Teams + x-accepts: application/json + x-tags: + - tag: Teams + /teamMembers/{name}/image: + get: + description: Get Team Member Image + operationId: getTeamMemberImage + parameters: + - explode: false + in: path + name: name + required: true + schema: + type: string + style: simple + responses: + '200': + content: + image/jpg: + schema: + $ref: '#/components/schemas/TeamImage' + image/jpeg: + schema: + $ref: '#/components/schemas/TeamImage' + image/png: + schema: + $ref: '#/components/schemas/TeamImage' + description: Success + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server + error + summary: Get Team Member Image + tags: + - Teams + x-accepts: 'application/problem+json,image/jpeg,image/jpg,image/png' + x-tags: + - tag: Teams +components: + responses: + BadRequest: + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: Invalid request + InternalServerError: + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The request cannot be fulfilled due to an unexpected server error + NotFound: + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BasicError' + description: The specified resource was not found + schemas: + BioDomainInfo: + description: BioDomainInfo + example: + name: name + properties: + name: + type: string + required: + - name + type: object + BasicError: + description: Problem details (tools.ietf.org/html/rfc7807) + properties: + title: + description: A human readable documentation for the problem type + type: string + status: + description: The HTTP status code + type: integer + detail: + description: A human readable explanation specific to this occurrence of + the problem + type: string + type: + description: An absolute URI that identifies the problem type + type: string + required: + - status + - title + type: object + x-java-class-annotations: + - '@lombok.AllArgsConstructor' + - '@lombok.Builder' + BioDomain: + description: BioDomain + example: + pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + properties: + biodomain: + description: Name of the biological domain + type: string + go_terms: + description: List of Gene Ontology (GO) terms + items: + type: string + type: array + n_biodomain_terms: + description: Number of terms associated with the biological domain + type: integer + n_gene_biodomain_terms: + description: Number of gene terms linked to the biological domain + type: integer + pct_linking_terms: + description: Percentage of terms linking to the domain + format: float + type: number + required: + - biodomain + - go_terms + - n_biodomain_terms + - n_gene_biodomain_terms + - pct_linking_terms + type: object + TargetNomination: + description: TargetNomination + example: + data_synapseid: data_synapseid + input_data: input_data + study: study + initial_nomination: 0.8008281904610115 + data_used_to_support_target_selection: data_used_to_support_target_selection + validation_study_details: validation_study_details + rank: rank + hgnc_symbol: hgnc_symbol + source: source + team: team + predicted_therapeutic_direction: predicted_therapeutic_direction + target_choice_justification: target_choice_justification + properties: + source: + type: string + team: + type: string + rank: + type: string + hgnc_symbol: + type: string + target_choice_justification: + type: string + predicted_therapeutic_direction: + type: string + data_used_to_support_target_selection: + type: string + data_synapseid: + type: string + study: + type: string + input_data: + type: string + validation_study_details: + type: string + initial_nomination: + type: number + required: + - data_synapseid + - data_used_to_support_target_selection + - hgnc_symbol + - initial_nomination + - input_data + - predicted_therapeutic_direction + - rank + - source + - study + - target_choice_justification + - team + - validation_study_details + type: object + MedianExpression: + description: MedianExpression + example: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + properties: + min: + format: float + type: number + first_quartile: + format: float + type: number + median: + format: float + type: number + mean: + format: float + type: number + third_quartile: + format: float + type: number + max: + format: float + type: number + tissue: + type: string + required: + - tissue + type: object + Druggability: + description: Druggability + example: + sm_druggability_bucket: 1 + abability_bucket_definition: Moderate bioavailability + safety_bucket: 2 + abability_bucket: 3 + pharos_class: Tclin + classification: Enzyme + safety_bucket_definition: Low risk + properties: + sm_druggability_bucket: + example: 1 + type: integer + safety_bucket: + example: 2 + type: integer + abability_bucket: + example: 3 + type: integer + pharos_class: + example: Tclin + type: string + classification: + example: Enzyme + type: string + safety_bucket_definition: + example: Low risk + type: string + abability_bucket_definition: + example: Moderate bioavailability + type: string + required: + - abability_bucket + - abability_bucket_definition + - classification + - pharos_class + - safety_bucket + - safety_bucket_definition + - sm_druggability_bucket + type: object + RnaDifferentialExpression: + description: RnaDifferentialExpression + example: + adj_p_val: 1.2315135367772556 + study: study + logfc: 3.616076749251911 + ensembl_gene_id: ensembl_gene_id + ci_r: 7.386281948385884 + hgnc_symbol: hgnc_symbol + tissue: tissue + model: model + _id: _id + fc: 2.027123023002322 + ci_l: 4.145608029883936 + properties: + _id: + type: string + ensembl_gene_id: + type: string + hgnc_symbol: + type: string + logfc: + type: number + fc: + type: number + ci_l: + type: number + ci_r: + type: number + adj_p_val: + type: number + tissue: + type: string + study: + type: string + model: + type: string + required: + - _id + - adj_p_val + - ci_l + - ci_r + - ensembl_gene_id + - fc + - hgnc_symbol + - logfc + - model + - study + - tissue + type: object + ProteinDifferentialExpression: + description: ProteinDifferentialExpression + example: + log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + properties: + _id: + type: string + uniqid: + type: string + hgnc_symbol: + type: string + uniprotid: + type: string + ensembl_gene_id: + type: string + tissue: + type: string + log2_fc: + type: number + ci_upr: + type: number + ci_lwr: + type: number + pval: + type: number + cor_pval: + type: number + required: + - _id + - ci_lwr + - ci_upr + - cor_pval + - ensembl_gene_id + - hgnc_symbol + - log2_fc + - pval + - tissue + - uniprotid + - uniqid + type: object + OverallScores: + description: OverallScores + example: + multi_omics_score: 9.965781217890562 + literature_score: 9.369310271410669 + target_risk_score: 4.965218492984954 + ensembl_gene_id: ensembl_gene_id + genetics_score: 5.025004791520295 + properties: + ensembl_gene_id: + type: string + target_risk_score: + type: number + genetics_score: + type: number + multi_omics_score: + type: number + literature_score: + type: number + required: + - ensembl_gene_id + - genetics_score + - literature_score + - multi_omics_score + - target_risk_score + type: object + NeuropathologicCorrelation: + description: NeuropathologicCorrelation + example: + ensg: ensg + neuropath_type: neuropath_type + oddsratio: 6.683562403749608 + pval: 6.438423552598547 + _id: _id + gname: gname + ci_lower: 8.762042012749001 + ci_upper: 9.018348186070783 + pval_adj: 3.5571952270680973 + properties: + _id: + type: string + ensg: + type: string + gname: + type: string + oddsratio: + type: number + ci_lower: + type: number + ci_upper: + type: number + pval: + type: number + pval_adj: + type: number + neuropath_type: + type: string + required: + - _id + - ci_lower + - ci_upper + - ensg + - gname + - neuropath_type + - oddsratio + - pval + - pval_adj + type: object + ExperimentalValidation: + description: Experimental Validation + example: + hypothesis_tested: hypothesis_tested + published: published + team: team + outcome_measure: outcome_measure + model_system: model_system + balanced_for_sex: balanced_for_sex + reference: reference + summary_findings: summary_findings + species: species + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + date_report: date_report + _id: _id + contributors: contributors + reference_doi: reference_doi + outcome_measure_details: outcome_measure_details + properties: + _id: + type: string + ensembl_gene_id: + type: string + hgnc_symbol: + type: string + hypothesis_tested: + type: string + summary_findings: + type: string + published: + type: string + reference: + type: string + species: + type: string + model_system: + type: string + outcome_measure: + type: string + outcome_measure_details: + type: string + balanced_for_sex: + type: string + contributors: + type: string + team: + type: string + reference_doi: + type: string + date_report: + type: string + required: + - _id + - abability_bucket_definition + - balanced_for_sex + - contributors + - date_report + - ensembl_gene_id + - hgnc_symbol + - hypothesis_tested + - model_system + - outcome_measure + - outcome_measure_details + - published + - reference + - reference_doi + - species + - summary_findings + - team + type: object + SimilarGenesNetworkNode: + description: SimilarGenesNetworkNode + example: + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + properties: + ensembl_gene_id: + type: string + hgnc_symbol: + type: string + brain_regions: + items: + type: string + type: array + type: object + SimilarGenesNetworkLink: + description: SimilarGenesNetworkLink + example: + source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + properties: + source: + type: string + target: + type: string + source_hgnc_symbol: + type: string + target_hgnc_symbol: + type: string + brain_regions: + items: + type: string + type: array + type: object + SimilarGenesNetwork: + description: SimilarGenesNetwork + example: + nodes: + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + min: 6.965117697638846 + max: 1.284659006116532 + links: + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + properties: + nodes: + items: + $ref: '#/components/schemas/SimilarGenesNetworkNode' + type: array + links: + items: + $ref: '#/components/schemas/SimilarGenesNetworkLink' + type: array + min: + type: number + max: + type: number + type: object + BioDomains: + description: BioDomains + example: + gene_biodomains: + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + ensembl_gene_id: ensembl_gene_id + properties: + ensembl_gene_id: + description: The Ensembl Gene ID. + type: string + gene_biodomains: + description: A list of gene biodomains. + items: + $ref: '#/components/schemas/BioDomain' + type: array + required: + - ensembl_gene_id + - gene_biodomains + type: object + EnsemblInfo: + description: EnsemblInfo + example: + ensembl_possible_replacements: + - ensembl_possible_replacements + - ensembl_possible_replacements + ensembl_release: 6 + ensembl_permalink: ensembl_permalink + properties: + ensembl_release: + type: integer + ensembl_possible_replacements: + items: + type: string + type: array + ensembl_permalink: + type: string + required: + - ensembl_permalink + - ensembl_possible_replacements + - ensembl_release + type: object + Gene: + description: Gene + example: + is_any_rna_changed_in_ad_brain: true + proteomics_SRM: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + target_nominations: + - data_synapseid: data_synapseid + input_data: input_data + study: study + initial_nomination: 0.8008281904610115 + data_used_to_support_target_selection: data_used_to_support_target_selection + validation_study_details: validation_study_details + rank: rank + hgnc_symbol: hgnc_symbol + source: source + team: team + predicted_therapeutic_direction: predicted_therapeutic_direction + target_choice_justification: target_choice_justification + - data_synapseid: data_synapseid + input_data: input_data + study: study + initial_nomination: 0.8008281904610115 + data_used_to_support_target_selection: data_used_to_support_target_selection + validation_study_details: validation_study_details + rank: rank + hgnc_symbol: hgnc_symbol + source: source + team: team + predicted_therapeutic_direction: predicted_therapeutic_direction + target_choice_justification: target_choice_justification + study_display_value: study_display_value + protein_brain_change_studied: true + is_eqtl: true + median_expression: + - min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + - min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + experimental_validation: + - hypothesis_tested: hypothesis_tested + published: published + team: team + outcome_measure: outcome_measure + model_system: model_system + balanced_for_sex: balanced_for_sex + reference: reference + summary_findings: summary_findings + species: species + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + date_report: date_report + _id: _id + contributors: contributors + reference_doi: reference_doi + outcome_measure_details: outcome_measure_details + - hypothesis_tested: hypothesis_tested + published: published + team: team + outcome_measure: outcome_measure + model_system: model_system + balanced_for_sex: balanced_for_sex + reference: reference + summary_findings: summary_findings + species: species + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + date_report: date_report + _id: _id + contributors: contributors + reference_doi: reference_doi + outcome_measure_details: outcome_measure_details + overall_scores: + multi_omics_score: 9.965781217890562 + literature_score: 9.369310271410669 + target_risk_score: 4.965218492984954 + ensembl_gene_id: ensembl_gene_id + genetics_score: 5.025004791520295 + is_igap: true + metabolomics: + key: '' + is_any_rna_changed_in_ad_brain_display_value: is_any_rna_changed_in_ad_brain_display_value + ensembl_gene_id: ensembl_gene_id + sm_druggability_display_value: sm_druggability_display_value + bio_domains: + gene_biodomains: + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + ensembl_gene_id: ensembl_gene_id + total_nominations: 9 + proteomics_LFQ: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + alias: + - alias + - alias + links: + key: '{}' + initial_nomination_display_value: 2 + neuropathologic_correlations: + - ensg: ensg + neuropath_type: neuropath_type + oddsratio: 6.683562403749608 + pval: 6.438423552598547 + _id: _id + gname: gname + ci_lower: 8.762042012749001 + ci_upper: 9.018348186070783 + pval_adj: 3.5571952270680973 + - ensg: ensg + neuropath_type: neuropath_type + oddsratio: 6.683562403749608 + pval: 6.438423552598547 + _id: _id + gname: gname + ci_lower: 8.762042012749001 + ci_upper: 9.018348186070783 + pval_adj: 3.5571952270680973 + summary: summary + resource_url: resource_url + druggability: + - sm_druggability_bucket: 1 + abability_bucket_definition: Moderate bioavailability + safety_bucket: 2 + abability_bucket: 3 + pharos_class: Tclin + classification: Enzyme + safety_bucket_definition: Low risk + - sm_druggability_bucket: 1 + abability_bucket_definition: Moderate bioavailability + safety_bucket: 2 + abability_bucket: 3 + pharos_class: Tclin + classification: Enzyme + safety_bucket_definition: Low risk + ensembl_info: + ensembl_possible_replacements: + - ensembl_possible_replacements + - ensembl_possible_replacements + ensembl_release: 6 + ensembl_permalink: ensembl_permalink + is_tep: true + teams_display_value: teams_display_value + ab_modality_display_value: ab_modality_display_value + safety_rating_display_value: safety_rating_display_value + is_any_protein_changed_in_ad_brain_display_value: is_any_protein_changed_in_ad_brain_display_value + input_data_display_value: input_data_display_value + rna_brain_change_studied: true + pharos_class_display_value: pharos_class_display_value + proteomics_TMT: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + name: name + hgnc_symbol: hgnc_symbol + _id: _id + rna_differential_expression: + - adj_p_val: 1.2315135367772556 + study: study + logfc: 3.616076749251911 + ensembl_gene_id: ensembl_gene_id + ci_r: 7.386281948385884 + hgnc_symbol: hgnc_symbol + tissue: tissue + model: model + _id: _id + fc: 2.027123023002322 + ci_l: 4.145608029883936 + - adj_p_val: 1.2315135367772556 + study: study + logfc: 3.616076749251911 + ensembl_gene_id: ensembl_gene_id + ci_r: 7.386281948385884 + hgnc_symbol: hgnc_symbol + tissue: tissue + model: model + _id: _id + fc: 2.027123023002322 + ci_l: 4.145608029883936 + nominated_target_display_value: true + similar_genes_network: + nodes: + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + min: 6.965117697638846 + max: 1.284659006116532 + links: + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + is_any_protein_changed_in_ad_brain: true + is_adi: true + programs_display_value: programs_display_value + properties: + _id: + type: string + ensembl_gene_id: + type: string + name: + type: string + summary: + type: string + hgnc_symbol: + type: string + alias: + items: + type: string + type: array + is_igap: + type: boolean + is_eqtl: + type: boolean + is_any_rna_changed_in_ad_brain: + type: boolean + rna_brain_change_studied: + type: boolean + is_any_protein_changed_in_ad_brain: + type: boolean + protein_brain_change_studied: + type: boolean + target_nominations: + items: + $ref: '#/components/schemas/TargetNomination' + nullable: true + type: array + median_expression: + items: + $ref: '#/components/schemas/MedianExpression' + type: array + druggability: + items: + $ref: '#/components/schemas/Druggability' + type: array + total_nominations: + nullable: true + type: integer + is_adi: + type: boolean + is_tep: + type: boolean + resource_url: + nullable: true + type: string + rna_differential_expression: + items: + $ref: '#/components/schemas/RnaDifferentialExpression' + nullable: true + type: array + proteomics_LFQ: + items: + $ref: '#/components/schemas/ProteinDifferentialExpression' + nullable: true + type: array + proteomics_SRM: + items: + $ref: '#/components/schemas/ProteinDifferentialExpression' + nullable: true + type: array + proteomics_TMT: + items: + $ref: '#/components/schemas/ProteinDifferentialExpression' + nullable: true + type: array + metabolomics: + additionalProperties: true + nullable: true + type: object + overall_scores: + $ref: '#/components/schemas/OverallScores' + neuropathologic_correlations: + items: + $ref: '#/components/schemas/NeuropathologicCorrelation' + nullable: true + type: array + experimental_validation: + items: + $ref: '#/components/schemas/ExperimentalValidation' + nullable: true + type: array + links: + additionalProperties: + type: object + nullable: true + type: object + similar_genes_network: + $ref: '#/components/schemas/SimilarGenesNetwork' + ab_modality_display_value: + nullable: true + type: string + safety_rating_display_value: + nullable: true + type: string + sm_druggability_display_value: + nullable: true + type: string + pharos_class_display_value: + nullable: true + type: string + is_any_rna_changed_in_ad_brain_display_value: + nullable: true + type: string + is_any_protein_changed_in_ad_brain_display_value: + nullable: true + type: string + nominated_target_display_value: + nullable: true + type: boolean + initial_nomination_display_value: + nullable: true + type: integer + teams_display_value: + nullable: true + type: string + study_display_value: + nullable: true + type: string + programs_display_value: + nullable: true + type: string + input_data_display_value: + nullable: true + type: string + bio_domains: + $ref: '#/components/schemas/BioDomains' + ensembl_info: + $ref: '#/components/schemas/EnsemblInfo' + required: + - _id + - alias + - druggability + - ensembl_gene_id + - ensembl_info + - hgnc_symbol + - is_any_protein_changed_in_ad_brain + - is_any_rna_changed_in_ad_brain + - is_eqtl + - is_igap + - median_expression + - name + - protein_brain_change_studied + - rna_brain_change_studied + - summary + - target_nominations + - total_nominations + type: object + GCTGeneTissue: + description: GCTGeneTissue + example: + adj_p_val: 6.0274563 + logfc: 0.8008282 + ci_r: 5.962134 + name: name + ci_l: 1.4658129 + medianexpression: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + properties: + name: + description: Name of the gene or tissue. + type: string + logfc: + description: Log fold change value. + format: float + type: number + adj_p_val: + description: Adjusted p-value. + format: float + type: number + ci_l: + description: Lower confidence interval. + format: float + type: number + ci_r: + description: Upper confidence interval. + format: float + type: number + medianexpression: + $ref: '#/components/schemas/MedianExpression' + required: + - adj_p_val + - ci_l + - ci_r + - logfc + - mediaexpression + - name + type: object + GCTGeneNominations: + description: GCTGeneNominations + example: + teams: + - teams + - teams + year: 2 + inputs: + - inputs + - inputs + count: 5 + studies: + - studies + - studies + programs: + - programs + - programs + validations: + - validations + - validations + properties: + count: + description: The total number of gene nominations. + type: integer + year: + description: The year of the nominations. + type: integer + teams: + description: The list of teams involved in the nominations. + items: + type: string + type: array + studies: + description: The list of studies related to the nominations. + items: + type: string + type: array + inputs: + description: The input data used for the nominations. + items: + type: string + type: array + programs: + description: The list of programs associated with the nominations. + items: + type: string + type: array + validations: + description: The list of validations for the nominations. + items: + type: string + type: array + required: + - count + - inputs + - programs + - studies + - teams + - validations + - year + type: object + GCTGene: + description: GCT Gene + example: + associations: + - 7.061401241503109 + - 7.061401241503109 + pinned: true + tissues: + - adj_p_val: 6.0274563 + logfc: 0.8008282 + ci_r: 5.962134 + name: name + ci_l: 1.4658129 + medianexpression: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + - adj_p_val: 6.0274563 + logfc: 0.8008282 + ci_r: 5.962134 + name: name + ci_l: 1.4658129 + medianexpression: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + search_string: search_string + nominations: + teams: + - teams + - teams + year: 2 + inputs: + - inputs + - inputs + count: 5 + studies: + - studies + - studies + programs: + - programs + - programs + validations: + - validations + - validations + multi_omics_score: 2.027123023002322 + uid: uid + target_risk_score: 9.301444243932576 + ensembl_gene_id: ensembl_gene_id + search_array: + - search_array + - search_array + hgnc_symbol: hgnc_symbol + genetics_score: 3.616076749251911 + uniprotid: uniprotid + biodomains: + - biodomains + - biodomains + target_enabling_resources: + - target_enabling_resources + - target_enabling_resources + properties: + ensembl_gene_id: + description: Ensembl gene identifier + type: string + hgnc_symbol: + description: HGNC gene symbol + type: string + uniprotid: + description: UniProt identifier + nullable: true + type: string + uid: + description: Unique identifier + nullable: true + type: string + search_string: + description: Search string + nullable: true + type: string + search_array: + description: Array of search terms + items: + type: string + nullable: true + type: array + tissues: + description: Array of gene tissues + items: + $ref: '#/components/schemas/GCTGeneTissue' + type: array + nominations: + $ref: '#/components/schemas/GCTGeneNominations' + associations: + description: Array of association values + items: + type: number + nullable: true + type: array + target_risk_score: + description: Target risk score + nullable: true + type: number + genetics_score: + description: Genetics score + nullable: true + type: number + multi_omics_score: + description: Multi-omics score + nullable: true + type: number + biodomains: + description: Array of biological domains + items: + type: string + nullable: true + type: array + pinned: + description: Whether the gene is pinned + nullable: true + type: boolean + target_enabling_resources: + description: Target enabling resources + items: + type: string + nullable: true + type: array + required: + - ensembl_gene_id + - genetics_score + - hgnc_symbol + - multi_omics_score + - target_risk_score + - tissues + type: object + GCTGenesList: + description: List of GCTGene + example: + items: + - associations: + - 7.061401241503109 + - 7.061401241503109 + pinned: true + tissues: + - adj_p_val: 6.0274563 + logfc: 0.8008282 + ci_r: 5.962134 + name: name + ci_l: 1.4658129 + medianexpression: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + - adj_p_val: 6.0274563 + logfc: 0.8008282 + ci_r: 5.962134 + name: name + ci_l: 1.4658129 + medianexpression: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + search_string: search_string + nominations: + teams: + - teams + - teams + year: 2 + inputs: + - inputs + - inputs + count: 5 + studies: + - studies + - studies + programs: + - programs + - programs + validations: + - validations + - validations + multi_omics_score: 2.027123023002322 + uid: uid + target_risk_score: 9.301444243932576 + ensembl_gene_id: ensembl_gene_id + search_array: + - search_array + - search_array + hgnc_symbol: hgnc_symbol + genetics_score: 3.616076749251911 + uniprotid: uniprotid + biodomains: + - biodomains + - biodomains + target_enabling_resources: + - target_enabling_resources + - target_enabling_resources + - associations: + - 7.061401241503109 + - 7.061401241503109 + pinned: true + tissues: + - adj_p_val: 6.0274563 + logfc: 0.8008282 + ci_r: 5.962134 + name: name + ci_l: 1.4658129 + medianexpression: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + - adj_p_val: 6.0274563 + logfc: 0.8008282 + ci_r: 5.962134 + name: name + ci_l: 1.4658129 + medianexpression: + min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + search_string: search_string + nominations: + teams: + - teams + - teams + year: 2 + inputs: + - inputs + - inputs + count: 5 + studies: + - studies + - studies + programs: + - programs + - programs + validations: + - validations + - validations + multi_omics_score: 2.027123023002322 + uid: uid + target_risk_score: 9.301444243932576 + ensembl_gene_id: ensembl_gene_id + search_array: + - search_array + - search_array + hgnc_symbol: hgnc_symbol + genetics_score: 3.616076749251911 + uniprotid: uniprotid + biodomains: + - biodomains + - biodomains + target_enabling_resources: + - target_enabling_resources + - target_enabling_resources + properties: + items: + items: + $ref: '#/components/schemas/GCTGene' + type: array + type: object + NominatedGenesList: + description: List of nominated genes + example: + items: + - is_any_rna_changed_in_ad_brain: true + proteomics_SRM: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + target_nominations: + - data_synapseid: data_synapseid + input_data: input_data + study: study + initial_nomination: 0.8008281904610115 + data_used_to_support_target_selection: data_used_to_support_target_selection + validation_study_details: validation_study_details + rank: rank + hgnc_symbol: hgnc_symbol + source: source + team: team + predicted_therapeutic_direction: predicted_therapeutic_direction + target_choice_justification: target_choice_justification + - data_synapseid: data_synapseid + input_data: input_data + study: study + initial_nomination: 0.8008281904610115 + data_used_to_support_target_selection: data_used_to_support_target_selection + validation_study_details: validation_study_details + rank: rank + hgnc_symbol: hgnc_symbol + source: source + team: team + predicted_therapeutic_direction: predicted_therapeutic_direction + target_choice_justification: target_choice_justification + study_display_value: study_display_value + protein_brain_change_studied: true + is_eqtl: true + median_expression: + - min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + - min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + experimental_validation: + - hypothesis_tested: hypothesis_tested + published: published + team: team + outcome_measure: outcome_measure + model_system: model_system + balanced_for_sex: balanced_for_sex + reference: reference + summary_findings: summary_findings + species: species + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + date_report: date_report + _id: _id + contributors: contributors + reference_doi: reference_doi + outcome_measure_details: outcome_measure_details + - hypothesis_tested: hypothesis_tested + published: published + team: team + outcome_measure: outcome_measure + model_system: model_system + balanced_for_sex: balanced_for_sex + reference: reference + summary_findings: summary_findings + species: species + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + date_report: date_report + _id: _id + contributors: contributors + reference_doi: reference_doi + outcome_measure_details: outcome_measure_details + overall_scores: + multi_omics_score: 9.965781217890562 + literature_score: 9.369310271410669 + target_risk_score: 4.965218492984954 + ensembl_gene_id: ensembl_gene_id + genetics_score: 5.025004791520295 + is_igap: true + metabolomics: + key: '' + is_any_rna_changed_in_ad_brain_display_value: is_any_rna_changed_in_ad_brain_display_value + ensembl_gene_id: ensembl_gene_id + sm_druggability_display_value: sm_druggability_display_value + bio_domains: + gene_biodomains: + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + ensembl_gene_id: ensembl_gene_id + total_nominations: 9 + proteomics_LFQ: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + alias: + - alias + - alias + links: + key: '{}' + initial_nomination_display_value: 2 + neuropathologic_correlations: + - ensg: ensg + neuropath_type: neuropath_type + oddsratio: 6.683562403749608 + pval: 6.438423552598547 + _id: _id + gname: gname + ci_lower: 8.762042012749001 + ci_upper: 9.018348186070783 + pval_adj: 3.5571952270680973 + - ensg: ensg + neuropath_type: neuropath_type + oddsratio: 6.683562403749608 + pval: 6.438423552598547 + _id: _id + gname: gname + ci_lower: 8.762042012749001 + ci_upper: 9.018348186070783 + pval_adj: 3.5571952270680973 + summary: summary + resource_url: resource_url + druggability: + - sm_druggability_bucket: 1 + abability_bucket_definition: Moderate bioavailability + safety_bucket: 2 + abability_bucket: 3 + pharos_class: Tclin + classification: Enzyme + safety_bucket_definition: Low risk + - sm_druggability_bucket: 1 + abability_bucket_definition: Moderate bioavailability + safety_bucket: 2 + abability_bucket: 3 + pharos_class: Tclin + classification: Enzyme + safety_bucket_definition: Low risk + ensembl_info: + ensembl_possible_replacements: + - ensembl_possible_replacements + - ensembl_possible_replacements + ensembl_release: 6 + ensembl_permalink: ensembl_permalink + is_tep: true + teams_display_value: teams_display_value + ab_modality_display_value: ab_modality_display_value + safety_rating_display_value: safety_rating_display_value + is_any_protein_changed_in_ad_brain_display_value: is_any_protein_changed_in_ad_brain_display_value + input_data_display_value: input_data_display_value + rna_brain_change_studied: true + pharos_class_display_value: pharos_class_display_value + proteomics_TMT: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + name: name + hgnc_symbol: hgnc_symbol + _id: _id + rna_differential_expression: + - adj_p_val: 1.2315135367772556 + study: study + logfc: 3.616076749251911 + ensembl_gene_id: ensembl_gene_id + ci_r: 7.386281948385884 + hgnc_symbol: hgnc_symbol + tissue: tissue + model: model + _id: _id + fc: 2.027123023002322 + ci_l: 4.145608029883936 + - adj_p_val: 1.2315135367772556 + study: study + logfc: 3.616076749251911 + ensembl_gene_id: ensembl_gene_id + ci_r: 7.386281948385884 + hgnc_symbol: hgnc_symbol + tissue: tissue + model: model + _id: _id + fc: 2.027123023002322 + ci_l: 4.145608029883936 + nominated_target_display_value: true + similar_genes_network: + nodes: + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + min: 6.965117697638846 + max: 1.284659006116532 + links: + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + is_any_protein_changed_in_ad_brain: true + is_adi: true + programs_display_value: programs_display_value + - is_any_rna_changed_in_ad_brain: true + proteomics_SRM: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + target_nominations: + - data_synapseid: data_synapseid + input_data: input_data + study: study + initial_nomination: 0.8008281904610115 + data_used_to_support_target_selection: data_used_to_support_target_selection + validation_study_details: validation_study_details + rank: rank + hgnc_symbol: hgnc_symbol + source: source + team: team + predicted_therapeutic_direction: predicted_therapeutic_direction + target_choice_justification: target_choice_justification + - data_synapseid: data_synapseid + input_data: input_data + study: study + initial_nomination: 0.8008281904610115 + data_used_to_support_target_selection: data_used_to_support_target_selection + validation_study_details: validation_study_details + rank: rank + hgnc_symbol: hgnc_symbol + source: source + team: team + predicted_therapeutic_direction: predicted_therapeutic_direction + target_choice_justification: target_choice_justification + study_display_value: study_display_value + protein_brain_change_studied: true + is_eqtl: true + median_expression: + - min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + - min: 6.0274563 + first_quartile: 1.4658129 + median: 5.962134 + max: 7.0614014 + mean: 5.637377 + tissue: tissue + third_quartile: 2.302136 + experimental_validation: + - hypothesis_tested: hypothesis_tested + published: published + team: team + outcome_measure: outcome_measure + model_system: model_system + balanced_for_sex: balanced_for_sex + reference: reference + summary_findings: summary_findings + species: species + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + date_report: date_report + _id: _id + contributors: contributors + reference_doi: reference_doi + outcome_measure_details: outcome_measure_details + - hypothesis_tested: hypothesis_tested + published: published + team: team + outcome_measure: outcome_measure + model_system: model_system + balanced_for_sex: balanced_for_sex + reference: reference + summary_findings: summary_findings + species: species + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + date_report: date_report + _id: _id + contributors: contributors + reference_doi: reference_doi + outcome_measure_details: outcome_measure_details + overall_scores: + multi_omics_score: 9.965781217890562 + literature_score: 9.369310271410669 + target_risk_score: 4.965218492984954 + ensembl_gene_id: ensembl_gene_id + genetics_score: 5.025004791520295 + is_igap: true + metabolomics: + key: '' + is_any_rna_changed_in_ad_brain_display_value: is_any_rna_changed_in_ad_brain_display_value + ensembl_gene_id: ensembl_gene_id + sm_druggability_display_value: sm_druggability_display_value + bio_domains: + gene_biodomains: + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + - pct_linking_terms: 1.4658129 + n_gene_biodomain_terms: 6 + biodomain: biodomain + go_terms: + - go_terms + - go_terms + n_biodomain_terms: 0 + ensembl_gene_id: ensembl_gene_id + total_nominations: 9 + proteomics_LFQ: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + alias: + - alias + - alias + links: + key: '{}' + initial_nomination_display_value: 2 + neuropathologic_correlations: + - ensg: ensg + neuropath_type: neuropath_type + oddsratio: 6.683562403749608 + pval: 6.438423552598547 + _id: _id + gname: gname + ci_lower: 8.762042012749001 + ci_upper: 9.018348186070783 + pval_adj: 3.5571952270680973 + - ensg: ensg + neuropath_type: neuropath_type + oddsratio: 6.683562403749608 + pval: 6.438423552598547 + _id: _id + gname: gname + ci_lower: 8.762042012749001 + ci_upper: 9.018348186070783 + pval_adj: 3.5571952270680973 + summary: summary + resource_url: resource_url + druggability: + - sm_druggability_bucket: 1 + abability_bucket_definition: Moderate bioavailability + safety_bucket: 2 + abability_bucket: 3 + pharos_class: Tclin + classification: Enzyme + safety_bucket_definition: Low risk + - sm_druggability_bucket: 1 + abability_bucket_definition: Moderate bioavailability + safety_bucket: 2 + abability_bucket: 3 + pharos_class: Tclin + classification: Enzyme + safety_bucket_definition: Low risk + ensembl_info: + ensembl_possible_replacements: + - ensembl_possible_replacements + - ensembl_possible_replacements + ensembl_release: 6 + ensembl_permalink: ensembl_permalink + is_tep: true + teams_display_value: teams_display_value + ab_modality_display_value: ab_modality_display_value + safety_rating_display_value: safety_rating_display_value + is_any_protein_changed_in_ad_brain_display_value: is_any_protein_changed_in_ad_brain_display_value + input_data_display_value: input_data_display_value + rna_brain_change_studied: true + pharos_class_display_value: pharos_class_display_value + proteomics_TMT: + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + - log2_fc: 1.0246457001441578 + pval: 7.457744773683766 + cor_pval: 1.1730742509559433 + ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + uniqid: uniqid + tissue: tissue + ci_upr: 1.4894159098541704 + ci_lwr: 6.84685269835264 + _id: _id + uniprotid: uniprotid + name: name + hgnc_symbol: hgnc_symbol + _id: _id + rna_differential_expression: + - adj_p_val: 1.2315135367772556 + study: study + logfc: 3.616076749251911 + ensembl_gene_id: ensembl_gene_id + ci_r: 7.386281948385884 + hgnc_symbol: hgnc_symbol + tissue: tissue + model: model + _id: _id + fc: 2.027123023002322 + ci_l: 4.145608029883936 + - adj_p_val: 1.2315135367772556 + study: study + logfc: 3.616076749251911 + ensembl_gene_id: ensembl_gene_id + ci_r: 7.386281948385884 + hgnc_symbol: hgnc_symbol + tissue: tissue + model: model + _id: _id + fc: 2.027123023002322 + ci_l: 4.145608029883936 + nominated_target_display_value: true + similar_genes_network: + nodes: + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + - ensembl_gene_id: ensembl_gene_id + hgnc_symbol: hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + min: 6.965117697638846 + max: 1.284659006116532 + links: + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + - source_hgnc_symbol: source_hgnc_symbol + brain_regions: + - brain_regions + - brain_regions + source: source + target: target + target_hgnc_symbol: target_hgnc_symbol + is_any_protein_changed_in_ad_brain: true + is_adi: true + programs_display_value: programs_display_value + properties: + items: + items: + $ref: '#/components/schemas/Gene' + type: array + type: object + Dataversion: + description: Synapse data version + example: + data_file: data_file + data_version: data_version + team_images_id: team_images_id + properties: + data_file: + type: string + data_version: + type: string + team_images_id: + type: string + required: + - data_file + - data_version + - team_images_id + type: object + RnaDistribution: + description: Distributions + example: + min: 0.8008281904610115 + first_quartile: 1.4658129805029452 + median: 5.962133916683182 + max: 6.027456183070403 + model: model + tissue: tissue + _id: _id + third_quartile: 5.637376656633329 + properties: + _id: + description: ID of the RNA distribution + type: string + model: + description: Model of the RNA data + type: string + tissue: + description: Tissue type + type: string + min: + description: Minimum value in the distribution + type: number + max: + description: Maximum value in the distribution + type: number + first_quartile: + description: First quartile value + type: number + median: + description: Median value + type: number + third_quartile: + description: Third quartile value + type: number + required: + - _id + - first_quartile + - max + - median + - min + - model + - third_quartile + - tissue + type: object + ProteomicsDistribution: + description: Distributions + example: + type: type + properties: + type: + description: 'Type of proteomics distribution (e.g., LFQ, SRM, TMT)' + type: string + required: + - type + type: object + OverallScoresDistribution: + description: Distributions + example: + bins: + - - 7.061401241503109 + - 7.061401241503109 + - - 7.061401241503109 + - 7.061401241503109 + name: name + syn_id: syn_id + distribution: + - 2.3021358869347655 + - 2.3021358869347655 + wiki_id: wiki_id + properties: + distribution: + description: Distribution of overall scores + items: + type: number + type: array + bins: + description: Bins used in the distribution + items: + items: + type: number + type: array + type: array + name: + description: Name of the score distribution + type: string + syn_id: + description: Synapse ID associated with the score + type: string + wiki_id: + description: Wiki ID associated with the score + type: string + required: + - bins + - distribution + - name + - syn_id + - wiki_id + type: object + Distribution: + description: Distributions + example: + overall_scores: + - bins: + - - 7.061401241503109 + - 7.061401241503109 + - - 7.061401241503109 + - 7.061401241503109 + name: name + syn_id: syn_id + distribution: + - 2.3021358869347655 + - 2.3021358869347655 + wiki_id: wiki_id + - bins: + - - 7.061401241503109 + - 7.061401241503109 + - - 7.061401241503109 + - 7.061401241503109 + name: name + syn_id: syn_id + distribution: + - 2.3021358869347655 + - 2.3021358869347655 + wiki_id: wiki_id + proteomics_SRM: + - type: type + - type: type + proteomics_TMT: + - type: type + - type: type + proteomics_LFQ: + - type: type + - type: type + rna_differential_expression: + - min: 0.8008281904610115 + first_quartile: 1.4658129805029452 + median: 5.962133916683182 + max: 6.027456183070403 + model: model + tissue: tissue + _id: _id + third_quartile: 5.637376656633329 + - min: 0.8008281904610115 + first_quartile: 1.4658129805029452 + median: 5.962133916683182 + max: 6.027456183070403 + model: model + tissue: tissue + _id: _id + third_quartile: 5.637376656633329 + properties: + rna_differential_expression: + items: + $ref: '#/components/schemas/RnaDistribution' + type: array + proteomics_LFQ: + items: + $ref: '#/components/schemas/ProteomicsDistribution' + type: array + proteomics_SRM: + items: + $ref: '#/components/schemas/ProteomicsDistribution' + type: array + proteomics_TMT: + items: + $ref: '#/components/schemas/ProteomicsDistribution' + type: array + overall_scores: + items: + $ref: '#/components/schemas/OverallScoresDistribution' + type: array + required: + - overall_scores + - proteomics_LFQ + - proteomics_SRM + - proteomics_TMT + - rna_differential_expression + type: object + TeamMember: + description: Team Member + example: + name: name + isPrimaryInvestigator: true + url: url + properties: + name: + type: string + isPrimaryInvestigator: + type: boolean + url: + type: string + required: + - isPrimaryInvestigator + - name + type: object + Team: + description: Team + example: + team_full: team_full + members: + - name: name + isPrimaryInvestigator: true + url: url + - name: name + isPrimaryInvestigator: true + url: url + description: description + team: team + program: program + properties: + team: + type: string + team_full: + type: string + program: + type: string + description: + type: string + members: + items: + $ref: '#/components/schemas/TeamMember' + type: array + required: + - description + - members + - program + - team + - team_full + type: object + TeamsList: + description: List of Teams + example: + items: + - team_full: team_full + members: + - name: name + isPrimaryInvestigator: true + url: url + - name: name + isPrimaryInvestigator: true + url: url + description: description + team: team + program: program + - team_full: team_full + members: + - name: name + isPrimaryInvestigator: true + url: url + - name: name + isPrimaryInvestigator: true + url: url + description: description + team: team + program: program + properties: + items: + items: + $ref: '#/components/schemas/Team' + type: array + type: object + TeamImage: + format: binary + type: string diff --git a/apps/agora/api-spring/src/test/java/org/sagebionetworks/agora/api/OpenApiGeneratorApplicationTests.java b/apps/agora/api-spring/src/test/java/org/sagebionetworks/agora/api/OpenApiGeneratorApplicationTests.java new file mode 100644 index 0000000000..8179cdce76 --- /dev/null +++ b/apps/agora/api-spring/src/test/java/org/sagebionetworks/agora/api/OpenApiGeneratorApplicationTests.java @@ -0,0 +1,13 @@ +package org.sagebionetworks.agora.api; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class OpenApiGeneratorApplicationTests { + + @Test + void contextLoads() { + } + +} \ No newline at end of file From 9e2f8498629fd4fe819ba833b0abb532ce053397 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 03:22:45 +0000 Subject: [PATCH 3/9] update docker/ --- docker/agora/serve-detach.sh | 1 + docker/agora/services/api-spring.yml | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 docker/agora/services/api-spring.yml diff --git a/docker/agora/serve-detach.sh b/docker/agora/serve-detach.sh index 7e80994c1a..6f9d8d0d29 100755 --- a/docker/agora/serve-detach.sh +++ b/docker/agora/serve-detach.sh @@ -4,6 +4,7 @@ args=( # List of services in alphanumeric order --file docker/agora/services/apex.yml --file docker/agora/services/api-docs.yml + --file docker/agora/services/api-spring.yml --file docker/agora/services/api.yml --file docker/agora/services/app.yml --file docker/agora/services/data.yml diff --git a/docker/agora/services/api-spring.yml b/docker/agora/services/api-spring.yml new file mode 100644 index 0000000000..2353ca54a7 --- /dev/null +++ b/docker/agora/services/api-spring.yml @@ -0,0 +1,18 @@ +services: + agora-api-spring: + image: ghcr.io/sage-bionetworks/agora-api-spring:${AGORA_VERSION:-local} + container_name: agora-api-spring + restart: always + env_file: + - ../../../apps/agora/api-spring/.env + networks: + - agora + ports: + - '8086:8086' + # depends_on: + # agora-config-server: + # condition: service_healthy + deploy: + resources: + limits: + memory: 1G From 8754bfe9ae9e00e02d9e013d1ad8cc2e03a3034b Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 03:39:07 +0000 Subject: [PATCH 4/9] api now depends on mongo and data --- docker/agora/services/api-spring.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docker/agora/services/api-spring.yml b/docker/agora/services/api-spring.yml index 2353ca54a7..2a4dd75a0a 100644 --- a/docker/agora/services/api-spring.yml +++ b/docker/agora/services/api-spring.yml @@ -9,9 +9,11 @@ services: - agora ports: - '8086:8086' - # depends_on: - # agora-config-server: - # condition: service_healthy + depends_on: + agora-data: + condition: service_completed_successfully + agora-mongo: + condition: service_started deploy: resources: limits: From 7080a400474d38284c2571882c3cf07545086bfd Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 04:07:38 +0000 Subject: [PATCH 5/9] create entity and repository for DataVersion --- apps/agora/api-spring/build.gradle | 1 + .../agora/api/model/entity/DataVersion.java | 15 +++++++++++++++ .../model/repository/DataVersionRepository.java | 10 ++++++++++ 3 files changed, 26 insertions(+) create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersion.java create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java diff --git a/apps/agora/api-spring/build.gradle b/apps/agora/api-spring/build.gradle index 94966be1b6..d7d90a1785 100644 --- a/apps/agora/api-spring/build.gradle +++ b/apps/agora/api-spring/build.gradle @@ -55,6 +55,7 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}" implementation "org.springframework.boot:spring-boot-starter-validation:${springBootVersion}" implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-data-mongodb:${springBootVersion}" // implementation "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:${springCloudVersion}" implementation "org.springframework.data:spring-data-commons:${springDataVersion}" testImplementation 'org.assertj:assertj-core:3.23.1' diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersion.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersion.java new file mode 100644 index 0000000000..65a55f69cb --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersion.java @@ -0,0 +1,15 @@ +package org.sagebionetworks.agora.api.model.entity; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +@Document(collection = "dataversion") +public class DataVersion { + + @Id + public String id; + + public String dataFile; + public String dataVersion; + public String teamImagesId; +} diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java new file mode 100644 index 0000000000..71ad3cbdbd --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java @@ -0,0 +1,10 @@ +package org.sagebionetworks.agora.api.model.repository; + +import org.sagebionetworks.agora.api.model.entity.DataVersion; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; + +public interface DataVersionRepository extends MongoRepository { + @Query("{}") + DataVersion get(); +} From cf7929ba1e200a7ae8fc32704b88ed96f800a0c5 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 04:14:58 +0000 Subject: [PATCH 6/9] add service --- .../agora/api/model/dto/DataversionDto.java | 36 +++++++++---------- ...ataVersion.java => DataVersionEntity.java} | 2 +- .../repository/DataVersionRepository.java | 6 ++-- .../agora/api/service/DataVersionService.java | 28 +++++++++++++++ 4 files changed, 50 insertions(+), 22 deletions(-) rename apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/{DataVersion.java => DataVersionEntity.java} (90%) create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java index 86a4324907..cd3d45ad73 100644 --- a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/dto/DataversionDto.java @@ -1,18 +1,16 @@ package org.sagebionetworks.agora.api.model.dto; -import java.net.URI; -import java.util.Objects; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; -import java.time.OffsetDateTime; -import javax.validation.Valid; -import javax.validation.constraints.*; import io.swagger.v3.oas.annotations.media.Schema; - - +import java.net.URI; +import java.time.OffsetDateTime; import java.util.*; +import java.util.Objects; import javax.annotation.Generated; +import javax.validation.Valid; +import javax.validation.constraints.*; /** * Synapse data version @@ -22,6 +20,7 @@ @JsonTypeName("Dataversion") @Generated(value = "org.openapitools.codegen.languages.SpringCodegen") // TODO Add x-java-class-annotations +@lombok.Builder public class DataversionDto { private String dataFile; @@ -51,8 +50,8 @@ public DataversionDto dataFile(String dataFile) { /** * Get dataFile * @return dataFile - */ - @NotNull + */ + @NotNull @Schema(name = "data_file", requiredMode = Schema.RequiredMode.REQUIRED) @JsonProperty("data_file") public String getDataFile() { @@ -71,8 +70,8 @@ public DataversionDto dataVersion(String dataVersion) { /** * Get dataVersion * @return dataVersion - */ - @NotNull + */ + @NotNull @Schema(name = "data_version", requiredMode = Schema.RequiredMode.REQUIRED) @JsonProperty("data_version") public String getDataVersion() { @@ -91,8 +90,8 @@ public DataversionDto teamImagesId(String teamImagesId) { /** * Get teamImagesId * @return teamImagesId - */ - @NotNull + */ + @NotNull @Schema(name = "team_images_id", requiredMode = Schema.RequiredMode.REQUIRED) @JsonProperty("team_images_id") public String getTeamImagesId() { @@ -112,9 +111,11 @@ public boolean equals(Object o) { return false; } DataversionDto dataversion = (DataversionDto) o; - return Objects.equals(this.dataFile, dataversion.dataFile) && - Objects.equals(this.dataVersion, dataversion.dataVersion) && - Objects.equals(this.teamImagesId, dataversion.teamImagesId); + return ( + Objects.equals(this.dataFile, dataversion.dataFile) && + Objects.equals(this.dataVersion, dataversion.dataVersion) && + Objects.equals(this.teamImagesId, dataversion.teamImagesId) + ); } @Override @@ -144,4 +145,3 @@ private String toIndentedString(Object o) { return o.toString().replace("\n", "\n "); } } - diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersion.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersionEntity.java similarity index 90% rename from apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersion.java rename to apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersionEntity.java index 65a55f69cb..fd225aa5fa 100644 --- a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersion.java +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersionEntity.java @@ -4,7 +4,7 @@ import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "dataversion") -public class DataVersion { +public class DataVersionEntity { @Id public String id; diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java index 71ad3cbdbd..21f05207b5 100644 --- a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java @@ -1,10 +1,10 @@ package org.sagebionetworks.agora.api.model.repository; -import org.sagebionetworks.agora.api.model.entity.DataVersion; +import org.sagebionetworks.agora.api.model.entity.DataVersionEntity; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; -public interface DataVersionRepository extends MongoRepository { +public interface DataVersionRepository extends MongoRepository { @Query("{}") - DataVersion get(); + DataVersionEntity get(); } diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java new file mode 100644 index 0000000000..685ba7a2bd --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java @@ -0,0 +1,28 @@ +package org.sagebionetworks.agora.api.service; + +import org.sagebionetworks.agora.api.model.dto.DataversionDto; +import org.sagebionetworks.agora.api.model.entity.DataVersionEntity; +import org.sagebionetworks.agora.api.model.repository.DataVersionRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class DataVersionService { + + private final DataVersionRepository dataVersionRepository; + + public DataVersionService(DataVersionRepository dataVersionRepository) { + this.dataVersionRepository = dataVersionRepository; + } + + @Transactional(readOnly = true) + public DataversionDto getDataVersion() { + DataVersionEntity entity = this.dataVersionRepository.get(); + + return DataversionDto.builder() + .dataFile(entity.dataFile) + .dataVersion(entity.dataVersion) + .teamImagesId(entity.teamImagesId) + .build(); + } +} From 81cbd04e3d0e9af23a4d82c840ac071f23168d59 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 04:24:51 +0000 Subject: [PATCH 7/9] add config to connect to the DB --- .../api/api/DataversionApiDelegateImpl.java | 21 +++++++++++++++++++ .../src/main/resources/application.yml | 3 +++ 2 files changed, 24 insertions(+) create mode 100644 apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegateImpl.java diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegateImpl.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegateImpl.java new file mode 100644 index 0000000000..d06d05a0f3 --- /dev/null +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/api/DataversionApiDelegateImpl.java @@ -0,0 +1,21 @@ +package org.sagebionetworks.agora.api.api; + +import org.sagebionetworks.agora.api.model.dto.DataversionDto; +import org.sagebionetworks.agora.api.service.DataVersionService; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +@Component +public class DataversionApiDelegateImpl implements DataversionApiDelegate { + + private final DataVersionService dataVersionService; + + public DataversionApiDelegateImpl(DataVersionService dataVersionService) { + this.dataVersionService = dataVersionService; + } + + @Override + public ResponseEntity getDataversion() { + return ResponseEntity.ok(dataVersionService.getDataVersion()); + } +} diff --git a/apps/agora/api-spring/src/main/resources/application.yml b/apps/agora/api-spring/src/main/resources/application.yml index be6b651fbb..e90e936b4b 100644 --- a/apps/agora/api-spring/src/main/resources/application.yml +++ b/apps/agora/api-spring/src/main/resources/application.yml @@ -6,6 +6,9 @@ spring: date-format: org.sagebionetworks.agora.api.RFC3339DateFormat serialization: WRITE_DATES_AS_TIMESTAMPS: false + data: + mongodb: + uri: mongodb://root:changeme@agora-mongo:27017/agora?authSource=admin # zipkin: # base-url: http://openchallenges-zipkin:9411 From 74355c04cff21470d5fc2ab2089587072fd92456 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 04:33:37 +0000 Subject: [PATCH 8/9] fix mapping between entity props and document props --- .../agora/api/model/entity/DataVersionEntity.java | 6 ++++++ .../agora/api/model/repository/DataVersionRepository.java | 2 +- .../agora/api/service/DataVersionService.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersionEntity.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersionEntity.java index fd225aa5fa..f2e4e788c9 100644 --- a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersionEntity.java +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/entity/DataVersionEntity.java @@ -2,6 +2,7 @@ import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; @Document(collection = "dataversion") public class DataVersionEntity { @@ -9,7 +10,12 @@ public class DataVersionEntity { @Id public String id; + @Field("data_file") public String dataFile; + + @Field("data_version") public String dataVersion; + + @Field("team_images_id") public String teamImagesId; } diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java index 21f05207b5..b2bf4d9e8d 100644 --- a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/model/repository/DataVersionRepository.java @@ -6,5 +6,5 @@ public interface DataVersionRepository extends MongoRepository { @Query("{}") - DataVersionEntity get(); + DataVersionEntity find(); } diff --git a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java index 685ba7a2bd..02bef94e49 100644 --- a/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java +++ b/apps/agora/api-spring/src/main/java/org/sagebionetworks/agora/api/service/DataVersionService.java @@ -17,7 +17,7 @@ public DataVersionService(DataVersionRepository dataVersionRepository) { @Transactional(readOnly = true) public DataversionDto getDataVersion() { - DataVersionEntity entity = this.dataVersionRepository.get(); + DataVersionEntity entity = this.dataVersionRepository.find(); return DataversionDto.builder() .dataFile(entity.dataFile) From 6d5bd7af090475bcb1cddadd36399c7fcb32f8a3 Mon Sep 17 00:00:00 2001 From: Thomas Schaffter Date: Sat, 12 Oct 2024 04:46:35 +0000 Subject: [PATCH 9/9] restore test task --- apps/agora/api-spring/project.json | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/apps/agora/api-spring/project.json b/apps/agora/api-spring/project.json index 3ea3ced7b8..4d4e3b7483 100644 --- a/apps/agora/api-spring/project.json +++ b/apps/agora/api-spring/project.json @@ -27,23 +27,15 @@ }, "dependsOn": ["^install"] }, - // "test": { - // "executor": "nx:run-commands", - // "outputs": ["{projectRoot}/build"], - // "options": { - // "command": "./gradlew test", - // "cwd": "{projectRoot}" - // }, - // "dependsOn": ["^install"] - // }, - // "sonar": { - // "executor": "nx:run-commands", - // "options": { - // "command": "./gradlew sonar", - // "cwd": "{projectRoot}" - // }, - // "dependsOn": ["test"] - // }, + "test": { + "executor": "nx:run-commands", + "outputs": ["{projectRoot}/build"], + "options": { + "command": "./gradlew test", + "cwd": "{projectRoot}" + }, + "dependsOn": ["^install"] + }, "clean": { "executor": "nx:run-commands", "options": {