Skip to content

Instantly share code, notes, and snippets.

@atamborrino
Created July 22, 2015 10:21
Show Gist options
  • Select an option

  • Save atamborrino/ed158386c7c3a33a33f3 to your computer and use it in GitHub Desktop.

Select an option

Save atamborrino/ed158386c7c3a33a33f3 to your computer and use it in GitHub Desktop.
Dealing with more than 22 columns
case class PerformanceStats(
ioId: IOId,
dsp: Dsp,
advertiserId: Option[Int],
campaignId: Int,
campaignName: String,
campaignCurrency: Option[String],
strategyId: Int,
strategyName: String,
day: LocalDate,
impressions: Long,
clicks: Long,
postViewConversions: Double,
postClickConversions: Long,
mediaCost: Double,
totalAdCost: Double,
totalCost: Double,
totalCostClientCurrency: Double,
media: com.mfglabs.metapi.commons.Media,
maybeVideoStats: Option[VideoPerformanceStats]
)
case class VideoPerformanceStats(
videoStarted: Long,
firstQuartileViews: Long,
midpointViews: Long,
thirdQuartileViews: Long,
completeViews: Long
)
class PerformanceReports(tag: Tag) extends Table[PerformanceStats](tag, Some(Schemas.monitoring), "performance_report") {
def ioId = column[IOId]("io_id")
def dsp = column[Dsp]("dsp")
def advertiserId = column[Option[Int]]("advertiser_id")
def campaignId = column[Int]("campaign_id")
def campaignName = column[String]("campaign_name")
def campaignCurrency = column[Option[String]]("campaign_currency")
def strategyId = column[Int]("strategy_id")
def strategyName = column[String]("strategy_name")
def day = column[LocalDate]("day")(localDateTypeMapper)
def impressions = column[Long]("impressions")
def clicks = column[Long]("clicks")
def postViewConversions = column[Double]("post_view_conversions")
def postClickConversions = column[Long]("post_click_conversions")
def mediaCost = column[Double]("media_cost")
def totalAdCost = column[Double]("total_ad_cost")
def totalCost = column[Double]("total_cost")
def totalCostClientCurrency = column[Double]("total_cost_client_currency")
def media = column[com.mfglabs.metapi.commons.Media]("media")
def maybeVideoStarted = column[Option[Long]]("video_started")
def maybeFirstQuartileViews = column[Option[Long]]("first_quartile_views")
def maybeMidpointViews = column[Option[Long]]("midpoint_views")
def maybeThirdQuartileViews = column[Option[Long]]("third_quartile_views")
def maybeCompleteViews = column[Option[Long]]("complete_views")
def * = (ioId :: dsp :: advertiserId :: campaignId :: campaignName :: campaignCurrency :: strategyId :: strategyName :: day ::
impressions :: clicks :: postViewConversions :: postClickConversions :: mediaCost :: totalAdCost :: totalCost ::
totalCostClientCurrency :: media :: maybeVideoStarted :: maybeFirstQuartileViews :: maybeMidpointViews :: maybeThirdQuartileViews ::
maybeCompleteViews :: HNil).shaped <> (
{
case ioId :: dsp :: advertiserId :: campaignId :: campaignName :: campaignCurrency :: strategyId :: strategyName :: day :: impressions :: clicks ::
postViewConversions :: postClickConversions :: mediaCost :: totalAdCost :: totalCost :: totalCostClientCurrency :: media ::
maybeVideoStarted :: maybeFirstQuartileViews :: maybeMidpointViews :: maybeThirdQuartileViews :: maybeCompleteViews :: HNil =>
val maybeVideoStats = for {
videoStarted <- maybeVideoStarted
firstQuartileViews <- maybeFirstQuartileViews
midpointViews <- maybeMidpointViews
thirdQuartileViews <- maybeThirdQuartileViews
completeViews <- maybeCompleteViews
} yield VideoPerformanceStats(videoStarted, firstQuartileViews, midpointViews, thirdQuartileViews, completeViews)
PerformanceStats(ioId, dsp, advertiserId, campaignId, campaignName, campaignCurrency, strategyId, strategyName,
day, impressions, clicks, postViewConversions, postClickConversions, mediaCost, totalAdCost, totalCost,
totalCostClientCurrency, media, maybeVideoStats)
},
{ s: PerformanceStats =>
Option(s.ioId :: s.dsp :: s.advertiserId :: s.campaignId :: s.campaignName :: s.campaignCurrency :: s.strategyId ::
s.strategyName :: s.day :: s.impressions :: s.clicks :: s.postViewConversions :: s.postClickConversions ::
s.mediaCost :: s.totalAdCost :: s.totalCost :: s.totalCostClientCurrency :: s.media :: s.maybeVideoStats.map(_.videoStarted) ::
s.maybeVideoStats.map(_.firstQuartileViews) :: s.maybeVideoStats.map(_.midpointViews) ::
s.maybeVideoStats.map(_.thirdQuartileViews) :: s.maybeVideoStats.map(_.completeViews) :: HNil
)
}
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment