From 112e5e90e5e10729473eaf637cef134ba49acc3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 16 Oct 2024 16:53:05 +0200 Subject: [PATCH 1/4] Incoherent behavior with template and expired consent --- nio-server/app/models/ConsentFact.scala | 23 +++++++++++++------ .../app/service/ConsentManagerService.scala | 2 +- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/nio-server/app/models/ConsentFact.scala b/nio-server/app/models/ConsentFact.scala index 4b01319..bc6e568 100644 --- a/nio-server/app/models/ConsentFact.scala +++ b/nio-server/app/models/ConsentFact.scala @@ -54,6 +54,14 @@ object DoneBy { } case class Consent(key: String, label: String, checked: Boolean, expiredAt: Option[LocalDateTime] = None) { + + def isActive: Bool = { + val now = LocalDateTime.now(Clock.systemUTC()) + c.expiredAt.isEmpty || c.expiredAt.exists(d => d.isAfter(now)) + } + + def isExpired: Bool = !isActive + def asXml(): Elem = {key} @@ -87,6 +95,9 @@ object Consent { } case class ConsentGroup(key: String, label: String, consents: Seq[Consent]) { + + def activeConsents: Seq[Consent] = this.consents.filter(_.isActive) + def asXml(): Elem = {key} @@ -424,7 +435,7 @@ case class ConsentFact( {version} - {groups.map(_.asXml())} + {groups.filter(cf => cf.consents).map(_.asXml())} { @@ -472,12 +483,10 @@ case class ConsentFact( if (showExpiredConsents) { this } else { - val now = LocalDateTime.now(Clock.systemUTC()) - this.copy(groups = this.groups.map(group => - group.copy(consents = group.consents.toList.filter(c => - c.expiredAt.isEmpty || c.expiredAt.exists(d => d.isAfter(now)) - )) - )) + this.copy(groups = this.groups + .map(group => group.copy(consents = group.activeConsents)) + .filter(group => group.consents.nonEmpty) + ) } } } diff --git a/nio-server/app/service/ConsentManagerService.scala b/nio-server/app/service/ConsentManagerService.scala index bc0431c..b900ab4 100644 --- a/nio-server/app/service/ConsentManagerService.scala +++ b/nio-server/app/service/ConsentManagerService.scala @@ -396,7 +396,7 @@ class ConsentManagerService( val groupsUpdated: Seq[ConsentGroup] = template.groups.map { group => - val maybeGroup = consentFact.groups.find(cg => cg.key == group.key && cg.label == group.label) + val maybeGroup = consentFact.filterExpiredConsent(true).find(cg => cg.key == group.key && cg.label == group.label) mergeConsentGroup(maybeGroup, group) } From 65d99128650b2d4059d6cfacba37f09d902fe24a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 16 Oct 2024 16:58:16 +0200 Subject: [PATCH 2/4] Swagger + IHM label --- nio-server/conf/swagger/swagger.json | 7 +++++++ nio-server/javascript/src/nio/pages/GroupPermissionPage.js | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/nio-server/conf/swagger/swagger.json b/nio-server/conf/swagger/swagger.json index d42e877..76f3cfa 100644 --- a/nio-server/conf/swagger/swagger.json +++ b/nio-server/conf/swagger/swagger.json @@ -931,6 +931,13 @@ "description": "L'identifiant utilisateur", "required": true, "type": "string" + }, + { + "name": "showExpiredConsents", + "in": "query", + "description": "Consentement expiré oui / non", + "required": false, + "type": "boolean" } ], "responses": { diff --git a/nio-server/javascript/src/nio/pages/GroupPermissionPage.js b/nio-server/javascript/src/nio/pages/GroupPermissionPage.js index e5d37c7..4ccc5e6 100644 --- a/nio-server/javascript/src/nio/pages/GroupPermissionPage.js +++ b/nio-server/javascript/src/nio/pages/GroupPermissionPage.js @@ -200,7 +200,7 @@ class Permission extends Component { possibleValues={["OptIn", "OptOut"]} errorKey={`${this.props.prefixe}permissions.${this.props.index}.type.required`}/> - this.onChange(e, "validityPeriod")} disabled={this.props.readOnlyMode} From 3163c549ee25f3fe1a720decab5ddb579f7319a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 16 Oct 2024 17:09:01 +0200 Subject: [PATCH 3/4] Swagger + IHM label --- nio-server/app/models/ConsentFact.scala | 8 ++++---- nio-server/app/models/Permission.scala | 2 +- nio-server/app/service/ConsentManagerService.scala | 4 +++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/nio-server/app/models/ConsentFact.scala b/nio-server/app/models/ConsentFact.scala index bc6e568..59d2e43 100644 --- a/nio-server/app/models/ConsentFact.scala +++ b/nio-server/app/models/ConsentFact.scala @@ -55,12 +55,12 @@ object DoneBy { case class Consent(key: String, label: String, checked: Boolean, expiredAt: Option[LocalDateTime] = None) { - def isActive: Bool = { + def isActive: Boolean = { val now = LocalDateTime.now(Clock.systemUTC()) - c.expiredAt.isEmpty || c.expiredAt.exists(d => d.isAfter(now)) + this.expiredAt.isEmpty || this.expiredAt.exists(d => d.isAfter(now)) } - def isExpired: Bool = !isActive + def isExpired: Boolean = !isActive def asXml(): Elem = @@ -435,7 +435,7 @@ case class ConsentFact( {version} - {groups.filter(cf => cf.consents).map(_.asXml())} + {groups.filter(cf => cf.consents.nonEmpty).map(_.asXml())} { diff --git a/nio-server/app/models/Permission.scala b/nio-server/app/models/Permission.scala index 6c74c7a..67b4621 100644 --- a/nio-server/app/models/Permission.scala +++ b/nio-server/app/models/Permission.scala @@ -12,7 +12,7 @@ import play.api.libs.json.* import play.api.libs.json.Reads.* import utils.Result.AppErrors -import java.time.{Clock, LocalDateTime, ZoneId} +import java.time.{Clock, LocalDateTime} import scala.concurrent.duration.{Duration, FiniteDuration} import scala.util.{Failure, Success, Try} import scala.xml.{Elem, NodeBuffer, NodeSeq} diff --git a/nio-server/app/service/ConsentManagerService.scala b/nio-server/app/service/ConsentManagerService.scala index b900ab4..5fd3db3 100644 --- a/nio-server/app/service/ConsentManagerService.scala +++ b/nio-server/app/service/ConsentManagerService.scala @@ -394,9 +394,11 @@ class ConsentManagerService( } .getOrElse(group) + val consentFactFiltered = consentFact.filterExpiredConsent(true) val groupsUpdated: Seq[ConsentGroup] = template.groups.map { group => - val maybeGroup = consentFact.filterExpiredConsent(true).find(cg => cg.key == group.key && cg.label == group.label) + val maybeGroup = consentFactFiltered.groups + .find(cg => cg.key == group.key && cg.label == group.label) mergeConsentGroup(maybeGroup, group) } From 7f5e313cddafc8c497d09b949dcfbce3501de320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Thu, 17 Oct 2024 12:47:30 +0200 Subject: [PATCH 4/4] template --- docker-compose.yml | 2 +- nio-server/app/controllers/ConsentController.scala | 2 +- nio-server/app/service/ConsentManagerService.scala | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6c8cf37..a88a062 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,7 +22,7 @@ services: - nio_zookeeper environment: KAFKA_BROKER_ID: 1 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:32181 + KAFKA_ZOOKEEPER_CONNECT: nio_zookeeper:32181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29092 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" KAFKA_DELETE_TOPIC_ENABLE: "true" diff --git a/nio-server/app/controllers/ConsentController.scala b/nio-server/app/controllers/ConsentController.scala index ec02be2..8864a0c 100644 --- a/nio-server/app/controllers/ConsentController.scala +++ b/nio-server/app/controllers/ConsentController.scala @@ -86,7 +86,7 @@ class ConsentController( key = pg.key, label = pg.label, consents = pg.permissions.map { p => - Consent(key = p.key, label = p.label, checked = p.checkDefault(), expiredAt = p.getValidityPeriod) + Consent(key = p.key, label = p.label, checked = p.checkDefault(), expiredAt = None) } ) diff --git a/nio-server/app/service/ConsentManagerService.scala b/nio-server/app/service/ConsentManagerService.scala index 5fd3db3..68793d0 100644 --- a/nio-server/app/service/ConsentManagerService.scala +++ b/nio-server/app/service/ConsentManagerService.scala @@ -394,7 +394,8 @@ class ConsentManagerService( } .getOrElse(group) - val consentFactFiltered = consentFact.filterExpiredConsent(true) + val consentFactFiltered = consentFact.filterExpiredConsent(false) + val groupsUpdated: Seq[ConsentGroup] = template.groups.map { group => val maybeGroup = consentFactFiltered.groups