diff --git a/backend/src/main/kotlin/org/loculus/backend/model/ReleasedDataModel.kt b/backend/src/main/kotlin/org/loculus/backend/model/ReleasedDataModel.kt index 43e83c83a..e27dcae35 100644 --- a/backend/src/main/kotlin/org/loculus/backend/model/ReleasedDataModel.kt +++ b/backend/src/main/kotlin/org/loculus/backend/model/ReleasedDataModel.kt @@ -20,6 +20,7 @@ import org.loculus.backend.service.submission.SubmissionDatabaseService import org.loculus.backend.utils.Accession import org.loculus.backend.utils.Version import org.loculus.backend.utils.toTimestamp +import org.loculus.backend.utils.toUtcDateString import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional @@ -64,8 +65,10 @@ class ReleasedDataModel( ("submitter" to TextNode(rawProcessedData.submitter)) + ("groupId" to IntNode(rawProcessedData.groupId)) + ("groupName" to TextNode(rawProcessedData.groupName)) + - ("submittedAt" to LongNode(rawProcessedData.submittedAt.toTimestamp())) + - ("releasedAt" to LongNode(rawProcessedData.releasedAt.toTimestamp())) + + ("submittedDate" to TextNode(rawProcessedData.submittedAtTimestamp.toUtcDateString())) + + ("submittedAtTimestamp" to LongNode(rawProcessedData.submittedAtTimestamp.toTimestamp())) + + ("releasedAtTimestamp" to LongNode(rawProcessedData.releasedAtTimestamp.toTimestamp())) + + ("releasedDate" to TextNode(rawProcessedData.releasedAtTimestamp.toUtcDateString())) + ("versionStatus" to TextNode(siloVersionStatus.name)) + ("dataUseTerms" to TextNode(currentDataUseTerms.type.name)) + ("dataUseTermsRestrictedUntil" to restrictedDataUseTermsUntil) diff --git a/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesTable.kt b/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesTable.kt index d688fa4fb..1e6842b42 100644 --- a/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesTable.kt +++ b/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesTable.kt @@ -26,8 +26,8 @@ object SequenceEntriesTable : Table(SEQUENCE_ENTRIES_TABLE_NAME) { val submitterColumn = varchar("submitter", 255) val approverColumn = varchar("approver", 255) val groupIdColumn = integer("group_id") - val submittedAtColumn = datetime("submitted_at") - val releasedAtColumn = datetime("released_at").nullable() + val submittedAtTimestampColumn = datetime("submitted_at") + val releasedAtTimestampColumn = datetime("released_at").nullable() val isRevocationColumn = bool("is_revocation").default(false) override val primaryKey = PrimaryKey(accessionColumn, versionColumn) diff --git a/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesView.kt b/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesView.kt index 7f264b98d..e736b5178 100644 --- a/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesView.kt +++ b/backend/src/main/kotlin/org/loculus/backend/service/submission/SequenceEntriesView.kt @@ -34,10 +34,10 @@ object SequenceEntriesView : Table(SEQUENCE_ENTRIES_VIEW_NAME) { val submissionIdColumn = varchar("submission_id", 255) val submitterColumn = varchar("submitter", 255) val groupIdColumn = integer("group_id") - val submittedAtColumn = datetime("submitted_at") + val submittedAtTimestampColumn = datetime("submitted_at") val startedProcessingAtColumn = datetime("started_processing_at").nullable() val finishedProcessingAtColumn = datetime("finished_processing_at").nullable() - val releasedAtColumn = datetime("released_at").nullable() + val releasedAtTimestampColumn = datetime("released_at").nullable() val statusColumn = varchar("status", 255) val isRevocationColumn = bool("is_revocation").default(false) val errorsColumn = jacksonSerializableJsonb>("errors").nullable() diff --git a/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt b/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt index 53c724e6e..8661d9c58 100644 --- a/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt +++ b/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt @@ -135,7 +135,7 @@ class SubmissionDatabaseService( table.submissionIdColumn, table.submitterColumn, table.groupIdColumn, - table.submittedAtColumn, + table.submittedAtTimestampColumn, ) .where { table.organismIs(organism) and @@ -165,7 +165,7 @@ class SubmissionDatabaseService( submissionId = it[table.submissionIdColumn], submitter = it[table.submitterColumn], groupId = it[table.groupIdColumn], - submittedAt = it[table.submittedAtColumn].toTimestamp(), + submittedAt = it[table.submittedAtTimestampColumn].toTimestamp(), ) } updateStatusToProcessing(chunkOfUnprocessedData, pipelineVersion) @@ -465,7 +465,7 @@ class SubmissionDatabaseService( SequenceEntriesTable.accessionVersionIsIn(accessionVersionsChunk) }, ) { - it[releasedAtColumn] = now + it[releasedAtTimestampColumn] = now it[approverColumn] = authenticatedUser.username } } @@ -520,8 +520,8 @@ class SubmissionDatabaseService( SequenceEntriesView.jointDataColumn, SequenceEntriesView.submitterColumn, SequenceEntriesView.groupIdColumn, - SequenceEntriesView.submittedAtColumn, - SequenceEntriesView.releasedAtColumn, + SequenceEntriesView.submittedAtTimestampColumn, + SequenceEntriesView.releasedAtTimestampColumn, SequenceEntriesView.submissionIdColumn, DataUseTermsTable.dataUseTermsTypeColumn, DataUseTermsTable.restrictedUntilColumn, @@ -550,8 +550,8 @@ class SubmissionDatabaseService( null -> emptyProcessedDataProvider.provide(organism) else -> compressionService.decompressSequencesInProcessedData(processedData, organism) }, - submittedAt = it[SequenceEntriesView.submittedAtColumn], - releasedAt = it[SequenceEntriesView.releasedAtColumn]!!, + submittedAtTimestamp = it[SequenceEntriesView.submittedAtTimestampColumn], + releasedAtTimestamp = it[SequenceEntriesView.releasedAtTimestampColumn]!!, dataUseTerms = DataUseTerms.fromParameters( DataUseTermsType.fromString(it[DataUseTermsTable.dataUseTermsTypeColumn]), it[DataUseTermsTable.restrictedUntilColumn], @@ -596,7 +596,7 @@ class SubmissionDatabaseService( SequenceEntriesView.groupIdColumn, SequenceEntriesView.submitterColumn, SequenceEntriesView.organismColumn, - SequenceEntriesView.submittedAtColumn, + SequenceEntriesView.submittedAtTimestampColumn, DataUseTermsTable.dataUseTermsTypeColumn, DataUseTermsTable.restrictedUntilColumn, ) @@ -685,7 +685,7 @@ class SubmissionDatabaseService( SequenceEntriesTable.submissionIdColumn, SequenceEntriesTable.submitterColumn, SequenceEntriesTable.groupIdColumn, - SequenceEntriesTable.submittedAtColumn, + SequenceEntriesTable.submittedAtTimestampColumn, SequenceEntriesTable.isRevocationColumn, SequenceEntriesTable.organismColumn, ), @@ -997,8 +997,8 @@ data class RawProcessedData( val submitter: String, val groupId: Int, val groupName: String, - val submittedAt: LocalDateTime, - val releasedAt: LocalDateTime, + val submittedAtTimestamp: LocalDateTime, + val releasedAtTimestamp: LocalDateTime, val submissionId: String, val processedData: ProcessedData, val dataUseTerms: DataUseTerms, diff --git a/backend/src/test/kotlin/org/loculus/backend/controller/submission/GetReleasedDataEndpointTest.kt b/backend/src/test/kotlin/org/loculus/backend/controller/submission/GetReleasedDataEndpointTest.kt index af8f5389c..5076ce038 100644 --- a/backend/src/test/kotlin/org/loculus/backend/controller/submission/GetReleasedDataEndpointTest.kt +++ b/backend/src/test/kotlin/org/loculus/backend/controller/submission/GetReleasedDataEndpointTest.kt @@ -42,9 +42,9 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status import org.testcontainers.shaded.org.awaitility.Awaitility.await private val ADDED_FIELDS_WITH_UNKNOWN_VALUES_FOR_RELEASE = listOf( - "releasedAt", + "releasedAtTimestamp", "submissionId", - "submittedAt", + "submittedAtTimestamp", "groupId", ) @@ -103,6 +103,8 @@ class GetReleasedDataEndpointTest( "groupName" to TextNode(DEFAULT_GROUP_NAME), "versionStatus" to TextNode("LATEST_VERSION"), "dataUseTerms" to TextNode("OPEN"), + "releasedDate" to TextNode(Clock.System.now().toLocalDateTime(TimeZone.UTC).date.toString()), + "submittedDate" to TextNode(Clock.System.now().toLocalDateTime(TimeZone.UTC).date.toString()), "dataUseTermsRestrictedUntil" to NullNode.getInstance(), "booleanColumn" to BooleanNode.TRUE, ) @@ -114,8 +116,8 @@ class GetReleasedDataEndpointTest( ) for ((key, value) in it.metadata) { when (key) { - "submittedAt" -> expectIsTimestampWithCurrentYear(value) - "releasedAt" -> expectIsTimestampWithCurrentYear(value) + "submittedAtTimestamp" -> expectIsTimestampWithCurrentYear(value) + "releasedAtTimestamp" -> expectIsTimestampWithCurrentYear(value) "submissionId" -> assertThat(value.textValue(), matchesPattern("^custom\\d$")) "groupId" -> assertThat(value.intValue(), greaterThan(0)) else -> assertThat(value, `is`(expectedMetadata[key])) @@ -201,13 +203,21 @@ class GetReleasedDataEndpointTest( when (key) { "isRevocation" -> assertThat(value, `is`(BooleanNode.TRUE)) "versionStatus" -> assertThat(value, `is`(TextNode("LATEST_VERSION"))) - "submittedAt" -> expectIsTimestampWithCurrentYear(value) - "releasedAt" -> expectIsTimestampWithCurrentYear(value) + "submittedAtTimestamp" -> expectIsTimestampWithCurrentYear(value) + "releasedAtTimestamp" -> expectIsTimestampWithCurrentYear(value) "submitter" -> assertThat(value, `is`(TextNode(DEFAULT_USER_NAME))) "groupName" -> assertThat(value, `is`(TextNode(DEFAULT_GROUP_NAME))) "groupId" -> assertThat(value.intValue(), `is`(greaterThan(0))) "accession", "version", "accessionVersion", "submissionId" -> {} "dataUseTerms" -> assertThat(value, `is`(TextNode("OPEN"))) + "submittedDate" -> assertThat( + value, + `is`(TextNode(Clock.System.now().toLocalDateTime(TimeZone.UTC).date.toString())), + ) + "releasedDate" -> assertThat( + value, + `is`(TextNode(Clock.System.now().toLocalDateTime(TimeZone.UTC).date.toString())), + ) else -> assertThat("value for $key", value, `is`(NullNode.instance)) } } diff --git a/kubernetes/loculus/templates/_common-metadata.tpl b/kubernetes/loculus/templates/_common-metadata.tpl index 7db2cc06e..3d7fd14e3 100644 --- a/kubernetes/loculus/templates/_common-metadata.tpl +++ b/kubernetes/loculus/templates/_common-metadata.tpl @@ -50,12 +50,20 @@ fields: generateIndex: true autocomplete: true header: Submission details - - name: submittedAt + - name: submittedAtTimestamp type: timestamp + displayName: Date submitted (timestamp) + header: Submission details + - name: submittedDate + type: string displayName: Date submitted header: Submission details - - name: releasedAt + - name: releasedAtTimestamp type: timestamp + displayName: Date released (timestamp) + header: Submission details + - name: releasedDate + type: string displayName: Date released header: Submission details - name: dataUseTerms diff --git a/website/src/pages/seq/[accessionVersion]/versions.astro b/website/src/pages/seq/[accessionVersion]/versions.astro index 4c74c65fa..4d39057a6 100644 --- a/website/src/pages/seq/[accessionVersion]/versions.astro +++ b/website/src/pages/seq/[accessionVersion]/versions.astro @@ -29,7 +29,7 @@ const { organism, versionListResult } = await getVersionsData(accession); return list.map((version) => (