diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 261755a..57a31f1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,10 @@ - @@ -734,7 +746,8 @@ - diff --git a/src/main/java/com/alttd/forms/controlers/event_apply/EventAppController.java b/src/main/java/com/alttd/forms/controlers/event_apply/EventAppController.java new file mode 100644 index 0000000..0ba5678 --- /dev/null +++ b/src/main/java/com/alttd/forms/controlers/event_apply/EventAppController.java @@ -0,0 +1,26 @@ +package com.alttd.forms.controlers.event_apply; + +import com.alttd.forms.controlers.FormRequestHandler; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.concurrent.CompletableFuture; + +@RestController +@RequestMapping("/api/event-apply") +public class EventAppController { + + private static final Logger logger = LoggerFactory.getLogger(EventAppController.class); + + @PostMapping("/eventApplication") + public CompletableFuture> submitForm(@Valid @RequestBody EventAppFormData formData, HttpServletRequest request) { + logger.debug("submitForm"); + logger.trace(formData.toString()); + + return FormRequestHandler.handleRequestWithVerifyMail(formData, request.getRemoteAddr()); + } +} \ No newline at end of file diff --git a/src/main/java/com/alttd/forms/controlers/event_apply/EventAppFormData.java b/src/main/java/com/alttd/forms/controlers/event_apply/EventAppFormData.java new file mode 100644 index 0000000..0ad47a3 --- /dev/null +++ b/src/main/java/com/alttd/forms/controlers/event_apply/EventAppFormData.java @@ -0,0 +1,113 @@ +package com.alttd.forms.controlers.event_apply; + +import com.alttd.forms.form.Form; +import com.alttd.forms.mail.mail_forms.Mailable; +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.validation.constraints.*; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.Range; + +import java.util.Optional; + +public class EventAppFormData extends Form implements Mailable { + + public EventAppFormData() {} + + public EventAppFormData(String username, String email, String discord, int age, String pronoun, int avg_time, String event_experience, String discord_vc, String other) { + this.username = username; + this.email = email; + this.discord = discord; + this.age = age; + this.pronoun = pronoun; + this.avg_time = avg_time; + this.event_experience = event_experience; + this.discord_vc = discord_vc; + this.other = other; + } + + @NotEmpty(message = "Username is required") + @Length(min = 3, max = 16, message = "Username should be between 3 and 16 characters") + @Pattern(regexp = "^[a-zA-Z0-9_]*$", message = "Username should only include alphanumeric characters and underscore") + public String username; + + @NotEmpty(message = "E-mail address is required") + @Email(message = "Invalid email") + @Length(min = 3, max = 254, message = "Email should be between 3 and 254 characters") + public String email; + + @NotEmpty(message = "Discord name is required") + @Length(min = 2, max = 32, message = "Discord name should be between 2 and 32 characters") + @Pattern(regexp = "^([a-z0-9._]{2,32})$", message = "Please enter a valid Discord name") + public String discord; + + @Min(value = 0, message = "Please enter a valid age") + @Max(value = 999, message = "We do not accept players older than 999 years old sorry!") + public int age; + + @Length(max = 16, message = "Pronouns can't be longer than 16 characters") + public String pronoun; + + @Range(min = 0, max = 168, message = "The only valid values are 0-168") + public int avg_time; + + @NotEmpty(message = "Event experience is required") + @Length(min = 2, max = 2000, message = "Experience should be between 2 and 2000 characters") + public String event_experience; + + @NotEmpty(message = "An answer is required") + @Length(min = 2, max = 3, message = "Please answer yes or no") + @Pattern(regexp = "(?i)^(yes|no)$", message = "Yes or no") + public String discord_vc; + + @Length(max = 2000, message = "Text can't be longer than 2000 characters") + public String other; + + @JsonIgnore + @Override + public String toString() { + return "EventAppFormData{" + + "username='" + username + '\'' + + ", email='" + email + '\'' + + ", discord='" + discord + '\'' + + ", age=" + age + + ", pronoun='" + pronoun + '\'' + + ", avg_time=" + avg_time + + ", event_experience='" + event_experience + '\'' + + ", discord_vc='" + discord_vc + '\'' + + ", other='" + other + '\'' + + '}'; + } + + @JsonIgnore + @Override + public Optional getDiscordBotUrl() { + return Optional.empty(); + } + + @JsonIgnore + @Override + public String getReceiver() { + return "events@alttd.com"; + } + + @JsonIgnore + @Override + public String getSubject() { + return "Event Application: " + username; + } + + @JsonIgnore + @Override + public String getSender() { + return email; + } + + @JsonIgnore + @Override + public String toHtml() { + String[] fields = {"Username", "Email", "Discord", "Age", "Pronoun", "Avg time", "Event experience", "Discord VC", "Other"}; + String[] values = {username, email, discord, String.valueOf(age), pronoun, String.valueOf(avg_time), event_experience, discord_vc, other}; + + return toHtml(fields, values); + } +} diff --git a/src/main/java/com/alttd/forms/verify_mail/FormQuery.java b/src/main/java/com/alttd/forms/verify_mail/FormQuery.java index b18d7c9..ec71d5f 100644 --- a/src/main/java/com/alttd/forms/verify_mail/FormQuery.java +++ b/src/main/java/com/alttd/forms/verify_mail/FormQuery.java @@ -2,6 +2,7 @@ package com.alttd.forms.verify_mail; import com.alttd.forms.controlers.apply.StaffAppFormData; import com.alttd.forms.controlers.contact.ContactFormData; +import com.alttd.forms.controlers.event_apply.EventAppFormData; import com.alttd.forms.database.DatabaseConnection; import com.alttd.forms.form.Form; import com.fasterxml.jackson.core.JsonProcessingException; @@ -76,6 +77,9 @@ public class FormQuery { case "StaffAppFormData" -> { return objectMapper.readValue(json, StaffAppFormData.class); } + case "EventAppFormData" -> { + return objectMapper.readValue(json, EventAppFormData.class); + } default -> throw new IllegalArgumentException("Invalid form class name: " + className); } } diff --git a/src/main/java/com/alttd/forms/verify_mail/VerifyController.java b/src/main/java/com/alttd/forms/verify_mail/VerifyController.java index eb991ad..6921667 100644 --- a/src/main/java/com/alttd/forms/verify_mail/VerifyController.java +++ b/src/main/java/com/alttd/forms/verify_mail/VerifyController.java @@ -1,6 +1,5 @@ package com.alttd.forms.verify_mail; -import com.alttd.forms.controlers.apply.StaffAppFormData; import com.alttd.forms.form.Form; import com.alttd.forms.mail.mail_forms.MailForm; import com.alttd.forms.mail.mail_forms.Mailable;