Skip to content

chore: update prod from main#1092

Open
github-actions[bot] wants to merge 8 commits intoprodfrom
main
Open

chore: update prod from main#1092
github-actions[bot] wants to merge 8 commits intoprodfrom
main

Conversation

@github-actions
Copy link

This pull request updates the prod branch with the latest changes from the main branch.

Make sure to merge this creating a merge commit.

Do not squash-merge this PR. Do not rebase and merge.

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@vercel
Copy link

vercel bot commented Mar 19, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dashboards Ready Ready Preview, Comment Mar 24, 2026 9:43am

Request Review

…1076)

* Add tables

* add a 'create collection' endpoint

* Add 'GET' for collections; add tests

* Add setup to spin up local postgres instance for testing

* Add 'GET' for collections by ID

* foo

* change mutation list defintion

* Add delete implementation

* put pt1

* dedicated Variant.kt api file

* Change collection & variant IDs from UUID to Long

Collections are unreleased, so we can change in-place with no migration
or backwards-compatibility concerns. Switches DB schema to bigserial,
ORM tables to LongIdTable, and all API/model/test types from String/UUID
to Long.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* review

* Consolidate DB setup: use root docker-compose for local dev

Remove backend/docker-compose.dev.yaml and update README to use the
root compose file's database service. Also align POSTGRES_DB name to
dashboards-backend-db across docker-compose.yml.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Move validateIsValidOrganism into DashboardsConfig class

No need for an extension function when it can be a regular member.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix variant deletion in putCollection and clean up imports

Use VariantTable.deleteWhere with explicit column references to avoid
ambiguity between the 'id' function parameter and the table's id column.
Add exposed-jdbc dependency and required imports. Remove stale
validateIsValidOrganism extension function imports.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Extract duplicated lineage filter validation into a single method

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* optimize collection loading

* better MutationListDefinition

* Update backend/src/test/kotlin/org/genspectrum/dashboardsbackend/controller/CollectionsControllerTest.kt

Co-authored-by: Fabian Engelniederhammer <92720311+fengelniederhammer@users.noreply.github.com>

* some progress, but failing tests

* simplify Mutationlist

* Use import for MutationListDefinition in VariantTable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add doc comment to validateLineageFilters

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Reduce duplication by routing createCollection through createVariantEntity

Add VariantUpdate.toVariantRequest() for the id-null case, and change
createVariantEntity to accept VariantRequest, removing the need for a
runtime id check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Use when expression to capture variantId in putCollection

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Split CollectionsControllerTest by HTTP verb

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Rename test to follow GIVEN/WHEN/THEN convention

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Use imports instead of fully-qualified names in CollectionsPostTest

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add test asserting type field is present on variants in GET response

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add type field to VariantRequest subclasses for consistency with Variant

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Revert "Add type field to VariantRequest subclasses for consistency with Variant"

This reverts commit 513ad8c.

* format

* docs: make the correct type of `type` appear in OpenAPI (#1088)

* docs: make the correct type of `type` appear in OpenAPI

* fix import

* Add test

* Remove unused function

* remove explicit spring JDBC import

* remove unused exception handler

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Fabian Engelniederhammer <92720311+fengelniederhammer@users.noreply.github.com>
* Rename MutationListDefinition to FilterObject

- MutationListDefinition → FilterObject
- MutationListVariantType → FilterObjectVariantType
- MUTATION_LIST → FILTER_OBJECT (enum values and VariantType)
- JSON discriminator "mutationList" → "filterObject"
- Field mutationList → filterObject throughout
- DB column "mutation_list" → "filter_object", stored value updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Spell out abbreviated field names in FilterObject

aa -> aminoAcid, nuc -> nucleotide:
- aaMutations -> aminoAcidMutations
- nucMutations -> nucleotideMutations
- aaInsertions -> aminoAcidInsertions
- nucInsertions -> nucleotideInsertions

Also fix missed .mutationList. -> .filterObject. accesses in tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Convert FilterObject to regular class with JsonAnySetter for filters

- Remove data class; no-arg constructor, var properties
- Arbitrary extra JSON properties captured via @JsonAnySetter into a
  private map, exposed via @JsonAnyGetter (no longer a "filters" sub-object)
- Spell out field names: aa -> aminoAcid, nuc -> nucleotide
- Update all call sites to use .apply { } instead of constructor params
- Restructure FilterObjectTest: explicit JSON string comparisons,
  full and partial serialization/deserialization, and a type-error test

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Update V1.1 migration: mutation_list -> filter_object, mutationList -> filterObject

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix remaining mutationList -> filterObject in test JSON strings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add equals/hashCode to FilterObject

Lost when converting from data class.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Rename FilterObjectTest methods to WHEN/THEN convention

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Use GIVEN/WHEN/THEN naming convention in FilterObjectTest

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs

* Rename MutationList* variant classes to FilterObject*

- MutationListVariant -> FilterObjectVariant
- MutationListVariantRequest -> FilterObjectVariantRequest
- MutationListVariantUpdate -> FilterObjectVariantUpdate
- Related local variables and test helpers updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add another test

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…es (#1102)

Bumps the minorandpatch group in /backend with 3 updates: [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java), [org.testcontainers:testcontainers-postgresql](https://github.com/testcontainers/testcontainers-java) and [gradle-wrapper](https://github.com/gradle/gradle).


Updates `org.testcontainers:testcontainers` from 2.0.3 to 2.0.4
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](testcontainers/testcontainers-java@2.0.3...2.0.4)

Updates `org.testcontainers:testcontainers-postgresql` from 2.0.3 to 2.0.4
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](testcontainers/testcontainers-java@2.0.3...2.0.4)

Updates `gradle-wrapper` from 9.4.0 to 9.4.1
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](gradle/gradle@v9.4.0...v9.4.1)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-version: 2.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minorandpatch
- dependency-name: org.testcontainers:testcontainers-postgresql
  dependency-version: 2.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minorandpatch
- dependency-name: gradle-wrapper
  dependency-version: 9.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minorandpatch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [gradle/actions](https://github.com/gradle/actions) from 5 to 6.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](gradle/actions@v5...v6)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Move backendApi to src/ top level alongside lapis and covspectrum

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add collection types and backend service methods

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Change collection and variant IDs from String to number

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* format

* Extract shared backend proxy, add collections proxy route

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Drop redundant userId args from collection service methods

userId is injected by the backend proxy from the session, so there
is no need to pass it from the client.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Drop userId from subscription call sites

The userId is added by the backend proxy, so callers don't need to supply it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* add a bit of docs

* Update MutationListDefinition schema to match simplified backend type

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Adapt Collection types to renamed FilterObject backend API

- MutationListDefinition -> FilterObject
- mutationList discriminator -> filterObject
- mutationList field -> filterObject on variant objects
- aaMutations/nucMutations/aaInsertions/nucInsertions -> spelled-out names
- filters sub-object removed; arbitrary filter props now top-level via catchall

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Move backendProxy.ts from pages/api/ to backendApi/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Split collections catch-all route into explicit per-endpoint files

Replaces [...path].ts with index.ts (GET+POST) and [id].ts (GET+PUT+DELETE),
making auth requirements per endpoint explicit. Also adds proxyToBackendOptionalAuth
to backendProxy.ts to support endpoints where auth is optional.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add backendService tests for getCollections

Tests cover fetching all collections and filtering by organism query param.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Replace proxyToBackendOptionalAuth with proxyToBackendNoAuth for collection GETs

Forwarding userId on read requests caused the backend to filter
collections by owner. Collection reads are always public, so no auth
context is needed. Removes proxyToBackendOptionalAuth entirely.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add Collections entry to organism mega menus

Each organism's Pathogens menu now includes a Collections link, placed
after dashboards and before external Browse data links, with a visual
separator above it. Separator is threaded through desktop mega menu,
mobile hamburger menu, and landing page organism tiles.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add collections overview page per organism

Adds /collections (organism selector) and /collections/:organism
(overview table) as browsable-without-login pages. The overview
fetches collections from the backend and displays them in a table.
The isLoggedIn prop is wired through from SSR session but unused
until create/edit is added in a follow-up PR.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Style collections organism selector with landing page card design

Use organism background colors, border decorations, and hover states
matching the landing page tiles. Grid is 2→3→4 columns across breakpoints.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* format

* remove 'as const'

* always show page header

* stronger typing

* Add a test

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants