From 13ad5e32196344291133e4f42924fc24a2d7bb40 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Tue, 30 Jun 2020 01:10:33 +0200 Subject: [PATCH] Setup space entities --- .../migration/postgresql/V1.8.0__spaces.sql | 30 +++++++++++++ .../scala/docspell/store/records/RSpace.scala | 44 +++++++++++++++++++ .../docspell/store/records/RSpaceItem.scala | 42 ++++++++++++++++++ .../docspell/store/records/RSpaceMember.scala | 42 ++++++++++++++++++ 4 files changed, 158 insertions(+) create mode 100644 modules/store/src/main/resources/db/migration/postgresql/V1.8.0__spaces.sql create mode 100644 modules/store/src/main/scala/docspell/store/records/RSpace.scala create mode 100644 modules/store/src/main/scala/docspell/store/records/RSpaceItem.scala create mode 100644 modules/store/src/main/scala/docspell/store/records/RSpaceMember.scala diff --git a/modules/store/src/main/resources/db/migration/postgresql/V1.8.0__spaces.sql b/modules/store/src/main/resources/db/migration/postgresql/V1.8.0__spaces.sql new file mode 100644 index 00000000..e3741345 --- /dev/null +++ b/modules/store/src/main/resources/db/migration/postgresql/V1.8.0__spaces.sql @@ -0,0 +1,30 @@ +CREATE TABLE "space" ( + "id" varchar(254) not null primary key, + "name" varchar(254) not null, + "cid" varchar(254) not null, + "owner" varchar(254) not null, + "created" timestamp not null, + unique ("name", "cid"), + foreign key ("cid") references "collective"("cid"), + foreign key ("owner") references "user_"("uid") +); + +CREATE TABLE "space_member" ( + "id" varchar(254) not null primary key, + "space_id" varchar(254) not null, + "user_id" varchar(254) not null, + "created" timestamp not null, + unique ("space_id", "user_id"), + foreign key ("space_id") references "space"("id"), + foreign key ("user_id") references "user_"("uid") +); + +CREATE TABLE "space_item" ( + "id" varchar(254) not null primary key, + "space_id" varchar(254) not null, + "item_id" varchar(254) not null, + "created" timestamp not null, + unique ("space_id", "item_id"), + foreign key ("space_id") references "space"("id"), + foreign key ("item_id") references "item"("itemid") +); diff --git a/modules/store/src/main/scala/docspell/store/records/RSpace.scala b/modules/store/src/main/scala/docspell/store/records/RSpace.scala new file mode 100644 index 00000000..d6efe2c6 --- /dev/null +++ b/modules/store/src/main/scala/docspell/store/records/RSpace.scala @@ -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 RSpace( + id: Ident, + name: String, + collectiveId: Ident, + owner: Ident, + created: Timestamp +) + +object RSpace { + + val table = fr"space" + + object Columns { + + val id = Column("id") + val name = Column("name") + val collective = Column("cid") + val owner = Column("owner") + val created = Column("created") + + val all = List(id, name, collective, owner, created) + } + + import Columns._ + + def insert(value: RSpace): ConnectionIO[Int] = { + val sql = insertRow( + table, + all, + fr"${value.id},${value.name},${value.collectiveId},${value.owner},${value.created}" + ) + sql.update.run + } + +} diff --git a/modules/store/src/main/scala/docspell/store/records/RSpaceItem.scala b/modules/store/src/main/scala/docspell/store/records/RSpaceItem.scala new file mode 100644 index 00000000..ab7187fd --- /dev/null +++ b/modules/store/src/main/scala/docspell/store/records/RSpaceItem.scala @@ -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 RSpaceItem( + id: Ident, + spaceId: Ident, + itemId: Ident, + created: Timestamp +) + +object RSpaceItem { + + val table = fr"space" + + object Columns { + + val id = Column("id") + val space = Column("space_id") + val item = Column("user_id") + val created = Column("created") + + val all = List(id, space, user, created) + } + + import Columns._ + + def insert(value: RSpaceItem): ConnectionIO[Int] = { + val sql = insertRow( + table, + all, + fr"${value.id},${value.spaceId},${value.itemId},${value.created}" + ) + sql.update.run + } + +} diff --git a/modules/store/src/main/scala/docspell/store/records/RSpaceMember.scala b/modules/store/src/main/scala/docspell/store/records/RSpaceMember.scala new file mode 100644 index 00000000..4a13249e --- /dev/null +++ b/modules/store/src/main/scala/docspell/store/records/RSpaceMember.scala @@ -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 RSpaceMember( + id: Ident, + spaceId: Ident, + userId: Ident, + created: Timestamp +) + +object RSpaceMember { + + val table = fr"space" + + object Columns { + + val id = Column("id") + val space = Column("space_id") + val user = Column("user_id") + val created = Column("created") + + val all = List(id, space, user, created) + } + + import Columns._ + + def insert(value: RSpaceMember): ConnectionIO[Int] = { + val sql = insertRow( + table, + all, + fr"${value.id},${value.spaceId},${value.userId},${value.created}" + ) + sql.update.run + } + +}