7 trait SlidesSchema { this: DriverComponent =>
8 import SlideSchema._
9 import driver.simple._
10
11 class SlideSetTable(t: Tag) extends Table[SlideSet](t, "SLIDE_SET") {
12 val id = column[?[UUID]]("SET_ID", O.PrimaryKey)
13 val title = column[String]("TITLE")
14 val description = column[String]("DESCRIPTION")
15 val course = column[UUID]("COURSE_ID")
16 val logo = column[?[String]]("LOGO")
17 val isTemplate = column[Boolean]("IS_TEMPLATE")
18 val selectedContinuity = column[Boolean]("IS_SELECTED_CONTINUITY")
19 val theme = column[?[UUID]]("THEME_ID")
20 val duration = column[?[Long]]("DURATION")
21 val scoreLimit = column[?[Double]]("SCORE_LIMIT")
22 val slidesNumber = column[?[Long]]("SLIDES_NUMBER")
23
24 def * = (
25 id, title, description, course, logo, isTemplate,
26 selectedContinuity, theme, duration, scoreLimit, slidesNumber
27 ).shaped[SlideSetRow] <> (buildSet, extractSet)
28 }
29 }
30
31 object SlideSchema {
32
33 type SlideSetRow = (?[UUID], String, String, UUID, ?[String], Boolean, Boolean, ?[UUID], ?[Long], ?[Double], ?[Long])
34
35 val buildSet: SlideSetRow => SlideSet = { r: SlideSetRow =>
36 SlideSet(
37 id = r._1, title = r._2, description = r._3, course = r._4,
38 logo = r._5, isTemplate = r._6, isSelectedContinuity = r._7,
39 theme = r._8, duration = r._9, scoreLimit = r._10, slidesNumber = r._11)
40 }
41
42 val extractSet: SlideSet => ?[SlideSetRow] = { s: SlideSet => (
43 s.id, s.title, s.description, s.course, s.logo, s.isTemplate,
44 s.isSelectedContinuity, s.theme, s.duration, s.scoreLimit, s.slidesNumber
45 ).toOption
46 }
47 }
5 case class SlideSet(
6 id: Option[UUID] = None,
7 title: String = "",
8 description: String = "",
9 course: UUID,
10 logo: Option[String] = None,
11 slides: Seq[Slide] = Seq(),
12 isTemplate: Boolean = false,
13 isSelectedContinuity: Boolean = false,
14 theme: Option[UUID] = None,
15 duration: Option[Long] = None,
16 scoreLimit: Option[Double] = None,
17 slidesNumber: Option[Long] = None
18 )