From 2d69d39dd182d4658e1010492b08b72939efccde Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Thu, 9 Jan 2020 18:20:59 +0100 Subject: [PATCH] Connect multiple items to a mail --- .../postgresql/V1.1.0__useremail.sql | 14 +++-- .../docspell/store/records/RSentMail.scala | 5 +- .../store/records/RSentMailItem.scala | 52 +++++++++++++++++++ 3 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 modules/store/src/main/scala/docspell/store/records/RSentMailItem.scala diff --git a/modules/store/src/main/resources/db/migration/postgresql/V1.1.0__useremail.sql b/modules/store/src/main/resources/db/migration/postgresql/V1.1.0__useremail.sql index 0080ba0d..5cf5f9f1 100644 --- a/modules/store/src/main/resources/db/migration/postgresql/V1.1.0__useremail.sql +++ b/modules/store/src/main/resources/db/migration/postgresql/V1.1.0__useremail.sql @@ -18,13 +18,21 @@ CREATE TABLE "useremail" ( CREATE TABLE "sentmail" ( "id" varchar(254) not null primary key, "uid" varchar(254) not null, - "item_id" varchar(254) not null, "message_id" varchar(254) not null, "sender" varchar(254) not null, "subject" varchar(254) not null, "recipients" varchar(254) not null, "body" text not null, "created" timestamp not null, - foreign key("uid") references "user_"("uid"), - foreign key("item_id") references "item"("itemid") + foreign key("uid") references "user_"("uid") +); + +CREATE TABLE "sentmailitem" ( + "id" varchar(254) not null primary key, + "item_id" varchar(254) not null, + "sentmail_id" varchar(254) not null, + "created" timestamp not null, + unique ("item_id", "sentmail_id"), + foreign key("item_id") references "item"("itemid"), + foreign key("sentmail_id") references "sentmail"("id") ); diff --git a/modules/store/src/main/scala/docspell/store/records/RSentMail.scala b/modules/store/src/main/scala/docspell/store/records/RSentMail.scala index 1caffc04..9bde3fcc 100644 --- a/modules/store/src/main/scala/docspell/store/records/RSentMail.scala +++ b/modules/store/src/main/scala/docspell/store/records/RSentMail.scala @@ -11,7 +11,6 @@ import emil.MailAddress case class RSentMail( id: Ident, uid: Ident, - itemId: Ident, messageId: String, sender: MailAddress, subject: String, @@ -27,7 +26,6 @@ object RSentMail { object Columns { val id = Column("id") val uid = Column("uid") - val itemId = Column("item_id") val messageId = Column("message_id") val sender = Column("sender") val subject = Column("subject") @@ -38,7 +36,6 @@ object RSentMail { val all = List( id, uid, - itemId, messageId, sender, subject, @@ -54,7 +51,7 @@ object RSentMail { insertRow( table, all, - sql"${v.id},${v.uid},${v.itemId},${v.messageId},${v.sender},${v.subject},${v.recipients},${v.body},${v.created}" + sql"${v.id},${v.uid},${v.messageId},${v.sender},${v.subject},${v.recipients},${v.body},${v.created}" ).update.run def findByUser(userId: Ident): Stream[ConnectionIO, RSentMail] = diff --git a/modules/store/src/main/scala/docspell/store/records/RSentMailItem.scala b/modules/store/src/main/scala/docspell/store/records/RSentMailItem.scala new file mode 100644 index 00000000..2a729539 --- /dev/null +++ b/modules/store/src/main/scala/docspell/store/records/RSentMailItem.scala @@ -0,0 +1,52 @@ +package docspell.store.records + +import cats.effect._ +import cats.implicits._ +import doobie._ +import doobie.implicits._ +import docspell.common._ +import docspell.store.impl.Column +import docspell.store.impl.Implicits._ + +case class RSentMailItem( + id: Ident, + itemId: Ident, + sentMailId: Ident, + created: Timestamp +) {} + +object RSentMailItem { + + def create[F[_]: Sync](itemId: Ident, sentmailId: Ident, created: Option[Timestamp] = None): F[RSentMailItem] = + for { + id <- Ident.randomId[F] + now <- created.map(_.pure[F]).getOrElse(Timestamp.current[F]) + } yield RSentMailItem(id, itemId, sentmailId, now) + + + val table = fr"sentmailitem" + + object Columns { + val id = Column("id") + val itemId = Column("item_id") + val sentMailId = Column("sentmail_id") + val created = Column("created") + + val all = List( + id, + itemId, + sentMailId, + created + ) + } + + import Columns._ + + def insert(v: RSentMailItem): ConnectionIO[Int] = + insertRow( + table, + all, + sql"${v.id},${v.itemId},${v.sentMailId},${v.created}" + ).update.run + +}