...

Source file src/edge-infra.dev/pkg/edge/api/services/channels/helpers.go

Documentation: edge-infra.dev/pkg/edge/api/services/channels

     1  package channels
     2  
     3  import (
     4  	"database/sql"
     5  	"fmt"
     6  
     7  	"github.com/go-errors/errors"
     8  
     9  	"edge-infra.dev/pkg/edge/api/graph/model"
    10  )
    11  
    12  func scanChannelServiceAccount(scanner interface{ Scan(...any) error }) (model.ChannelIAMPolicy, error) {
    13  	var channelIAMPolicy model.ChannelIAMPolicy
    14  
    15  	err := scanner.Scan(
    16  		&channelIAMPolicy.ChannelSaID,
    17  		&channelIAMPolicy.ChannelID,
    18  		&channelIAMPolicy.SaEmail,
    19  		&channelIAMPolicy.CreatedAt)
    20  
    21  	if err != nil && errors.Is(err, sql.ErrNoRows) {
    22  		return channelIAMPolicy, errors.Join(ErrChannelDoesNotExist, err)
    23  	} else if err != nil {
    24  		return channelIAMPolicy, fmt.Errorf("failed to scan channel: %w", err)
    25  	}
    26  
    27  	return channelIAMPolicy, nil
    28  }
    29  
    30  // scanChannel requires SELECT and RETURNING statements to use the following order:
    31  //
    32  //	channel_id, name, description, team, expire_buffer_duration, rotation_interval_duration, created_at
    33  //
    34  // please keep queries consistent and use this function.
    35  func scanChannel(scanner interface{ Scan(...any) error }) (Channel, error) {
    36  	var x Channel
    37  	err := scanner.Scan(
    38  		&x.ID,
    39  		&x.Name,
    40  		&x.Description,
    41  		&x.Team,
    42  		&x.ExpireBufferDuration,
    43  		&x.RotationIntervalDuration,
    44  		&x.CreatedAt,
    45  	)
    46  	if err != nil && errors.Is(err, sql.ErrNoRows) {
    47  		return x, errors.Join(ErrChannelDoesNotExist, err)
    48  	} else if err != nil {
    49  		return x, fmt.Errorf("failed to scan channel: %w", err)
    50  	}
    51  	return x, x.validateScan() // sanity assertion
    52  }
    53  
    54  // scanChannelKeyVersion requires SELECT and RETURNING statements to use the following order:
    55  //
    56  //	channel_key_versions_id, channel_id, banner_edge_id, version, sm_link, expire_at, rotate_at, created_at
    57  //
    58  // please keep queries consistent and use this function.
    59  func scanChannelKeyVersion(scanner interface{ Scan(...any) error }) (ChannelKeyVersion, error) {
    60  	var ckv ChannelKeyVersion
    61  	var rotateAt sql.NullTime
    62  	err := scanner.Scan(
    63  		&ckv.ID,
    64  		&ckv.ChannelID,
    65  		&ckv.BannerEdgeID,
    66  		&ckv.Version,
    67  		&ckv.SecretManagerLink,
    68  		&ckv.ExpireAt,
    69  		&rotateAt,
    70  		&ckv.CreatedAt,
    71  	)
    72  
    73  	if err != nil {
    74  		return ckv, fmt.Errorf("failed to scan channel key version: %w", err)
    75  	}
    76  
    77  	// if `rotate_at IS NULL` then `rotateAt.Time.IsZero() == true`
    78  	ckv.RotateAt = rotateAt.Time
    79  
    80  	return ckv, ckv.validateScan() // sanity assertion
    81  }
    82  

View as plain text