[MM-10768] Migrate "Channel.SaveDirectChannel" to Sync by default (#10846)

Этот коммит содержится в:
Shota Gvinepadze
2019-05-17 00:04:58 +04:00
коммит произвёл Hanzei
родитель 2d3e417833
Коммит fab2e349b3
10 изменённых файлов: 139 добавлений и 120 удалений

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

@@ -487,7 +487,7 @@ func (s SqlChannelStore) Save(channel *model.Channel, maxChannelsPerTeam int64)
})
}
func (s SqlChannelStore) CreateDirectChannel(userId string, otherUserId string) store.StoreChannel {
func (s SqlChannelStore) CreateDirectChannel(userId string, otherUserId string) (*model.Channel, *model.AppError) {
channel := new(model.Channel)
channel.DisplayName = ""
@@ -510,64 +510,62 @@ func (s SqlChannelStore) CreateDirectChannel(userId string, otherUserId string)
return s.SaveDirectChannel(channel, cm1, cm2)
}
func (s SqlChannelStore) SaveDirectChannel(directchannel *model.Channel, member1 *model.ChannelMember, member2 *model.ChannelMember) store.StoreChannel {
return store.Do(func(result *store.StoreResult) {
if directchannel.DeleteAt != 0 {
result.Err = model.NewAppError("SqlChannelStore.Save", "store.sql_channel.save.archived_channel.app_error", nil, "", http.StatusBadRequest)
return
func (s SqlChannelStore) SaveDirectChannel(directchannel *model.Channel, member1 *model.ChannelMember, member2 *model.ChannelMember) (*model.Channel, *model.AppError) {
if directchannel.DeleteAt != 0 {
return nil, model.NewAppError("SqlChannelStore.Save", "store.sql_channel.save.archived_channel.app_error", nil, "", http.StatusBadRequest)
}
if directchannel.Type != model.CHANNEL_DIRECT {
return nil, model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.not_direct.app_error", nil, "", http.StatusBadRequest)
}
transaction, err := s.GetMaster().Begin()
if err != nil {
return nil, model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.open_transaction.app_error", nil, err.Error(), http.StatusInternalServerError)
}
defer finalizeTransaction(transaction)
directchannel.TeamId = ""
// After updating saveChannelT() should be:
// newChannel, appErr := s.saveChannelT(transaction, directchannel, 0)
channelResult := s.saveChannelT(transaction, directchannel, 0)
var newChannel *model.Channel
if channelResult.Data != nil {
newChannel = channelResult.Data.(*model.Channel)
}
appErr := channelResult.Err
if appErr != nil {
return newChannel, appErr
}
// Members need new channel ID
member1.ChannelId = newChannel.Id
member2.ChannelId = newChannel.Id
member1Result := s.saveMemberT(transaction, member1, newChannel)
member2Result := member1Result
if member1.UserId != member2.UserId {
member2Result = s.saveMemberT(transaction, member2, newChannel)
}
if member1Result.Err != nil || member2Result.Err != nil {
details := ""
if member1Result.Err != nil {
details += "Member1Err: " + member1Result.Err.Message
}
if directchannel.Type != model.CHANNEL_DIRECT {
result.Err = model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.not_direct.app_error", nil, "", http.StatusBadRequest)
return
if member2Result.Err != nil {
details += "Member2Err: " + member2Result.Err.Message
}
return nil, model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.add_members.app_error", nil, details, http.StatusInternalServerError)
}
transaction, err := s.GetMaster().Begin()
if err != nil {
result.Err = model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.open_transaction.app_error", nil, err.Error(), http.StatusInternalServerError)
return
}
defer finalizeTransaction(transaction)
if err := transaction.Commit(); err != nil {
return nil, model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.commit.app_error", nil, err.Error(), http.StatusInternalServerError)
}
directchannel.TeamId = ""
channelResult := s.saveChannelT(transaction, directchannel, 0)
return newChannel, nil
if channelResult.Err != nil {
result.Err = channelResult.Err
result.Data = channelResult.Data
return
}
newChannel := channelResult.Data.(*model.Channel)
// Members need new channel ID
member1.ChannelId = newChannel.Id
member2.ChannelId = newChannel.Id
member1Result := s.saveMemberT(transaction, member1, newChannel)
member2Result := member1Result
if member1.UserId != member2.UserId {
member2Result = s.saveMemberT(transaction, member2, newChannel)
}
if member1Result.Err != nil || member2Result.Err != nil {
details := ""
if member1Result.Err != nil {
details += "Member1Err: " + member1Result.Err.Message
}
if member2Result.Err != nil {
details += "Member2Err: " + member2Result.Err.Message
}
result.Err = model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.add_members.app_error", nil, details, http.StatusInternalServerError)
return
}
if err := transaction.Commit(); err != nil {
result.Err = model.NewAppError("SqlChannelStore.SaveDirectChannel", "store.sql_channel.save_direct_channel.commit.app_error", nil, err.Error(), http.StatusInternalServerError)
return
}
*result = channelResult
})
}
func (s SqlChannelStore) saveChannelT(transaction *gorp.Transaction, channel *model.Channel, maxChannelsPerTeam int64) store.StoreResult {
@@ -621,9 +619,9 @@ func (s SqlChannelStore) Update(channel *model.Channel) (*model.Channel, *model.
}
defer finalizeTransaction(transaction)
updatedChannel, apperr := s.updateChannelT(transaction, channel)
if apperr != nil {
return nil, apperr
updatedChannel, appErr := s.updateChannelT(transaction, channel)
if appErr != nil {
return nil, appErr
}
// Additionally propagate the write to the PublicChannels table.