{
- e.preventDefault();
- setResult(null);
-
- const form = new FormData(e.currentTarget);
-
- const recipient = String(form.get("recipient") ?? "");
- const subject = String(form.get("subject") ?? "");
- const body = String(form.get("body") ?? "");
-
- try {
- const data = await sendEmailAction({ recipient, subject, body });
- setResult(data);
- } catch (err) {
- const message = err instanceof Error ? err.message : "Unknown error";
- setResult({ error: message });
- }
- }
-
- return (
-
- );
-}
diff --git a/src/main/java/group/goforward/battlbuilder/model/EmailRequest.java b/src/main/java/group/goforward/battlbuilder/model/EmailRequest.java
index bcf96c9..47743f9 100644
--- a/src/main/java/group/goforward/battlbuilder/model/EmailRequest.java
+++ b/src/main/java/group/goforward/battlbuilder/model/EmailRequest.java
@@ -7,19 +7,18 @@ import java.time.LocalDateTime;
@Table(name = "email_requests")
@NamedQuery(
name = "EmailRequest.findSent",
- query = "SELECT e FROM EmailRequest e WHERE e.status = 'SENT'"
+ query = "SELECT e FROM EmailRequest e WHERE e.status = group.goforward.battlbuilder.model.EmailStatus.SENT"
)
@NamedQuery(
name = "EmailRequest.findFailed",
- query = "SELECT e FROM EmailRequest e WHERE e.status = 'FAILED'"
+ query = "SELECT e FROM EmailRequest e WHERE e.status = group.goforward.battlbuilder.model.EmailStatus.FAILED"
)
@NamedQuery(
name = "EmailRequest.findPending",
- query = "SELECT e FROM EmailRequest e WHERE e.status = 'PENDING'"
+ query = "SELECT e FROM EmailRequest e WHERE e.status = group.goforward.battlbuilder.model.EmailStatus.PENDING"
)
-
public class EmailRequest {
@Id
@@ -38,8 +37,9 @@ public class EmailRequest {
@Column(name = "sent_at")
private LocalDateTime sentAt;
+ @Enumerated(EnumType.STRING)
@Column(nullable = false)
- private String status; // PENDING, SENT, FAILED
+ private EmailStatus status; // PENDING, SENT, FAILED
@Column(name = "error_message")
private String errorMessage;
@@ -52,9 +52,10 @@ public class EmailRequest {
createdAt = LocalDateTime.now();
updatedAt = LocalDateTime.now();
if (status == null) {
- status = "PENDING";
+ status = EmailStatus.PENDING;
}
}
+
@Column(name = "updated_at", nullable = false, updatable = false)
private LocalDateTime updatedAt;
@@ -99,11 +100,11 @@ public class EmailRequest {
this.sentAt = sentAt;
}
- public String getStatus() {
+ public EmailStatus getStatus() {
return status;
}
- public void setStatus(String status) {
+ public void setStatus(EmailStatus status) {
this.status = status;
}
diff --git a/src/main/java/group/goforward/battlbuilder/model/EmailStatus.java b/src/main/java/group/goforward/battlbuilder/model/EmailStatus.java
new file mode 100644
index 0000000..6bf1d2b
--- /dev/null
+++ b/src/main/java/group/goforward/battlbuilder/model/EmailStatus.java
@@ -0,0 +1,7 @@
+package group.goforward.battlbuilder.model;
+
+public enum EmailStatus {
+ PENDING,
+ SENT,
+ FAILED
+}
diff --git a/src/main/java/group/goforward/battlbuilder/repos/EmailRequestRepository.java b/src/main/java/group/goforward/battlbuilder/repos/EmailRequestRepository.java
index fe9a7e2..6dbe9ec 100644
--- a/src/main/java/group/goforward/battlbuilder/repos/EmailRequestRepository.java
+++ b/src/main/java/group/goforward/battlbuilder/repos/EmailRequestRepository.java
@@ -1,6 +1,7 @@
package group.goforward.battlbuilder.repos;
import group.goforward.battlbuilder.model.EmailRequest;
+import group.goforward.battlbuilder.model.EmailStatus;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@@ -8,11 +9,8 @@ import java.util.List;
@Repository
public interface EmailRequestRepository extends JpaRepository {
- List findByStatus(String status);
- List findFailed();
+ List findByStatus(EmailStatus status);
+ List findByStatusOrderByCreatedAtDesc(EmailStatus status);
- List findSent();
-
- List findPending();
}
diff --git a/src/main/java/group/goforward/battlbuilder/services/utils/impl/EmailServiceImpl.java b/src/main/java/group/goforward/battlbuilder/services/utils/impl/EmailServiceImpl.java
index cc0477a..488d15d 100644
--- a/src/main/java/group/goforward/battlbuilder/services/utils/impl/EmailServiceImpl.java
+++ b/src/main/java/group/goforward/battlbuilder/services/utils/impl/EmailServiceImpl.java
@@ -1,6 +1,7 @@
package group.goforward.battlbuilder.services.utils.impl;
import group.goforward.battlbuilder.model.EmailRequest;
+import group.goforward.battlbuilder.model.EmailStatus;
import group.goforward.battlbuilder.repos.EmailRequestRepository;
import group.goforward.battlbuilder.services.utils.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,12 +34,11 @@ public class EmailServiceImpl implements EmailService {
emailRequest.setRecipient(recipient);
emailRequest.setSubject(subject);
emailRequest.setBody(body);
- emailRequest.setStatus("PENDING");
+ emailRequest.setStatus(EmailStatus.PENDING);
emailRequest = emailRequestRepository.save(emailRequest);
try {
- // Send email as HTML
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(
message,
@@ -49,19 +49,15 @@ public class EmailServiceImpl implements EmailService {
helper.setFrom(fromEmail);
helper.setTo(recipient);
helper.setSubject(subject);
-
- // IMPORTANT: second argument 'true' means "this is HTML"
helper.setText(body, true);
mailSender.send(message);
- // Update status
- emailRequest.setStatus("SENT");
+ emailRequest.setStatus(EmailStatus.SENT);
emailRequest.setSentAt(LocalDateTime.now());
} catch (Exception e) {
- // Update status with error
- emailRequest.setStatus("FAILED");
+ emailRequest.setStatus(EmailStatus.FAILED);
emailRequest.setErrorMessage(e.getMessage());
}
@@ -70,6 +66,6 @@ public class EmailServiceImpl implements EmailService {
@Override
public void deleteById(Integer id) {
- emailRequestRepository.deleteById(Long.valueOf(id));
+ emailRequestRepository.deleteById(id.longValue());
}
}
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 75cbb60..666aec2 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -37,11 +37,10 @@ spring.mail.properties.mail.smtp.starttls.required=true
spring.datasource.hikari.max-lifetime=600000
-
-minio.endpoint=https://minio.dev.gofwd.group
-minio.access-key=
-minio.secret-key=
-minio.bucket=battlbuilds
+minio.endpoint=https://minioapi.dev.gofwd.group
+minio.access-key=dstrawsb
+minio.secret-key=Cul8rman2025
+minio.bucket=battlbuilders
# Public base URL used to write back into products.main_image_url
minio.public-base-url=https://minio.dev.gofwd.group