| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package postgres
- import (
- "context"
- "errors"
- "fmt"
- "github.com/jackc/pgx/v5"
- )
- type EntryChannel struct {
- ID string
- ChannelCode string
- ChannelType string
- PlatformAppID *string
- DisplayName string
- Status string
- IsDefault bool
- TenantID string
- TenantCode string
- TenantName string
- }
- type FindEntryChannelParams struct {
- ChannelCode string
- ChannelType string
- PlatformAppID string
- TenantCode string
- }
- func (s *Store) FindEntryChannel(ctx context.Context, params FindEntryChannelParams) (*EntryChannel, error) {
- row := s.pool.QueryRow(ctx, `
- SELECT
- ec.id,
- ec.channel_code,
- ec.channel_type,
- ec.platform_app_id,
- ec.display_name,
- ec.status,
- ec.is_default,
- t.id,
- t.tenant_code,
- t.name
- FROM entry_channels ec
- JOIN tenants t ON t.id = ec.tenant_id
- WHERE ($1 = '' OR ec.channel_code = $1)
- AND ($2 = '' OR ec.channel_type = $2)
- AND ($3 = '' OR COALESCE(ec.platform_app_id, '') = $3)
- AND ($4 = '' OR t.tenant_code = $4)
- ORDER BY ec.is_default DESC, ec.created_at ASC
- LIMIT 1
- `, params.ChannelCode, params.ChannelType, params.PlatformAppID, params.TenantCode)
- var entry EntryChannel
- err := row.Scan(
- &entry.ID,
- &entry.ChannelCode,
- &entry.ChannelType,
- &entry.PlatformAppID,
- &entry.DisplayName,
- &entry.Status,
- &entry.IsDefault,
- &entry.TenantID,
- &entry.TenantCode,
- &entry.TenantName,
- )
- if errors.Is(err, pgx.ErrNoRows) {
- return nil, nil
- }
- if err != nil {
- return nil, fmt.Errorf("find entry channel: %w", err)
- }
- return &entry, nil
- }
|