app/data/BaseImages.scala (65 lines of code) (raw):
package data
import org.scanamo.syntax._
import models._
import org.joda.time.DateTime
object BaseImages {
import Dynamo._
def create(
id: BaseImageId,
description: String,
amiId: AmiId,
builtinRoles: List[CustomisedRole],
createdBy: String,
linuxDist: LinuxDist,
eolDate: Option[DateTime],
requiresXLargeBuilder: Boolean
)(implicit dynamo: Dynamo): BaseImage = {
val now = DateTime.now()
val baseImage = BaseImage(
id,
description,
amiId,
builtinRoles,
createdBy,
createdAt = now,
modifiedBy = createdBy,
modifiedAt = now,
Some(linuxDist),
eolDate,
requiresXLargeBuilder
)
table.put(baseImage).exec()
baseImage
}
def update(
baseImage: BaseImage,
description: String,
amiId: AmiId,
linuxDist: LinuxDist,
builtinRoles: List[CustomisedRole],
modifiedBy: String,
eolDate: DateTime,
requiresXLargeBuilder: Boolean
)(implicit dynamo: Dynamo): Unit = {
val updated = baseImage.copy(
description = description,
amiId = amiId,
linuxDist = Some(linuxDist),
builtinRoles = builtinRoles,
modifiedBy = modifiedBy,
modifiedAt = DateTime.now(),
eolDate = Some(eolDate),
requiresXLargeBuilder = requiresXLargeBuilder
)
table.put(updated).exec()
}
def list()(implicit dynamo: Dynamo): Iterable[BaseImage] = {
table.scan().exec().flatMap(_.toOption)
}
def findById(id: BaseImageId)(implicit dynamo: Dynamo): Option[BaseImage] =
table.get("id" === id).exec().flatMap(_.toOption)
def delete(baseImage: BaseImage)(implicit dynamo: Dynamo): Unit = {
table.delete("id" === baseImage.id.value).exec()
}
private def table(implicit dynamo: Dynamo) = dynamo.Tables.baseImages.table
}