[MM-45052] Add error checking in insights API (#21048)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
09f63eec06
Коммит
093c657e56
@@ -73,7 +73,11 @@ func getTopReactionsForTeamSince(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topReactionList, appErr := c.App.GetTopReactionsForTeamSince(c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
topReactionList, appErr := c.App.GetTopReactionsForTeamSince(c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -134,7 +138,11 @@ func getTopReactionsForUserSince(c *Context, w http.ResponseWriter, r *http.Requ
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topReactionList, appErr := c.App.GetTopReactionsForUserSince(c.AppContext.Session().UserId, c.Params.TeamId, &model.InsightsOpts{
|
topReactionList, appErr := c.App.GetTopReactionsForUserSince(c.AppContext.Session().UserId, c.Params.TeamId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -193,7 +201,11 @@ func getTopChannelsForTeamSince(c *Context, w http.ResponseWriter, r *http.Reque
|
|||||||
}
|
}
|
||||||
|
|
||||||
loc := user.GetTimezoneLocation()
|
loc := user.GetTimezoneLocation()
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, loc)
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, loc)
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topChannels, appErr := c.App.GetTopChannelsForTeamSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
topChannels, appErr := c.App.GetTopChannelsForTeamSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -261,7 +273,11 @@ func getTopChannelsForUserSince(c *Context, w http.ResponseWriter, r *http.Reque
|
|||||||
}
|
}
|
||||||
|
|
||||||
loc := user.GetTimezoneLocation()
|
loc := user.GetTimezoneLocation()
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, loc)
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, loc)
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topChannels, appErr := c.App.GetTopChannelsForUserSince(c.AppContext, c.AppContext.Session().UserId, c.Params.TeamId, &model.InsightsOpts{
|
topChannels, appErr := c.App.GetTopChannelsForUserSince(c.AppContext, c.AppContext.Session().UserId, c.Params.TeamId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -325,7 +341,11 @@ func getTopThreadsForTeamSince(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topThreads, appErr := c.App.GetTopThreadsForTeamSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
topThreads, appErr := c.App.GetTopThreadsForTeamSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -386,7 +406,11 @@ func getTopThreadsForUserSince(c *Context, w http.ResponseWriter, r *http.Reques
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topThreads, appErr := c.App.GetTopThreadsForUserSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
topThreads, appErr := c.App.GetTopThreadsForUserSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -427,7 +451,11 @@ func getTopDMsForUserSince(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, user.GetTimezoneLocation())
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topDMs, err := c.App.GetTopDMsForUserSince(user.Id, &model.InsightsOpts{
|
topDMs, err := c.App.GetTopDMsForUserSince(user.Id, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -487,7 +515,11 @@ func getTopInactiveChannelsForTeamSince(c *Context, w http.ResponseWriter, r *ht
|
|||||||
}
|
}
|
||||||
|
|
||||||
loc := user.GetTimezoneLocation()
|
loc := user.GetTimezoneLocation()
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, loc)
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, loc)
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topChannels, err := c.App.GetTopInactiveChannelsForTeamSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
topChannels, err := c.App.GetTopInactiveChannelsForTeamSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -548,7 +580,11 @@ func getTopInactiveChannelsForUserSince(c *Context, w http.ResponseWriter, r *ht
|
|||||||
}
|
}
|
||||||
|
|
||||||
loc := user.GetTimezoneLocation()
|
loc := user.GetTimezoneLocation()
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, loc)
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, loc)
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
topChannels, err := c.App.GetTopInactiveChannelsForUserSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
topChannels, err := c.App.GetTopInactiveChannelsForUserSince(c.AppContext, c.Params.TeamId, c.AppContext.Session().UserId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
@@ -622,7 +658,11 @@ func getNewTeamMembersSince(c *Context, w http.ResponseWriter, r *http.Request)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
loc := user.GetTimezoneLocation()
|
loc := user.GetTimezoneLocation()
|
||||||
startTime := model.StartOfDayForTimeRange(c.Params.TimeRange, loc)
|
startTime, appErr := model.GetStartOfDayForTimeRange(c.Params.TimeRange, loc)
|
||||||
|
if appErr != nil {
|
||||||
|
c.Err = appErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ntms, count, err := c.App.GetNewTeamMembersSince(c.AppContext, c.Params.TeamId, &model.InsightsOpts{
|
ntms, count, err := c.App.GetNewTeamMembersSince(c.AppContext, c.Params.TeamId, &model.InsightsOpts{
|
||||||
StartUnixMilli: startTime.UnixMilli(),
|
StartUnixMilli: startTime.UnixMilli(),
|
||||||
|
|||||||
@@ -230,6 +230,12 @@ func TestGetTopReactionsForTeamSince(t *testing.T) {
|
|||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("get-top-reactions-for-team-since invalid time range", func(t *testing.T) {
|
||||||
|
_, resp, err := client.GetTopReactionsForTeamSince(teamId, "7_days", 0, 5)
|
||||||
|
require.Error(t, err)
|
||||||
|
CheckBadRequestStatus(t, resp)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("get-top-reactions-for-team-since not a member of team", func(t *testing.T) {
|
t.Run("get-top-reactions-for-team-since not a member of team", func(t *testing.T) {
|
||||||
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
||||||
_, resp, err := client.GetTopReactionsForTeamSince(teamId, model.TimeRangeToday, 0, 5)
|
_, resp, err := client.GetTopReactionsForTeamSince(teamId, model.TimeRangeToday, 0, 5)
|
||||||
@@ -417,6 +423,12 @@ func TestGetTopReactionsForUserSince(t *testing.T) {
|
|||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("get-top-reactions-for-user-since invalid time range", func(t *testing.T) {
|
||||||
|
_, resp, err := client.GetTopReactionsForUserSince(teamId, "7_days", 0, 5)
|
||||||
|
require.Error(t, err)
|
||||||
|
CheckBadRequestStatus(t, resp)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("get-top-reactions-for-user-since not a member of team", func(t *testing.T) {
|
t.Run("get-top-reactions-for-user-since not a member of team", func(t *testing.T) {
|
||||||
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
||||||
_, resp, err := client.GetTopReactionsForUserSince(teamId, model.TimeRangeToday, 0, 5)
|
_, resp, err := client.GetTopReactionsForUserSince(teamId, model.TimeRangeToday, 0, 5)
|
||||||
@@ -515,6 +527,12 @@ func TestGetTopChannelsForTeamSince(t *testing.T) {
|
|||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("get-top-channels-for-team-since invalid time range", func(t *testing.T) {
|
||||||
|
_, resp, err := client.GetTopChannelsForTeamSince(teamId, "7_days", 0, 5)
|
||||||
|
assert.Error(t, err)
|
||||||
|
CheckBadRequestStatus(t, resp)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("get-top-channels-for-team-since not a member of team", func(t *testing.T) {
|
t.Run("get-top-channels-for-team-since not a member of team", func(t *testing.T) {
|
||||||
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
||||||
_, resp, err := client.GetTopChannelsForTeamSince(teamId, model.TimeRangeToday, 0, 5)
|
_, resp, err := client.GetTopChannelsForTeamSince(teamId, model.TimeRangeToday, 0, 5)
|
||||||
@@ -592,6 +610,12 @@ func TestGetTopChannelsForUserSince(t *testing.T) {
|
|||||||
CheckNotFoundStatus(t, resp)
|
CheckNotFoundStatus(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("get-top-channels-for-user-since invalid time range", func(t *testing.T) {
|
||||||
|
_, resp, err := client.GetTopChannelsForUserSince(teamId, "7_days", 0, 5)
|
||||||
|
assert.Error(t, err)
|
||||||
|
CheckBadRequestStatus(t, resp)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("get-top-channels-for-user-since not a member of team", func(t *testing.T) {
|
t.Run("get-top-channels-for-user-since not a member of team", func(t *testing.T) {
|
||||||
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
th.UnlinkUserFromTeam(th.BasicUser, th.BasicTeam)
|
||||||
_, resp, err := client.GetTopChannelsForUserSince(teamId, model.TimeRangeToday, 0, 5)
|
_, resp, err := client.GetTopChannelsForUserSince(teamId, model.TimeRangeToday, 0, 5)
|
||||||
|
|||||||
@@ -2498,7 +2498,7 @@ func TestGetTopChannelsForTeamSince(t *testing.T) {
|
|||||||
{ID: channel5.Id, MessageCount: 2},
|
{ID: channel5.Id, MessageCount: 2},
|
||||||
}
|
}
|
||||||
|
|
||||||
timeRange := model.StartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
timeRange, _ := model.GetStartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
||||||
|
|
||||||
t.Run("get-top-channels-for-team-since", func(t *testing.T) {
|
t.Run("get-top-channels-for-team-since", func(t *testing.T) {
|
||||||
topChannels, err := th.App.GetTopChannelsForTeamSince(th.Context, th.BasicChannel.TeamId, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
topChannels, err := th.App.GetTopChannelsForTeamSince(th.Context, th.BasicChannel.TeamId, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
||||||
@@ -2576,7 +2576,7 @@ func TestGetTopChannelsForUserSince(t *testing.T) {
|
|||||||
{ID: channel5.Id, MessageCount: 2},
|
{ID: channel5.Id, MessageCount: 2},
|
||||||
}
|
}
|
||||||
|
|
||||||
timeRange := model.StartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
timeRange, _ := model.GetStartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
||||||
|
|
||||||
t.Run("get-top-channels-for-user-since", func(t *testing.T) {
|
t.Run("get-top-channels-for-user-since", func(t *testing.T) {
|
||||||
topChannels, err := th.App.GetTopChannelsForUserSince(th.Context, th.BasicUser.Id, "", &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
topChannels, err := th.App.GetTopChannelsForUserSince(th.Context, th.BasicUser.Id, "", &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
||||||
@@ -2787,7 +2787,7 @@ func TestGetTopInactiveChannelsForTeamSince(t *testing.T) {
|
|||||||
{ID: channel2.Id, MessageCount: 6},
|
{ID: channel2.Id, MessageCount: 6},
|
||||||
}
|
}
|
||||||
|
|
||||||
timeRange := model.StartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
timeRange, _ := model.GetStartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
||||||
|
|
||||||
t.Run("get-top-channels-for-team-since", func(t *testing.T) {
|
t.Run("get-top-channels-for-team-since", func(t *testing.T) {
|
||||||
topChannels, err := th.App.GetTopInactiveChannelsForTeamSince(th.Context, th.BasicChannel.TeamId, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
topChannels, err := th.App.GetTopInactiveChannelsForTeamSince(th.Context, th.BasicChannel.TeamId, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
||||||
@@ -2885,7 +2885,7 @@ func TestGetTopInactiveChannelsForUserSince(t *testing.T) {
|
|||||||
{ID: channel2.Id, MessageCount: 6},
|
{ID: channel2.Id, MessageCount: 6},
|
||||||
}
|
}
|
||||||
|
|
||||||
timeRange := model.StartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
timeRange, _ := model.GetStartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
||||||
|
|
||||||
t.Run("get-top-channels-for-user-since", func(t *testing.T) {
|
t.Run("get-top-channels-for-user-since", func(t *testing.T) {
|
||||||
topChannels, err := th.App.GetTopInactiveChannelsForUserSince(th.Context, th.BasicChannel.TeamId, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 4})
|
topChannels, err := th.App.GetTopInactiveChannelsForUserSince(th.Context, th.BasicChannel.TeamId, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 4})
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ func TestGetTopReactionsForTeamSince(t *testing.T) {
|
|||||||
expectedTopReactions[3] = &model.TopReaction{EmojiName: "sad", Count: int64(3)}
|
expectedTopReactions[3] = &model.TopReaction{EmojiName: "sad", Count: int64(3)}
|
||||||
expectedTopReactions[4] = &model.TopReaction{EmojiName: "happy", Count: int64(2)}
|
expectedTopReactions[4] = &model.TopReaction{EmojiName: "happy", Count: int64(2)}
|
||||||
|
|
||||||
timeRange := model.StartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
timeRange, _ := model.GetStartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
||||||
|
|
||||||
t.Run("get-top-reactions-for-team-since", func(t *testing.T) {
|
t.Run("get-top-reactions-for-team-since", func(t *testing.T) {
|
||||||
topReactions, err := th.App.GetTopReactionsForTeamSince(teamId, userId, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
topReactions, err := th.App.GetTopReactionsForTeamSince(teamId, userId, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
||||||
@@ -401,7 +401,7 @@ func TestGetTopReactionsForUserSince(t *testing.T) {
|
|||||||
expectedTopReactions[3] = &model.TopReaction{EmojiName: "heart", Count: int64(3)}
|
expectedTopReactions[3] = &model.TopReaction{EmojiName: "heart", Count: int64(3)}
|
||||||
expectedTopReactions[4] = &model.TopReaction{EmojiName: "blush", Count: int64(2)}
|
expectedTopReactions[4] = &model.TopReaction{EmojiName: "blush", Count: int64(2)}
|
||||||
|
|
||||||
timeRange := model.StartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
timeRange, _ := model.GetStartOfDayForTimeRange(model.TimeRangeToday, time.Now().Location())
|
||||||
|
|
||||||
t.Run("get-top-reactions-for-user-since", func(t *testing.T) {
|
t.Run("get-top-reactions-for-user-since", func(t *testing.T) {
|
||||||
topReactions, err := th.App.GetTopReactionsForUserSince(userId, teamId, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
topReactions, err := th.App.GetTopReactionsForUserSince(userId, teamId, &model.InsightsOpts{StartUnixMilli: timeRange.UnixMilli(), Page: 0, PerPage: 5})
|
||||||
|
|||||||
@@ -8739,6 +8739,10 @@
|
|||||||
"id": "model.incoming_hook.username.app_error",
|
"id": "model.incoming_hook.username.app_error",
|
||||||
"translation": "Invalid username."
|
"translation": "Invalid username."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "model.insights.get_start_of_day_for_time_range.time_range.app_error",
|
||||||
|
"translation": "Invalid time range."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "model.job.is_valid.create_at.app_error",
|
"id": "model.job.is_valid.create_at.app_error",
|
||||||
"translation": "Create at must be a valid time."
|
"translation": "Create at must be a valid time."
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -260,6 +261,23 @@ func StartOfDayForTimeRange(timeRange string, location *time.Location) *time.Tim
|
|||||||
return &resultTime
|
return &resultTime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetStartOfDayForTimeRange gets the unix start time in milliseconds from the given time range.
|
||||||
|
// Time range can be one of: "today", "7_day", or "28_day".
|
||||||
|
func GetStartOfDayForTimeRange(timeRange string, location *time.Location) (*time.Time, *AppError) {
|
||||||
|
now := time.Now().In(location)
|
||||||
|
resultTime := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, location)
|
||||||
|
switch timeRange {
|
||||||
|
case TimeRangeToday:
|
||||||
|
case TimeRange7Day:
|
||||||
|
resultTime = resultTime.Add(time.Hour * time.Duration(-144))
|
||||||
|
case TimeRange28Day:
|
||||||
|
resultTime = resultTime.Add(time.Hour * time.Duration(-648))
|
||||||
|
default:
|
||||||
|
return nil, NewAppError("GetStartOfDayForTimeRange", "model.insights.get_start_of_day_for_time_range.time_range.app_error", nil, "", http.StatusBadRequest)
|
||||||
|
}
|
||||||
|
return &resultTime, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetTopReactionListWithPagination adds a rank to each item in the given list of TopReaction and checks if there is
|
// GetTopReactionListWithPagination adds a rank to each item in the given list of TopReaction and checks if there is
|
||||||
// another page that can be fetched based on the given limit and offset. The given list of TopReaction is assumed to be
|
// another page that can be fetched based on the given limit and offset. The given list of TopReaction is assumed to be
|
||||||
// sorted by Count. Returns a TopReactionList.
|
// sorted by Count. Returns a TopReactionList.
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user