59 lines
2.2 KiB
Scala
59 lines
2.2 KiB
Scala
package schemas
|
|
|
|
import slick.jdbc.PostgresProfile.api.*
|
|
import models.*
|
|
import slick.lifted.ProvenShape
|
|
import slick.model.ForeignKeyAction.{Cascade, Restrict}
|
|
|
|
import java.time.Instant
|
|
|
|
class UsersTable(tag: Tag) extends Table[User](tag, "users") {
|
|
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
|
|
def gid = column[String]("gid", O.Unique)
|
|
def username = column[String]("username", O.Unique)
|
|
def passwordDigest = column[Option[String]]("password_digest")
|
|
|
|
override def * : ProvenShape[User] = (id.?, username, gid, passwordDigest).mapTo[User]
|
|
}
|
|
|
|
lazy val Users = TableQuery[UsersTable]
|
|
|
|
class AuthTokensTable(tag: Tag) extends Table[AuthToken](tag, "auth_tokens") {
|
|
|
|
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
|
|
def userId = column[Int]("user_id")
|
|
def token = column[String]("token")
|
|
def createdAt = column[Instant]("created_at")
|
|
def expiresAt = column[Instant]("expires_at")
|
|
|
|
override def * : ProvenShape[AuthToken] = (id.?, userId, token, createdAt, expiresAt).mapTo[AuthToken]
|
|
|
|
def user = foreignKey("users", userId, Users)(_.id, onDelete = Cascade)
|
|
}
|
|
|
|
lazy val AuthTokens = TableQuery[AuthTokensTable]
|
|
|
|
implicit val auctionStatusColumnType: BaseColumnType[AuctionStatus] =
|
|
MappedColumnType.base[AuctionStatus, Short](
|
|
enumValue => enumValue.value,
|
|
intValue => AuctionStatus.byValue(intValue)
|
|
)
|
|
|
|
class AuctionsTable(tag: Tag) extends Table[Auction](tag, "auctions") {
|
|
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
|
|
def name = column[String]("name")
|
|
def status = column[AuctionStatus]("status")
|
|
def gid = column[String]("gid", O.Unique)
|
|
def authorId = column[Int]("author_id")
|
|
def startingPrice = column[BigDecimal]("starting_price")
|
|
def currentBid = column[Option[BigDecimal]]("current_bid")
|
|
def currentBidderId = column[Option[Int]]("current_bidder_id")
|
|
def currentBidAt = column[Option[Instant]]("current_bid_at")
|
|
def createdAt = column[Instant]("created_at")
|
|
|
|
override def * : ProvenShape[Auction] = (id.?, name, status, gid, authorId, startingPrice, currentBid, currentBidderId, currentBidAt, createdAt).mapTo[Auction]
|
|
|
|
def author = foreignKey("users", authorId, Users)(_.id, onDelete = Restrict)
|
|
}
|
|
|
|
lazy val Auctions = TableQuery[AuctionsTable] |