44 lines
954 B
Go
44 lines
954 B
Go
|
package store
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
)
|
||
|
|
||
|
type MailboxInterface interface {
|
||
|
CreateMailbox(*Mailbox) error
|
||
|
FindMailbox(account Account, name string) (Mailbox, error)
|
||
|
FindMailboxes(account Account) ([]Mailbox, error)
|
||
|
}
|
||
|
|
||
|
type Mailbox struct {
|
||
|
ID uint64 `storm:"id,increment"`
|
||
|
Account string `storm:"index"` // FK accounts.username
|
||
|
Name string `storm:"index"`
|
||
|
}
|
||
|
|
||
|
func (c *concrete) CreateMailbox(mailbox *Mailbox) error {
|
||
|
return c.storm.Save(mailbox)
|
||
|
}
|
||
|
|
||
|
func (c *concrete) FindMailbox(account Account, name string) (Mailbox, error) {
|
||
|
// FIXME I don't know how to storm
|
||
|
candidates, err := c.FindMailboxes(account)
|
||
|
if err != nil {
|
||
|
return Mailbox{}, err
|
||
|
}
|
||
|
|
||
|
for _, mbox := range candidates {
|
||
|
if mbox.Name == name {
|
||
|
return mbox, nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Mailbox{}, errors.New("not found")
|
||
|
}
|
||
|
|
||
|
func (c *concrete) FindMailboxes(account Account) ([]Mailbox, error) {
|
||
|
var out []Mailbox
|
||
|
|
||
|
return out, c.storm.Find("Account", account.Username, &out)
|
||
|
}
|