Skip to content

Commit 7db911a

Browse files
committed
Changed submissions table structure to use unique ids
1 parent 2c97172 commit 7db911a

File tree

4 files changed

+29
-53
lines changed

4 files changed

+29
-53
lines changed

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/FormInteractionManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,9 @@ public void handleModal(ModalInteractionEvent event, List<ModalMapping> values)
149149
return;
150150
}
151151

152-
channel.sendMessageEmbeds(createSubmissionEmbed(form, values, event.getMember())).queue();
153-
formsRepo.logSubmission(event.getUser(), form);
152+
channel.sendMessageEmbeds(createSubmissionEmbed(form, values, event.getMember())).queue(msg -> {
153+
formsRepo.logSubmission(event.getUser(), form, msg);
154+
});
154155

155156
event.getHook()
156157
.sendMessage(

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/SubmissionsDeleteFormSubcommand.java

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import net.discordjug.javabot.systems.staff_commands.forms.dao.FormsRepository;
66
import net.discordjug.javabot.systems.staff_commands.forms.model.FormData;
7+
import net.dv8tion.jda.api.entities.User;
78
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
89
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
910
import net.dv8tion.jda.api.interactions.AutoCompleteQuery;
@@ -29,11 +30,9 @@ public class SubmissionsDeleteFormSubcommand extends Subcommand implements AutoC
2930
*/
3031
public SubmissionsDeleteFormSubcommand(FormsRepository formsRepo) {
3132
this.formsRepo = formsRepo;
32-
setCommandData(
33-
new SubcommandData("submissions-delete", "Deletes submissions of an user in the form").addOptions(
34-
new OptionData(OptionType.INTEGER, "form-id", "The ID of a form to get submissions for", true,
35-
true),
36-
new OptionData(OptionType.STRING, "user-id", "User to delete submissions of", true, true)));
33+
setCommandData(new SubcommandData("submissions-delete", "Deletes submissions of an user in the form")
34+
.addOptions(new OptionData(OptionType.INTEGER, "form-id", "The ID of a form to get submissions for",
35+
true, true), new OptionData(OptionType.USER, "user", "User to delete submissions of", true)));
3736
}
3837

3938
@Override
@@ -45,7 +44,7 @@ public void execute(SlashCommandInteractionEvent event) {
4544
return;
4645
}
4746

48-
String user = event.getOption("user-id", OptionMapping::getAsString);
47+
User user = event.getOption("user", OptionMapping::getAsUser);
4948
FormData form = formOpt.get();
5049

5150
int count = formsRepo.deleteSubmissions(form, user);
@@ -54,24 +53,8 @@ public void execute(SlashCommandInteractionEvent event) {
5453

5554
@Override
5655
public void handleAutoComplete(CommandAutoCompleteInteractionEvent event, AutoCompleteQuery target) {
57-
switch (target.getName()) {
58-
case "user-id" -> {
59-
Long formId = event.getOption("form-id", OptionMapping::getAsLong);
60-
if (formId != null) {
61-
Optional<FormData> form = formsRepo.getForm(formId);
62-
if (form.isPresent()) {
63-
event.replyChoices(formsRepo.getAllSubmissions(form.get()).keySet().stream()
64-
.map(user -> new Choice(user.getUsername(), Long.toString(user.getId()))).toList())
65-
.queue();
66-
return;
67-
}
68-
}
69-
event.replyChoices().queue();
70-
}
71-
case "form-id" -> event.replyChoices(
72-
formsRepo.getAllForms().stream().map(form -> new Choice(form.toString(), form.getId())).toList())
73-
.queue();
74-
default -> {}
75-
}
56+
event.replyChoices(
57+
formsRepo.getAllForms().stream().map(form -> new Choice(form.toString(), form.getId())).toList())
58+
.queue();
7659
}
7760
}

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/dao/FormsRepository.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,6 @@ public void closeForm(FormData form) {
8080
*/
8181
public void deleteForm(FormData form) {
8282
jdbcTemplate.update("delete from `forms` where `form_id` = ?", form.getId());
83-
deleteSubmissions(form);
84-
}
85-
86-
/**
87-
* Deletes all submissions for this form.
88-
*
89-
* @param form form to delete submissions for.
90-
*/
91-
public void deleteSubmissions(FormData form) {
92-
Objects.requireNonNull(form);
93-
jdbcTemplate.update("delete from `form_submissions` where `form_id` = ?", form.getId());
9483
}
9584

9685
/**
@@ -100,11 +89,11 @@ public void deleteSubmissions(FormData form) {
10089
* @param user user to delete submissions for
10190
* @return number of deleted submissions
10291
*/
103-
public int deleteSubmissions(FormData form, String user) {
92+
public int deleteSubmissions(FormData form, User user) {
10493
Objects.requireNonNull(form);
10594
Objects.requireNonNull(user);
10695
return jdbcTemplate.update("delete from `form_submissions` where `form_id` = ? and `user_id` = ?", form.getId(),
107-
user);
96+
user.getIdLong());
10897
}
10998

11099
/**
@@ -197,7 +186,7 @@ public boolean hasSubmitted(User user, FormData form) {
197186
try {
198187
return jdbcTemplate.queryForObject(
199188
"select * from `form_submissions` where `user_id` = ? and `form_id` = ? limit 1",
200-
(rs, rowNum) -> true, user.getId(), form.getId());
189+
(rs, rowNum) -> true, user.getIdLong(), form.getId());
201190
} catch (EmptyResultDataAccessException e) {
202191
return false;
203192
}
@@ -231,17 +220,18 @@ public PreparedStatement createPreparedStatement(Connection con) throws SQLExcep
231220
/**
232221
* Log an user form submission in database.
233222
*
234-
* @param user user to log
235-
* @param form form to log on
223+
* @param user user to log
224+
* @param form form to log on
225+
* @param message message containing details about this user's submission
236226
*/
237-
public void logSubmission(User user, FormData form) {
227+
public void logSubmission(User user, FormData form, Message message) {
238228
Objects.requireNonNull(user);
239229
Objects.requireNonNull(form);
240230
jdbcTemplate.update(con -> {
241231
PreparedStatement statement = con.prepareStatement(
242-
"merge into `form_submissions` (\"timestamp\", `user_id`, `form_id`, `user_name`) values (?, ?, ?, ?)");
243-
statement.setLong(1, System.currentTimeMillis());
244-
statement.setString(2, user.getId());
232+
"insert into `form_submissions` (`message_id`, `user_id`, `form_id`, `user_name`) values (?, ?, ?, ?)");
233+
statement.setLong(1, message.getIdLong());
234+
statement.setLong(2, user.getIdLong());
245235
statement.setLong(3, form.getId());
246236
statement.setString(4, user.getName());
247237
return statement;

src/main/resources/database/migrations/09-08-2025_forms.sql

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@ CREATE TABLE FORM_FIELDS (
2525
FOREIGN KEY (FORM_ID) REFERENCES FORMS(FORM_ID) ON DELETE CASCADE ON UPDATE RESTRICT
2626
);
2727

28-
CREATE TABLE form_submissions (
29-
"timestamp" BIGINT NOT NULL,
30-
user_id VARCHAR NOT NULL,
31-
form_id BIGINT NOT NULL,
32-
user_name VARCHAR NOT NULL,
33-
PRIMARY KEY ("timestamp")
28+
CREATE TABLE FORM_SUBMISSIONS (
29+
ID BIGINT NOT NULL AUTO_INCREMENT,
30+
MESSAGE_ID BIGINT NOT NULL,
31+
USER_ID BIGINT NOT NULL,
32+
FORM_ID BIGINT NOT NULL,
33+
USER_NAME VARCHAR NOT NULL,
34+
PRIMARY KEY (ID),
35+
FOREIGN KEY (FORM_ID) REFERENCES FORMS(FORM_ID) ON DELETE CASCADE ON UPDATE RESTRICT
3436
);
3537

3638
CREATE INDEX FORM_SUBMISSIONS_USER_ID_IDX ON form_submissions (user_id,form_id);

0 commit comments

Comments
 (0)