fix(guilds): фон комнаты в READY и без дублей категорий в шаблонах
- ReadyChannel отдаёт background_file_id: после перезагрузки фон комнаты больше не теряется до REST-запроса (AGENT.md 7.5) - шаблон больше не создаёт категории дважды: они перечислены в шаблоне и раньше создавались ещё и по ссылке из комнаты - тест: структура «Сообщества» ровно 7 комнат без повторов
This commit is contained in:
@@ -150,26 +150,31 @@ func (s *Server) applyGuildTemplate(ctx context.Context, guild *store.Guild, tem
|
||||
}
|
||||
}
|
||||
|
||||
// Категории создаются до комнат: комнаты ссылаются на них через parent_id.
|
||||
// Категории создаём первыми: комнаты ссылаются на них через parent_id.
|
||||
// В шаблоне категория перечислена отдельной записью, поэтому повторно её
|
||||
// не создаём — только запоминаем идентификатор.
|
||||
categories := map[string]uint64{}
|
||||
position := 0
|
||||
for _, channel := range template.Channels {
|
||||
parentID := uint64(0)
|
||||
if channel.Category != "" {
|
||||
id, ok := categories[channel.Category]
|
||||
if !ok {
|
||||
created, err := s.store.CreateChannel(ctx, store.CreateChannelParams{
|
||||
GuildID: &guild.ID, Type: store.ChannelCategory,
|
||||
Name: channel.Category, Position: position,
|
||||
})
|
||||
if err != nil {
|
||||
return humaError(err)
|
||||
}
|
||||
categories[channel.Category] = created.ID
|
||||
position++
|
||||
id = created.ID
|
||||
}
|
||||
parentID = id
|
||||
if channel.Type != store.ChannelCategory {
|
||||
continue
|
||||
}
|
||||
if _, exists := categories[channel.Name]; exists {
|
||||
continue
|
||||
}
|
||||
created, err := s.store.CreateChannel(ctx, store.CreateChannelParams{
|
||||
GuildID: &guild.ID, Type: store.ChannelCategory,
|
||||
Name: channel.Name, Position: position,
|
||||
})
|
||||
if err != nil {
|
||||
return humaError(err)
|
||||
}
|
||||
categories[channel.Name] = created.ID
|
||||
position++
|
||||
}
|
||||
for _, channel := range template.Channels {
|
||||
if channel.Type == store.ChannelCategory {
|
||||
continue
|
||||
}
|
||||
params := store.CreateChannelParams{
|
||||
GuildID: &guild.ID,
|
||||
@@ -177,7 +182,7 @@ func (s *Server) applyGuildTemplate(ctx context.Context, guild *store.Guild, tem
|
||||
Name: channel.Name,
|
||||
Position: position,
|
||||
}
|
||||
if parentID != 0 && channel.Type != store.ChannelCategory {
|
||||
if parentID, ok := categories[channel.Category]; ok {
|
||||
params.ParentID = &parentID
|
||||
}
|
||||
if _, err := s.store.CreateChannel(ctx, params); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user