| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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
- }
|