* Migration completed

* Fix tests

* Reduce to one line

* Fix: change to plain error

* Fix imports

* Trigger CI

* Fix i18

* Fix merge with master

* Trigger CI
Этот коммит содержится в:
Rodrigo Villablanca
2020-09-16 21:54:39 -03:00
коммит произвёл GitHub
родитель b329635b23
Коммит 1d4a7c0552
17 изменённых файлов: 609 добавлений и 369 удалений

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

@@ -6,12 +6,10 @@ package sqlstore
import (
"database/sql"
"fmt"
"net/http"
"strings"
"github.com/pkg/errors"
sq "github.com/Masterminds/squirrel"
"github.com/pkg/errors"
"github.com/mattermost/gorp"
"github.com/mattermost/mattermost-server/v5/model"
@@ -924,7 +922,7 @@ func (s SqlTeamStore) SaveMember(member *model.TeamMember, maxUsersPerTeam int)
return members[0], nil
}
func (s SqlTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*model.TeamMember, *model.AppError) {
func (s SqlTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*model.TeamMember, error) {
teams := []string{}
for _, member := range members {
member.PreUpdate()
@@ -934,7 +932,7 @@ func (s SqlTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*mod
}
if _, err := s.GetMaster().Update(NewTeamMemberFromModel(member)); err != nil {
return nil, model.NewAppError("SqlTeamStore.UpdateMember", "store.sql_team.save_member.save.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "failed to update TeamMember")
}
teams = append(teams, member.TeamId)
}
@@ -952,7 +950,7 @@ func (s SqlTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*mod
sqlQuery, args, err := query.ToSql()
if err != nil {
return nil, model.NewAppError("SqlUserStore.Save", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var defaultTeamsRoles []struct {
Id string
@@ -962,7 +960,7 @@ func (s SqlTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*mod
}
_, err = s.GetMaster().Select(&defaultTeamsRoles, sqlQuery, args...)
if err != nil {
return nil, model.NewAppError("SqlUserStore.Save", "store.sql_user.save.member_count.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "failed to find Teams")
}
defaultTeamRolesByTeam := map[string]struct {
@@ -994,7 +992,7 @@ func (s SqlTeamStore) UpdateMultipleMembers(members []*model.TeamMember) ([]*mod
return updatedMembers, nil
}
func (s SqlTeamStore) UpdateMember(member *model.TeamMember) (*model.TeamMember, *model.AppError) {
func (s SqlTeamStore) UpdateMember(member *model.TeamMember) (*model.TeamMember, error) {
members, err := s.UpdateMultipleMembers([]*model.TeamMember{member})
if err != nil {
return nil, err
@@ -1002,29 +1000,29 @@ func (s SqlTeamStore) UpdateMember(member *model.TeamMember) (*model.TeamMember,
return members[0], nil
}
func (s SqlTeamStore) GetMember(teamId string, userId string) (*model.TeamMember, *model.AppError) {
func (s SqlTeamStore) GetMember(teamId string, userId string) (*model.TeamMember, error) {
query := s.getTeamMembersWithSchemeSelectQuery().
Where(sq.Eq{"TeamMembers.TeamId": teamId}).
Where(sq.Eq{"TeamMembers.UserId": userId})
queryString, args, err := query.ToSql()
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var dbMember teamMemberWithSchemeRoles
err = s.GetReplica().SelectOne(&dbMember, queryString, args...)
if err != nil {
if err == sql.ErrNoRows {
return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.missing.app_error", nil, "teamId="+teamId+" userId="+userId+" "+err.Error(), http.StatusNotFound)
return nil, store.NewErrNotFound("TeamMember", fmt.Sprintf("teamId=%s, userId=%s", teamId, userId))
}
return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.app_error", nil, "teamId="+teamId+" userId="+userId+" "+err.Error(), http.StatusInternalServerError)
return nil, errors.Wrapf(err, "failed to find TeamMembers with teamId=%s and userId=%s", teamId, userId)
}
return dbMember.ToModel(), nil
}
func (s SqlTeamStore) GetMembers(teamId string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, *model.AppError) {
func (s SqlTeamStore) GetMembers(teamId string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, error) {
query := s.getTeamMembersWithSchemeSelectQuery().
Where(sq.Eq{"TeamMembers.TeamId": teamId}).
Where(sq.Eq{"TeamMembers.DeleteAt": 0}).
@@ -1053,19 +1051,19 @@ func (s SqlTeamStore) GetMembers(teamId string, offset int, limit int, teamMembe
queryString, args, err := query.ToSql()
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetMembers", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var dbMembers teamMemberWithSchemeRolesList
_, err = s.GetReplica().Select(&dbMembers, queryString, args...)
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetMembers", "app.team.get_members.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError)
return nil, errors.Wrapf(err, "failed to find TeamMembers with teamId=%s", teamId)
}
return dbMembers.ToModel(), nil
}
func (s SqlTeamStore) GetTotalMemberCount(teamId string, restrictions *model.ViewUsersRestrictions) (int64, *model.AppError) {
func (s SqlTeamStore) GetTotalMemberCount(teamId string, restrictions *model.ViewUsersRestrictions) (int64, error) {
query := s.getQueryBuilder().
Select("count(DISTINCT TeamMembers.UserId)").
From("TeamMembers, Users").
@@ -1076,17 +1074,17 @@ func (s SqlTeamStore) GetTotalMemberCount(teamId string, restrictions *model.Vie
query = applyTeamMemberViewRestrictionsFilterForStats(query, teamId, restrictions)
queryString, args, err := query.ToSql()
if err != nil {
return int64(0), model.NewAppError("SqlTeamStore.GetTotalMemberCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return int64(0), errors.Wrap(err, "team_tosql")
}
count, err := s.GetReplica().SelectInt(queryString, args...)
if err != nil {
return int64(0), model.NewAppError("SqlTeamStore.GetTotalMemberCount", "store.sql_team.get_member_count.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError)
return int64(0), errors.Wrap(err, "failed to count TeamMembers")
}
return count, nil
}
func (s SqlTeamStore) GetActiveMemberCount(teamId string, restrictions *model.ViewUsersRestrictions) (int64, *model.AppError) {
func (s SqlTeamStore) GetActiveMemberCount(teamId string, restrictions *model.ViewUsersRestrictions) (int64, error) {
query := s.getQueryBuilder().
Select("count(DISTINCT TeamMembers.UserId)").
From("TeamMembers, Users").
@@ -1098,20 +1096,20 @@ func (s SqlTeamStore) GetActiveMemberCount(teamId string, restrictions *model.Vi
query = applyTeamMemberViewRestrictionsFilterForStats(query, teamId, restrictions)
queryString, args, err := query.ToSql()
if err != nil {
return 0, model.NewAppError("SqlTeamStore.GetActiveMemberCount", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return 0, errors.Wrap(err, "team_tosql")
}
count, err := s.GetReplica().SelectInt(queryString, args...)
if err != nil {
return 0, model.NewAppError("SqlTeamStore.GetActiveMemberCount", "store.sql_team.get_active_member_count.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError)
return 0, errors.Wrap(err, "failed to count TeamMembers")
}
return count, nil
}
func (s SqlTeamStore) GetMembersByIds(teamId string, userIds []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) {
func (s SqlTeamStore) GetMembersByIds(teamId string, userIds []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, error) {
if len(userIds) == 0 {
return nil, model.NewAppError("SqlTeamStore.GetMembersByIds", "store.sql_team.get_members_by_ids.app_error", nil, "Invalid list of user ids", http.StatusInternalServerError)
return nil, errors.New("invalid list of user ids")
}
query := s.getTeamMembersWithSchemeSelectQuery().
@@ -1123,29 +1121,29 @@ func (s SqlTeamStore) GetMembersByIds(teamId string, userIds []string, restricti
queryString, args, err := query.ToSql()
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetMembersByIds", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var dbMembers teamMemberWithSchemeRolesList
if _, err = s.GetReplica().Select(&dbMembers, queryString, args...); err != nil {
return nil, model.NewAppError("SqlTeamStore.GetMembersByIds", "store.sql_team.get_members_by_ids.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "failed to find TeamMembers")
}
return dbMembers.ToModel(), nil
}
func (s SqlTeamStore) GetTeamsForUser(userId string) ([]*model.TeamMember, *model.AppError) {
func (s SqlTeamStore) GetTeamsForUser(userId string) ([]*model.TeamMember, error) {
query := s.getTeamMembersWithSchemeSelectQuery().
Where(sq.Eq{"TeamMembers.UserId": userId})
queryString, args, err := query.ToSql()
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetMembers", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var dbMembers teamMemberWithSchemeRolesList
_, err = s.GetReplica().Select(&dbMembers, queryString, args...)
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetMembers", "app.team.get_members.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError)
return nil, errors.Wrapf(err, "failed to find TeamMembers with userId=%s", userId)
}
return dbMembers.ToModel(), nil
@@ -1153,7 +1151,7 @@ func (s SqlTeamStore) GetTeamsForUser(userId string) ([]*model.TeamMember, *mode
// GetTeamsForUserWithPagination returns limited TeamMembers according to the perPage parameter specified.
// It also offsets the records as per the page parameter supplied.
func (s SqlTeamStore) GetTeamsForUserWithPagination(userId string, page, perPage int) ([]*model.TeamMember, *model.AppError) {
func (s SqlTeamStore) GetTeamsForUserWithPagination(userId string, page, perPage int) ([]*model.TeamMember, error) {
query := s.getTeamMembersWithSchemeSelectQuery().
Where(sq.Eq{"TeamMembers.UserId": userId}).
Limit(uint64(perPage)).
@@ -1161,13 +1159,13 @@ func (s SqlTeamStore) GetTeamsForUserWithPagination(userId string, page, perPage
queryString, args, err := query.ToSql()
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetTeamsForUserWithPagination", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var dbMembers teamMemberWithSchemeRolesList
_, err = s.GetReplica().Select(&dbMembers, queryString, args...)
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetTeamsForUserWithPagination", "app.team.get_members.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError)
return nil, errors.Wrapf(err, "failed to find TeamMembers with userId=%s", userId)
}
return dbMembers.ToModel(), nil
@@ -1175,7 +1173,7 @@ func (s SqlTeamStore) GetTeamsForUserWithPagination(userId string, page, perPage
// GetChannelUnreadsForAllTeams returns unreads msg count, mention counts, and notifyProps
// for all the channels in all the teams except the excluded ones.
func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string) ([]*model.ChannelUnread, *model.AppError) {
func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string) ([]*model.ChannelUnread, error) {
query, args, err := s.getQueryBuilder().
Select("Channels.TeamId TeamId", "Channels.Id ChannelId", "(Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount", "ChannelMembers.MentionCount MentionCount", "ChannelMembers.NotifyProps NotifyProps").
From("Channels").
@@ -1184,20 +1182,20 @@ func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string)
Where(sq.NotEq{"TeamId": excludeTeamId}).ToSql()
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForAllTeams", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var data []*model.ChannelUnread
_, err = s.GetReplica().Select(&data, query, args...)
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForAllTeams", "store.sql_team.get_unread.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError)
return nil, errors.Wrapf(err, "failed to find Channels with userId=%s and teamId!=%s", userId, excludeTeamId)
}
return data, nil
}
// GetChannelUnreadsForTeam returns unreads msg count, mention counts and notifyProps for all the channels in a single team.
func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) ([]*model.ChannelUnread, *model.AppError) {
func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) ([]*model.ChannelUnread, error) {
query, args, err := s.getQueryBuilder().
Select("Channels.TeamId TeamId", "Channels.Id ChannelId", "(Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount", "ChannelMembers.MentionCount MentionCount", "ChannelMembers.NotifyProps NotifyProps").
From("Channels").
@@ -1205,52 +1203,52 @@ func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) ([]*model.
Where(sq.Eq{"UserId": userId, "TeamId": teamId, "DeleteAt": 0}).ToSql()
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForTeam", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError)
return nil, errors.Wrap(err, "team_tosql")
}
var channels []*model.ChannelUnread
_, err = s.GetReplica().Select(&channels, query, args...)
if err != nil {
return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForTeam", "store.sql_team.get_unread.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError)
return nil, errors.Wrapf(err, "failed to find Channels with teamId=%s and userId=%s", teamId, userId)
}
return channels, nil
}
func (s SqlTeamStore) RemoveMembers(teamId string, userIds []string) *model.AppError {
query := s.getQueryBuilder().
func (s SqlTeamStore) RemoveMembers(teamId string, userIds []string) error {
builder := s.getQueryBuilder().
Delete("TeamMembers").
Where(sq.Eq{"TeamId": teamId}).
Where(sq.Eq{"UserId": userIds})
sql, args, err := query.ToSql()
query, args, err := builder.ToSql()
if err != nil {
return model.NewAppError("SqlTeamStore.RemoveMembers", "store.sql.build_query.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
return errors.Wrap(err, "team_tosql")
}
_, err = s.GetMaster().Exec(sql, args...)
_, err = s.GetMaster().Exec(query, args...)
if err != nil {
return model.NewAppError("SqlTeamStore.RemoveMembers", "app.team.remove_member.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
return errors.Wrapf(err, "failed to delete TeamMembers with teamId=%s and userId in %v", teamId, userIds)
}
return nil
}
// RemoveMember remove from the database the team members that match the userId and teamId passed as parameter.
func (s SqlTeamStore) RemoveMember(teamId string, userId string) *model.AppError {
func (s SqlTeamStore) RemoveMember(teamId string, userId string) error {
return s.RemoveMembers(teamId, []string{userId})
}
// RemoveAllMembersByTeam removes from the database the team members that belong to the teamId passed as parameter.
func (s SqlTeamStore) RemoveAllMembersByTeam(teamId string) *model.AppError {
sql, args, err := s.getQueryBuilder().
func (s SqlTeamStore) RemoveAllMembersByTeam(teamId string) error {
query, args, err := s.getQueryBuilder().
Delete("TeamMembers").
Where(sq.Eq{"TeamId": teamId}).ToSql()
if err != nil {
return model.NewAppError("SqlTeamStore.RemoveMembers", "store.sql.build_query.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
return errors.Wrap(err, "team_tosql")
}
_, err = s.GetMaster().Exec(sql, args...)
_, err = s.GetMaster().Exec(query, args...)
if err != nil {
return model.NewAppError("SqlTeamStore.RemoveMember", "app.team.remove_member.app_error", nil, "team_id="+teamId+", "+err.Error(), http.StatusInternalServerError)
return errors.Wrapf(err, "failed to delete TeamMembers with teamId=%s", teamId)
}
return nil
}