Skip to content

feat(postgres): replace CouchDB with PostgreSQL - #294

Open
rramos-xx wants to merge 1 commit into
mainfrom
feat/couchdb-to-postgres-migration
Open

feat(postgres): replace CouchDB with PostgreSQL#294
rramos-xx wants to merge 1 commit into
mainfrom
feat/couchdb-to-postgres-migration

Conversation

@rramos-xx

Copy link
Copy Markdown
Contributor

Replaces the CouchDB datastore with PostgreSQL, accessed via Spring Data JPA with Flyway-managed schema migrations.

  • Schema: one table per former CouchDB document type (advisories, advisory_versions, comments, audit_trail_documents, audit_trail_workflows, audit_trail_comments, counters), with the CSAF document itself kept as a JSONB column (src/main/resources/db/migration/V1__initial_schema.sql)
  • Entities: one JPA entity per table
  • Repositories: one Spring Data repository per entity, wrapped by PostgresRepositoryService
  • Service layer: AdvisoryService rewritten against PostgresRepositoryService; CouchDB Mango-selector building in AdvisorySearchUtil was removed in favor of in-application CSAF JSON filter evaluation in AdvisoryService, and AdvisoryWorkflowUtil had its now-unused CouchDB-querying methods removed
  • Configuration: Flyway owns the schema, Hibernate runs validation-only
  • Tests: data-layer tests now run against a disposable PostgreSQL testcontainer (PostgreSQLExtension) instead of a CouchDB one
  • Cleanup: removed CouchDbService, CouchDBFilterCreator and the CouchDB test extension; dependency swapped from the Cloudant SDK to spring-boot-starter-data-jpa, the PostgreSQL driver and Flyway

See documents/couchdb-to-postgres-migration.md for the full write-up.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Test Results

349 tests  +10   349 ✅ +10   40s ⏱️ -6s
 26 suites ± 0     0 💤 ± 0 
 26 files   ± 0     0 ❌ ± 0 

Results for commit 324d71f. ± Comparison against base commit 4a4c55a.

This pull request removes 6 and adds 16 tests. Note that renamed tests count towards both.
de.bsi.secvisogram.csaf_cms_backend.json.AdvisoryWrapperTest ‑ createFromCouchDbTest
de.bsi.secvisogram.csaf_cms_backend.json.AdvisoryWrapperTest ‑ createFromCouchDbTest_noType
de.bsi.secvisogram.csaf_cms_backend.json.AdvisoryWrapperTest ‑ createFromCouchDbTest_wrongType
de.bsi.secvisogram.csaf_cms_backend.json.CommentWrapperTest ‑ createFromCouchDbTest
de.bsi.secvisogram.csaf_cms_backend.json.CommentWrapperTest ‑ createFromCouchDbTest_NoType
de.bsi.secvisogram.csaf_cms_backend.json.CommentWrapperTest ‑ createFromCouchDbTest_WrongType
de.bsi.secvisogram.csaf_cms_backend.json.AdvisoryWrapperTest ‑ createFromStreamTest
de.bsi.secvisogram.csaf_cms_backend.json.AdvisoryWrapperTest ‑ createFromStreamTest_noType
de.bsi.secvisogram.csaf_cms_backend.json.AdvisoryWrapperTest ‑ createFromStreamTest_wrongType
de.bsi.secvisogram.csaf_cms_backend.json.CommentWrapperTest ‑ createFromStreamTest
de.bsi.secvisogram.csaf_cms_backend.json.CommentWrapperTest ‑ createFromStreamTest_NoType
de.bsi.secvisogram.csaf_cms_backend.json.CommentWrapperTest ‑ createFromStreamTest_WrongType
de.bsi.secvisogram.csaf_cms_backend.service.AdvisoryServiceTest ‑ changeAdvisoryWorkflowStateTest_badRevision
de.bsi.secvisogram.csaf_cms_backend.service.AdvisoryServiceTest ‑ createNewCsafDocumentVersionTest_badRevision
de.bsi.secvisogram.csaf_cms_backend.service.AdvisoryServiceTest ‑ deleteAdvisoryTest_notFound
de.bsi.secvisogram.csaf_cms_backend.service.AdvisoryServiceTest ‑ deleteAnswer_notFound
…

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor
Overall Project 83.34% -6.37% 🍏
Files changed 70.79% 🍏

File Coverage
CsafExceptionKey.java 100% 🍏
AdvisoryWrapper.java 93.33% 🍏
AdvisoryWorkflowUtil.java 88.51% 🍏
CommentWrapper.java 88.4% 🍏
CommentEntity.java 87.88% -12.12% 🍏
AdvisorySearchUtil.java 87.5% 🍏
AdvisoryEntity.java 86.08% -13.92% 🍏
AdvisoryService.java 77.22% -16.7% 🍏
CounterEntity.java 71.43% -28.57% 🍏
AuditTrailWorkflowEntity.java 71.21% -28.79% 🍏
EntityConverter.java 70.91% -29.09% 🍏
PostgresRepositoryService.java 70.45% -29.55% 🍏
AuditTrailDocumentEntity.java 67.8% -32.2% 🍏
AdvisoryVersionEntity.java 52.54% -47.46%
AuditTrailCommentEntity.java 51.11% -48.89%
DbField.java 0%

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor
Overall Project 83.34% -6.37% 🍏
Files changed 70.79% 🍏

File Coverage
CsafExceptionKey.java 100% 🍏
AdvisoryWrapper.java 93.33% 🍏
AdvisoryWorkflowUtil.java 88.51% 🍏
CommentWrapper.java 88.4% 🍏
CommentEntity.java 87.88% -12.12% 🍏
AdvisorySearchUtil.java 87.5% 🍏
AdvisoryEntity.java 86.08% -13.92% 🍏
AdvisoryService.java 77.22% -16.7% 🍏
CounterEntity.java 71.43% -28.57% 🍏
AuditTrailWorkflowEntity.java 71.21% -28.79% 🍏
EntityConverter.java 70.91% -29.09% 🍏
PostgresRepositoryService.java 70.45% -29.55% 🍏
AuditTrailDocumentEntity.java 67.8% -32.2% 🍏
AdvisoryVersionEntity.java 52.54% -47.46%
AuditTrailCommentEntity.java 51.11% -48.89%
DbField.java 0%

Replaces the CouchDB datastore with PostgreSQL, accessed via Spring Data
JPA with Flyway-managed schema migrations.

- Schema: one table per former CouchDB document type (advisories,
  advisory_versions, comments, audit_trail_documents, audit_trail_workflows,
  audit_trail_comments, counters), with the CSAF document itself kept as a
  JSONB column (src/main/resources/db/migration/V1__initial_schema.sql)
- Entities: one JPA entity per table
- Repositories: one Spring Data repository per entity, wrapped by
  PostgresRepositoryService
- Service layer: AdvisoryService rewritten against PostgresRepositoryService;
  CouchDB Mango-selector building in AdvisorySearchUtil was removed in favor
  of in-application CSAF JSON filter evaluation in AdvisoryService, and
  AdvisoryWorkflowUtil had its now-unused CouchDB-querying methods removed
- Configuration: Flyway owns the schema, Hibernate runs validation-only
- Tests: data-layer tests now run against a disposable PostgreSQL
  testcontainer (PostgreSQLExtension) instead of a CouchDB one
- Cleanup: removed CouchDbService, CouchDBFilterCreator and the CouchDB
  test extension; dependency swapped from the Cloudant SDK to
  spring-boot-starter-data-jpa, the PostgreSQL driver and Flyway

See documents/couchdb-to-postgres-migration.md for the full write-up.
@rramos-xx
rramos-xx force-pushed the feat/couchdb-to-postgres-migration branch from cc4f10a to 324d71f Compare September 8, 2026 13:19
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor
Overall Project 83.34% -6.37% 🍏
Files changed 70.79% 🍏

File Coverage
CsafExceptionKey.java 100% 🍏
AdvisoryWrapper.java 93.33% 🍏
AdvisoryWorkflowUtil.java 88.51% 🍏
CommentWrapper.java 88.4% 🍏
CommentEntity.java 87.88% -12.12% 🍏
AdvisorySearchUtil.java 87.5% 🍏
AdvisoryEntity.java 86.08% -13.92% 🍏
AdvisoryService.java 77.22% -16.7% 🍏
CounterEntity.java 71.43% -28.57% 🍏
AuditTrailWorkflowEntity.java 71.21% -28.79% 🍏
EntityConverter.java 70.91% -29.09% 🍏
PostgresRepositoryService.java 70.45% -29.55% 🍏
AuditTrailDocumentEntity.java 67.8% -32.2% 🍏
AdvisoryVersionEntity.java 52.54% -47.46%
AuditTrailCommentEntity.java 51.11% -48.89%
DbField.java 0%

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.

1 participant