package xyz.driver.pdsuidomain.entities
import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue}
import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
import xyz.driver.pdsuicommon.logging._
import xyz.driver.pdsuidomain.entities.ExtractedData.Meta
final case class ExtractedData(id: LongId[ExtractedData] = LongId(0L),
documentId: LongId[Document],
keywordId: Option[LongId[Keyword]],
evidenceText: Option[String],
meta: Option[TextJson[Meta]]) {
def isValid: Boolean = evidenceText.getOrElse("") != "" && meta.nonEmpty
}
object ExtractedData {
final case class Meta(keyword: Option[Meta.Keyword], evidence: Option[Meta.Evidence])
object Meta {
final case class Evidence(pageRatio: Double, start: TextLayerPosition, end: TextLayerPosition)
final case class TextLayerPosition(page: Integer, index: Integer, offset: Integer)
final case class Keyword(page: Integer, pageRatio: Option[Double], index: Integer, sortIndex: String)
}
implicit def toPhiString(x: ExtractedData): PhiString = {
import x._
phi"ExtractedData(id=$id, documentId=$documentId, keywordId=$keywordId)"
}
}
object ExtractedDataLabel {
implicit def toPhiString(x: ExtractedDataLabel): PhiString = {
import x._
phi"ExtractedDataLabel(id=$id, dataId=$dataId, labelId=$labelId, categoryId=$categoryId, value=${Unsafe(value)})"
}
}
final case class ExtractedDataLabel(id: LongId[ExtractedDataLabel],
dataId: LongId[ExtractedData],
labelId: Option[LongId[Label]],
categoryId: Option[LongId[LabelCategory]],
value: Option[LabelValue])