cpolis/cmd/control/rss.go

51 lines
1.2 KiB
Go
Raw Normal View History

2024-03-09 10:25:20 +01:00
package control
2024-02-18 12:41:49 +01:00
import (
"fmt"
2024-03-09 10:12:46 +01:00
"time"
2024-02-18 12:41:49 +01:00
"git.streifling.com/jason/rss"
2024-03-09 10:27:55 +01:00
"streifling.com/jason/cpolis/cmd/model"
2024-02-18 12:41:49 +01:00
)
2024-03-09 10:27:55 +01:00
func GetChannel(db *model.DB, title, link, desc string) (*rss.Channel, error) {
2024-03-09 10:12:46 +01:00
channel := &rss.Channel{
Title: title,
Link: link,
Description: desc,
2024-03-09 10:12:46 +01:00
Items: make([]*rss.Item, 0),
2024-02-18 12:41:49 +01:00
}
2024-03-09 10:12:46 +01:00
articles, err := db.GetCertainArticles(true)
if err != nil {
2024-03-09 10:12:46 +01:00
return nil, fmt.Errorf("error fetching published articles: %v", err)
}
2024-03-09 10:12:46 +01:00
for _, article := range articles {
tags, err := db.GetArticleTags(article.ID)
if err != nil {
return nil, fmt.Errorf("error fetching tags for article %v: %v", article.Title, err)
}
tagNames := make([]string, 0)
for _, tag := range tags {
tagNames = append(tagNames, tag.Name)
}
2024-03-09 10:12:46 +01:00
user, err := db.GetUser(article.AuthorID)
if err != nil {
return nil, fmt.Errorf("error finding user %v: %v", article.AuthorID, err)
}
2024-02-18 12:41:49 +01:00
2024-03-09 10:12:46 +01:00
channel.Items = append(channel.Items, &rss.Item{
Title: article.Title,
Author: user.FirstName + user.LastName,
PubDate: article.Created.Format(time.RFC1123Z),
Description: article.Desc,
Content: &rss.Content{Value: article.Content},
Categories: tagNames,
})
2024-02-18 12:41:49 +01:00
}
2024-03-09 10:12:46 +01:00
return channel, nil
2024-03-01 21:01:38 +01:00
}