package lib import ( "fmt" "net/http" ) type RedmineResponse struct { Issues []struct { ID int UpdatedOn string Subject string } } type RedmineFetcher struct { BaseFetcher } func (f *RedmineFetcher) Name() string { return "Redmine" } func (f *RedmineFetcher) Fetch() []Entry { req := FetcherRequest{ BaseURL: f.BaseURL, Path: "/issues.json?limit=1&sort=updated_on:desc", Method: http.MethodGet, Headers: map[string]string{ "X-Redmine-API-Key": f.Token, }, } var resp RedmineResponse if err := req.Run(&resp); err != nil { return nil } if len(resp.Issues) == 0 { return nil } issue := resp.Issues[0] entry := f.TryCreateEntry( "redmine", issue.UpdatedOn, fmt.Sprintf("🎫 [%s] - #%d %s", f.Name(), issue.ID, issue.Subject), fmt.Sprintf("%s/issues/%d", f.BaseURL, issue.ID), ) if entry != nil { return []Entry{*entry} } return nil }