diff --git a/server/channels/store/sqlstore/draft_store.go b/server/channels/store/sqlstore/draft_store.go index 58a502fe0b3..56bb7dcad06 100644 --- a/server/channels/store/sqlstore/draft_store.go +++ b/server/channels/store/sqlstore/draft_store.go @@ -39,6 +39,13 @@ func draftSliceColumns() []string { } } +func draftSelectColumns() []string { + cols := make([]string, len(draftSliceColumns())) + copy(cols, draftSliceColumns()) + cols[len(cols)-1] = "COALESCE(Type, '') AS Type" + return cols +} + func draftToSlice(draft *model.Draft) []any { return []any{ draft.CreateAt, @@ -65,7 +72,7 @@ func newSqlDraftStore(sqlStore *SqlStore, metrics einterfaces.MetricsInterface) func (s *SqlDraftStore) Get(userId, channelId, rootId string, includeDeleted bool) (*model.Draft, error) { query := s.getQueryBuilder(). - Select(draftSliceColumns()...). + Select(draftSelectColumns()...). From("Drafts"). Where(sq.Eq{ "UserId": userId, diff --git a/server/channels/store/storetest/draft_store.go b/server/channels/store/storetest/draft_store.go index 9e0cb73e4b7..de5bb2f8b11 100644 --- a/server/channels/store/storetest/draft_store.go +++ b/server/channels/store/storetest/draft_store.go @@ -362,6 +362,18 @@ func testGetDraft(t *testing.T, rctx request.CTX, ss store.Store) { assert.Equal(t, draft2.Message, draftResp.Message) assert.Equal(t, draft2.ChannelId, draftResp.ChannelId) }) + + t.Run("get draft with NULL type", func(t *testing.T) { + _, err := ss.GetInternalMasterDB().Exec( + "UPDATE Drafts SET Type = NULL WHERE UserId = $1 AND ChannelId = $2", + user.Id, channel.Id, + ) + require.NoError(t, err) + + draftResp, err := ss.Draft().Get(user.Id, channel.Id, "", false) + require.NoError(t, err) + assert.Equal(t, "", draftResp.Type) + }) } func testGetDraftsForUser(t *testing.T, rctx request.CTX, ss store.Store) {