43 lines
880 B
Go
43 lines
880 B
Go
package store
|
|
|
|
import (
|
|
"net/mail"
|
|
)
|
|
|
|
type MessageInterface interface {
|
|
CreateMessage(Message) error
|
|
FindMessages(string, string) ([]Message, error)
|
|
}
|
|
|
|
type Message struct {
|
|
ID string
|
|
Username string `storm:"index"` // FK accounts.username
|
|
Mailbox string `storm:"index"` // The mailbox, e.g. `INBOX` or `Foo/Bar`
|
|
|
|
Header mail.Header
|
|
Body []byte
|
|
}
|
|
|
|
func (c *concrete) CreateMessage(message Message) error {
|
|
return c.storm.Save(&message)
|
|
}
|
|
|
|
func (c *concrete) FindMessages(username string, mailbox string) ([]Message, error) {
|
|
var messages []Message
|
|
var out []Message
|
|
|
|
err := c.storm.Find("Username", username, &messages)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// FIXME: I cannot storm, so I just filter out all non-mailbox messages
|
|
for _, message := range messages {
|
|
if message.Mailbox == mailbox {
|
|
out = append(out, message)
|
|
}
|
|
}
|
|
|
|
return out, nil
|
|
}
|