Prepare custom fields

This commit is contained in:
Eike Kettner
2020-09-28 22:54:35 +02:00
parent 0f45e1b097
commit 248ad04dd0
11 changed files with 297 additions and 21 deletions

View File

@ -0,0 +1,20 @@
CREATE TABLE "custom_field" (
"id" varchar(254) not null primary key,
"name" varchar(254) not null,
"cid" varchar(254) not null,
"ftype" varchar(100) not null,
"created" timestamp not null,
foreign key ("cid") references "collective"("cid"),
unique ("cid", "name")
);
CREATE TABLE "custom_field_value" (
"id" varchar(254) not null primary key,
"item_id" varchar(254) not null,
"field" varchar(254) not null,
"value_text" varchar(300),
"value_numeric" numeric,
foreign key ("item_id") references "item"("itemid"),
foreign key ("field") references "custom_field"("id"),
unique ("item_id", "field")
)

View File

@ -94,6 +94,9 @@ trait DoobieMeta extends EmilDoobieMeta {
implicit val metaGlob: Meta[Glob] =
Meta[String].timap(Glob.apply)(_.asString)
implicit val metaCustomFieldType: Meta[CustomFieldType] =
Meta[String].timap(CustomFieldType.unsafe)(_.name)
}
object DoobieMeta extends DoobieMeta {

View File

@ -0,0 +1,44 @@
package docspell.store.records
import docspell.common._
import docspell.store.impl.Column
import docspell.store.impl.Implicits._
import doobie._
import doobie.implicits._
case class RCustomField(
id: Ident,
name: String,
cid: Ident,
ftype: CustomFieldType,
created: Timestamp
)
object RCustomField {
val table = fr"custom_field"
object Columns {
val id = Column("id")
val name = Column("name")
val cid = Column("cid")
val ftype = Column("ftype")
val created = Column("created")
val all = List(id, name, cid, ftype, created)
}
def insert(value: RCustomField): ConnectionIO[Int] = {
val sql = insertRow(
table,
Columns.all,
fr"${value.id},${value.name},${value.cid},${value.ftype},${value.created}"
)
sql.update.run
}
def findAll(coll: Ident): ConnectionIO[Vector[RCustomField]] =
selectSimple(Columns.all, table, Columns.cid.is(coll)).query[RCustomField].to[Vector]
}

View File

@ -0,0 +1,42 @@
package docspell.store.records
import docspell.common._
import docspell.store.impl.Column
import docspell.store.impl.Implicits._
import doobie._
import doobie.implicits._
case class RCustomFieldValue(
id: Ident,
itemId: Ident,
field: Ident,
valueText: Option[String],
valueNumeric: Option[BigDecimal]
)
object RCustomFieldValue {
val table = fr"custom_field_value"
object Columns {
val id = Column("id")
val itemId = Column("item_id")
val field = Column("field")
val valueText = Column("value_text")
val valueNumeric = Column("value_numeric")
val all = List(id, itemId, field, valueText, valueNumeric)
}
def insert(value: RCustomFieldValue): ConnectionIO[Int] = {
val sql = insertRow(
table,
Columns.all,
fr"${value.id},${value.itemId},${value.field},${value.valueText},${value.valueNumeric}"
)
sql.update.run
}
}