Add backend foundation and config-driven workbench
This commit is contained in:
79
backend/internal/service/entry_service.go
Normal file
79
backend/internal/service/entry_service.go
Normal file
@@ -0,0 +1,79 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user