From eadf793882ea18b4df99ff4acae51ac9fe5ccb8d Mon Sep 17 00:00:00 2001 From: Artemiy Solopov Date: Thu, 3 Sep 2026 00:02:34 +0300 Subject: [PATCH] Auctions index and CORS filter --- app/controllers/AuctionsController.scala | 7 +++++++ app/controllers/filters/LoggingFilter.scala | 2 +- app/dao/AuctionsDAO.scala | 12 +++++++++++- conf/application.conf | 4 ++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/controllers/AuctionsController.scala b/app/controllers/AuctionsController.scala index f5a78de..69d77b4 100644 --- a/app/controllers/AuctionsController.scala +++ b/app/controllers/AuctionsController.scala @@ -20,6 +20,13 @@ class AuctionsController @Inject()(val controllerComponents: ControllerComponent authenticatedAction: AuthenticatedAction, val auctionPublisher: ActorRef[AuctionPublisher.Command], implicit val ec: ExecutionContext) extends BaseController { + def index = authenticatedAction.async { implicit request => + for { + auctions <- auctionsDAO.list_available(request.user) + json = Json.toJson(auctions) + } yield Ok(json) + } + def create = authenticatedAction.async(parse.json) { implicit request => val auctionCreateDataResult = request.body.validate[AuctionCreateData] auctionCreateDataResult.fold( diff --git a/app/controllers/filters/LoggingFilter.scala b/app/controllers/filters/LoggingFilter.scala index e35d7fd..f6f96d2 100644 --- a/app/controllers/filters/LoggingFilter.scala +++ b/app/controllers/filters/LoggingFilter.scala @@ -17,7 +17,7 @@ class LoggingFilter @Inject()(implicit val mat: Materializer, ec: ExecutionConte val endTime = System.currentTimeMillis() val requestTime = endTime - startTime - logger.info(s"${requestHeader.method} ${requestHeader.uri} ${result.header.status} $requestTime") + logger.info(s"${requestHeader.method} ${requestHeader.uri} ${result.header.status} ${requestTime}ms") result } diff --git a/app/dao/AuctionsDAO.scala b/app/dao/AuctionsDAO.scala index 7b1c5b6..2ba75dd 100644 --- a/app/dao/AuctionsDAO.scala +++ b/app/dao/AuctionsDAO.scala @@ -2,7 +2,7 @@ package dao import models.{Auction, AuctionStatus} import schemas.Auctions -import schemas.auctionStatusColumnType +import schemas.given import play.api.db.slick.{DatabaseConfigProvider, HasDatabaseConfigProvider} import slick.jdbc.PostgresProfile import slick.jdbc.PostgresProfile.api.* @@ -15,6 +15,16 @@ import scala.util.Random class AuctionsDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)(implicit val ec: ExecutionContext) extends HasDatabaseConfigProvider[PostgresProfile] { + def list_available(user: models.User): Future[Seq[Auction]] = { + db.run { + Auctions.filter(row => (row.status === AuctionStatus.Ready) && (row.authorId =!= user.id.get)).result + } + } + + def list_created_by(user: models.User): Future[Seq[Auction]] = { + db.run(Auctions.filter(_.authorId === user.id).result) + } + def create(name: String, startingPrice: BigDecimal, author: models.User): Future[Auction] = { val auction = Auction( id = None, name = name, diff --git a/conf/application.conf b/conf/application.conf index 270db53..54e0d8d 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -2,9 +2,13 @@ play.http.filters=controllers.filters.Filters +play.filters.enabled += "play.filters.cors.CORSFilter" play.filters.csrf.header.bypassHeaders { X-Requested-With = "*" } +play.filters.cors { + allowedOrigins = ["http://localhost:4321"] +} play.modules.enabled += "mqttClient.Module"