Skip to content

Commit

Permalink
Merge pull request #722 from nationalarchives/TDR-3566-accommodate-la…
Browse files Browse the repository at this point in the history
…rge-consignment-total-file-size

Tdr 3566 accommodate large consignment total file size
  • Loading branch information
TomJKing authored Nov 14, 2023
2 parents 927d88a + 24891fd commit 3f29785
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 14 deletions.
2 changes: 1 addition & 1 deletion schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ type Consignment {
transferringBodyName: String
allChecksSucceeded: Boolean!
totalFiles: Int!
totalFileSize: Int!
totalFileSize: Long!
fileChecks: FileChecks!
parentFolder: String
parentFolderId: UUID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ package uk.gov.nationalarchives.tdr.api.db.repository

import slick.jdbc.H2Profile.ProfileAction
import slick.jdbc.PostgresProfile.api._
import uk.gov.nationalarchives.Tables
import uk.gov.nationalarchives.Tables.{Filemetadata, _}
import uk.gov.nationalarchives.tdr.api.graphql.fields.FileMetadataFields.SHA256ServerSideChecksum
import uk.gov.nationalarchives.tdr.api.model.file.NodeType
import uk.gov.nationalarchives.tdr.api.service.FileMetadataService.ClientSideFileSize

import java.sql.Timestamp
Expand All @@ -17,18 +14,15 @@ class FileMetadataRepository(db: Database)(implicit val executionContext: Execut
private val insertFileMetadataQuery = Filemetadata returning Filemetadata.map(_.metadataid) into
((filemetadata, metadataid) => filemetadata.copy(metadataid = metadataid))

private val insertFileStatusQuery =
Filestatus returning Filestatus.map(_.filestatusid) into ((filestatus, filestatusid) => filestatus.copy(filestatusid = filestatusid))

def getSumOfFileSizes(consignmentId: UUID): Future[Int] = {
def getSumOfFileSizes(consignmentId: UUID): Future[Long] = {
val query = Filemetadata
.join(File)
.on(_.fileid === _.fileid)
.filter(_._2.consignmentid === consignmentId)
.filter(_._1.propertyname === ClientSideFileSize)
.map(_._1.value.asColumnOf[Int])
.map(_._1.value.asColumnOf[Long])
.sum
.getOrElse(0)
.getOrElse(0L)
db.run(query.result)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class DeferredResolver extends sangria.execution.deferred.DeferredResolver[Consi
}

case class DeferTotalFiles(consignmentId: UUID) extends Deferred[Int]
case class DeferFileSizeSum(consignmentId: UUID) extends Deferred[Int]
case class DeferFileSizeSum(consignmentId: UUID) extends Deferred[Long]
case class DeferFileChecksProgress(consignmentId: UUID) extends Deferred[FileChecks]
case class DeferParentFolder(consignmentId: UUID) extends Deferred[Option[String]]
case class DeferParentFolderId(consignmentId: UUID) extends Deferred[Option[UUID]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,22 @@ import io.circe.generic.auto._
import sangria.macros.derive._
import sangria.marshalling.circe._
import sangria.relay._
import sangria.schema.{Argument, BooleanType, Field, InputObjectType, IntType, ListType, ObjectType, OptionInputType, OptionType, ProjectedName, Projector, StringType, fields}
import sangria.schema.{
Argument,
BooleanType,
Field,
InputObjectType,
IntType,
ListType,
LongType,
ObjectType,
OptionInputType,
OptionType,
ProjectedName,
Projector,
StringType,
fields
}
import uk.gov.nationalarchives.tdr.api.auth._
import uk.gov.nationalarchives.tdr.api.consignmentstatevalidation.ValidateNoPreviousUploadForConsignment
import uk.gov.nationalarchives.tdr.api.db.repository.{FileFilters, FileMetadataFilters}
Expand Down Expand Up @@ -144,7 +159,7 @@ object ConsignmentFields {
),
Field(
"totalFileSize",
IntType,
LongType,
resolve = context => DeferFileSizeSum(context.value.consignmentid)
),
Field(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class FileMetadataService(
uuidSource: UUIDSource
)(implicit val ec: ExecutionContext) {

def getSumOfFileSizes(consignmentId: UUID): Future[Int] = fileMetadataRepository.getSumOfFileSizes(consignmentId)
def getSumOfFileSizes(consignmentId: UUID): Future[Long] = fileMetadataRepository.getSumOfFileSizes(consignmentId)

def addFileMetadata(input: AddFileMetadataWithFileIdInput, userId: UUID): Future[List[FileMetadataWithFileId]] = {
val metadataRow = input.metadataInputValues
Expand Down

0 comments on commit 3f29785

Please sign in to comment.