package utils import ( "github.com/gofiber/fiber/v3/log" "net/url" "nysoure/server/model" "os" "path/filepath" "strconv" "strings" ) const ( RssFileName = "rss.xml" ) func GenerateRss(baseURL string, resources []model.Resource) { path := filepath.Join(GetStoragePath(), RssFileName) builder := strings.Builder{} builder.WriteString(``) builder.WriteRune('\n') builder.WriteString(``) builder.WriteRune('\n') builder.WriteString(``) builder.WriteRune('\n') for _, resource := range resources { builder.WriteString(" \n") builder.WriteString(" ") builder.WriteString(url.PathEscape(resource.Title)) builder.WriteString("\n") builder.WriteString(" ") builder.WriteString(baseURL + "/resources/" + strconv.Itoa(int(resource.ID))) builder.WriteString("\n") builder.WriteString(" ") builder.WriteString(url.PathEscape(ArticleToDescription(resource.Article, 255))) builder.WriteString("\n") builder.WriteString(" ") builder.WriteString(resource.UpdatedAt.Format("Mon, 02 Jan 2006 15:04:05 MST")) builder.WriteString("\n") builder.WriteString(" \n") } builder.WriteString(``) builder.WriteRune('\n') builder.WriteString(``) data := builder.String() if err := os.WriteFile(path, []byte(data), 0644); err != nil { log.Error("failed to write RSS file", err) } }