61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package justguestbook
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
const DateFormat = "2006-01-02 15:04:05"
|
|
|
|
type Reply struct {
|
|
ID int64 `json:"-"`
|
|
Created time.Time `json:"created,omitempty"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
func NewReply(entryID int64, message string) (*Reply, error) {
|
|
if message == "" {
|
|
return nil, errors.New("empty message field")
|
|
}
|
|
|
|
return &Reply{
|
|
ID: entryID,
|
|
Created: time.Now().UTC(),
|
|
Message: message}, nil
|
|
}
|
|
|
|
type Entry struct {
|
|
ID int64 `json:"entry_id"`
|
|
Created time.Time `json:"created"`
|
|
Name string `json:"name"`
|
|
Website string `json:"website,omitempty"`
|
|
HideWebsite bool `json:"hide_website,omitempty"`
|
|
Message string `json:"message"`
|
|
Reply *Reply `json:"reply,omitempty"`
|
|
}
|
|
|
|
func NewEntry(name, message, website string, hideWebsite bool) (*Entry, error) {
|
|
if name == "" || message == "" {
|
|
return nil, errors.New("name and message field are required")
|
|
}
|
|
|
|
return &Entry{
|
|
Created: time.Now().UTC(),
|
|
Name: name,
|
|
Website: website,
|
|
HideWebsite: hideWebsite,
|
|
Message: message}, nil
|
|
}
|
|
|
|
type Guestbook interface {
|
|
Entries(page, pageSize int64) ([]*Entry, error)
|
|
Count() (int64, error)
|
|
NewEntry(entry *Entry) error
|
|
EditEntry(entry *Entry) error
|
|
DeleteEntry(entryID int64) error
|
|
NewReply(reply *Reply) error
|
|
EditReply(reply *Reply) error
|
|
DeleteReply(entryID int64) error
|
|
Close() error
|
|
}
|