refactor
This commit is contained in:
@@ -1400,7 +1400,7 @@ func (s *PurchaseOptionalDetails) createPurchase(b *bot.Bot, jwt string) {
|
||||
return
|
||||
}
|
||||
|
||||
purchaseType, ok := s.normalizePurchaseType()
|
||||
placementType, ok := s.normalizePurchaseType()
|
||||
if !ok {
|
||||
b.SendNew("❌ Тип закупа: используйте «самопиар» или «стандарт»", Keyboard(
|
||||
Row(Button("← Назад", "back")),
|
||||
@@ -1408,31 +1408,31 @@ func (s *PurchaseOptionalDetails) createPurchase(b *bot.Bot, jwt string) {
|
||||
return
|
||||
}
|
||||
|
||||
purchaseDetails := s.buildPurchaseDetails(purchaseType)
|
||||
if purchaseDetails != nil && s.isPurchaseDetailsEmpty(purchaseDetails) {
|
||||
purchaseDetails = nil
|
||||
placementDetails := s.buildPlacementDetails(placementType)
|
||||
if placementDetails != nil && s.isPlacementDetailsEmpty(placementDetails) {
|
||||
placementDetails = nil
|
||||
}
|
||||
|
||||
apiChannels := make([]backend.CreatePurchaseChannelInput, 0, len(s.Channels))
|
||||
apiChannels := make([]backend.CreatePlacementChannelInput, 0, len(s.Channels))
|
||||
for _, ch := range s.Channels {
|
||||
channelDetails := s.buildChannelDetails(ch.Username)
|
||||
if channelDetails != nil && s.isChannelDetailsEmpty(channelDetails) {
|
||||
channelDetails = nil
|
||||
}
|
||||
apiChannels = append(apiChannels, backend.CreatePurchaseChannelInput{
|
||||
apiChannels = append(apiChannels, backend.CreatePlacementChannelInput{
|
||||
Username: ch.Username,
|
||||
Comment: ch.Comment,
|
||||
Details: channelDetails,
|
||||
})
|
||||
}
|
||||
|
||||
input := backend.CreatePurchaseInput{
|
||||
input := backend.CreatePlacementsInput{
|
||||
CreativeID: s.CreativeID,
|
||||
Channels: apiChannels,
|
||||
Details: purchaseDetails,
|
||||
Details: placementDetails,
|
||||
}
|
||||
|
||||
purchase, err := b.Backend.CreatePurchase(
|
||||
placements, err := b.Backend.CreatePlacements(
|
||||
context.Background(),
|
||||
jwt,
|
||||
s.WorkspaceID,
|
||||
@@ -1440,8 +1440,8 @@ func (s *PurchaseOptionalDetails) createPurchase(b *bot.Bot, jwt string) {
|
||||
input,
|
||||
)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Failed to create purchase")
|
||||
b.SendNew("❌ Не удалось создать закуп", Keyboard(
|
||||
log.Error().Err(err).Msg("Failed to create placements")
|
||||
b.SendNew("❌ Не удалось создать размещения", Keyboard(
|
||||
Row(Button("← Назад", "back")),
|
||||
))
|
||||
return
|
||||
@@ -1459,25 +1459,25 @@ func (s *PurchaseOptionalDetails) createPurchase(b *bot.Bot, jwt string) {
|
||||
}
|
||||
|
||||
if creative != nil {
|
||||
for _, ch := range purchase.Channels {
|
||||
channelName := s.formatChannelName(ch)
|
||||
for _, placement := range placements.Placements {
|
||||
channelName := s.formatChannelName(placement)
|
||||
header := fmt.Sprintf("<b>Канал:</b> %s", channelName)
|
||||
b.SendMessage(header, b.ChatID, &echotron.MessageOptions{ParseMode: echotron.HTML})
|
||||
|
||||
s.sendCreativeWithInviteLink(b, creative, ch.InviteLink)
|
||||
s.sendCreativeWithInviteLink(b, creative, placement.InviteLink)
|
||||
}
|
||||
}
|
||||
|
||||
b.SetState(&PurchaseDetails{
|
||||
WorkspaceID: s.WorkspaceID,
|
||||
ProjectID: s.ProjectID,
|
||||
PurchaseID: purchase.ID,
|
||||
BackState: s.BackState,
|
||||
b.SetState(&Purchases{
|
||||
WorkspaceID: s.WorkspaceID,
|
||||
ProjectID: s.ProjectID,
|
||||
ProjectTitle: s.ProjectTitle,
|
||||
BackState: s.BackState,
|
||||
}, bot.NewMessage)
|
||||
}
|
||||
|
||||
func (s *PurchaseOptionalDetails) buildPurchaseDetails(purchaseType *string) *backend.PurchaseDetails {
|
||||
details := &backend.PurchaseDetails{}
|
||||
func (s *PurchaseOptionalDetails) buildPlacementDetails(placementType *string) *backend.PlacementDetails {
|
||||
details := &backend.PlacementDetails{}
|
||||
|
||||
if s.PlacementMode != "per_channel" || len(s.Channels) <= 1 {
|
||||
if s.PlacementDateTime != nil {
|
||||
@@ -1505,19 +1505,19 @@ func (s *PurchaseOptionalDetails) buildPurchaseDetails(purchaseType *string) *ba
|
||||
if s.Comment != "" {
|
||||
details.Comment = &s.Comment
|
||||
}
|
||||
if purchaseType != nil {
|
||||
details.PurchaseType = purchaseType
|
||||
if placementType != nil {
|
||||
details.PlacementType = placementType
|
||||
}
|
||||
|
||||
return details
|
||||
}
|
||||
|
||||
func (s *PurchaseOptionalDetails) buildChannelDetails(username string) *backend.PurchaseChannelDetails {
|
||||
func (s *PurchaseOptionalDetails) buildChannelDetails(username string) *backend.PlacementDetails {
|
||||
if len(s.Channels) <= 1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
details := &backend.PurchaseChannelDetails{}
|
||||
details := &backend.PlacementDetails{}
|
||||
if s.PlacementMode == "per_channel" {
|
||||
if value, ok := s.PlacementByChannel[username]; ok && value != nil {
|
||||
formatted := value.Format(time.RFC3339)
|
||||
@@ -1556,17 +1556,17 @@ func (s *PurchaseOptionalDetails) buildCostInfo(costType string, value *float64)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *PurchaseOptionalDetails) isPurchaseDetailsEmpty(details *backend.PurchaseDetails) bool {
|
||||
func (s *PurchaseOptionalDetails) isPlacementDetailsEmpty(details *backend.PlacementDetails) bool {
|
||||
return details.PlacementAt == nil &&
|
||||
details.PaymentAt == nil &&
|
||||
details.Cost == nil &&
|
||||
details.CostBeforeBargain == nil &&
|
||||
details.PurchaseType == nil &&
|
||||
details.PlacementType == nil &&
|
||||
details.Format == nil &&
|
||||
details.Comment == nil
|
||||
}
|
||||
|
||||
func (s *PurchaseOptionalDetails) isChannelDetailsEmpty(details *backend.PurchaseChannelDetails) bool {
|
||||
func (s *PurchaseOptionalDetails) isChannelDetailsEmpty(details *backend.PlacementDetails) bool {
|
||||
return details.PlacementAt == nil &&
|
||||
details.Cost == nil &&
|
||||
details.CostBeforeBargain == nil &&
|
||||
@@ -1592,12 +1592,12 @@ func (s *PurchaseOptionalDetails) normalizePurchaseType() (*string, bool) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *PurchaseOptionalDetails) formatChannelName(ch backend.PurchaseChannelOut) string {
|
||||
if ch.Channel.Title != nil && *ch.Channel.Title != "" {
|
||||
return *ch.Channel.Title
|
||||
func (s *PurchaseOptionalDetails) formatChannelName(placement backend.PlacementOutput) string {
|
||||
if placement.Channel.Title != nil && *placement.Channel.Title != "" {
|
||||
return *placement.Channel.Title
|
||||
}
|
||||
if ch.Channel.Username != nil && *ch.Channel.Username != "" {
|
||||
return "@" + *ch.Channel.Username
|
||||
if placement.Channel.Username != nil && *placement.Channel.Username != "" {
|
||||
return "@" + *placement.Channel.Username
|
||||
}
|
||||
return "Без названия"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user