Migrate multiples methods from ChannelStore to return error interface (#14708)

Automatic Merge
Этот коммит содержится в:
Rodrigo Villablanca
2020-06-16 04:56:35 -04:00
коммит произвёл GitHub
родитель 09a0b7db61
Коммит e342b5a2f2
16 изменённых файлов: 105 добавлений и 90 удалений

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

@@ -1052,7 +1052,7 @@ func getChannelByName(c *Context, w http.ResponseWriter, r *http.Request) {
} }
} else { } else {
if !c.App.SessionHasPermissionToChannel(*c.App.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) { if !c.App.SessionHasPermissionToChannel(*c.App.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
c.Err = model.NewAppError("getChannelByName", store.MISSING_CHANNEL_ERROR, nil, "teamId="+channel.TeamId+", "+"name="+channel.Name+"", http.StatusNotFound) c.Err = model.NewAppError("getChannelByName", "app.channel.get_by_name.missing.app_error", nil, "teamId="+channel.TeamId+", "+"name="+channel.Name+"", http.StatusNotFound)
return return
} }
} }
@@ -1080,7 +1080,7 @@ func getChannelByNameForTeamName(c *Context, w http.ResponseWriter, r *http.Requ
} }
if !c.App.SessionHasPermissionToChannel(*c.App.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) { if !c.App.SessionHasPermissionToChannel(*c.App.Session(), channel.Id, model.PERMISSION_READ_CHANNEL) {
c.Err = model.NewAppError("getChannelByNameForTeamName", store.MISSING_CHANNEL_ERROR, nil, "teamId="+channel.TeamId+", "+"name="+channel.Name+"", http.StatusNotFound) c.Err = model.NewAppError("getChannelByNameForTeamName", "app.channel.get_by_name.missing.app_error", nil, "teamId="+channel.TeamId+", "+"name="+channel.Name+"", http.StatusNotFound)
return return
} }

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

@@ -77,7 +77,13 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin
for _, channelName := range a.DefaultChannelNames() { for _, channelName := range a.DefaultChannelNames() {
channel, channelErr := a.Srv().Store.Channel().GetByName(teamId, channelName, true) channel, channelErr := a.Srv().Store.Channel().GetByName(teamId, channelName, true)
if channelErr != nil { if channelErr != nil {
err = channelErr var nfErr *store.ErrNotFound
switch {
case errors.As(err, &nfErr):
err = model.NewAppError("JoinDefaultChannels", "app.channel.get_by_name.missing.app_error", nil, nfErr.Error(), http.StatusNotFound)
default:
err = model.NewAppError("JoinDefaultChannels", "app.channel.get_by_name.existing.app_error", nil, err.Error(), http.StatusInternalServerError)
}
continue continue
} }
@@ -273,9 +279,11 @@ func (a *App) CreateChannel(channel *model.Channel, addMember bool) (*model.Chan
} }
func (a *App) GetOrCreateDirectChannel(userId, otherUserId string) (*model.Channel, *model.AppError) { func (a *App) GetOrCreateDirectChannel(userId, otherUserId string) (*model.Channel, *model.AppError) {
channel, err := a.Srv().Store.Channel().GetByName("", model.GetDMNameFromIds(userId, otherUserId), true) channel, nErr := a.Srv().Store.Channel().GetByName("", model.GetDMNameFromIds(userId, otherUserId), true)
if err != nil { if nErr != nil {
if err.Id == store.MISSING_CHANNEL_ERROR { var nfErr *store.ErrNotFound
if errors.As(nErr, &nfErr) {
var err *model.AppError
channel, err = a.createDirectChannel(userId, otherUserId) channel, err = a.createDirectChannel(userId, otherUserId)
if err != nil { if err != nil {
if err.Id == store.CHANNEL_EXISTS_ERROR { if err.Id == store.CHANNEL_EXISTS_ERROR {
@@ -305,7 +313,7 @@ func (a *App) GetOrCreateDirectChannel(userId, otherUserId string) (*model.Chann
return channel, nil return channel, nil
} }
return nil, model.NewAppError("GetOrCreateDMChannel", "web.incoming_webhook.channel.app_error", nil, "err="+err.Message, err.StatusCode) return nil, model.NewAppError("GetOrCreateDirectChannel", "web.incoming_webhook.channel.app_error", nil, nErr.Error(), http.StatusInternalServerError)
} }
return channel, nil return channel, nil
} }
@@ -1486,7 +1494,7 @@ func (a *App) GetChannel(channelId string) (*model.Channel, *model.AppError) {
func (a *App) GetChannelByName(channelName, teamId string, includeDeleted bool) (*model.Channel, *model.AppError) { func (a *App) GetChannelByName(channelName, teamId string, includeDeleted bool) (*model.Channel, *model.AppError) {
var channel *model.Channel var channel *model.Channel
var err *model.AppError var err error
if includeDeleted { if includeDeleted {
channel, err = a.Srv().Store.Channel().GetByNameIncludeDeleted(teamId, channelName, false) channel, err = a.Srv().Store.Channel().GetByNameIncludeDeleted(teamId, channelName, false)
@@ -1494,14 +1502,14 @@ func (a *App) GetChannelByName(channelName, teamId string, includeDeleted bool)
channel, err = a.Srv().Store.Channel().GetByName(teamId, channelName, false) channel, err = a.Srv().Store.Channel().GetByName(teamId, channelName, false)
} }
if err != nil && err.Id == "store.sql_channel.get_by_name.missing.app_error" {
err.StatusCode = http.StatusNotFound
return nil, err
}
if err != nil { if err != nil {
err.StatusCode = http.StatusBadRequest var nfErr *store.ErrNotFound
return nil, err switch {
case errors.As(err, &nfErr):
return nil, model.NewAppError("GetChannelByName", "app.channel.get_by_name.missing.app_error", nil, nfErr.Error(), http.StatusNotFound)
default:
return nil, model.NewAppError("GetChannelByName", "app.channel.get_by_name.existing.app_error", nil, err.Error(), http.StatusInternalServerError)
}
} }
return channel, nil return channel, nil
@@ -1510,12 +1518,7 @@ func (a *App) GetChannelByName(channelName, teamId string, includeDeleted bool)
func (a *App) GetChannelsByNames(channelNames []string, teamId string) ([]*model.Channel, *model.AppError) { func (a *App) GetChannelsByNames(channelNames []string, teamId string) ([]*model.Channel, *model.AppError) {
channels, err := a.Srv().Store.Channel().GetByNames(teamId, channelNames, true) channels, err := a.Srv().Store.Channel().GetByNames(teamId, channelNames, true)
if err != nil { if err != nil {
if err.Id == "store.sql_channel.get_by_name.missing.app_error" { return nil, model.NewAppError("GetChannelsByNames", "app.channel.get_by_name.existing.app_error", nil, err.Error(), http.StatusInternalServerError)
err.StatusCode = http.StatusNotFound
return nil, err
}
err.StatusCode = http.StatusBadRequest
return nil, err
} }
return channels, nil return channels, nil
} }
@@ -1531,20 +1534,21 @@ func (a *App) GetChannelByNameForTeamName(channelName, teamName string, includeD
var result *model.Channel var result *model.Channel
var nErr error
if includeDeleted { if includeDeleted {
result, err = a.Srv().Store.Channel().GetByNameIncludeDeleted(team.Id, channelName, false) result, nErr = a.Srv().Store.Channel().GetByNameIncludeDeleted(team.Id, channelName, false)
} else { } else {
result, err = a.Srv().Store.Channel().GetByName(team.Id, channelName, false) result, nErr = a.Srv().Store.Channel().GetByName(team.Id, channelName, false)
} }
if err != nil && err.Id == "store.sql_channel.get_by_name.missing.app_error" { if nErr != nil {
err.StatusCode = http.StatusNotFound var nfErr *store.ErrNotFound
return nil, err switch {
} case errors.As(nErr, &nfErr):
return nil, model.NewAppError("GetChannelByNameForTeamName", "app.channel.get_by_name.missing.app_error", nil, nfErr.Error(), http.StatusNotFound)
if err != nil { default:
err.StatusCode = http.StatusBadRequest return nil, model.NewAppError("GetChannelByNameForTeamName", "app.channel.get_by_name.existing.app_error", nil, nErr.Error(), http.StatusInternalServerError)
return nil, err }
} }
return result, nil return result, nil

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

@@ -7,7 +7,6 @@ import (
"strings" "strings"
goi18n "github.com/mattermost/go-i18n/i18n" goi18n "github.com/mattermost/go-i18n/i18n"
"github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/model"
) )
@@ -65,12 +64,12 @@ func (me *JoinProvider) DoCommand(a *App, args *model.CommandArgs, message strin
return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
} }
if err = a.JoinChannel(channel, args.UserId); err != nil { if appErr := a.JoinChannel(channel, args.UserId); appErr != nil {
return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
} }
team, err := a.GetTeam(channel.TeamId) team, appErr := a.GetTeam(channel.TeamId)
if err != nil { if appErr != nil {
return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
} }

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

@@ -4,11 +4,13 @@
package app package app
import ( import (
"errors"
"strings" "strings"
goi18n "github.com/mattermost/go-i18n/i18n" goi18n "github.com/mattermost/go-i18n/i18n"
"github.com/mattermost/mattermost-server/v5/mlog" "github.com/mattermost/mattermost-server/v5/mlog"
"github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/model"
"github.com/mattermost/mattermost-server/v5/store"
) )
type msgProvider struct { type msgProvider struct {
@@ -72,7 +74,8 @@ func (me *msgProvider) DoCommand(a *App, args *model.CommandArgs, message string
targetChannelId := "" targetChannelId := ""
if channel, channelErr := a.Srv().Store.Channel().GetByName(args.TeamId, channelName, true); channelErr != nil { if channel, channelErr := a.Srv().Store.Channel().GetByName(args.TeamId, channelName, true); channelErr != nil {
if channelErr.Id == "store.sql_channel.get_by_name.missing.app_error" { var nfErr *store.ErrNotFound
if errors.As(channelErr, &nfErr) {
if !a.SessionHasPermissionTo(args.Session, model.PERMISSION_CREATE_DIRECT_CHANNEL) { if !a.SessionHasPermissionTo(args.Session, model.PERMISSION_CREATE_DIRECT_CHANNEL) {
return &model.CommandResponse{Text: args.T("api.command_msg.permission.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} return &model.CommandResponse{Text: args.T("api.command_msg.permission.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
} }

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

@@ -1150,7 +1150,7 @@ func (a *App) getChannelsForPosts(teams map[string]*model.Team, data []*PostImpo
for _, postData := range data { for _, postData := range data {
team := teams[*postData.Team] team := teams[*postData.Team]
if channel, ok := channels[*postData.Channel]; !ok || channel == nil { if channel, ok := channels[*postData.Channel]; !ok || channel == nil {
var err *model.AppError var err error
channel, err = a.Srv().Store.Channel().GetByName(team.Id, *postData.Channel, true) channel, err = a.Srv().Store.Channel().GetByName(team.Id, *postData.Channel, true)
if err != nil { if err != nil {
return nil, model.NewAppError("BulkImport", "app.import.import_post.channel_not_found.error", map[string]interface{}{"ChannelName": *postData.Channel}, err.Error(), http.StatusBadRequest) return nil, model.NewAppError("BulkImport", "app.import.import_post.channel_not_found.error", map[string]interface{}{"ChannelName": *postData.Channel}, err.Error(), http.StatusBadRequest)

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

@@ -532,7 +532,7 @@ func (a *App) SlackAddChannels(teamId string, slackchannels []SlackChannel, post
newChannel = SlackSanitiseChannelProperties(newChannel) newChannel = SlackSanitiseChannelProperties(newChannel)
var mChannel *model.Channel var mChannel *model.Channel
var err *model.AppError var err error
if mChannel, err = a.Srv().Store.Channel().GetByName(teamId, sChannel.Name, true); err == nil { if mChannel, err = a.Srv().Store.Channel().GetByName(teamId, sChannel.Name, true); err == nil {
// The channel already exists as an active channel. Merge with the existing one. // The channel already exists as an active channel. Merge with the existing one.
importerLog.WriteString(utils.T("api.slackimport.slack_add_channels.merge", map[string]interface{}{"DisplayName": newChannel.DisplayName})) importerLog.WriteString(utils.T("api.slackimport.slack_add_channels.merge", map[string]interface{}{"DisplayName": newChannel.DisplayName}))

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

@@ -1008,9 +1008,15 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string)
} }
} }
channel, err := a.Srv().Store.Channel().GetByName(team.Id, model.DEFAULT_CHANNEL, false) channel, nErr := a.Srv().Store.Channel().GetByName(team.Id, model.DEFAULT_CHANNEL, false)
if err != nil { if nErr != nil {
return err var nfErr *store.ErrNotFound
switch {
case errors.As(nErr, &nfErr):
return model.NewAppError("LeaveTeam", "app.channel.get_by_name.missing.app_error", nil, nfErr.Error(), http.StatusNotFound)
default:
return model.NewAppError("LeaveTeam", "app.channel.get_by_name.existing.app_error", nil, nErr.Error(), http.StatusInternalServerError)
}
} }
if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages { if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages {

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

@@ -628,14 +628,14 @@ func (a *App) HandleIncomingWebhook(hookId string, req *model.IncomingWebhookReq
cchan = make(chan store.StoreResult, 1) cchan = make(chan store.StoreResult, 1)
go func() { go func() {
chnn, chnnErr := a.Srv().Store.Channel().GetByName(hook.TeamId, channelName[1:], true) chnn, chnnErr := a.Srv().Store.Channel().GetByName(hook.TeamId, channelName[1:], true)
cchan <- store.StoreResult{Data: chnn, Err: chnnErr} cchan <- store.StoreResult{Data: chnn, NErr: chnnErr}
close(cchan) close(cchan)
}() }()
} else { } else {
cchan = make(chan store.StoreResult, 1) cchan = make(chan store.StoreResult, 1)
go func() { go func() {
chnn, chnnErr := a.Srv().Store.Channel().GetByName(hook.TeamId, channelName, true) chnn, chnnErr := a.Srv().Store.Channel().GetByName(hook.TeamId, channelName, true)
cchan <- store.StoreResult{Data: chnn, Err: chnnErr} cchan <- store.StoreResult{Data: chnn, NErr: chnnErr}
close(cchan) close(cchan)
}() }()
} }
@@ -655,8 +655,14 @@ func (a *App) HandleIncomingWebhook(hookId string, req *model.IncomingWebhookReq
if channel == nil { if channel == nil {
result := <-cchan result := <-cchan
if result.Err != nil { if result.NErr != nil {
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.channel.app_error", nil, "err="+result.Err.Message, result.Err.StatusCode) var nfErr *store.ErrNotFound
switch {
case errors.As(result.NErr, &nfErr):
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.channel.app_error", nil, nfErr.Error(), http.StatusNotFound)
default:
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.channel.app_error", nil, result.NErr.Error(), http.StatusInternalServerError)
}
} else { } else {
channel = result.Data.(*model.Channel) channel = result.Data.(*model.Channel)
} }

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

@@ -3014,6 +3014,14 @@
"id": "app.channel.get_all_channels_count.app_error", "id": "app.channel.get_all_channels_count.app_error",
"translation": "Unable to count all the channels." "translation": "Unable to count all the channels."
}, },
{
"id": "app.channel.get_by_name.existing.app_error",
"translation": "Unable to find the existing channel."
},
{
"id": "app.channel.get_by_name.missing.app_error",
"translation": "Channel does not exist."
},
{ {
"id": "app.channel.get_channels.get.app_error", "id": "app.channel.get_channels.get.app_error",
"translation": "Unable to get the channels." "translation": "Unable to get the channels."
@@ -6162,14 +6170,6 @@
"id": "store.sql_channel.get_all_direct.app_error", "id": "store.sql_channel.get_all_direct.app_error",
"translation": "Unable to get all the direct channels." "translation": "Unable to get all the direct channels."
}, },
{
"id": "store.sql_channel.get_by_name.existing.app_error",
"translation": "Unable to find the existing channel."
},
{
"id": "store.sql_channel.get_by_name.missing.app_error",
"translation": "Channel does not exist."
},
{ {
"id": "store.sql_channel.get_by_scheme.app_error", "id": "store.sql_channel.get_by_scheme.app_error",
"translation": "Unable to get the channels for the provided scheme." "translation": "Unable to get the channels for the provided scheme."

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

@@ -4,7 +4,6 @@
package store package store
const ( const (
MISSING_CHANNEL_ERROR = "store.sql_channel.get_by_name.missing.app_error"
MISSING_CHANNEL_MEMBER_ERROR = "store.sql_channel.get_member.missing.app_error" MISSING_CHANNEL_MEMBER_ERROR = "store.sql_channel.get_member.missing.app_error"
CHANNEL_EXISTS_ERROR = "store.sql_channel.save_channel.exists.app_error" CHANNEL_EXISTS_ERROR = "store.sql_channel.save_channel.exists.app_error"

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

@@ -774,7 +774,7 @@ func (s *OpenTracingLayerChannelStore) GetAllDirectChannelsForExportAfter(limit
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (s *OpenTracingLayerChannelStore) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (s *OpenTracingLayerChannelStore) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
origCtx := s.Root.Store.Context() origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetByName") span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetByName")
s.Root.Store.SetContext(newCtx) s.Root.Store.SetContext(newCtx)
@@ -792,7 +792,7 @@ func (s *OpenTracingLayerChannelStore) GetByName(team_id string, name string, al
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (s *OpenTracingLayerChannelStore) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (s *OpenTracingLayerChannelStore) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
origCtx := s.Root.Store.Context() origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetByNameIncludeDeleted") span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetByNameIncludeDeleted")
s.Root.Store.SetContext(newCtx) s.Root.Store.SetContext(newCtx)
@@ -810,7 +810,7 @@ func (s *OpenTracingLayerChannelStore) GetByNameIncludeDeleted(team_id string, n
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (s *OpenTracingLayerChannelStore) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, *model.AppError) { func (s *OpenTracingLayerChannelStore) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, error) {
origCtx := s.Root.Store.Context() origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetByNames") span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetByNames")
s.Root.Store.SetContext(newCtx) s.Root.Store.SetContext(newCtx)

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

@@ -1151,11 +1151,11 @@ func (s SqlChannelStore) GetTeamChannels(teamId string) (*model.ChannelList, *mo
return data, nil return data, nil
} }
func (s SqlChannelStore) GetByName(teamId string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (s SqlChannelStore) GetByName(teamId string, name string, allowFromCache bool) (*model.Channel, error) {
return s.getByName(teamId, name, false, allowFromCache) return s.getByName(teamId, name, false, allowFromCache)
} }
func (s SqlChannelStore) GetByNames(teamId string, names []string, allowFromCache bool) ([]*model.Channel, *model.AppError) { func (s SqlChannelStore) GetByNames(teamId string, names []string, allowFromCache bool) ([]*model.Channel, error) {
var channels []*model.Channel var channels []*model.Channel
if allowFromCache { if allowFromCache {
@@ -1195,7 +1195,11 @@ func (s SqlChannelStore) GetByNames(teamId string, names []string, allowFromCach
var dbChannels []*model.Channel var dbChannels []*model.Channel
if _, err := s.GetReplica().Select(&dbChannels, query, props); err != nil && err != sql.ErrNoRows { if _, err := s.GetReplica().Select(&dbChannels, query, props); err != nil && err != sql.ErrNoRows {
return nil, model.NewAppError("SqlChannelStore.GetByName", "store.sql_channel.get_by_name.existing.app_error", nil, "teamId="+teamId+", "+err.Error(), http.StatusInternalServerError) msg := fmt.Sprintf("failed to get channels with names=%v", names)
if teamId != "" {
msg += fmt.Sprintf("teamId=%s", teamId)
}
return nil, errors.Wrap(err, msg)
} }
for _, channel := range dbChannels { for _, channel := range dbChannels {
channelByNameCache.SetWithExpiry(teamId+channel.Name, channel, CHANNEL_CACHE_DURATION) channelByNameCache.SetWithExpiry(teamId+channel.Name, channel, CHANNEL_CACHE_DURATION)
@@ -1215,11 +1219,11 @@ func (s SqlChannelStore) GetByNames(teamId string, names []string, allowFromCach
return channels, nil return channels, nil
} }
func (s SqlChannelStore) GetByNameIncludeDeleted(teamId string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (s SqlChannelStore) GetByNameIncludeDeleted(teamId string, name string, allowFromCache bool) (*model.Channel, error) {
return s.getByName(teamId, name, true, allowFromCache) return s.getByName(teamId, name, true, allowFromCache)
} }
func (s SqlChannelStore) getByName(teamId string, name string, includeDeleted bool, allowFromCache bool) (*model.Channel, *model.AppError) { func (s SqlChannelStore) getByName(teamId string, name string, includeDeleted bool, allowFromCache bool) (*model.Channel, error) {
var query string var query string
if includeDeleted { if includeDeleted {
query = "SELECT * FROM Channels WHERE (TeamId = :TeamId OR TeamId = '') AND Name = :Name" query = "SELECT * FROM Channels WHERE (TeamId = :TeamId OR TeamId = '') AND Name = :Name"
@@ -1243,9 +1247,9 @@ func (s SqlChannelStore) getByName(teamId string, name string, includeDeleted bo
if err := s.GetReplica().SelectOne(&channel, query, map[string]interface{}{"TeamId": teamId, "Name": name}); err != nil { if err := s.GetReplica().SelectOne(&channel, query, map[string]interface{}{"TeamId": teamId, "Name": name}); err != nil {
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
return nil, model.NewAppError("SqlChannelStore.GetByName", store.MISSING_CHANNEL_ERROR, nil, "teamId="+teamId+", "+"name="+name+"", http.StatusNotFound) return nil, store.NewErrNotFound("Channel", fmt.Sprintf("TeamId=%s&Name=%s", teamId, name))
} }
return nil, model.NewAppError("SqlChannelStore.GetByName", "store.sql_channel.get_by_name.existing.app_error", nil, "teamId="+teamId+", "+"name="+name+", "+err.Error(), http.StatusInternalServerError) return nil, errors.Wrapf(err, "failed to find channel with TeamId=%s and Name=%s", teamId, name)
} }
channelByNameCache.SetWithExpiry(teamId+name, &channel, CHANNEL_CACHE_DURATION) channelByNameCache.SetWithExpiry(teamId+name, &channel, CHANNEL_CACHE_DURATION)

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

@@ -143,9 +143,9 @@ type ChannelStore interface {
SetDeleteAt(channelId string, deleteAt int64, updateAt int64) error SetDeleteAt(channelId string, deleteAt int64, updateAt int64) error
PermanentDelete(channelId string) error PermanentDelete(channelId string) error
PermanentDeleteByTeam(teamId string) error PermanentDeleteByTeam(teamId string) error
GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, error)
GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, *model.AppError) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, error)
GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, error)
GetDeletedByName(team_id string, name string) (*model.Channel, *model.AppError) GetDeletedByName(team_id string, name string) (*model.Channel, *model.AppError)
GetDeleted(team_id string, offset int, limit int, userId string) (*model.ChannelList, error) GetDeleted(team_id string, offset int, limit int, userId string) (*model.ChannelList, error)
GetChannels(teamId string, userId string, includeDeleted bool) (*model.ChannelList, error) GetChannels(teamId string, userId string, includeDeleted bool) (*model.ChannelList, error)

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

@@ -714,8 +714,8 @@ func testChannelStoreGetByNames(t *testing.T, ss store.Store) {
err = ss.Channel().Delete(o2.Id, model.GetMillis()) err = ss.Channel().Delete(o2.Id, model.GetMillis())
require.Nil(t, err, "channel should have been deleted") require.Nil(t, err, "channel should have been deleted")
channels, err := ss.Channel().GetByNames(o1.TeamId, []string{o1.Name}, false) channels, nErr := ss.Channel().GetByNames(o1.TeamId, []string{o1.Name}, false)
require.Nil(t, err) require.Nil(t, nErr)
assert.Empty(t, channels) assert.Empty(t, channels)
} }

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

@@ -385,7 +385,7 @@ func (_m *ChannelStore) GetAllDirectChannelsForExportAfter(limit int, afterId st
} }
// GetByName provides a mock function with given fields: team_id, name, allowFromCache // GetByName provides a mock function with given fields: team_id, name, allowFromCache
func (_m *ChannelStore) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (_m *ChannelStore) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
ret := _m.Called(team_id, name, allowFromCache) ret := _m.Called(team_id, name, allowFromCache)
var r0 *model.Channel var r0 *model.Channel
@@ -397,20 +397,18 @@ func (_m *ChannelStore) GetByName(team_id string, name string, allowFromCache bo
} }
} }
var r1 *model.AppError var r1 error
if rf, ok := ret.Get(1).(func(string, string, bool) *model.AppError); ok { if rf, ok := ret.Get(1).(func(string, string, bool) error); ok {
r1 = rf(team_id, name, allowFromCache) r1 = rf(team_id, name, allowFromCache)
} else { } else {
if ret.Get(1) != nil { r1 = ret.Error(1)
r1 = ret.Get(1).(*model.AppError)
}
} }
return r0, r1 return r0, r1
} }
// GetByNameIncludeDeleted provides a mock function with given fields: team_id, name, allowFromCache // GetByNameIncludeDeleted provides a mock function with given fields: team_id, name, allowFromCache
func (_m *ChannelStore) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (_m *ChannelStore) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
ret := _m.Called(team_id, name, allowFromCache) ret := _m.Called(team_id, name, allowFromCache)
var r0 *model.Channel var r0 *model.Channel
@@ -422,20 +420,18 @@ func (_m *ChannelStore) GetByNameIncludeDeleted(team_id string, name string, all
} }
} }
var r1 *model.AppError var r1 error
if rf, ok := ret.Get(1).(func(string, string, bool) *model.AppError); ok { if rf, ok := ret.Get(1).(func(string, string, bool) error); ok {
r1 = rf(team_id, name, allowFromCache) r1 = rf(team_id, name, allowFromCache)
} else { } else {
if ret.Get(1) != nil { r1 = ret.Error(1)
r1 = ret.Get(1).(*model.AppError)
}
} }
return r0, r1 return r0, r1
} }
// GetByNames provides a mock function with given fields: team_id, names, allowFromCache // GetByNames provides a mock function with given fields: team_id, names, allowFromCache
func (_m *ChannelStore) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, *model.AppError) { func (_m *ChannelStore) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, error) {
ret := _m.Called(team_id, names, allowFromCache) ret := _m.Called(team_id, names, allowFromCache)
var r0 []*model.Channel var r0 []*model.Channel
@@ -447,13 +443,11 @@ func (_m *ChannelStore) GetByNames(team_id string, names []string, allowFromCach
} }
} }
var r1 *model.AppError var r1 error
if rf, ok := ret.Get(1).(func(string, []string, bool) *model.AppError); ok { if rf, ok := ret.Get(1).(func(string, []string, bool) error); ok {
r1 = rf(team_id, names, allowFromCache) r1 = rf(team_id, names, allowFromCache)
} else { } else {
if ret.Get(1) != nil { r1 = ret.Error(1)
r1 = ret.Get(1).(*model.AppError)
}
} }
return r0, r1 return r0, r1

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

@@ -728,7 +728,7 @@ func (s *TimerLayerChannelStore) GetAllDirectChannelsForExportAfter(limit int, a
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (s *TimerLayerChannelStore) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (s *TimerLayerChannelStore) GetByName(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
start := timemodule.Now() start := timemodule.Now()
resultVar0, resultVar1 := s.ChannelStore.GetByName(team_id, name, allowFromCache) resultVar0, resultVar1 := s.ChannelStore.GetByName(team_id, name, allowFromCache)
@@ -744,7 +744,7 @@ func (s *TimerLayerChannelStore) GetByName(team_id string, name string, allowFro
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (s *TimerLayerChannelStore) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, *model.AppError) { func (s *TimerLayerChannelStore) GetByNameIncludeDeleted(team_id string, name string, allowFromCache bool) (*model.Channel, error) {
start := timemodule.Now() start := timemodule.Now()
resultVar0, resultVar1 := s.ChannelStore.GetByNameIncludeDeleted(team_id, name, allowFromCache) resultVar0, resultVar1 := s.ChannelStore.GetByNameIncludeDeleted(team_id, name, allowFromCache)
@@ -760,7 +760,7 @@ func (s *TimerLayerChannelStore) GetByNameIncludeDeleted(team_id string, name st
return resultVar0, resultVar1 return resultVar0, resultVar1
} }
func (s *TimerLayerChannelStore) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, *model.AppError) { func (s *TimerLayerChannelStore) GetByNames(team_id string, names []string, allowFromCache bool) ([]*model.Channel, error) {
start := timemodule.Now() start := timemodule.Now()
resultVar0, resultVar1 := s.ChannelStore.GetByNames(team_id, names, allowFromCache) resultVar0, resultVar1 := s.ChannelStore.GetByNames(team_id, names, allowFromCache)