fix(irc): panic when creating indexer with irc (#986)

fix(irc): store channel panic
This commit is contained in:
ze0s 2023-06-15 18:47:47 +02:00 committed by GitHub
parent 1f8804154e
commit 2af0021ce6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 18 deletions

View file

@ -279,7 +279,7 @@ func (r *IrcRepo) CheckExistingNetwork(ctx context.Context, network *domain.IrcN
return &net, nil
}
func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
func (r *IrcRepo) StoreNetwork(ctx context.Context, network *domain.IrcNetwork) error {
netName := toNullString(network.Name)
pass := toNullString(network.Pass)
nick := toNullString(network.Nick)
@ -289,7 +289,6 @@ func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
account := toNullString(network.Auth.Account)
password := toNullString(network.Auth.Password)
var err error
var retID int64
queryBuilder := r.db.squirrel.
@ -327,13 +326,13 @@ func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
Suffix("RETURNING id").
RunWith(r.db.handler)
if err = queryBuilder.QueryRow().Scan(&retID); err != nil {
if err := queryBuilder.QueryRowContext(ctx).Scan(&retID); err != nil {
return errors.Wrap(err, "error executing query")
}
network.ID = retID
return err
return nil
}
func (r *IrcRepo) UpdateNetwork(ctx context.Context, network *domain.IrcNetwork) error {
@ -459,7 +458,6 @@ func (r *IrcRepo) StoreNetworkChannels(ctx context.Context, networkID int64, cha
func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *domain.IrcChannel) error {
pass := toNullString(channel.Password)
var err error
if channel.ID != 0 {
// update record
channelQueryBuilder := r.db.squirrel.
@ -475,7 +473,7 @@ func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *do
return errors.Wrap(err, "error building query")
}
if _, err = r.db.handler.ExecContext(ctx, query, args...); err != nil {
if _, err := r.db.handler.ExecContext(ctx, query, args...); err != nil {
return errors.Wrap(err, "error executing query")
}
} else {
@ -501,7 +499,7 @@ func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *do
// returning
var retID int64
if err = queryBuilder.QueryRowContext(ctx).Scan(&retID); err != nil {
if err := queryBuilder.QueryRowContext(ctx).Scan(&retID); err != nil {
return errors.Wrap(err, "error executing query")
}
@ -523,7 +521,7 @@ func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *do
//channel.ID, err = res.LastInsertId()
}
return err
return nil
}
func (r *IrcRepo) UpdateChannel(channel *domain.IrcChannel) error {

View file

@ -122,7 +122,7 @@ func (m IrcMessage) Bytes() []byte {
}
type IrcRepo interface {
StoreNetwork(network *IrcNetwork) error
StoreNetwork(ctx context.Context, network *IrcNetwork) error
UpdateNetwork(ctx context.Context, network *IrcNetwork) error
StoreChannel(ctx context.Context, networkID int64, channel *IrcChannel) error
UpdateChannel(channel *IrcChannel) error

View file

@ -561,17 +561,16 @@ func (s *service) StoreNetwork(ctx context.Context, network *domain.IrcNetwork)
}
if existingNetwork == nil {
if err := s.repo.StoreNetwork(network); err != nil {
if err := s.repo.StoreNetwork(ctx, network); err != nil {
return err
}
s.log.Debug().Msgf("store network: %+v", network)
if network.Channels != nil {
for _, channel := range network.Channels {
if err := s.repo.StoreChannel(nil, network.ID, &channel); err != nil {
if err := s.repo.StoreChannel(ctx, network.ID, &channel); err != nil {
s.log.Error().Stack().Err(err).Msg("irc.storeChannel: error executing query")
return errors.Wrap(err, "error storing channel on network")
//return err
}
}
}
@ -582,14 +581,14 @@ func (s *service) StoreNetwork(ctx context.Context, network *domain.IrcNetwork)
// get channels for existing network
existingChannels, err := s.repo.ListChannels(existingNetwork.ID)
if err != nil {
s.log.Error().Err(err).Msgf("failed to list channels for network %q", existingNetwork.Server)
s.log.Error().Err(err).Msgf("failed to list channels for network %s", existingNetwork.Server)
}
existingNetwork.Channels = existingChannels
if network.Channels != nil {
for _, channel := range network.Channels {
// add channels. Make sure it doesn't delete before
if err := s.repo.StoreChannel(nil, existingNetwork.ID, &channel); err != nil {
if err := s.repo.StoreChannel(ctx, existingNetwork.ID, &channel); err != nil {
return err
}
}
@ -611,10 +610,9 @@ func (s *service) StoreNetwork(ctx context.Context, network *domain.IrcNetwork)
// if nickserv account, nickserv password : changed - stay connected, and change those
// if channels len : changes - join or leave
err := s.checkIfNetworkRestartNeeded(existingNetwork)
if err != nil {
s.log.Error().Err(err).Msgf("could not restart network: %+v", existingNetwork.Name)
return errors.New("could not restart network: %v", existingNetwork.Name)
if err := s.checkIfNetworkRestartNeeded(existingNetwork); err != nil {
s.log.Error().Err(err).Msgf("could not restart network: %s", existingNetwork.Name)
return errors.New("could not restart network: %s", existingNetwork.Name)
}
}