MM-48614: saves priority for drafts (#21752)

* MM-48614: saves priority for drafts

Adds a new column in the drafts table, "priority".
This way we can save post's priority in the draft.

Fixes OmitConnectionId, which when you published a ws event for a user
was getting bypassed.

Fixes Get for drafts returns deleted ones as well, which is needed for
upsert.

* Adds test case for the OmitConnectionId

* Addresses review comments, removes DeleteAt

* Vets

* Adds missing translation

* Re-instates DeleteAt column

* Adds separate case to get draft including deleted

* Fixes Update Draft

* Empty
Этот коммит содержится в:
Kyriakos Z
2022-11-29 23:36:47 +02:00
коммит произвёл GitHub
родитель 4f3f6e6496
Коммит a240cd53eb
22 изменённых файлов: 453 добавлений и 387 удалений

Просмотреть файл

@@ -20,7 +20,7 @@ func (a *App) GetDraft(userID, channelID, rootID string) (*model.Draft, *model.A
return nil, model.NewAppError("GetDraft", "app.draft.feature_disabled", nil, "", http.StatusNotImplemented)
}
draft, err := a.Srv().Store().Draft().Get(userID, channelID, rootID)
draft, err := a.Srv().Store().Draft().Get(userID, channelID, rootID, false)
if err != nil {
var nfErr *store.ErrNotFound
switch {
@@ -39,7 +39,7 @@ func (a *App) UpsertDraft(c *request.Context, draft *model.Draft, connectionID s
return nil, model.NewAppError("UpsertDraft", "app.draft.feature_disabled", nil, "", http.StatusNotImplemented)
}
dt, dErr := a.Srv().Store().Draft().Get(draft.UserId, draft.ChannelId, draft.RootId)
dt, dErr := a.Srv().Store().Draft().Get(draft.UserId, draft.ChannelId, draft.RootId, true)
var notFoundErr *store.ErrNotFound
if dErr != nil && !errors.As(dErr, &notFoundErr) {
return nil, model.NewAppError("UpsertDraft", "app.select_error", nil, dErr.Error(), http.StatusInternalServerError)
@@ -189,7 +189,7 @@ func (a *App) DeleteDraft(userID, channelID, rootID, connectionID string) (*mode
return nil, model.NewAppError("DeleteDraft", "app.draft.feature_disabled", nil, "", http.StatusNotImplemented)
}
draft, nErr := a.Srv().Store().Draft().Get(userID, channelID, rootID)
draft, nErr := a.Srv().Store().Draft().Get(userID, channelID, rootID, false)
if nErr != nil {
return nil, model.NewAppError("DeleteDraft", "app.draft.get.app_error", nil, nErr.Error(), http.StatusBadRequest)
}

Просмотреть файл

@@ -34,7 +34,6 @@ func TestGetDraft(t *testing.T) {
draft := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft",
@@ -84,7 +83,6 @@ func TestUpsertDraft(t *testing.T) {
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
@@ -93,7 +91,6 @@ func TestUpsertDraft(t *testing.T) {
draft2 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00002,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft2",
@@ -148,7 +145,6 @@ func TestCreateDraft(t *testing.T) {
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft",
@@ -157,7 +153,6 @@ func TestCreateDraft(t *testing.T) {
draft2 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
@@ -223,7 +218,6 @@ func TestUpdateDraft(t *testing.T) {
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
@@ -232,7 +226,6 @@ func TestUpdateDraft(t *testing.T) {
draft2 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00002,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft2",
@@ -305,7 +298,6 @@ func TestGetDraftsForUser(t *testing.T) {
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
@@ -314,7 +306,6 @@ func TestGetDraftsForUser(t *testing.T) {
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
@@ -400,7 +391,6 @@ func TestDeleteDraft(t *testing.T) {
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",

Просмотреть файл

@@ -753,15 +753,15 @@ func (wc *WebConn) ShouldSendEvent(msg *model.WebSocketEvent) bool {
return wc.GetConnectionID() == msg.GetBroadcast().ConnectionId
}
if wc.GetConnectionID() == msg.GetBroadcast().OmitConnectionId {
return false
}
// If the event is destined to a specific user
if msg.GetBroadcast().UserId != "" {
return wc.UserId == msg.GetBroadcast().UserId
}
if wc.GetConnectionID() == msg.GetBroadcast().OmitConnectionId {
return false
}
// if the user is omitted don't send the message
if len(msg.GetBroadcast().OmitUsers) > 0 {
if _, ok := msg.GetBroadcast().OmitUsers[wc.UserId]; ok {

Просмотреть файл

@@ -123,6 +123,7 @@ func TestWebConnShouldSendEvent(t *testing.T) {
{"should only send to non-admins", &model.WebsocketBroadcast{ContainsSanitizedData: true}, true, true, false, true},
{"should send to nobody", &model.WebsocketBroadcast{ContainsSensitiveData: true, ContainsSanitizedData: true}, false, false, false, false},
{"should omit basic user 2 by connection id", &model.WebsocketBroadcast{OmitConnectionId: user2ConnID}, true, false, true, true},
{"should omit basic user 2 by connection id while user is set", &model.WebsocketBroadcast{UserId: th.BasicUser2.Id, OmitConnectionId: user2ConnID}, false, false, false, false},
// needs more cases to get full coverage
}