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.userhistory
21 
22 import com.sksamuel.avro4s.{AvroDefault, AvroSortPriority}
23 import org.make.api.user.Anonymization
24 import org.make.core._
25 import org.make.core.question.QuestionId
26 import org.make.core.reference.Country
27 import org.make.core.user.{User, UserId}
28 
29 import java.time.ZonedDateTime
30 
31 trait UserPersistentEvent {
32   def userId: UserId
33 }
34 
35 sealed trait UserEvent extends UserPersistentEvent {
36   def connectedUserId: Option[UserId]
37   def eventDate: ZonedDateTime
38   def requestContext: RequestContext
39   def country: Country
40   def version(): Int
41   def eventId: Option[EventId]
42 }
43 
44 object UserEvent {
45 
46   val defaultCountry: Country = Country("FR")
47 
48   val defaultDate: ZonedDateTime = ZonedDateTime.parse("2017-11-01T09:00:00Z")
49 }
50 
51 @AvroSortPriority(19)
52 final case class VoteOnlyTestEvent(
53   override val connectedUserId: Option[UserId] = None,
54   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
55   override val userId: UserId,
56   override val requestContext: RequestContext,
57   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
58   eventId: Option[EventId] = None
59 ) extends UserEvent {
60   override def version(): Int = MakeSerializable.V1
61 }
62 
63 @AvroSortPriority(18)
64 final case class VoteOnlyEvent(
65   override val connectedUserId: Option[UserId] = None,
66   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
67   override val userId: UserId,
68   override val requestContext: RequestContext,
69   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
70   eventId: Option[EventId] = None
71 ) extends UserEvent {
72   override def version(): Int = MakeSerializable.V1
73 }
74 
75 @AvroSortPriority(17)
76 final case class PersonalityRegisteredEvent(
77   override val connectedUserId: Option[UserId] = None,
78   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
79   override val userId: UserId,
80   override val requestContext: RequestContext,
81   email: String,
82   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
83   eventId: Option[EventId] = None
84 ) extends UserEvent {
85   override def version(): Int = MakeSerializable.V1
86 }
87 
88 @AvroSortPriority(16)
89 final case class PersonalityEmailChangedEvent(
90   override val connectedUserId: Option[UserId] = None,
91   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
92   override val userId: UserId,
93   override val requestContext: RequestContext,
94   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
95   oldEmail: String,
96   newEmail: String,
97   eventId: Option[EventId] = None
98 ) extends UserEvent {
99   override def version(): Int = MakeSerializable.V1
100 }
101 
102 @AvroSortPriority(15)
103 final case class ResetPasswordEvent(
104   override val connectedUserId: Option[UserId] = None,
105   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
106   override val userId: UserId,
107   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
108   override val requestContext: RequestContext,
109   eventId: Option[EventId] = None
110 ) extends UserEvent {
111   override def version(): Int = MakeSerializable.V1
112 }
113 
114 object ResetPasswordEvent {
115   def apply(
116     connectedUserId: Option[UserId],
117     user: User,
118     country: Country,
119     requestContext: RequestContext,
120     eventId: EventId
121   ): ResetPasswordEvent = {
122     ResetPasswordEvent(
123       userId = user.userId,
124       connectedUserId = connectedUserId,
125       country = country,
126       requestContext = requestContext,
127       eventDate = DateHelper.now(),
128       eventId = Some(eventId)
129     )
130   }
131 }
132 
133 @AvroSortPriority(14)
134 final case class ResendValidationEmailEvent(
135   override val connectedUserId: Option[UserId] = None,
136   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
137   override val userId: UserId,
138   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
139   override val requestContext: RequestContext,
140   eventId: Option[EventId] = None
141 ) extends UserEvent {
142   override def version(): Int = MakeSerializable.V1
143 }
144 
145 object ResendValidationEmailEvent {
146   def apply(
147     connectedUserId: UserId,
148     userId: UserId,
149     country: Country,
150     requestContext: RequestContext,
151     eventId: EventId
152   ): ResendValidationEmailEvent = {
153     ResendValidationEmailEvent(
154       connectedUserId = Some(connectedUserId),
155       eventDate = DateHelper.now(),
156       userId = userId,
157       country = country,
158       requestContext = requestContext,
159       eventId = Some(eventId)
160     )
161   }
162 }
163 
164 @AvroSortPriority(13)
165 final case class UserRegisteredEvent(
166   override val connectedUserId: Option[UserId] = None,
167   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
168   override val userId: UserId,
169   override val requestContext: RequestContext,
170   firstName: Option[String],
171   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
172   isSocialLogin: Boolean = false,
173   registerQuestionId: Option[QuestionId] = None,
174   optInPartner: Option[Boolean] = None,
175   eventId: Option[EventId] = None
176 ) extends UserEvent {
177   override def version(): Int = MakeSerializable.V4
178 }
179 
180 @AvroSortPriority(12)
181 final case class UserConnectedEvent(
182   override val connectedUserId: Option[UserId] = None,
183   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
184   override val userId: UserId,
185   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
186   override val requestContext: RequestContext,
187   eventId: Option[EventId] = None
188 ) extends UserEvent {
189 
190   override def version(): Int = MakeSerializable.V1
191 }
192 
193 @AvroSortPriority(10)
194 final case class UserValidatedAccountEvent(
195   override val connectedUserId: Option[UserId] = None,
196   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
197   override val userId: UserId = UserId(value = ""),
198   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
199   override val requestContext: RequestContext = RequestContext.empty,
200   isSocialLogin: Boolean = false,
201   eventId: Option[EventId] = None
202 ) extends UserEvent {
203   override def version(): Int = MakeSerializable.V1
204 }
205 
206 @AvroSortPriority(11)
207 final case class UserUpdatedTagEvent(
208   override val connectedUserId: Option[UserId] = None,
209   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
210   override val userId: UserId = UserId(value = ""),
211   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
212   override val requestContext: RequestContext = RequestContext.empty,
213   oldTag: String,
214   newTag: String,
215   eventId: Option[EventId] = None
216 ) extends UserEvent {
217   override def version(): Int = MakeSerializable.V1
218 }
219 
220 @AvroSortPriority(9)
221 final case class OrganisationRegisteredEvent(
222   override val connectedUserId: Option[UserId] = None,
223   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
224   override val userId: UserId,
225   override val requestContext: RequestContext,
226   email: String,
227   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
228   eventId: Option[EventId] = None
229 ) extends UserEvent {
230   override def version(): Int = MakeSerializable.V1
231 }
232 
233 @AvroSortPriority(8)
234 final case class OrganisationUpdatedEvent(
235   override val connectedUserId: Option[UserId] = None,
236   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
237   override val userId: UserId,
238   override val requestContext: RequestContext,
239   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
240   eventId: Option[EventId] = None
241 ) extends UserEvent {
242   override def version(): Int = MakeSerializable.V1
243 }
244 
245 @AvroSortPriority(7)
246 final case class OrganisationInitializationEvent(
247   override val connectedUserId: Option[UserId] = None,
248   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
249   override val userId: UserId,
250   override val requestContext: RequestContext,
251   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
252   eventId: Option[EventId] = None
253 ) extends UserEvent {
254   override def version(): Int = MakeSerializable.V1
255 }
256 
257 @AvroSortPriority(6)
258 final case class UserUpdatedOptInNewsletterEvent(
259   override val connectedUserId: Option[UserId] = None,
260   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
261   override val userId: UserId,
262   override val requestContext: RequestContext,
263   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
264   optInNewsletter: Boolean,
265   eventId: Option[EventId] = None
266 ) extends UserEvent {
267   override def version(): Int = MakeSerializable.V1
268 }
269 
270 @AvroSortPriority(5)
271 final case class UserAnonymizedEvent(
272   override val connectedUserId: Option[UserId] = None,
273   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
274   override val userId: UserId,
275   override val requestContext: RequestContext,
276   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
277   adminId: UserId,
278   @AvroDefault("automatic") mode: Anonymization = Anonymization.Automatic,
279   eventId: Option[EventId] = None
280 ) extends UserEvent {
281   override def version(): Int = MakeSerializable.V2
282 }
283 
284 @AvroSortPriority(4)
285 final case class UserFollowEvent(
286   override val connectedUserId: Option[UserId] = None,
287   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
288   override val userId: UserId,
289   override val requestContext: RequestContext,
290   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
291   followedUserId: UserId,
292   eventId: Option[EventId] = None
293 ) extends UserEvent {
294   override def version(): Int = MakeSerializable.V1
295 }
296 
297 @AvroSortPriority(3)
298 final case class UserUnfollowEvent(
299   override val connectedUserId: Option[UserId] = None,
300   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
301   override val userId: UserId,
302   override val requestContext: RequestContext,
303   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
304   unfollowedUserId: UserId,
305   eventId: Option[EventId] = None
306 ) extends UserEvent {
307   override def version(): Int = MakeSerializable.V1
308 }
309 
310 @AvroSortPriority(2)
311 final case class UserUploadAvatarEvent(
312   override val connectedUserId: Option[UserId] = None,
313   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
314   override val userId: UserId,
315   override val requestContext: RequestContext,
316   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
317   avatarUrl: String,
318   eventId: Option[EventId] = None
319 ) extends UserEvent {
320   override def version(): Int = MakeSerializable.V1
321 }
322 
323 @AvroSortPriority(1)
324 final case class OrganisationEmailChangedEvent(
325   override val connectedUserId: Option[UserId] = None,
326   @AvroDefault("2017-11-01T09:00Z") override val eventDate: ZonedDateTime = UserEvent.defaultDate,
327   override val userId: UserId,
328   override val requestContext: RequestContext,
329   @AvroDefault("FR") override val country: Country = UserEvent.defaultCountry,
330   oldEmail: String,
331   newEmail: String,
332   eventId: Option[EventId] = None
333 ) extends UserEvent {
334   override def version(): Int = MakeSerializable.V1
335 }
Line Stmt Id Pos Tree Symbol Tests Code
46 13593 1395 - 1408 Apply org.make.core.reference.Country.apply org.make.api.avro.avrocompatibilitytest,org.make.api.makekafkatest org.make.core.reference.Country.apply("FR")
48 9517 1445 - 1488 Apply java.time.ZonedDateTime.parse org.make.api.avro.avrocompatibilitytest,org.make.api.makekafkatest java.time.ZonedDateTime.parse("2017-11-01T09:00:00Z")
60 15623 1949 - 1968 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
72 13734 2425 - 2444 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
85 10612 2931 - 2950 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
99 16106 3462 - 3481 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
111 12840 3943 - 3962 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
122 9850 4171 - 4395 Apply org.make.api.userhistory.ResetPasswordEvent.apply org.scalatest.testsuite ResetPasswordEvent.apply(x$2, x$5, x$1, x$3, x$4, x$6)
123 9047 4206 - 4217 Select org.make.core.user.User.userId org.scalatest.testsuite user.userId
127 17077 4342 - 4358 Apply org.make.core.DefaultDateHelper.now org.scalatest.testsuite org.make.core.DateHelper.now()
128 13612 4376 - 4389 Apply scala.Some.apply org.scalatest.testsuite scala.Some.apply[org.make.core.EventId](eventId)
142 15844 4869 - 4888 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
153 12857 5109 - 5342 Apply org.make.api.userhistory.ResendValidationEmailEvent.apply ResendValidationEmailEvent.apply(scala.Some.apply[org.make.core.user.UserId](connectedUserId), org.make.core.DateHelper.now(), userId, country, requestContext, scala.Some.apply[org.make.core.EventId](eventId))
154 12072 5161 - 5182 Apply scala.Some.apply scala.Some.apply[org.make.core.user.UserId](connectedUserId)
155 10629 5202 - 5218 Apply org.make.core.DefaultDateHelper.now org.make.core.DateHelper.now()
159 16572 5323 - 5336 Apply scala.Some.apply scala.Some.apply[org.make.core.EventId](eventId)
177 9287 5961 - 5980 Select org.make.core.MakeSerializable.V4 org.make.core.MakeSerializable.V4
190 17091 6443 - 6462 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
203 13626 7009 - 7028 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
217 9756 7571 - 7590 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
230 15861 8077 - 8096 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
242 12024 8563 - 8582 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
254 10535 9056 - 9075 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
267 16348 9577 - 9596 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
281 12748 10152 - 10171 Select org.make.core.MakeSerializable.V2 org.make.core.MakeSerializable.V2
294 9304 10655 - 10674 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
307 16822 11162 - 11181 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
320 13518 11666 - 11685 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1
334 9767 12197 - 12216 Select org.make.core.MakeSerializable.V1 org.make.core.MakeSerializable.V1