SEO/Metadata (JSONLD)

// services/postservice/post.go
package postservice

import (
	"time"

	"golazy.dev/lazyseo"
	"golazy.dev/lazyseo/jsonld"
)

type Post struct {
	Slug        string
	TitleValue  string
	Summary      string
	ImageURL     string
	PublishedAt time.Time
	UpdatedAt   time.Time
}

func (p Post) Title() string            { return p.TitleValue }
func (p Post) Description() string      { return p.Summary }
func (p Post) Canonical() string        { return "https://example.com/posts/" + p.Slug }
func (p Post) Image() string            { return p.ImageURL }
func (p Post) Kind() lazyseo.PageKind   { return lazyseo.Article }
func (p Post) PublishedTime() time.Time { return p.PublishedAt }
func (p Post) LastUpdated() time.Time   { return p.UpdatedAt }
func (p Post) JSONLD() any {
	article := jsonld.NewArticle(p.TitleValue)
	article.Description = p.Summary
	article.URL = p.Canonical()
	article.Image = p.ImageURL
	article.DatePublished = jsonld.Date(p.PublishedAt)
	article.DateModified = jsonld.Date(p.UpdatedAt)
	return article
}
// app/controllers/post_controller/postcontroller.go
package postcontroller

import "sample_app/services/postservice"

func (c *PostsController) Show(post postservice.Post) error {
	c.Metadata(post)
	c.Set("post", post)
	return nil
}