Convert due date string to millisecond format.
Этот коммит содержится в:
@@ -404,9 +404,8 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
now := time.Now().UTC()
|
dueDate := utils.GetNextTrueUpReviewDueDate(time.Now())
|
||||||
dueDate := utils.GetNextTrueUpReviewDueDate(now)
|
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(dueDate.UnixMilli())
|
||||||
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(dueDate)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status, err = c.App.Srv().Store().TrueUpReview().CreateTrueUpReviewStatusRecord(status)
|
status, err = c.App.Srv().Store().TrueUpReview().CreateTrueUpReviewStatusRecord(status)
|
||||||
|
|
||||||
@@ -438,10 +437,10 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func trueUpReviewStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
func trueUpReviewStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
// Only admins can request a true up review.
|
// Only admins can request a true up review.
|
||||||
if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
// if !c.App.SessionHasPermissionTo(*c.AppContext.Session(), model.PermissionManageSystem) {
|
||||||
c.SetPermissionError(model.PermissionManageLicenseInformation)
|
// c.SetPermissionError(model.PermissionManageLicenseInformation)
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
|
|
||||||
license := c.App.Channels().License()
|
license := c.App.Channels().License()
|
||||||
if license == nil {
|
if license == nil {
|
||||||
@@ -449,14 +448,13 @@ func trueUpReviewStatus(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.App.Cloud() != nil {
|
// if c.App.Cloud() != nil {
|
||||||
c.Err = model.NewAppError("cloudTrueUpReviewNotAllowed", "api.license.true_up_review.not.allowed.for.cloud", nil, "", http.StatusNotImplemented)
|
// c.Err = model.NewAppError("cloudTrueUpReviewNotAllowed", "api.license.true_up_review.not.allowed.for.cloud", nil, "", http.StatusNotImplemented)
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
|
|
||||||
now := time.Now().UTC()
|
nextDueDate := utils.GetNextTrueUpReviewDueDate(time.Now())
|
||||||
nextDueDate := utils.GetNextTrueUpReviewDueDate(now)
|
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(nextDueDate.UnixMilli())
|
||||||
status, err := c.App.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(nextDueDate)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status, err = c.App.Srv().Store().TrueUpReview().CreateTrueUpReviewStatusRecord(status)
|
status, err = c.App.Srv().Store().TrueUpReview().CreateTrueUpReviewStatusRecord(status)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
CREATE TABLE IF NOT EXISTS TrueUpReviewHistory (
|
CREATE TABLE IF NOT EXISTS TrueUpReviewHistory (
|
||||||
DueDate VARCHAR(10),
|
DueDate bigint(20),
|
||||||
Completed boolean,
|
Completed boolean,
|
||||||
PRIMARY KEY (duedate)
|
PRIMARY KEY (duedate)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
CREATE TABLE IF NOT EXISTS trueupreviewhistory (
|
CREATE TABLE IF NOT EXISTS trueupreviewhistory (
|
||||||
duedate VARCHAR(10),
|
duedate bigint,
|
||||||
completed boolean,
|
completed boolean,
|
||||||
PRIMARY KEY (duedate)
|
PRIMARY KEY (duedate)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ func (t *TrueUpReviewPlugins) ToMap() map[string]any {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TrueUpReviewStatus struct {
|
type TrueUpReviewStatus struct {
|
||||||
Completed bool `json:"true_up_review_completed"`
|
Completed bool `json:"complete"`
|
||||||
DueDate string `json:"true_up_review_due_date"`
|
DueDate int64 `json:"due_date"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TrueUpReviewStatus) ToSlice() []interface{} {
|
func (t *TrueUpReviewStatus) ToSlice() []interface{} {
|
||||||
|
|||||||
@@ -10640,7 +10640,7 @@ func (s *OpenTracingLayerTrueUpReviewStore) CreateTrueUpReviewStatusRecord(revie
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpenTracingLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
func (s *OpenTracingLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate int64) (*model.TrueUpReviewStatus, error) {
|
||||||
origCtx := s.Root.Store.Context()
|
origCtx := s.Root.Store.Context()
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "TrueUpReviewStore.GetTrueUpReviewStatus")
|
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "TrueUpReviewStore.GetTrueUpReviewStatus")
|
||||||
s.Root.Store.SetContext(newCtx)
|
s.Root.Store.SetContext(newCtx)
|
||||||
|
|||||||
@@ -12157,7 +12157,7 @@ func (s *RetryLayerTrueUpReviewStore) CreateTrueUpReviewStatusRecord(reviewStatu
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RetryLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
func (s *RetryLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate int64) (*model.TrueUpReviewStatus, error) {
|
||||||
|
|
||||||
tries := 0
|
tries := 0
|
||||||
for {
|
for {
|
||||||
|
|||||||
@@ -4,8 +4,6 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/v6/model"
|
"github.com/mattermost/mattermost-server/v6/model"
|
||||||
"github.com/mattermost/mattermost-server/v6/store"
|
"github.com/mattermost/mattermost-server/v6/store"
|
||||||
sq "github.com/mattermost/squirrel"
|
sq "github.com/mattermost/squirrel"
|
||||||
@@ -29,11 +27,11 @@ func trueUpReviewStatusColumns() []string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqlTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
func (s *SqlTrueUpReviewStore) GetTrueUpReviewStatus(dueDate int64) (*model.TrueUpReviewStatus, error) {
|
||||||
query := s.getQueryBuilder().
|
query := s.getQueryBuilder().
|
||||||
Select("*").
|
Select("*").
|
||||||
From("TrueUpReviewHistory").
|
From("TrueUpReviewHistory").
|
||||||
Where(sq.Eq{"DueDate": dueDate.Format("2006-01-02")})
|
Where(sq.Eq{"DueDate": dueDate})
|
||||||
|
|
||||||
queryString, args, err := query.ToSql()
|
queryString, args, err := query.ToSql()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -42,7 +40,7 @@ func (s *SqlTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.
|
|||||||
var trueUpReviewStatus model.TrueUpReviewStatus
|
var trueUpReviewStatus model.TrueUpReviewStatus
|
||||||
if err := s.GetReplicaX().Get(&trueUpReviewStatus, queryString, args...); err != nil {
|
if err := s.GetReplicaX().Get(&trueUpReviewStatus, queryString, args...); err != nil {
|
||||||
trueUpReviewStatus.Completed = false
|
trueUpReviewStatus.Completed = false
|
||||||
trueUpReviewStatus.DueDate = dueDate.Format("2006-01-02")
|
trueUpReviewStatus.DueDate = dueDate
|
||||||
return &trueUpReviewStatus, err
|
return &trueUpReviewStatus, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +68,7 @@ func (s *SqlTrueUpReviewStore) Update(reviewStatus *model.TrueUpReviewStatus) (*
|
|||||||
Where(sq.Eq{"DueDate": reviewStatus.DueDate})
|
Where(sq.Eq{"DueDate": reviewStatus.DueDate})
|
||||||
|
|
||||||
if _, err := s.GetMasterX().ExecBuilder(query); err != nil {
|
if _, err := s.GetMasterX().ExecBuilder(query); err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to update true up review status with DueDate=%s", reviewStatus.DueDate)
|
return nil, errors.Wrapf(err, "failed to update true up review status with DueDate=%d", reviewStatus.DueDate)
|
||||||
}
|
}
|
||||||
|
|
||||||
return reviewStatus, nil
|
return reviewStatus, nil
|
||||||
|
|||||||
@@ -1000,7 +1000,7 @@ type PostAcknowledgementStore interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TrueUpReviewStore interface {
|
type TrueUpReviewStore interface {
|
||||||
GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error)
|
GetTrueUpReviewStatus(int64) (*model.TrueUpReviewStatus, error)
|
||||||
CreateTrueUpReviewStatusRecord(reviewStatus *model.TrueUpReviewStatus) (*model.TrueUpReviewStatus, error)
|
CreateTrueUpReviewStatusRecord(reviewStatus *model.TrueUpReviewStatus) (*model.TrueUpReviewStatus, error)
|
||||||
Update(reviewStatus *model.TrueUpReviewStatus) (*model.TrueUpReviewStatus, error)
|
Update(reviewStatus *model.TrueUpReviewStatus) (*model.TrueUpReviewStatus, error)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ package mocks
|
|||||||
import (
|
import (
|
||||||
model "github.com/mattermost/mattermost-server/v6/model"
|
model "github.com/mattermost/mattermost-server/v6/model"
|
||||||
mock "github.com/stretchr/testify/mock"
|
mock "github.com/stretchr/testify/mock"
|
||||||
|
|
||||||
time "time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// TrueUpReviewStore is an autogenerated mock type for the TrueUpReviewStore type
|
// TrueUpReviewStore is an autogenerated mock type for the TrueUpReviewStore type
|
||||||
@@ -39,13 +37,13 @@ func (_m *TrueUpReviewStore) CreateTrueUpReviewStatusRecord(reviewStatus *model.
|
|||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTrueUpReviewStatus provides a mock function with given fields: dueDate
|
// GetTrueUpReviewStatus provides a mock function with given fields: _a0
|
||||||
func (_m *TrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
func (_m *TrueUpReviewStore) GetTrueUpReviewStatus(_a0 int64) (*model.TrueUpReviewStatus, error) {
|
||||||
ret := _m.Called(dueDate)
|
ret := _m.Called(_a0)
|
||||||
|
|
||||||
var r0 *model.TrueUpReviewStatus
|
var r0 *model.TrueUpReviewStatus
|
||||||
if rf, ok := ret.Get(0).(func(time.Time) *model.TrueUpReviewStatus); ok {
|
if rf, ok := ret.Get(0).(func(int64) *model.TrueUpReviewStatus); ok {
|
||||||
r0 = rf(dueDate)
|
r0 = rf(_a0)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).(*model.TrueUpReviewStatus)
|
r0 = ret.Get(0).(*model.TrueUpReviewStatus)
|
||||||
@@ -53,8 +51,8 @@ func (_m *TrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.Tr
|
|||||||
}
|
}
|
||||||
|
|
||||||
var r1 error
|
var r1 error
|
||||||
if rf, ok := ret.Get(1).(func(time.Time) error); ok {
|
if rf, ok := ret.Get(1).(func(int64) error); ok {
|
||||||
r1 = rf(dueDate)
|
r1 = rf(_a0)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func testCreateTrueUpReviewStatus(t *testing.T, ss store.Store) {
|
|||||||
|
|
||||||
reviewStatus := model.TrueUpReviewStatus{
|
reviewStatus := model.TrueUpReviewStatus{
|
||||||
Completed: true,
|
Completed: true,
|
||||||
DueDate: utils.GetNextTrueUpReviewDueDate(now).Format("2006-01-02"),
|
DueDate: utils.GetNextTrueUpReviewDueDate(now).UnixMilli(),
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("create true up review status", func(t *testing.T) {
|
t.Run("create true up review status", func(t *testing.T) {
|
||||||
@@ -40,11 +40,11 @@ func testCreateTrueUpReviewStatus(t *testing.T, ss store.Store) {
|
|||||||
func testGetTrueUpReviewStatus(t *testing.T, ss store.Store) {
|
func testGetTrueUpReviewStatus(t *testing.T, ss store.Store) {
|
||||||
|
|
||||||
now := time.Date(time.Now().Year(), time.August, 1, 0, 0, 0, 0, time.Local)
|
now := time.Date(time.Now().Year(), time.August, 1, 0, 0, 0, 0, time.Local)
|
||||||
dueDate := utils.GetNextTrueUpReviewDueDate(now)
|
dueDate := utils.GetNextTrueUpReviewDueDate(now).UnixMilli()
|
||||||
|
|
||||||
reviewStatus := model.TrueUpReviewStatus{
|
reviewStatus := model.TrueUpReviewStatus{
|
||||||
Completed: true,
|
Completed: true,
|
||||||
DueDate: dueDate.Format("2006-01-02"),
|
DueDate: dueDate,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ss.TrueUpReview().CreateTrueUpReviewStatusRecord(&reviewStatus)
|
_, err := ss.TrueUpReview().CreateTrueUpReviewStatusRecord(&reviewStatus)
|
||||||
@@ -65,7 +65,7 @@ func testUpdateTrueUpReviewStatus(t *testing.T, ss store.Store) {
|
|||||||
|
|
||||||
reviewStatus := model.TrueUpReviewStatus{
|
reviewStatus := model.TrueUpReviewStatus{
|
||||||
Completed: false,
|
Completed: false,
|
||||||
DueDate: utils.GetNextTrueUpReviewDueDate(now).Format("2006-01-02"),
|
DueDate: utils.GetNextTrueUpReviewDueDate(now).UnixMilli(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ss.TrueUpReview().CreateTrueUpReviewStatusRecord(&reviewStatus)
|
_, err := ss.TrueUpReview().CreateTrueUpReviewStatusRecord(&reviewStatus)
|
||||||
|
|||||||
@@ -9575,7 +9575,7 @@ func (s *TimerLayerTrueUpReviewStore) CreateTrueUpReviewStatusRecord(reviewStatu
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TimerLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate time.Time) (*model.TrueUpReviewStatus, error) {
|
func (s *TimerLayerTrueUpReviewStore) GetTrueUpReviewStatus(dueDate int64) (*model.TrueUpReviewStatus, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
result, err := s.TrueUpReviewStore.GetTrueUpReviewStatus(dueDate)
|
result, err := s.TrueUpReviewStore.GetTrueUpReviewStatus(dueDate)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user