Ejemplo n.º 1
0
func (csc CampaignStatusesCollection) Get(conn ConnectionInterface, campaignID string) (CampaignStatus, error) {
	campaign, err := csc.campaignsRepository.Get(conn, campaignID)
	if err != nil {
		panic(err)
	}

	counts, err := csc.messages.CountByStatus(conn, campaign.ID)
	if err != nil {
		panic(err)
	}

	status := CampaignStatusSending
	var completedTime mysql.NullTime

	if counts.Total > 0 && (counts.Failed+counts.Delivered) == counts.Total {
		status = CampaignStatusCompleted

		mostRecentlyUpdatedMessage, err := csc.messages.MostRecentlyUpdatedByCampaignID(conn, campaign.ID)
		if err != nil {
			panic(err)
		}

		completedTime.Time = mostRecentlyUpdatedMessage.UpdatedAt
		completedTime.Valid = true
	}

	return CampaignStatus{
		CampaignID:     campaign.ID,
		Status:         status,
		TotalMessages:  counts.Total,
		SentMessages:   counts.Delivered,
		FailedMessages: counts.Failed,
		RetryMessages:  counts.Retry,
		QueuedMessages: counts.Queued,
		StartTime:      campaign.StartTime,
		CompletedTime:  completedTime,
	}, nil
}