package dao import models.{Auction, AuctionStatus} import schemas.Auctions import schemas.auctionStatusColumnType import play.api.db.slick.{DatabaseConfigProvider, HasDatabaseConfigProvider} import slick.jdbc.PostgresProfile import slick.jdbc.PostgresProfile.api.* import java.time.Instant import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} import scala.util.Random class AuctionsDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)(implicit val ec: ExecutionContext) extends HasDatabaseConfigProvider[PostgresProfile] { def create(name: String, startingPrice: BigDecimal, author: models.User): Future[Auction] = { val auction = Auction( id = None, name = name, gid = Random.alphanumeric.take(24).mkString, status = AuctionStatus.Created, authorId = author.id.get, startingPrice = startingPrice, currentBid = None, currentBidderId = None, currentBidAt = None, createdAt = Instant.now() ) create(auction) } def create(auction: Auction) : Future[Auction] = { db.run((Auctions returning Auctions) += auction) } def changeStatus(auctionId: Int, status: AuctionStatus): Future[Boolean] = { db.run(Auctions.filter(_.id === auctionId).map(_.status).update(status)) .map(_ == 1) } }