71 lines
1.1 KiB
Go
71 lines
1.1 KiB
Go
package model
|
|
|
|
import (
|
|
"net/url"
|
|
"time"
|
|
)
|
|
|
|
type EntryContent string
|
|
|
|
type Entry interface {
|
|
ID() string
|
|
Content() EntryContent
|
|
PublishedAt() *time.Time
|
|
AuthorId() string
|
|
MetaData() EntryMetaData
|
|
|
|
// Optional: can return empty string
|
|
Title() string
|
|
ImageUrl() string
|
|
|
|
SetID(id string)
|
|
SetPublishedAt(publishedAt *time.Time)
|
|
SetMetaData(metaData EntryMetaData)
|
|
SetAuthorId(authorId string)
|
|
|
|
FullUrl(cfg SiteConfig) string
|
|
}
|
|
|
|
type EntryMetaData interface {
|
|
Formable
|
|
}
|
|
|
|
type EntryBase struct {
|
|
id string
|
|
publishedAt *time.Time
|
|
authorId string
|
|
}
|
|
|
|
func (e *EntryBase) ID() string {
|
|
return e.id
|
|
}
|
|
|
|
func (e *EntryBase) PublishedAt() *time.Time {
|
|
return e.publishedAt
|
|
}
|
|
|
|
func (e *EntryBase) ImageUrl() string {
|
|
return ""
|
|
}
|
|
|
|
func (e *EntryBase) SetID(id string) {
|
|
e.id = id
|
|
}
|
|
|
|
func (e *EntryBase) SetPublishedAt(publishedAt *time.Time) {
|
|
e.publishedAt = publishedAt
|
|
}
|
|
|
|
func (e *EntryBase) AuthorId() string {
|
|
return e.authorId
|
|
}
|
|
|
|
func (e *EntryBase) SetAuthorId(authorId string) {
|
|
e.authorId = authorId
|
|
}
|
|
|
|
func (e *EntryBase) FullUrl(cfg SiteConfig) string {
|
|
u, _ := url.JoinPath(cfg.FullUrl, "/posts/", e.ID(), "/")
|
|
return u
|
|
}
|