Modified models to support a DB
This commit is contained in:
parent
3591e0c723
commit
ebaec3d296
33 changed files with 675 additions and 64 deletions
27
providers/sitereader/models.go
Normal file
27
providers/sitereader/models.go
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
package sitereader
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
)
|
||||
|
||||
type ReadSiteModels struct {
|
||||
Site models.Site
|
||||
Target models.SitePublishTarget
|
||||
Posts []*models.Post
|
||||
}
|
||||
|
||||
type siteMeta struct {
|
||||
Title string `yaml:"title"`
|
||||
Tagline string `yaml:"tagline"`
|
||||
BaseURL string `yaml:"base_url"`
|
||||
}
|
||||
|
||||
type postMeta struct {
|
||||
ID string `yaml:"id"`
|
||||
Title string `yaml:"title"`
|
||||
Date time.Time `yaml:"date"`
|
||||
Tags []string `yaml:"tags"`
|
||||
Slug string `yaml:"slug"`
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"bytes"
|
||||
"io"
|
||||
"io/fs"
|
||||
"time"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
|
|
@ -19,24 +20,33 @@ func New(fs fs.FS) *Provider {
|
|||
}
|
||||
}
|
||||
|
||||
func (p *Provider) ReadSite() (models.Site, error) {
|
||||
func (p *Provider) ReadSite() (ReadSiteModels, error) {
|
||||
posts, err := p.ListPosts()
|
||||
if err != nil {
|
||||
return models.Site{}, err
|
||||
return ReadSiteModels{}, err
|
||||
}
|
||||
|
||||
meta := models.SiteMeta{}
|
||||
meta := siteMeta{}
|
||||
metaBytes, err := fs.ReadFile(p.fs, "site.yaml")
|
||||
if err != nil {
|
||||
return models.Site{}, err
|
||||
return ReadSiteModels{}, err
|
||||
}
|
||||
if err := yaml.Unmarshal(metaBytes, &meta); err != nil {
|
||||
return models.Site{}, err
|
||||
return ReadSiteModels{}, err
|
||||
}
|
||||
|
||||
return models.Site{
|
||||
Meta: meta,
|
||||
Posts: posts,
|
||||
site := models.Site{
|
||||
Title: meta.Title,
|
||||
Tagline: meta.Tagline,
|
||||
}
|
||||
publishTarget := models.SitePublishTarget{
|
||||
BaseURL: meta.BaseURL,
|
||||
}
|
||||
|
||||
return ReadSiteModels{
|
||||
Site: site,
|
||||
Target: publishTarget,
|
||||
Posts: posts,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
@ -70,13 +80,19 @@ func (p *Provider) ReadPost(path string) (*models.Post, error) {
|
|||
return nil, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var meta models.PostMeta
|
||||
var meta postMeta
|
||||
if err := yaml.Unmarshal(parts[1], &meta); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &models.Post{
|
||||
Meta: meta,
|
||||
Content: string(bytes.TrimPrefix(parts[2], []byte("\n"))),
|
||||
}, nil
|
||||
post := models.Post{
|
||||
Slug: meta.Slug,
|
||||
Title: meta.Title,
|
||||
GUID: meta.ID,
|
||||
PublishedAt: meta.Date,
|
||||
CreatedAt: time.Now(),
|
||||
}
|
||||
|
||||
post.Body = string(bytes.TrimPrefix(parts[2], []byte("\n")))
|
||||
return &post, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
"lmika.dev/lmika/weiro/providers/sitereader"
|
||||
)
|
||||
|
||||
|
|
@ -27,10 +26,9 @@ This is just a test post.
|
|||
|
||||
post, err := pr.ReadPost("posts/test.md")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "Test Post Here", post.Meta.Title)
|
||||
assert.Equal(t, time.Date(2026, 2, 18, 19, 59, 0, 0, time.UTC), post.Meta.Date)
|
||||
assert.Equal(t, []string{"test", "example"}, post.Meta.Tags)
|
||||
assert.Equal(t, "This is just a test post.\n", post.Content)
|
||||
assert.Equal(t, "Test Post Here", post.Title)
|
||||
assert.Equal(t, time.Date(2026, 2, 18, 19, 59, 0, 0, time.UTC), post.PublishedAt)
|
||||
assert.Equal(t, "This is just a test post.\n", post.Body)
|
||||
})
|
||||
|
||||
t.Run("without meta", func(t *testing.T) {
|
||||
|
|
@ -45,8 +43,8 @@ This is just a test post.
|
|||
|
||||
post, err := pr.ReadPost("posts/test.md")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, models.PostMeta{}, post.Meta)
|
||||
assert.Equal(t, "This is just a test post.\n", post.Content)
|
||||
assert.Equal(t, "", post.Title)
|
||||
assert.Equal(t, "This is just a test post.\n", post.Body)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -74,12 +72,13 @@ This is just a test post.
|
|||
|
||||
assert.Equal(t, 2, len(posts))
|
||||
|
||||
assert.Equal(t, "111", posts[0].Meta.ID)
|
||||
assert.Equal(t, "222", posts[1].Meta.ID)
|
||||
assert.Equal(t, "111", posts[0].GUID)
|
||||
assert.Equal(t, "222", posts[1].GUID)
|
||||
}
|
||||
|
||||
func TestProvider_ReadSite(t *testing.T) {
|
||||
testFS := fstest.MapFS{
|
||||
"site.yaml": {Data: []byte(`base_url: https://example.com`)},
|
||||
"posts/01-post1.md": {Data: []byte(`---
|
||||
id: 111
|
||||
date: 2026-02-18T19:59:00Z
|
||||
|
|
@ -102,6 +101,6 @@ This is just a test post.
|
|||
|
||||
assert.Equal(t, 2, len(sites.Posts))
|
||||
|
||||
assert.Equal(t, "111", sites.Posts[0].Meta.ID)
|
||||
assert.Equal(t, "222", sites.Posts[1].Meta.ID)
|
||||
assert.Equal(t, "111", sites.Posts[0].GUID)
|
||||
assert.Equal(t, "222", sites.Posts[1].GUID)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue