80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"cmr-backend/internal/apperr"
|
|
"cmr-backend/internal/store/postgres"
|
|
)
|
|
|
|
type EntryService struct {
|
|
store *postgres.Store
|
|
}
|
|
|
|
type ResolveEntryInput struct {
|
|
ChannelCode string
|
|
ChannelType string
|
|
PlatformAppID string
|
|
TenantCode string
|
|
}
|
|
|
|
type ResolveEntryResult struct {
|
|
Tenant struct {
|
|
ID string `json:"id"`
|
|
Code string `json:"code"`
|
|
Name string `json:"name"`
|
|
} `json:"tenant"`
|
|
Channel struct {
|
|
ID string `json:"id"`
|
|
Code string `json:"code"`
|
|
Type string `json:"type"`
|
|
PlatformAppID *string `json:"platformAppId,omitempty"`
|
|
DisplayName string `json:"displayName"`
|
|
Status string `json:"status"`
|
|
IsDefault bool `json:"isDefault"`
|
|
} `json:"channel"`
|
|
}
|
|
|
|
func NewEntryService(store *postgres.Store) *EntryService {
|
|
return &EntryService{store: store}
|
|
}
|
|
|
|
func (s *EntryService) Resolve(ctx context.Context, input ResolveEntryInput) (*ResolveEntryResult, error) {
|
|
input.ChannelCode = strings.TrimSpace(input.ChannelCode)
|
|
input.ChannelType = strings.TrimSpace(input.ChannelType)
|
|
input.PlatformAppID = strings.TrimSpace(input.PlatformAppID)
|
|
input.TenantCode = strings.TrimSpace(input.TenantCode)
|
|
|
|
if input.ChannelCode == "" && input.PlatformAppID == "" {
|
|
return nil, apperr.New(http.StatusBadRequest, "invalid_params", "channelCode or platformAppId is required")
|
|
}
|
|
|
|
entry, err := s.store.FindEntryChannel(ctx, postgres.FindEntryChannelParams{
|
|
ChannelCode: input.ChannelCode,
|
|
ChannelType: input.ChannelType,
|
|
PlatformAppID: input.PlatformAppID,
|
|
TenantCode: input.TenantCode,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if entry == nil {
|
|
return nil, apperr.New(http.StatusNotFound, "entry_channel_not_found", "entry channel not found")
|
|
}
|
|
|
|
result := &ResolveEntryResult{}
|
|
result.Tenant.ID = entry.TenantID
|
|
result.Tenant.Code = entry.TenantCode
|
|
result.Tenant.Name = entry.TenantName
|
|
result.Channel.ID = entry.ID
|
|
result.Channel.Code = entry.ChannelCode
|
|
result.Channel.Type = entry.ChannelType
|
|
result.Channel.PlatformAppID = entry.PlatformAppID
|
|
result.Channel.DisplayName = entry.DisplayName
|
|
result.Channel.Status = entry.Status
|
|
result.Channel.IsDefault = entry.IsDefault
|
|
return result, nil
|
|
}
|