Added new, focused forecast discussion endpoints for key messages, short term, and long term discussions
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
This commit is contained in:
@@ -4,25 +4,69 @@ package httpapi
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"gitea.maximumdirect.net/ejr/feedapi/endpoint"
|
||||
"gitea.maximumdirect.net/ejr/feedapi/render"
|
||||
"gitea.maximumdirect.net/ejr/feedapi/response"
|
||||
"gitea.maximumdirect.net/ejr/weatherapi/internal/adapters/inbound/httpapi/presenter"
|
||||
"gitea.maximumdirect.net/ejr/weatherfeeder/model"
|
||||
)
|
||||
|
||||
func discussionDefinition(svc Service) endpoint.Definition {
|
||||
func discussionDefinitions(svc Service) []endpoint.Definition {
|
||||
return []endpoint.Definition{
|
||||
discussionDefinition(
|
||||
"/discussion",
|
||||
"discussion.txt.tmpl",
|
||||
func(run *model.WeatherForecastDiscussion, units presenter.Units, tz *time.Location) any {
|
||||
return presenter.DiscussionPayload(run, units, tz)
|
||||
},
|
||||
svc,
|
||||
),
|
||||
discussionDefinition(
|
||||
"/discussion/key-messages",
|
||||
"discussion_key_messages.txt.tmpl",
|
||||
func(run *model.WeatherForecastDiscussion, units presenter.Units, tz *time.Location) any {
|
||||
return presenter.DiscussionKeyMessagesOnlyPayload(run, units, tz)
|
||||
},
|
||||
svc,
|
||||
),
|
||||
discussionDefinition(
|
||||
"/discussion/short-term",
|
||||
"discussion_short_term.txt.tmpl",
|
||||
func(run *model.WeatherForecastDiscussion, units presenter.Units, tz *time.Location) any {
|
||||
return presenter.DiscussionShortTermOnlyPayload(run, units, tz)
|
||||
},
|
||||
svc,
|
||||
),
|
||||
discussionDefinition(
|
||||
"/discussion/long-term",
|
||||
"discussion_long_term.txt.tmpl",
|
||||
func(run *model.WeatherForecastDiscussion, units presenter.Units, tz *time.Location) any {
|
||||
return presenter.DiscussionLongTermOnlyPayload(run, units, tz)
|
||||
},
|
||||
svc,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
func discussionDefinition(
|
||||
path string,
|
||||
templateName string,
|
||||
present func(*model.WeatherForecastDiscussion, presenter.Units, *time.Location) any,
|
||||
svc Service,
|
||||
) endpoint.Definition {
|
||||
return endpoint.GET(
|
||||
"/discussion",
|
||||
path,
|
||||
bindTimezoneQuery,
|
||||
func(ctx context.Context, req timezoneQueryRequest) (any, error) {
|
||||
run, err := svc.LatestForecastDiscussion(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return response.Envelope{Data: presenter.DiscussionPayload(run, req.Units, req.Timezone)}, nil
|
||||
return response.Envelope{Data: present(run, req.Units, req.Timezone)}, nil
|
||||
},
|
||||
endpoint.WithProduces(render.FormatJSON, render.FormatXML, render.FormatText),
|
||||
endpoint.WithTemplate("discussion.txt.tmpl"),
|
||||
endpoint.WithTemplate(templateName),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user