Ctrl K
ComunidadGuías…

internal/store/postgres/channel_reaction_settings.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package postgres

import (
	"context"
	"fmt"

	"github.com/jackc/pgx/v5"

	"telesrv/internal/domain"
)

func (s *ChannelStore) SetAvailableReactions(ctx context.Context, userID, channelID int64, policy domain.ChannelReactionPolicy) (domain.Channel, error) {
	if userID == 0 || channelID == 0 {
		return domain.Channel{}, domain.ErrChannelInvalid
	}
	policyJSON, err := marshalJSON(policy, "{}")
	if err != nil {
		return domain.Channel{}, err
	}
	var channel domain.Channel
	if err := withTx(ctx, s.db, "set channel available reactions", func(tx pgx.Tx) error {
		var err error
		var member domain.ChannelMember
		channel, member, err = s.getChannelForMember(ctx, tx, userID, channelID)
		if err != nil {
			return err
		}
		if !canChangeChannelInfo(member) {
			return domain.ErrChannelAdminRequired
		}
		if _, err := tx.Exec(ctx, `UPDATE channels SET available_reactions = $2, updated_at = now() WHERE id = $1`, channelID, policyJSON); err != nil {
			return fmt.Errorf("update channel available reactions: %w", err)
		}
		channel.ReactionPolicy = policy
		return nil
	}); err != nil {
		return domain.Channel{}, err
	}
	if s.rowCache != nil {
		s.rowCache.put(channel)
	}
	return channel, nil
}