Adding etag to channel extra_info api call.
Этот коммит содержится в:
@@ -36,6 +36,7 @@ func NewSqlChannelStore(sqlStore *SqlStore) ChannelStore {
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) UpgradeSchemaIfNeeded() {
|
||||
s.CreateColumnIfNotExists("Channels", "ExtraUpdateAt", "TotalMsgCount", "bigint(20)", "0")
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) CreateIndexesIfNotExists() {
|
||||
@@ -142,6 +143,25 @@ func (s SqlChannelStore) Update(channel *model.Channel) StoreChannel {
|
||||
return storeChannel
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) extraUpdated(channel *model.Channel) StoreChannel {
|
||||
storeChannel := make(StoreChannel)
|
||||
|
||||
go func() {
|
||||
result := StoreResult{}
|
||||
|
||||
channel.ExtraUpdated()
|
||||
|
||||
if count, err := s.GetMaster().Update(channel); err != nil || count != 1 {
|
||||
result.Err = model.NewAppError("SqlChannelStore.extraUpdated", "Problem updating members last updated time", "id="+channel.Id+", "+err.Error())
|
||||
}
|
||||
|
||||
storeChannel <- result
|
||||
close(storeChannel)
|
||||
}()
|
||||
|
||||
return storeChannel
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) Get(id string) StoreChannel {
|
||||
storeChannel := make(StoreChannel)
|
||||
|
||||
@@ -288,20 +308,31 @@ func (s SqlChannelStore) SaveMember(member *model.ChannelMember) StoreChannel {
|
||||
go func() {
|
||||
result := StoreResult{}
|
||||
|
||||
member.PreSave()
|
||||
if result.Err = member.IsValid(); result.Err != nil {
|
||||
storeChannel <- result
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.GetMaster().Insert(member); err != nil {
|
||||
if IsUniqueConstraintError(err.Error(), "ChannelId", "channelmembers_pkey") {
|
||||
result.Err = model.NewAppError("SqlChannelStore.SaveMember", "A channel member with that id already exists", "channel_id="+member.ChannelId+", user_id="+member.UserId+", "+err.Error())
|
||||
} else {
|
||||
result.Err = model.NewAppError("SqlChannelStore.SaveMember", "We couldn't save the channel member", "channel_id="+member.ChannelId+", user_id="+member.UserId+", "+err.Error())
|
||||
}
|
||||
// Grab the channel we are saving this member to
|
||||
if cr := <-s.Get(member.ChannelId); cr.Err != nil {
|
||||
result.Err = cr.Err
|
||||
} else {
|
||||
result.Data = member
|
||||
channel := cr.Data.(*model.Channel)
|
||||
|
||||
member.PreSave()
|
||||
if result.Err = member.IsValid(); result.Err != nil {
|
||||
storeChannel <- result
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.GetMaster().Insert(member); err != nil {
|
||||
if IsUniqueConstraintError(err.Error(), "ChannelId", "channelmembers_pkey") {
|
||||
result.Err = model.NewAppError("SqlChannelStore.SaveMember", "A channel member with that id already exists", "channel_id="+member.ChannelId+", user_id="+member.UserId+", "+err.Error())
|
||||
} else {
|
||||
result.Err = model.NewAppError("SqlChannelStore.SaveMember", "We couldn't save the channel member", "channel_id="+member.ChannelId+", user_id="+member.UserId+", "+err.Error())
|
||||
}
|
||||
} else {
|
||||
result.Data = member
|
||||
// If sucessfull record members have changed in channel
|
||||
if mu := <-s.extraUpdated(channel); mu.Err != nil {
|
||||
result.Err = mu.Err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
storeChannel <- result
|
||||
@@ -383,9 +414,21 @@ func (s SqlChannelStore) RemoveMember(channelId string, userId string) StoreChan
|
||||
go func() {
|
||||
result := StoreResult{}
|
||||
|
||||
_, err := s.GetMaster().Exec("DELETE FROM ChannelMembers WHERE ChannelId = :ChannelId AND UserId = :UserId", map[string]interface{}{"ChannelId": channelId, "UserId": userId})
|
||||
if err != nil {
|
||||
result.Err = model.NewAppError("SqlChannelStore.RemoveMember", "We couldn't remove the channel member", "channel_id="+channelId+", user_id="+userId+", "+err.Error())
|
||||
// Grab the channel we are saving this member to
|
||||
if cr := <-s.Get(channelId); cr.Err != nil {
|
||||
result.Err = cr.Err
|
||||
} else {
|
||||
channel := cr.Data.(*model.Channel)
|
||||
|
||||
_, err := s.GetMaster().Exec("DELETE FROM ChannelMembers WHERE ChannelId = :ChannelId AND UserId = :UserId", map[string]interface{}{"ChannelId": channelId, "UserId": userId})
|
||||
if err != nil {
|
||||
result.Err = model.NewAppError("SqlChannelStore.RemoveMember", "We couldn't remove the channel member", "channel_id="+channelId+", user_id="+userId+", "+err.Error())
|
||||
} else {
|
||||
// If sucessfull record members have changed in channel
|
||||
if mu := <-s.extraUpdated(channel); mu.Err != nil {
|
||||
result.Err = mu.Err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
storeChannel <- result
|
||||
|
||||
@@ -197,6 +197,16 @@ func TestChannelStoreGetByName(t *testing.T) {
|
||||
func TestChannelMemberStore(t *testing.T) {
|
||||
Setup()
|
||||
|
||||
c1 := model.Channel{}
|
||||
c1.TeamId = model.NewId()
|
||||
c1.DisplayName = "NameName"
|
||||
c1.Name = "a" + model.NewId() + "b"
|
||||
c1.Type = model.CHANNEL_OPEN
|
||||
c1 = *Must(store.Channel().Save(&c1)).(*model.Channel)
|
||||
|
||||
c1t1 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel)
|
||||
t1 := c1t1.ExtraUpdateAt
|
||||
|
||||
u1 := model.User{}
|
||||
u1.TeamId = model.NewId()
|
||||
u1.Email = model.NewId()
|
||||
@@ -210,17 +220,24 @@ func TestChannelMemberStore(t *testing.T) {
|
||||
Must(store.User().Save(&u2))
|
||||
|
||||
o1 := model.ChannelMember{}
|
||||
o1.ChannelId = model.NewId()
|
||||
o1.ChannelId = c1.Id
|
||||
o1.UserId = u1.Id
|
||||
o1.NotifyLevel = model.CHANNEL_NOTIFY_ALL
|
||||
Must(store.Channel().SaveMember(&o1))
|
||||
|
||||
o2 := model.ChannelMember{}
|
||||
o2.ChannelId = o1.ChannelId
|
||||
o2.ChannelId = c1.Id
|
||||
o2.UserId = u2.Id
|
||||
o2.NotifyLevel = model.CHANNEL_NOTIFY_ALL
|
||||
Must(store.Channel().SaveMember(&o2))
|
||||
|
||||
c1t2 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel)
|
||||
t2 := c1t2.ExtraUpdateAt
|
||||
|
||||
if t2 <= t1 {
|
||||
t.Fatal("Member update time incorrect")
|
||||
}
|
||||
|
||||
members := (<-store.Channel().GetMembers(o1.ChannelId)).Data.([]model.ChannelMember)
|
||||
if len(members) != 2 {
|
||||
t.Fatal("should have saved 2 members")
|
||||
@@ -233,6 +250,13 @@ func TestChannelMemberStore(t *testing.T) {
|
||||
t.Fatal("should have removed 1 member")
|
||||
}
|
||||
|
||||
c1t3 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel)
|
||||
t3 := c1t3.ExtraUpdateAt
|
||||
|
||||
if t3 <= t2 || t3 <= t1 {
|
||||
t.Fatal("Member update time incorrect on delete")
|
||||
}
|
||||
|
||||
member := (<-store.Channel().GetMember(o1.ChannelId, o1.UserId)).Data.(model.ChannelMember)
|
||||
if member.ChannelId != o1.ChannelId {
|
||||
t.Fatal("should have go member")
|
||||
@@ -246,6 +270,12 @@ func TestChannelMemberStore(t *testing.T) {
|
||||
if err := (<-store.Channel().SaveMember(&o1)).Err; err == nil {
|
||||
t.Fatal("Should have been a duplicate")
|
||||
}
|
||||
|
||||
c1t4 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel)
|
||||
t4 := c1t4.ExtraUpdateAt
|
||||
if t4 != t3 {
|
||||
t.Fatal("Should not update time upon failure")
|
||||
}
|
||||
}
|
||||
|
||||
func TestChannelStorePermissionsTo(t *testing.T) {
|
||||
|
||||
Ссылка в новой задаче
Block a user