mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-23 02:48:26 +00:00
Change custom field values for a single item
This commit is contained in:
@ -13,8 +13,7 @@ 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,
|
||||
"field_value" varchar(300) not null,
|
||||
foreign key ("item_id") references "item"("itemid"),
|
||||
foreign key ("field") references "custom_field"("id"),
|
||||
unique ("item_id", "field")
|
||||
|
@ -1,5 +1,7 @@
|
||||
package docspell.store.records
|
||||
|
||||
import cats.implicits._
|
||||
|
||||
import docspell.common._
|
||||
import docspell.store.impl.Column
|
||||
import docspell.store.impl.Implicits._
|
||||
@ -43,7 +45,7 @@ object RCustomField {
|
||||
}
|
||||
|
||||
def exists(fname: Ident, coll: Ident): ConnectionIO[Boolean] =
|
||||
???
|
||||
selectCount(id, table, and(name.is(fname), cid.is(coll))).query[Int].unique.map(_ > 0)
|
||||
|
||||
def findById(fid: Ident, coll: Ident): ConnectionIO[Option[RCustomField]] =
|
||||
selectSimple(all, table, and(id.is(fid), cid.is(coll))).query[RCustomField].option
|
||||
@ -69,4 +71,19 @@ object RCustomField {
|
||||
ftype.setTo(value.ftype)
|
||||
)
|
||||
).update.run
|
||||
|
||||
def setValue(f: RCustomField, item: Ident, fval: String): ConnectionIO[Int] =
|
||||
for {
|
||||
n <- RCustomFieldValue.updateValue(f.id, item, fval)
|
||||
k <-
|
||||
if (n == 0)
|
||||
Ident
|
||||
.randomId[ConnectionIO]
|
||||
.flatMap(nId =>
|
||||
RCustomFieldValue
|
||||
.insert(RCustomFieldValue(nId, item, f.id, fval))
|
||||
)
|
||||
else 0.pure[ConnectionIO]
|
||||
} yield n + k
|
||||
|
||||
}
|
||||
|
@ -11,8 +11,7 @@ case class RCustomFieldValue(
|
||||
id: Ident,
|
||||
itemId: Ident,
|
||||
field: Ident,
|
||||
valueText: Option[String],
|
||||
valueNumeric: Option[BigDecimal]
|
||||
value: String
|
||||
)
|
||||
|
||||
object RCustomFieldValue {
|
||||
@ -21,24 +20,34 @@ object RCustomFieldValue {
|
||||
|
||||
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 id = Column("id")
|
||||
val itemId = Column("item_id")
|
||||
val field = Column("field")
|
||||
val value = Column("field_value")
|
||||
|
||||
val all = List(id, itemId, field, valueText, valueNumeric)
|
||||
val all = List(id, itemId, field, value)
|
||||
}
|
||||
|
||||
def insert(value: RCustomFieldValue): ConnectionIO[Int] = {
|
||||
val sql = insertRow(
|
||||
table,
|
||||
Columns.all,
|
||||
fr"${value.id},${value.itemId},${value.field},${value.valueText},${value.valueNumeric}"
|
||||
fr"${value.id},${value.itemId},${value.field},${value.value}"
|
||||
)
|
||||
sql.update.run
|
||||
}
|
||||
|
||||
def updateValue(
|
||||
fieldId: Ident,
|
||||
item: Ident,
|
||||
value: String
|
||||
): ConnectionIO[Int] =
|
||||
updateRow(
|
||||
table,
|
||||
and(Columns.itemId.is(item), Columns.field.is(fieldId)),
|
||||
Columns.value.setTo(value)
|
||||
).update.run
|
||||
|
||||
def countField(fieldId: Ident): ConnectionIO[Int] =
|
||||
selectCount(Columns.id, table, Columns.field.is(fieldId)).query[Int].unique
|
||||
|
||||
@ -47,4 +56,7 @@ object RCustomFieldValue {
|
||||
|
||||
def deleteByItem(item: Ident): ConnectionIO[Int] =
|
||||
deleteFrom(table, Columns.itemId.is(item)).update.run
|
||||
|
||||
def deleteValue(fieldId: Ident, item: Ident): ConnectionIO[Int] =
|
||||
deleteFrom(table, and(Columns.id.is(fieldId), Columns.itemId.is(item))).update.run
|
||||
}
|
||||
|
@ -323,6 +323,9 @@ object RItem {
|
||||
def existsById(itemId: Ident): ConnectionIO[Boolean] =
|
||||
selectCount(id, table, id.is(itemId)).query[Int].unique.map(_ > 0)
|
||||
|
||||
def existsByIdAndCollective(itemId: Ident, coll: Ident): ConnectionIO[Boolean] =
|
||||
selectCount(id, table, and(id.is(itemId), cid.is(coll))).query[Int].unique.map(_ > 0)
|
||||
|
||||
def findByIdAndCollective(itemId: Ident, coll: Ident): ConnectionIO[Option[RItem]] =
|
||||
selectSimple(all, table, and(id.is(itemId), cid.is(coll))).query[RItem].option
|
||||
|
||||
|
Reference in New Issue
Block a user