Skip to content

Commit d54b5b1

Browse files
committed
endpoint for invitation email
1 parent 45cb540 commit d54b5b1

File tree

4 files changed

+35
-7
lines changed

4 files changed

+35
-7
lines changed

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
public interface EmailCommunicationService {
44
boolean sendPasswordResetEmail(String to, String token, String message);
5-
boolean sendInviteEmail(String[] to, String token, String message);
5+
boolean sendInvitationEmails(String[] to, String inviteLink, String message);
66
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationServiceImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public boolean sendPasswordResetEmail(String to, String token, String message) {
5050
}
5151

5252
@Override
53-
public boolean sendInviteEmail(String[] to, String inviteLink, String message) {
53+
public boolean sendInvitationEmails(String[] to, String inviteLink, String message) {
5454
try {
5555
String subject = "You've been invited!";
5656
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
@@ -62,7 +62,7 @@ public boolean sendInviteEmail(String[] to, String inviteLink, String message) {
6262
mimeMessageHelper.setSubject(subject);
6363

6464
// Construct the message with the invite link
65-
String formattedMessage = String.format(message, String.join(", ", to), inviteLink);
65+
String formattedMessage = String.format(message, inviteLink);
6666
mimeMessageHelper.setText(formattedMessage, true); // Set HTML to true to allow links
6767

6868
javaMailSender.send(mimeMessage);

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lowcoder.api.authentication;
22

3-
import lombok.RequiredArgsConstructor;
3+
import java.util.List;
4+
45
import org.lowcoder.api.authentication.dto.APIKeyRequest;
56
import org.lowcoder.api.authentication.dto.AuthConfigRequest;
67
import org.lowcoder.api.authentication.service.AuthenticationApiService;
@@ -12,6 +13,7 @@
1213
import org.lowcoder.api.util.BusinessEventPublisher;
1314
import org.lowcoder.domain.authentication.FindAuthConfig;
1415
import org.lowcoder.domain.user.model.APIKey;
16+
import org.lowcoder.domain.user.service.EmailCommunicationService;
1517
import org.lowcoder.domain.user.service.UserService;
1618
import org.lowcoder.sdk.auth.AbstractAuthConfig;
1719
import org.lowcoder.sdk.util.CookieHelper;
@@ -20,9 +22,9 @@
2022
import org.springframework.web.bind.annotation.RequestParam;
2123
import org.springframework.web.bind.annotation.RestController;
2224
import org.springframework.web.server.ServerWebExchange;
23-
import reactor.core.publisher.Mono;
2425

25-
import java.util.List;
26+
import lombok.RequiredArgsConstructor;
27+
import reactor.core.publisher.Mono;
2628

2729
@RequiredArgsConstructor
2830
@RestController
@@ -34,6 +36,7 @@ public class AuthenticationController implements AuthenticationEndpoints
3436
private final CookieHelper cookieHelper;
3537
private final BusinessEventPublisher businessEventPublisher;
3638
private final UserService userService;
39+
private final EmailCommunicationService emailCommunicationService;
3740

3841
/**
3942
* login by email or phone with password; or register by email for now.
@@ -134,4 +137,13 @@ public Mono<ResponseView<?>> bindEmail(@RequestParam String email) {
134137
return sessionUserService.getVisitor().flatMap(user -> userService.bindEmail(user, email))
135138
.map(ResponseView::success);
136139
}
140+
141+
@Override
142+
public Mono<ResponseView<Boolean>> sendInvitationEmails(InviteEmailRequest req) {
143+
boolean isSuccess = emailCommunicationService.sendInvitationEmails(req.emails(),
144+
req.inviteLink(),
145+
"You have been invited to join our platform. Click here to accept the invitation: %s");
146+
147+
return Mono.just(ResponseView.success(isSuccess));
148+
}
137149
}

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,15 @@ public Mono<ResponseView<Boolean>> linkAccountWithThirdParty(
151151
)
152152
@PostMapping("/email/bind")
153153
public Mono<ResponseView<?>> bindEmail(@RequestParam String email);
154+
155+
@Operation(
156+
tags = TAG_AUTHENTICATION,
157+
operationId = "sendInvitationEmails",
158+
summary = "Send invitation emails",
159+
description = "Send invitation emails to the specified addresses"
160+
)
161+
@PostMapping("/email/invite")
162+
public Mono<ResponseView<Boolean>> sendInvitationEmails(@RequestBody InviteEmailRequest req);
154163

155164
/**
156165
* @param loginId phone number or email for now.
@@ -159,4 +168,11 @@ public Mono<ResponseView<Boolean>> linkAccountWithThirdParty(
159168
*/
160169
public record FormLoginRequest(String loginId, String password, boolean register, String source, String authId) {
161170
}
162-
}
171+
/**
172+
* @param emails email addresses to send the invitation to
173+
* @param inviteLink the link to be included in the email
174+
*/
175+
public record InviteEmailRequest(String[] emails, String inviteLink) {
176+
}
177+
}
178+

0 commit comments

Comments
 (0)