diff --git a/app/controllers/WebsiteController.scala b/app/controllers/WebsiteController.scala index a4d76649..d222e8f6 100644 --- a/app/controllers/WebsiteController.scala +++ b/app/controllers/WebsiteController.scala @@ -44,7 +44,8 @@ class WebsiteController( investigationStatus: Option[Seq[InvestigationStatus]], start: Option[OffsetDateTime], end: Option[OffsetDateTime], - hasAssociation: Option[Boolean] + hasAssociation: Option[Boolean], + isOpen: Option[Boolean] ) = SecuredAction.andThen(WithRole(UserRole.Admin)).async { _ => for { @@ -57,7 +58,8 @@ class WebsiteController( investigationStatus.filter(_.nonEmpty), start, end, - hasAssociation + hasAssociation, + isOpen ) resultAsJson = Json.toJson(result)(paginatedResultWrites[WebsiteCompanyReportCount]) } yield Ok(resultAsJson) diff --git a/app/models/company/Company.scala b/app/models/company/Company.scala index 7e51e93d..0ae506e5 100644 --- a/app/models/company/Company.scala +++ b/app/models/company/Company.scala @@ -116,6 +116,7 @@ case class CompanyWithNbReports( brand: Option[String], address: Address, activityCode: Option[String], + isOpen: Option[Boolean], count: Int, responseRate: Int ) diff --git a/app/orchestrators/WebsitesOrchestrator.scala b/app/orchestrators/WebsitesOrchestrator.scala index d0bf1b76..790c5390 100644 --- a/app/orchestrators/WebsitesOrchestrator.scala +++ b/app/orchestrators/WebsitesOrchestrator.scala @@ -58,7 +58,8 @@ class WebsitesOrchestrator( investigationStatusFilter: Option[Seq[InvestigationStatus]], start: Option[OffsetDateTime], end: Option[OffsetDateTime], - hasAssociation: Option[Boolean] + hasAssociation: Option[Boolean], + isOpen: Option[Boolean] ): Future[PaginatedResult[WebsiteCompanyReportCount]] = for { websites <- repository.listWebsitesCompaniesByReportCount( @@ -69,7 +70,8 @@ class WebsitesOrchestrator( investigationStatusFilter, start, end, - hasAssociation + hasAssociation, + isOpen ) _ = logger.debug("Website company report fetched") websitesWithCount = websites.copy(entities = websites.entities.map(toApi)) diff --git a/app/repositories/website/WebsiteRepository.scala b/app/repositories/website/WebsiteRepository.scala index 464a4483..35075883 100644 --- a/app/repositories/website/WebsiteRepository.scala +++ b/app/repositories/website/WebsiteRepository.scala @@ -125,7 +125,8 @@ class WebsiteRepository( investigationStatusFilter: Option[Seq[InvestigationStatus]], start: Option[OffsetDateTime], end: Option[OffsetDateTime], - hasAssociation: Option[Boolean] + hasAssociation: Option[Boolean], + isOpen: Option[Boolean] ): Future[PaginatedResult[((Website, Option[Company]), Int)]] = { val baseQuery = @@ -151,6 +152,9 @@ class WebsiteRepository( val (websiteTable, _) = tupleTable websiteTable.host === reportTable.host && reportTable.host.isDefined } + .filterOpt(isOpen) { case (((_, companyTable), _), isOpenFilter) => + companyTable.map(_.isOpen === isOpenFilter) + } .filterOpt(start) { case (((websiteTable, _), reportTable), start) => reportTable.map(_.creationDate >= start).getOrElse(websiteTable.creationDate >= start) } diff --git a/app/repositories/website/WebsiteRepositoryInterface.scala b/app/repositories/website/WebsiteRepositoryInterface.scala index 12170992..5893379f 100644 --- a/app/repositories/website/WebsiteRepositoryInterface.scala +++ b/app/repositories/website/WebsiteRepositoryInterface.scala @@ -38,7 +38,8 @@ trait WebsiteRepositoryInterface extends TypedCRUDRepositoryInterface[Website, W investigationStatus: Option[Seq[InvestigationStatus]], start: Option[OffsetDateTime], end: Option[OffsetDateTime], - hasAssociation: Option[Boolean] + hasAssociation: Option[Boolean], + isOpen: Option[Boolean] ): Future[PaginatedResult[((Website, Option[Company]), Int)]] def searchValidAssociationByHost(host: String): Future[Seq[Website]] diff --git a/conf/routes b/conf/routes index 125e8ed5..dd7ce92a 100644 --- a/conf/routes +++ b/conf/routes @@ -168,7 +168,7 @@ GET /api/resources/investigation-status controll POST /api/website-investigations controllers.WebsiteController.updateInvestigation() # Websites API -GET /api/websites controllers.WebsiteController.fetchWithCompanies(host: Option[String], identificationStatus: Option[Seq[IdentificationStatus]], offset: Option[Long], limit: Option[Int],investigationStatus: Option[Seq[InvestigationStatus]],start: Option[OffsetDateTime],end: Option[OffsetDateTime],hasAssociation: Option[Boolean]) +GET /api/websites controllers.WebsiteController.fetchWithCompanies(host: Option[String], identificationStatus: Option[Seq[IdentificationStatus]], offset: Option[Long], limit: Option[Int],investigationStatus: Option[Seq[InvestigationStatus]],start: Option[OffsetDateTime],end: Option[OffsetDateTime],hasAssociation: Option[Boolean],isOpen: Option[Boolean]) GET /api/websites/search-url controllers.WebsiteController.searchByHost(url: String) GET /api/websites/unregistered controllers.WebsiteController.fetchUnregisteredHost(q: Option[String], start: Option[String], end: Option[String]) GET /api/websites/unregistered/extract controllers.WebsiteController.extractUnregisteredHost(q: Option[String], start: Option[String], end: Option[String])