package models import play.api.libs.json.{JsString, JsValue, Json, OWrites, Writes} import java.time.Instant case class User(id: Option[Long], username: String, gid: String, passwordDigest: Option[String]) object User { given writes: Writes[User] = (o: User) => Json.obj( "gid" -> o.gid, "username" -> o.username ) } case class AuthToken(id: Option[Long], userId: Long, token: String, createdAt: Instant, expiresAt: Instant) object AuthToken { given writes: OWrites[AuthToken] = (a: AuthToken) => Json.obj( "token" -> a.token, "userId" -> a.userId, "createdAt" -> a.createdAt, "expiresAt" -> a.expiresAt ) } enum AuctionStatus(val value: Short) { case Created extends AuctionStatus(0) case Ready extends AuctionStatus(10) case Finished extends AuctionStatus(10000) } object AuctionStatus { lazy val byValue: Map[Short, AuctionStatus] = Map.from(AuctionStatus.values.map{it => (it.value, it)}) implicit val writes: Writes[AuctionStatus] = (o: AuctionStatus) => JsString(o.toString) } case class Auction(id: Option[Long], name: String, status: AuctionStatus, gid: String, authorId: Long, startingPrice: BigDecimal, currentBid: Option[BigDecimal], currentBidderId: Option[Long], currentBidAt: Option[Instant], createdAt: Instant) object Auction { implicit val writes: OWrites[Auction] = Json.writes[Auction] }