package guestbook 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 }