Prepare sending mail

This commit is contained in:
Eike Kettner
2020-01-08 22:44:34 +01:00
parent 51ce48997c
commit 7a3289c41d
12 changed files with 268 additions and 12 deletions

View File

@ -14,3 +14,17 @@ CREATE TABLE "useremail" (
unique ("uid", "name"),
foreign key ("uid") references "user_"("uid")
);
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")
);

View File

@ -1,5 +1,6 @@
package docspell.store
import cats.implicits._
import emil._
import emil.javamail.syntax._
@ -29,6 +30,9 @@ object EmilUtil {
def unsafeReadMailAddress(str: String): MailAddress =
readMailAddress(str).fold(sys.error, identity)
def readMultipleAddresses(str: String): Either[String, List[MailAddress]] =
str.split(',').toList.map(_.trim).traverse(readMailAddress)
def mailAddressString(ma: MailAddress): String =
ma.asUnicodeString
}

View File

@ -93,6 +93,9 @@ trait DoobieMeta {
implicit val mailAddress: Meta[MailAddress] =
Meta[String].imap(EmilUtil.unsafeReadMailAddress)(EmilUtil.mailAddressString)
implicit def mailAddressList: Meta[List[MailAddress]] =
???
}
object DoobieMeta extends DoobieMeta {

View File

@ -0,0 +1,63 @@
package docspell.store.records
import fs2.Stream
import doobie._
import doobie.implicits._
import docspell.common._
import docspell.store.impl.Column
import docspell.store.impl.Implicits._
import emil.MailAddress
case class RSentMail(
id: Ident,
uid: Ident,
itemId: Ident,
messageId: String,
sender: MailAddress,
subject: String,
recipients: List[MailAddress],
body: String,
created: Timestamp
) {}
object RSentMail {
val table = fr"sentmail"
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")
val recipients = Column("recipients")
val body = Column("body")
val created = Column("created")
val all = List(
id,
uid,
itemId,
messageId,
sender,
subject,
recipients,
body,
created
)
}
import Columns._
def insert(v: RSentMail): ConnectionIO[Int] =
insertRow(
table,
all,
sql"${v.id},${v.uid},${v.itemId},${v.messageId},${v.sender},${v.subject},${v.recipients},${v.body},${v.created}"
).update.run
def findByUser(userId: Ident): Stream[ConnectionIO, RSentMail] =
selectSimple(all, table, uid.is(userId)).query[RSentMail].stream
}