feat: public API, SEO and existing surfaces

This commit is contained in:
Florian Sylvain committed 2026-11-03 03:58:10 +01:00
1 parent 45fbbc33b1
commit c390fcfe8d
103 files changed
+4476 -231

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
package article
import "errors"
var ErrLanguageNotAvailable = errors.New("no published version in that language")
type Alternate struct {
ID uint32 `json:"id"`
Lang string `json:"lang"`
StoryID uint32 `json:"story_id"`
Slug string `json:"slug"`
URL *string `json:"url"`
}
@@ -38,6 +38,7 @@ type Filters struct {
Q string
Status string
Lang *string
Langs *[]string
AuthorID *uint32
Sort Sort
Unpaged bool
@@ -101,6 +102,7 @@ type Repository interface {
ListByStories(storyIDs []uint32) ([]Article, error)
Get(id uint32) (Article, error)
GetByName(name string) (Article, error)
GetByLangSlug(siteID uint32, lang string, slug string) (Article, error)
GetAll() ([]Article, error)
ListForAccount(creatorID uint32, authorID *uint32) ([]Article, error)
Create(post Article) (Article, error)
+7
View File
@@ -11,6 +11,7 @@ const (
SEOSourceSocial = "social"
SEOSourceCover = "cover"
SEOSourceCanonicalURL = "canonical_url"
SEOSourcePattern = "pattern"
)
type SEOOpenGraph struct {
@@ -22,6 +23,8 @@ type SEOOpenGraph struct {
URL string `json:"url"`
SiteName string `json:"site_name"`
Locale string `json:"locale"`
LocaleAlternates []string `json:"locale_alternates"`
}
type SEOTwitter struct {
@@ -49,6 +52,8 @@ type SEOFallbacks struct {
Description string `json:"description"`
Image string `json:"image"`
Canonical string `json:"canonical"`
SiteTextSkipped bool `json:"site_text_skipped"`
}
type SEOJSONLDPerson struct {
@@ -88,4 +93,6 @@ type ResolvedSEO struct {
ModifiedAt string `json:"modified_at"`
Fallbacks SEOFallbacks `json:"fallbacks"`
JSONLD SEOJSONLD `json:"json_ld"`
Lang string `json:"lang"`
Alternates []Alternate `json:"alternates"`
}