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