mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Prepare custom fields
This commit is contained in:
@ -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")
|
||||
)
|
@ -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 {
|
||||
|
@ -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]
|
||||
}
|
@ -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
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user