From 03138e0baa39c85839fbeb5008290d04a25e27fb Mon Sep 17 00:00:00 2001 From: Charles Dufour Date: Mon, 5 Feb 2024 09:26:48 +0100 Subject: [PATCH] [TRELLO-2177] Add other option to social networks (#1536) * [TRELLO-2177] Add other option to social networks * [TRELLO-2177] Add other option to social networks --- app/actors/ReportsExtractActor.scala | 7 ++++++- app/models/report/Influencer.scala | 2 +- app/orchestrators/ReportOrchestrator.scala | 19 ++++++++++++------- app/repositories/report/ReportTable.scala | 12 +++++++----- ...19__add_other_social_network_to_report.sql | 1 + test/utils/Fixtures.scala | 2 +- 6 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 conf/db/migration/default/V19__add_other_social_network_to_report.sql diff --git a/app/actors/ReportsExtractActor.scala b/app/actors/ReportsExtractActor.scala index 207b9ed10..47ffb0130 100644 --- a/app/actors/ReportsExtractActor.scala +++ b/app/actors/ReportsExtractActor.scala @@ -251,7 +251,12 @@ object ReportsExtractActor { ReportColumn( "Plateforme (réseau social)", leftAlignmentColumn, - (report, _, _, _, _) => report.influencer.map(_.socialNetwork.entryName).getOrElse(""), + (report, _, _, _, _) => + report.influencer + .flatMap(_.socialNetwork) + .map(_.entryName) + .orElse(report.influencer.flatMap(_.otherSocialNetwork)) + .getOrElse(""), available = List(UserRole.DGCCRF, UserRole.DGAL, UserRole.Admin) contains requestedBy.userRole ), ReportColumn( diff --git a/app/models/report/Influencer.scala b/app/models/report/Influencer.scala index b7c99c272..d649d81d1 100644 --- a/app/models/report/Influencer.scala +++ b/app/models/report/Influencer.scala @@ -3,7 +3,7 @@ package models.report import play.api.libs.json.Json import play.api.libs.json.OFormat -case class Influencer(socialNetwork: SocialNetworkSlug, name: String) +case class Influencer(socialNetwork: Option[SocialNetworkSlug], otherSocialNetwork: Option[String], name: String) object Influencer { implicit val format: OFormat[Influencer] = Json.format[Influencer] diff --git a/app/orchestrators/ReportOrchestrator.scala b/app/orchestrators/ReportOrchestrator.scala index dc5341d01..4b9e15350 100644 --- a/app/orchestrators/ReportOrchestrator.scala +++ b/app/orchestrators/ReportOrchestrator.scala @@ -381,9 +381,9 @@ class ReportOrchestrator( Future(None) } - private def searchCompanyOfSocialNetwork(influencer: Influencer): Future[Option[Company]] = + private def searchCompanyOfSocialNetwork(socialNetworkSlug: SocialNetworkSlug): Future[Option[Company]] = (for { - socialNetwork <- OptionT(socialNetworkRepository.get(influencer.socialNetwork)) + socialNetwork <- OptionT(socialNetworkRepository.get(socialNetworkSlug)) companyToCreate <- OptionT(companySyncService.companyBySiret(socialNetwork.siret)) c = Company( siret = companyToCreate.siret, @@ -399,11 +399,16 @@ class ReportOrchestrator( } yield company).value private def extractCompanyOfSocialNetwork(influencer: Influencer): Future[Option[Company]] = - for { - maybeCompany <- socialNetworkRepository.findCompanyBySocialNetworkSlug(influencer.socialNetwork) - resultingCompany <- - if (maybeCompany.isDefined) Future.successful(maybeCompany) else searchCompanyOfSocialNetwork(influencer) - } yield resultingCompany + influencer.socialNetwork match { + case Some(socialNetwork) => + for { + maybeCompany <- socialNetworkRepository.findCompanyBySocialNetworkSlug(socialNetwork) + resultingCompany <- + if (maybeCompany.isDefined) Future.successful(maybeCompany) else searchCompanyOfSocialNetwork(socialNetwork) + } yield resultingCompany + case None => + Future.successful(None) + } def updateReportCountry(reportId: UUID, countryCode: String, userId: UUID): Future[Option[Report]] = for { diff --git a/app/repositories/report/ReportTable.scala b/app/repositories/report/ReportTable.scala index 91394760c..1600ceb17 100644 --- a/app/repositories/report/ReportTable.scala +++ b/app/repositories/report/ReportTable.scala @@ -29,6 +29,7 @@ class ReportTable(tag: Tag) extends DatabaseTable[Report](tag, "reports") { def subcategories = column[List[String]]("subcategories") def details = column[List[String]]("details") def socialNetwork = column[Option[SocialNetworkSlug]]("social_network") + def otherSocialNetwork = column[Option[String]]("other_social_network") def influencerName = column[Option[String]]("influencer_name") def companyId = column[Option[UUID]]("company_id") def companyName = column[Option[String]]("company_name") @@ -77,6 +78,7 @@ class ReportTable(tag: Tag) extends DatabaseTable[Report](tag, "reports") { subcategories :: details :: socialNetwork :: + otherSocialNetwork :: influencerName :: companyId :: companyName :: @@ -152,10 +154,7 @@ class ReportTable(tag: Tag) extends DatabaseTable[Report](tag, "reports") { lang = lang, reopenDate = reopenDate, barcodeProductId = barcodeProductId, - influencer = for { - socialNetwork <- socialNetwork - influencerName <- influencerName - } yield Influencer(socialNetwork, influencerName) + influencer = influencerName.map(influencerName => Influencer(socialNetwork, otherSocialNetwork, influencerName)) ) } @@ -165,7 +164,8 @@ class ReportTable(tag: Tag) extends DatabaseTable[Report](tag, "reports") { r.category :: r.subcategories :: r.details.map(detailInputValue => s"${detailInputValue.label} ${detailInputValue.value}") :: - r.influencer.map(_.socialNetwork) :: + r.influencer.flatMap(_.socialNetwork) :: + r.influencer.flatMap(_.otherSocialNetwork) :: r.influencer.map(_.name) :: r.companyId :: r.companyName :: @@ -211,6 +211,7 @@ class ReportTable(tag: Tag) extends DatabaseTable[Report](tag, "reports") { List[String] :: Option[SocialNetworkSlug] :: Option[String] :: + Option[String] :: Option[UUID] :: Option[String] :: Option[String] :: @@ -253,6 +254,7 @@ class ReportTable(tag: Tag) extends DatabaseTable[Report](tag, "reports") { subcategories :: details :: socialNetwork :: + otherSocialNetwork :: influencerName :: companyId :: companyName :: diff --git a/conf/db/migration/default/V19__add_other_social_network_to_report.sql b/conf/db/migration/default/V19__add_other_social_network_to_report.sql new file mode 100644 index 000000000..e4bb3b813 --- /dev/null +++ b/conf/db/migration/default/V19__add_other_social_network_to_report.sql @@ -0,0 +1 @@ +ALTER TABLE reports ADD other_social_network text; \ No newline at end of file diff --git a/test/utils/Fixtures.scala b/test/utils/Fixtures.scala index 3543132b2..b4a125786 100644 --- a/test/utils/Fixtures.scala +++ b/test/utils/Fixtures.scala @@ -133,7 +133,7 @@ object Fixtures { val genInfluencer = for { socialNetwork <- Gen.oneOf(SocialNetworkSlug.values) name <- arbString.arbitrary - } yield Influencer(socialNetwork, name) + } yield Influencer(Some(socialNetwork), None, name) val genWebsiteURL = for { randInt <- Gen.choose(0, 1000000)