1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.api.user
21 
22 import akka.actor.typed.{ActorSystem, Behavior}
23 import akka.util.Timeout
24 import grizzled.slf4j.Logging
25 import org.apache.kafka.clients.consumer.ConsumerConfig
26 import org.make.api.technical.{KafkaConsumerBehavior, TimeSettings}
27 import org.make.api.userhistory._
28 
29 import java.util.Properties
30 import scala.concurrent.Future
31 import scala.concurrent.duration.{DurationInt, FiniteDuration}
32 
33 class UserImageConsumerBehavior(userService: UserService) extends KafkaConsumerBehavior[UserEventWrapper] with Logging {
34 
35   override protected val topicKey: String = UserProducerBehavior.topicKey
36   override val groupId = "user-images"
37 
38   override def customProperties: Properties = {
39     val props = new Properties()
40 // Fetch a batch of events only in order to handle some downloads but not all at once
41     props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 4)
42     props
43   }
44   override def handleMessagesTimeout: FiniteDuration = 5.minutes
45 
46   implicit val timeout: Timeout = TimeSettings.defaultTimeout
47 
48   override def handleMessage(message: UserEventWrapper)(system: ActorSystem[_]): Future[Unit] = {
49     message.event match {
50       case event: ResetPasswordEvent              => doNothing(event)
51       case event: UserRegisteredEvent             => doNothing(event)
52       case event: UserConnectedEvent              => doNothing(event)
53       case event: UserUpdatedTagEvent             => doNothing(event)
54       case event: ResendValidationEmailEvent      => doNothing(event)
55       case event: UserValidatedAccountEvent       => doNothing(event)
56       case event: OrganisationRegisteredEvent     => doNothing(event)
57       case event: OrganisationUpdatedEvent        => doNothing(event)
58       case event: OrganisationEmailChangedEvent   => doNothing(event)
59       case event: PersonalityEmailChangedEvent    => doNothing(event)
60       case event: OrganisationInitializationEvent => doNothing(event)
61       case event: UserUpdatedOptInNewsletterEvent => doNothing(event)
62       case event: UserAnonymizedEvent             => doNothing(event)
63       case event: UserFollowEvent                 => doNothing(event)
64       case event: UserUnfollowEvent               => doNothing(event)
65       case event: UserUploadAvatarEvent           => handleUserUploadAvatarEvent(event)
66       case event: PersonalityRegisteredEvent      => doNothing(event)
67       case event: VoteOnlyEvent                   => doNothing(event)
68       case event: VoteOnlyTestEvent               => doNothing(event)
69     }
70   }
71 
72   def handleUserUploadAvatarEvent(event: UserUploadAvatarEvent): Future[Unit] = {
73     userService.changeAvatarForUser(event.userId, event.avatarUrl, event.requestContext, event.eventDate)
74   }
75 }
76 
77 object UserImageConsumerBehavior {
78   def apply(userService: UserService): Behavior[KafkaConsumerBehavior.Protocol] =
79     new UserImageConsumerBehavior(userService).createBehavior(name)
80   val name: String = "user-image-consumer"
81 }
Line Stmt Id Pos Tree Symbol Tests Code
35 7770 1323 - 1352 Select org.make.api.user.UserProducerBehavior.topicKey UserProducerBehavior.topicKey
36 6997 1378 - 1391 Literal <nosymbol> "user-images"
39 6200 1457 - 1473 Apply java.util.Properties.<init> new java.util.Properties()
41 5768 1564 - 1616 Apply java.util.Properties.put props.put("max.poll.records", 4)
44 7153 1686 - 1687 Literal <nosymbol> 5
44 6250 1686 - 1695 Select scala.concurrent.duration.DurationConversions.minutes scala.concurrent.duration.`package`.DurationInt(5).minutes
46 7692 1731 - 1758 Select org.make.api.technical.TimeSettings.defaultTimeout org.make.api.technical.TimeSettings.defaultTimeout
49 6902 1862 - 1875 Select org.make.api.userhistory.UserEventWrapper.event message.event
50 6448 1937 - 1953 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
51 7829 2007 - 2023 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
52 7001 2077 - 2093 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
53 6175 2147 - 2163 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
54 5691 2217 - 2233 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
55 7158 2287 - 2303 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
56 6238 2357 - 2373 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
57 7694 2427 - 2443 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
58 6882 2497 - 2513 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
59 6406 2567 - 2583 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
60 7831 2637 - 2653 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
61 6930 2707 - 2723 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
62 6179 2777 - 2793 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
63 5698 2847 - 2863 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
64 7125 2917 - 2933 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
65 6244 2987 - 3021 Apply org.make.api.user.UserImageConsumerBehavior.handleUserUploadAvatarEvent UserImageConsumerBehavior.this.handleUserUploadAvatarEvent(event)
66 7610 3075 - 3091 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
67 6803 3145 - 3161 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
68 6415 3215 - 3231 Apply org.make.api.technical.KafkaConsumerBehavior.doNothing UserImageConsumerBehavior.this.doNothing(event)
73 6073 3392 - 3412 Select org.make.api.userhistory.UserUploadAvatarEvent.requestContext event.requestContext
73 7520 3414 - 3429 Select org.make.api.userhistory.UserUploadAvatarEvent.eventDate event.eventDate
73 7866 3361 - 3373 Select org.make.api.userhistory.UserUploadAvatarEvent.userId event.userId
73 7133 3329 - 3430 Apply org.make.api.user.UserService.changeAvatarForUser UserImageConsumerBehavior.this.userService.changeAvatarForUser(event.userId, event.avatarUrl, event.requestContext, event.eventDate)
73 6932 3375 - 3390 Select org.make.api.userhistory.UserUploadAvatarEvent.avatarUrl event.avatarUrl
79 7611 3559 - 3622 Apply org.make.api.technical.KafkaConsumerBehavior.createBehavior new UserImageConsumerBehavior(userService).createBehavior(UserImageConsumerBehavior.this.name)
79 6343 3617 - 3621 Select org.make.api.user.UserImageConsumerBehavior.name UserImageConsumerBehavior.this.name
80 6900 3644 - 3665 Literal <nosymbol> "user-image-consumer"