package models
import (
"bytes"
"html/template"
"time"
)
type PostLink string
const (
// Имя соответствующего шаблона
PostPageTmplName = "post.gohtml"
)
type Post struct {
Link PostLink
Preview template.HTML
Data template.HTML
CreateTimestamp int64
}
func RenderPostPage(templates *template.Template, version int64, data template.HTML) ([]byte, error) {
var pageData bytes.Buffer
context := map[string]any{
"version": version,
"renderingTimestamp": time.Now().Unix(),
"data": data,
}
if err := templates.ExecuteTemplate(&pageData, PostPageTmplName, context); err != nil {
return nil, err
}
return pageData.Bytes(), nil
}
func NewPost(link string, data []byte) *Post {
previewBuf := make([]byte, 0, 503)
if len(data) > 500 {
previewBuf = append(previewBuf, data[:500]...)
previewBuf = append(previewBuf, '.', '.', '.')
} else {
previewBuf = append(previewBuf, data...)
}
return &Post{
Link: PostLink(link),
Preview: template.HTML(previewBuf),
Data: template.HTML(data),
CreateTimestamp: time.Now().Unix(),
}
}