Skip to content

Commit 1409c81

Browse files
committed
Misc changes
1 parent 4e19aef commit 1409c81

File tree

21 files changed

+169
-187
lines changed

21 files changed

+169
-187
lines changed

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/config/DbConfig.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@
1616

1717
package org.radarbase.appserver.jersey.config
1818

19+
import org.radarbase.appserver.jersey.entity.DataMessage
20+
import org.radarbase.appserver.jersey.entity.DataMessageStateEvent
21+
import org.radarbase.appserver.jersey.entity.Notification
22+
import org.radarbase.appserver.jersey.entity.NotificationStateEvent
1923
import org.radarbase.appserver.jersey.entity.Project
24+
import org.radarbase.appserver.jersey.entity.Task
25+
import org.radarbase.appserver.jersey.entity.TaskStateEvent
2026
import org.radarbase.appserver.jersey.entity.User
2127
import org.radarbase.appserver.jersey.entity.UserMetrics
2228
import org.radarbase.appserver.jersey.utils.checkInvalidDetails
@@ -26,6 +32,12 @@ data class DbConfig(
2632
Project::class.qualifiedName!!,
2733
User::class.qualifiedName!!,
2834
UserMetrics::class.qualifiedName!!,
35+
Task::class.qualifiedName!!,
36+
Notification::class.qualifiedName!!,
37+
DataMessage::class.qualifiedName!!,
38+
TaskStateEvent::class.qualifiedName!!,
39+
NotificationStateEvent::class.qualifiedName!!,
40+
DataMessageStateEvent::class.qualifiedName!!,
2941
),
3042
val jdbcDriver: String? = null,
3143
val jdbcUrl: String? = null,

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/dto/fcm/FcmDataMessageDto.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ class FcmDataMessageDto(dataMessageEntity: DataMessage? = null) {
6666
pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
6767
timezone = "UTC"
6868
)
69-
var createdAt: Instant? = dataMessageEntity?.createdAt
69+
var createdAt: Instant? = dataMessageEntity?.createdAt?.toInstant()
7070

7171
@field:JsonFormat(
7272
shape = JsonFormat.Shape.STRING,
7373
pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
7474
timezone = "UTC"
7575
)
76-
var updatedAt: Instant? = dataMessageEntity?.updatedAt
76+
var updatedAt: Instant? = dataMessageEntity?.updatedAt?.toInstant()
7777

7878
fun withCreatedAt(createdAt: Instant?): FcmDataMessageDto = apply {
7979
this.createdAt = createdAt

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/dto/fcm/FcmNotificationDto.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,14 @@ class FcmNotificationDto(notificationEntity: Notification? = null) {
112112
pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
113113
timezone = "UTC"
114114
)
115-
var createdAt: Instant? = notificationEntity?.createdAt
115+
var createdAt: Instant? = notificationEntity?.createdAt?.toInstant()
116116

117117
@field:JsonFormat(
118118
shape = JsonFormat.Shape.STRING,
119119
pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
120120
timezone = "UTC"
121121
)
122-
var updatedAt: Instant? = notificationEntity?.updatedAt
122+
var updatedAt: Instant? = notificationEntity?.updatedAt?.toInstant()
123123

124124
fun withCreatedAt(createdAt: Instant?): FcmNotificationDto = apply {
125125
this.createdAt = createdAt

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/dto/fcm/FcmUserDto.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ data class FcmUserDto(
9797
email = user.emailAddress,
9898
lastOpened = user.usermetrics?.lastOpened,
9999
lastDelivered = user.usermetrics?.lastDelivered,
100-
createdAt = user.createdAt,
101-
updatedAt = user.updatedAt,
100+
createdAt = user.createdAt?.toInstant(),
101+
updatedAt = user.updatedAt?.toInstant(),
102102
enrolmentDate = user.enrolmentDate,
103103
timezone = user.timezone,
104104
fcmToken = user.fcmToken,

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/enhancer/AppserverResourceEnhancer.kt

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -125,28 +125,28 @@ class AppserverResourceEnhancer(private val config: AppserverConfig) : JerseyRes
125125
.to(UserRepository::class.java)
126126
.`in`(Singleton::class.java)
127127

128-
bind(DataMessageRepository::class.java)
129-
.to(DataMessageRepositoryImpl::class.java)
128+
bind(DataMessageRepositoryImpl::class.java)
129+
.to(DataMessageRepository::class.java)
130130
.`in`(Singleton::class.java)
131131

132-
bind(NotificationRepository::class.java)
133-
.to(NotificationRepositoryImpl::class.java)
132+
bind(NotificationRepositoryImpl::class.java)
133+
.to(NotificationRepository::class.java)
134134
.`in`(Singleton::class.java)
135135

136-
bind(TaskRepository::class.java)
137-
.to(TaskRepositoryImpl::class.java)
136+
bind(TaskRepositoryImpl::class.java)
137+
.to(TaskRepository::class.java)
138138
.`in`(Singleton::class.java)
139139

140-
bind(DataMessageStateEventRepository::class.java)
141-
.to(DataMessageStateEventRepositoryImpl::class.java)
140+
bind(DataMessageStateEventRepositoryImpl::class.java)
141+
.to(DataMessageStateEventRepository::class.java)
142142
.`in`(Singleton::class.java)
143143

144-
bind(NotificationStateEventRepository::class.java)
145-
.to(NotificationStateEventRepositoryImpl::class.java)
144+
bind(NotificationStateEventRepositoryImpl::class.java)
145+
.to(NotificationStateEventRepository::class.java)
146146
.`in`(Singleton::class.java)
147147

148-
bind(TaskStateEventRepository::class.java)
149-
.to(TaskStateEventRepositoryImpl::class.java)
148+
bind(TaskStateEventRepositoryImpl::class.java)
149+
.to(TaskStateEventRepository::class.java)
150150
.`in`(Singleton::class.java)
151151

152152
bind(TaskStateEventService::class.java)
@@ -230,15 +230,15 @@ class AppserverResourceEnhancer(private val config: AppserverConfig) : JerseyRes
230230
.`in`(Singleton::class.java)
231231

232232
bind(MessageSchedulerService::class.java)
233-
.to(MessageSchedulerService::class.java)
233+
.to(object : TypeLiteral<MessageSchedulerService<Notification>>() {}.type)
234234
.`in`(Singleton::class.java)
235235

236-
bind(SimpleQuartzNamingStrategy::class.java)
237-
.to(QuartzNamingStrategy::class.java)
236+
bind(MessageSchedulerService::class.java)
237+
.to(object : TypeLiteral<MessageSchedulerService<DataMessage>>() {}.type)
238238
.`in`(Singleton::class.java)
239239

240-
bind(SchedulerServiceImpl::class.java)
241-
.to(SchedulingService::class.java)
240+
bind(SimpleQuartzNamingStrategy::class.java)
241+
.to(QuartzNamingStrategy::class.java)
242242
.`in`(Singleton::class.java)
243243

244244
bind(FcmTransmitter::class.java)

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/entity/DataMessage.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ class DataMessage : Message() {
5454
@Nullable
5555
@ElementCollection(fetch = FetchType.EAGER)
5656
@CollectionTable(name = "data_message_map")
57-
@MapKeyColumn(name = "key", nullable = true)
58-
@Column(name = "value")
57+
@MapKeyColumn(name = "data_message_key", nullable = true)
58+
@Column(name = "data_message_value")
5959
var dataMap: MutableMap<String?, String?>? = null
6060

6161
class DataMessageBuilder(dataMessage: DataMessage? = null) {

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/event/listener/quartz/QuartzMessageSchedulerListener.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.radarbase.appserver.jersey.event.listener.quartz
1818

1919
import com.google.common.eventbus.EventBus
20+
import jakarta.inject.Inject
2021
import kotlinx.coroutines.runBlocking
2122
import org.quartz.JobDetail
2223
import org.quartz.JobKey
@@ -37,7 +38,7 @@ import org.slf4j.Logger
3738
import org.slf4j.LoggerFactory
3839
import java.time.Instant
3940

40-
class QuartzMessageSchedulerListener(
41+
class QuartzMessageSchedulerListener @Inject constructor(
4142
private val messageStateEventPublisher: EventBus,
4243
private val notificationRepository: NotificationRepository,
4344
private val dataMessageRepository: DataMessageRepository,

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/mapper/ProjectMapper.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class ProjectMapper : Mapper<ProjectDto, Project> {
3434
override suspend fun entityToDto(entity: Project): ProjectDto = ProjectDto(
3535
id = entity.id,
3636
projectId = entity.projectId,
37-
createdAt = entity.createdAt,
38-
updatedAt = entity.updatedAt
37+
createdAt = entity.createdAt?.toInstant(),
38+
updatedAt = entity.updatedAt?.toInstant(),
3939
)
4040
}

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/resource/ProjectResource.kt

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import org.radarbase.appserver.jersey.config.AppserverConfig
3838
import org.radarbase.appserver.jersey.dto.ProjectDto
3939
import org.radarbase.appserver.jersey.dto.ProjectDtos
4040
import org.radarbase.appserver.jersey.service.ProjectService
41+
import org.radarbase.appserver.jersey.service.github.protocol.ProtocolGenerator
4142
import org.radarbase.appserver.jersey.utils.Paths.PROJECTS_PATH
4243
import org.radarbase.appserver.jersey.utils.Paths.PROJECT_ID
4344
import org.radarbase.appserver.jersey.utils.tokenForCurrentRequest
@@ -55,14 +56,14 @@ import kotlin.time.Duration.Companion.seconds
5556
@Suppress("UnresolvedRestParam")
5657
@Path("/")
5758
class ProjectResource @Inject constructor(
59+
private val protocolGenerator: ProtocolGenerator,
5860
private val projectService: ProjectService,
5961
private val asyncService: AsyncCoroutineService,
6062
private val authService: AuthService,
6163
private val tokenProvider: Provider<RadarToken>,
6264
config: AppserverConfig,
6365
) {
6466
private val requestTimeout: Duration = config.server.requestTimeout.seconds
65-
private val mpSecurityEnabled: Boolean = config.mp.security.enabled
6667

6768
@POST
6869
@Path(PROJECTS_PATH)
@@ -75,30 +76,21 @@ class ProjectResource @Inject constructor(
7576
@Suspended asyncResponse: AsyncResponse,
7677
) {
7778
asyncService.runAsCoroutine(asyncResponse, requestTimeout) {
78-
if (mpSecurityEnabled) {
79-
val token = tokenForCurrentRequest(asyncService, tokenProvider)
80-
authService.checkPermission(
81-
Permission.SUBJECT_READ,
82-
EntityDetails(project = projectDto.projectId, subject = token.subject),
83-
token,
84-
)
85-
projectService.addProject(projectDto).let {
86-
Response
87-
.created(URI("/projects/project?id=${projectDto.id}"))
88-
.entity(it)
89-
.build()
90-
}
91-
} else {
92-
projectService.addProject(projectDto).let {
93-
Response
94-
.created(URI("/projects/project?id=${projectDto.id}"))
95-
.entity(it)
96-
.build()
97-
}
79+
val token = tokenForCurrentRequest(asyncService, tokenProvider)
80+
authService.checkPermission(
81+
Permission.SUBJECT_READ,
82+
EntityDetails(project = projectDto.projectId, subject = token.subject),
83+
token,
84+
)
85+
projectService.addProject(projectDto).let {
86+
Response
87+
.created(URI("/projects/project?id=${projectDto.id}"))
88+
.entity(it)
89+
.build()
9890
}
9991
}
10092
}
101-
93+
10294
@PUT
10395
@Path("$PROJECTS_PATH/$PROJECT_ID")
10496
@Consumes(APPLICATION_JSON)

appserver-jersey/src/main/kotlin/org/radarbase/appserver/jersey/resource/UserResource.kt

Lines changed: 44 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ class UserResource @Inject constructor(
4949
config: AppserverConfig,
5050
) {
5151
private val requestTimeout: Duration = config.server.requestTimeout.seconds
52-
private val mpSecurityEnabled: Boolean = config.mp.security.enabled
5352

5453
@POST
5554
@Path("$PROJECTS_PATH/$PROJECT_ID/$USERS_PATH")
@@ -59,27 +58,20 @@ class UserResource @Inject constructor(
5958
@NeedsPermission(Permission.SUBJECT_UPDATE)
6059
fun addUserToProject(
6160
@Valid fcmUserDto: FcmUserDto,
62-
@Valid projectId: String,
61+
@Valid @PathParam("projectId") projectId: String,
6362
@QueryParam("forceFcmToken") @DefaultValue("false") forceFcmToken: Boolean,
6463
@Suspended asyncResponse: AsyncResponse,
6564
) {
6665
asyncService.runAsCoroutine(asyncResponse, requestTimeout) {
67-
if (mpSecurityEnabled) {
68-
val token = tokenForCurrentRequest(asyncService, tokenProvider)
69-
authService.checkPermission(
70-
Permission.SUBJECT_UPDATE,
71-
EntityDetails(project = projectId, subject = token.subject),
72-
token,
73-
)
74-
if (forceFcmToken) userService.checkFcmTokenExistsAndReplace(fcmUserDto)
75-
userService.saveUserInProject(fcmUserDto).let {
76-
Response.created(URI("/projects/$projectId/users/?id=${it.id}")).entity(it).build()
77-
}
78-
} else {
79-
if (forceFcmToken) userService.checkFcmTokenExistsAndReplace(fcmUserDto)
80-
userService.saveUserInProject(fcmUserDto).let {
81-
Response.created(URI("/projects/$projectId/users/?id=${it.id}")).entity(it).build()
82-
}
66+
val token = tokenForCurrentRequest(asyncService, tokenProvider)
67+
authService.checkPermission(
68+
Permission.SUBJECT_UPDATE,
69+
EntityDetails(project = projectId, subject = token.subject),
70+
token,
71+
)
72+
if (forceFcmToken) userService.checkFcmTokenExistsAndReplace(fcmUserDto)
73+
userService.saveUserInProject(fcmUserDto).let {
74+
Response.created(URI("/projects/$projectId/users/?id=${it.id}")).entity(it).build()
8375
}
8476
}
8577
}
@@ -92,9 +84,9 @@ class UserResource @Inject constructor(
9284
@NeedsPermission(Permission.SUBJECT_UPDATE, projectPathParam = "projectId", userPathParam = "subjectId")
9385
fun updateUserInProject(
9486
@Valid userDto: FcmUserDto,
95-
@Valid projectId: String,
96-
@Valid subjectId: String,
97-
@QueryParam("forceFcmToken") forceFcmToken: Boolean = false,
87+
@Valid @PathParam("projectId") projectId: String,
88+
@Valid @PathParam("subjectId") subjectId: String,
89+
@QueryParam("forceFcmToken") @DefaultValue("false") forceFcmToken: Boolean,
9890
@Suspended asyncResponse: AsyncResponse,
9991
) {
10092
asyncService.runAsCoroutine(asyncResponse, requestTimeout) {
@@ -118,27 +110,23 @@ class UserResource @Inject constructor(
118110
@Suspended asyncResponse: AsyncResponse,
119111
) {
120112
asyncService.runAsCoroutine(asyncResponse, requestTimeout) {
121-
val users = userService.getAllRadarUsers()
122-
if (mpSecurityEnabled) {
123-
users
124-
.users
125-
.asFlow()
126-
.filter {
127-
authService.hasPermission(
128-
Permission.SUBJECT_READ,
129-
EntityDetails(project = it.projectId, subject = it.subjectId),
130-
tokenForCurrentRequest(asyncService, tokenProvider),
131-
)
132-
}
133-
.toList()
134-
.toMutableList().let {
135-
FcmUsers(it)
136-
}.let {
137-
Response.ok(it).build()
138-
}
139-
} else {
140-
Response.ok(users).build()
141-
}
113+
userService.getAllRadarUsers()
114+
.users
115+
.asFlow()
116+
.filter {
117+
authService.hasPermission(
118+
Permission.SUBJECT_READ,
119+
EntityDetails(project = it.projectId, subject = it.subjectId),
120+
tokenForCurrentRequest(asyncService, tokenProvider),
121+
)
122+
}
123+
.toList()
124+
.toMutableList().let {
125+
FcmUsers(it)
126+
}.let {
127+
Response.ok(it).build()
128+
}
129+
142130
}
143131
}
144132

@@ -175,16 +163,13 @@ class UserResource @Inject constructor(
175163
suspend fun fcmUserDtoAsResponseIfAuthorized(
176164
fcmUserDto: FcmUserDto,
177165
): Response {
178-
return if (mpSecurityEnabled) {
179-
authService.checkPermission(
180-
Permission.SUBJECT_READ,
181-
EntityDetails(project = fcmUserDto.projectId, subject = fcmUserDto.subjectId),
182-
tokenForCurrentRequest(asyncService, tokenProvider)
183-
)
184-
Response.ok(fcmUserDto).build()
185-
} else {
186-
Response.ok(fcmUserDto).build()
187-
}
166+
authService.checkPermission(
167+
Permission.SUBJECT_READ,
168+
EntityDetails(project = fcmUserDto.projectId, subject = fcmUserDto.subjectId),
169+
tokenForCurrentRequest(asyncService, tokenProvider),
170+
)
171+
172+
return Response.ok(fcmUserDto).build()
188173
}
189174

190175
@GET
@@ -198,17 +183,13 @@ class UserResource @Inject constructor(
198183
) {
199184
asyncService.runAsCoroutine(asyncResponse, requestTimeout) {
200185
val users = userService.getUsersByProjectId(projectId)
201-
if (mpSecurityEnabled) {
202-
val token = tokenForCurrentRequest(asyncService, tokenProvider)
203-
authService.checkPermission(
204-
Permission.SUBJECT_READ,
205-
EntityDetails(project = projectId, subject = token.subject),
206-
token,
207-
)
208-
Response.ok(users).build()
209-
} else {
210-
Response.ok(users).build()
211-
}
186+
val token = tokenForCurrentRequest(asyncService, tokenProvider)
187+
authService.checkPermission(
188+
Permission.SUBJECT_READ,
189+
EntityDetails(project = projectId, subject = token.subject),
190+
token,
191+
)
192+
Response.ok(users).build()
212193
}
213194
}
214195

0 commit comments

Comments
 (0)