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 }