From 0c623d1bf14e52cd468cc094e6ae0301ca73bf52 Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Wed, 5 Jun 2024 14:20:21 +0700 Subject: [PATCH] schedule-history: if current is latest, fetch more history if not full --- api/schedule_history_list.go | 18 ++++++------ server/routes/page_schedule_history.go | 38 ++++++++++++++++++++++---- views/schedulehistories/view.templ | 8 +++--- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/api/schedule_history_list.go b/api/schedule_history_list.go index 4a78145..8b4f4e5 100644 --- a/api/schedule_history_list.go +++ b/api/schedule_history_list.go @@ -50,21 +50,21 @@ func (params ScheduleHistoryListParams) CountQuery() (expr []bob.Mod[*dialect.Se if params.Subreddit != "" { expr = append(expr, models.SelectWhere.ScheduleHistories.Subreddit.EQ(params.Subreddit)) } - if !params.Time.IsZero() { - if params.Reversed { - expr = append(expr, - models.SelectWhere.ScheduleHistories.CreatedAt.GTE(params.Time.Unix()), - ) - } else { - expr = append(expr, models.SelectWhere.ScheduleHistories.CreatedAt.LT(params.Time.Unix())) - } - } return expr } func (params ScheduleHistoryListParams) Query() (expr []bob.Mod[*dialect.SelectQuery]) { expr = append(expr, params.CountQuery()...) + if !params.Time.IsZero() { + if params.Reversed { + expr = append(expr, + models.SelectWhere.ScheduleHistories.CreatedAt.GT(params.Time.Unix()), + ) + } else { + expr = append(expr, models.SelectWhere.ScheduleHistories.CreatedAt.LT(params.Time.Unix())) + } + } if params.Limit > 0 { expr = append(expr, sm.Limit(params.Limit)) } diff --git a/server/routes/page_schedule_history.go b/server/routes/page_schedule_history.go index 8009800..8bf0221 100644 --- a/server/routes/page_schedule_history.go +++ b/server/routes/page_schedule_history.go @@ -3,6 +3,7 @@ package routes import ( "net/http" + "github.com/tigorlazuardi/redmage/api" "github.com/tigorlazuardi/redmage/pkg/errs" "github.com/tigorlazuardi/redmage/pkg/log" "github.com/tigorlazuardi/redmage/views" @@ -29,13 +30,40 @@ func (routes *Routes) PageScheduleHistory(rw http.ResponseWriter, req *http.Requ } return } - data.ScheduleHistories = result - if latest, _ := routes.API.ScheduleHistoryLatest(ctx); latest != nil { - if first := data.ScheduleHistories.GetFirst(); first != nil { - if first.ID == latest.ID { - data.IsCurrent = true + latest, err := routes.API.ScheduleHistoryLatest(ctx) + if err != nil { + log.New(ctx).Err(err).Error("Failed to list schedule histories") + code, message := errs.HTTPMessage(err) + rw.WriteHeader(code) + data.Error = message + if err := schedulehistories.View(c, data).Render(ctx, rw); err != nil { + log.New(ctx).Err(err).Error("Failed to render schedule histories view") + } + return + } + + if first := data.ScheduleHistories.GetFirst(); first != nil { + if first.ID == latest.ID { + data.IsCurrent = true + } + + if data.IsCurrent && len(data.ScheduleHistories.Schedules) < int(data.ScheduleHistories.Total) { + data.Params = api.ScheduleHistoryListParams{ + Subreddit: data.Params.Subreddit, + Limit: data.Params.Limit, + } + data.ScheduleHistories, err = routes.API.ScheduleHistoryList(ctx, data.Params) + if err != nil { + log.New(ctx).Err(err).Error("Failed to list schedule histories") + code, message := errs.HTTPMessage(err) + rw.WriteHeader(code) + data.Error = message + if err := schedulehistories.View(c, data).Render(ctx, rw); err != nil { + log.New(ctx).Err(err).Error("Failed to render schedule histories view") + } + return } } } diff --git a/views/schedulehistories/view.templ b/views/schedulehistories/view.templ index efd7112..de94c4a 100644 --- a/views/schedulehistories/view.templ +++ b/views/schedulehistories/view.templ @@ -45,7 +45,7 @@ templ Content(c *views.Context, data Data) { } if len(data.ScheduleHistories.Schedules) > 0 { for _, history := range data.ScheduleHistories.SplitByDay() { -

{ history.Date.Format("Monday, 02 January 2006") }

+

{ history.Date.Format("Monday, 02 January 2006") }

Time @@ -127,12 +127,12 @@ templ actionButton(data Data) { func actionButtonItems(data Data) []templ.Component { out := make([]templ.Component, 0, 2) - if !data.IsCurrent { - out = append(out, actionButtonPrev(data)) - } if len(data.ScheduleHistories.Schedules) >= int(data.Params.Limit) || data.Params.Reversed { out = append(out, actionButtonNext(data)) } + if !data.IsCurrent { + out = append(out, actionButtonPrev(data)) + } if data.IsCurrent { out = append(out, actionButtonRefresh()) }