Skip to content

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

Open
rramos-xx wants to merge 5 commits into
mainfrom
feat/couchdb-to-postgres-migration
Open

rramos-xx wants to merge 5 commits 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

352 tests  +13   352 ✅ +13   43s ⏱️ -12s
 27 suites + 1     0 💤 ± 0 
 27 files   + 1     0 ❌ ± 0 

Results for commit f56ce90. ± Comparison against base commit 2549bd1.

This pull request removes 8 and adds 21 tests. Note that renamed tests count towards both.
de.bsi.secvisogram.csaf_cms_backend.couchdb.AuditTrailTest ‑ calculateJsonDiff_applyJsonPatch
de.bsi.secvisogram.csaf_cms_backend.couchdb.AuditTrailTest ‑ calculateJsonDiff_replaceAValue
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.db.AuditTrailTest ‑ calculateJsonDiff_applyJsonPatch
de.bsi.secvisogram.csaf_cms_backend.db.AuditTrailTest ‑ calculateJsonDiff_replaceAValue
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
…

♻️ 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% ❌

@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% ❌

@rramos-xx
rramos-xx force-pushed the feat/couchdb-to-postgres-migration branch from 324d71f to b9ced4e Compare September 9, 2026 11:41
@github-actions

github-actions Bot commented Sep 9, 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% ❌

@rramos-xx
rramos-xx force-pushed the feat/couchdb-to-postgres-migration branch from b9ced4e to fdfda07 Compare October 6, 2026 11:53
@github-actions

github-actions Bot commented Oct 6, 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% ❌

@rramos-xx
rramos-xx force-pushed the feat/couchdb-to-postgres-migration branch from fdfda07 to c1e7183 Compare October 6, 2026 11:56
@github-actions

github-actions Bot commented Oct 6, 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% ❌

@rramos-xx
rramos-xx force-pushed the feat/couchdb-to-postgres-migration branch from c1e7183 to 103a17b Compare October 7, 2026 12:39
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor
Overall Project 83.34% -6.38% 🍏
Files changed 70.85% 🍏

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% 🍏
PostgresRepositoryService.java 71.04% -28.96% 🍏
EntityConverter.java 70.91% -29.09% 🍏
AuditTrailDocumentEntity.java 67.8% -32.2% 🍏
AdvisoryVersionEntity.java 52.54% -47.46% ❌
AuditTrailCommentEntity.java 51.11% -48.89% ❌
DbField.java 0% ❌

@github-actions

Copy link
Copy Markdown
Contributor
Overall Project 81.38% -9.72% 🍏
Files changed 64.99% 🍏

File Coverage
CsafExceptionKey.java 100% 🍏
AdvisoryListProjection.java 100% 🍏
AdvisoryAuditTrailWorkflowWrapper.java 100% 🍏
AdvisoryAuditTrailDiffWrapper.java 100% 🍏
AdvisorySearchField.java 98.77% 🍏
AdvisoryWrapper.java 97.44% 🍏
AdvisoryController.java 95.67% 🍏
AdvisoryField.java 93.42% 🍏
AdvisoryAuditTrailField.java 92.75% 🍏
CommentField.java 92.75% 🍏
AdvisoryWorkflowUtil.java 90.01% 🍏
AuditTrailField.java 89.58% 🍏
LegacyDocumentField.java 89.58% 🍏
AdvisoryEntity.java 89% -11% 🍏
CommentWrapper.java 88.4% 🍏
CommentEntity.java 87.88% -12.12% 🍏
AdvisorySearchUtil.java 87.5% 🍏
PostgresRepositoryService.java 77.84% -22.16% 🍏
AdvisoryService.java 76.68% -18.11% 🍏
CounterEntity.java 71.43% -28.57% 🍏
AuditTrailWorkflowEntity.java 71.21% -28.79% 🍏
EntityConverter.java 70.91% -29.09% 🍏
AdvisoryAuditTrailWrapper.java 69.23% 🍏
AdvisoryVersionEntity.java 68.75% -31.25% 🍏
AuditTrailDocumentEntity.java 67.8% -32.2% 🍏
PublishJob.java 67.29% 🍏
AuditTrailWrapper.java 57.32% 🍏
AuditTrailCommentEntity.java 51.11% -48.89% ❌
AdvisoryListQueryService.java 33.22% -66.78% ❌
IdNotFoundException.java 30.77% 🍏
DatabaseException.java 30.77% 🍏
DbField.java 0% ❌
CommentAuditTrailField.java 0% 🍏
AdvisoryVersionListProjection.java 0% ❌
CommentAuditTrailWrapper.java 0% 🍏

@github-actions

Copy link
Copy Markdown
Contributor
Overall Project 81.37% -9.72% 🍏
Files changed 64.95% 🍏

File Coverage
CsafExceptionKey.java 100% 🍏
AdvisoryListProjection.java 100% 🍏
AdvisoryAuditTrailWorkflowWrapper.java 100% 🍏
AdvisoryAuditTrailDiffWrapper.java 100% 🍏
AdvisorySearchField.java 98.77% 🍏
AdvisoryWrapper.java 97.44% 🍏
AdvisoryController.java 95.67% 🍏
AdvisoryField.java 93.42% 🍏
AdvisoryAuditTrailField.java 92.75% 🍏
CommentField.java 92.75% 🍏
AdvisoryWorkflowUtil.java 90.01% 🍏
AuditTrailField.java 89.58% 🍏
LegacyDocumentField.java 89.58% 🍏
AdvisoryEntity.java 89% -11% 🍏
CommentWrapper.java 88.4% 🍏
CommentEntity.java 87.88% -12.12% 🍏
AdvisorySearchUtil.java 87.5% 🍏
PostgresRepositoryService.java 77.84% -22.16% 🍏
AdvisoryService.java 76.68% -18.11% 🍏
CounterEntity.java 71.43% -28.57% 🍏
AuditTrailWorkflowEntity.java 71.21% -28.79% 🍏
EntityConverter.java 70.91% -29.09% 🍏
AdvisoryAuditTrailWrapper.java 69.23% 🍏
AdvisoryVersionEntity.java 68.75% -31.25% 🍏
AuditTrailDocumentEntity.java 67.8% -32.2% 🍏
PublishJob.java 67.29% 🍏
AuditTrailWrapper.java 57.32% 🍏
AuditTrailCommentEntity.java 51.11% -48.89% ❌
AdvisoryListQueryService.java 32.78% -67.22% ❌
IdNotFoundException.java 30.77% 🍏
DatabaseException.java 30.77% 🍏
DbField.java 0% ❌
CommentAuditTrailField.java 0% 🍏
AdvisoryVersionListProjection.java 0% ❌
CommentAuditTrailWrapper.java 0% 🍏

rramos-xx and others added 5 commits October 19, 2026 09:39
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 810685e to f56ce90 Compare October 19, 2026 07:40
@github-actions

Copy link
Copy Markdown
Contributor
Overall Project 81.37% -9.72% 🍏
Files changed 64.95% 🍏

File Coverage
CsafExceptionKey.java 100% 🍏
AdvisoryListProjection.java 100% 🍏
AdvisoryAuditTrailWorkflowWrapper.java 100% 🍏
AdvisoryAuditTrailDiffWrapper.java 100% 🍏
AdvisorySearchField.java 98.77% 🍏
AdvisoryWrapper.java 97.44% 🍏
AdvisoryController.java 95.67% 🍏
AdvisoryField.java 93.42% 🍏
AdvisoryAuditTrailField.java 92.75% 🍏
CommentField.java 92.75% 🍏
AdvisoryWorkflowUtil.java 90.01% 🍏
AuditTrailField.java 89.58% 🍏
LegacyDocumentField.java 89.58% 🍏
AdvisoryEntity.java 89% -11% 🍏
CommentWrapper.java 88.4% 🍏
CommentEntity.java 87.88% -12.12% 🍏
AdvisorySearchUtil.java 87.5% 🍏
PostgresRepositoryService.java 77.84% -22.16% 🍏
AdvisoryService.java 76.68% -18.11% 🍏
CounterEntity.java 71.43% -28.57% 🍏
AuditTrailWorkflowEntity.java 71.21% -28.79% 🍏
EntityConverter.java 70.91% -29.09% 🍏
AdvisoryAuditTrailWrapper.java 69.23% 🍏
AdvisoryVersionEntity.java 68.75% -31.25% 🍏
AuditTrailDocumentEntity.java 67.8% -32.2% 🍏
PublishJob.java 67.29% 🍏
AuditTrailWrapper.java 57.32% 🍏
AuditTrailCommentEntity.java 51.11% -48.89% ❌
AdvisoryListQueryService.java 32.78% -67.22% ❌
IdNotFoundException.java 30.77% 🍏
DatabaseException.java 30.77% 🍏
DbField.java 0% ❌
CommentAuditTrailField.java 0% 🍏
AdvisoryVersionListProjection.java 0% ❌
CommentAuditTrailWrapper.java 0% 🍏

This branch has not been deployed

No deployments
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