diff --git a/src/main/java/de/slimecloud/slimeball/features/ticket/Ticket.java b/src/main/java/de/slimecloud/slimeball/features/ticket/Ticket.java new file mode 100644 index 00000000..670eafbc --- /dev/null +++ b/src/main/java/de/slimecloud/slimeball/features/ticket/Ticket.java @@ -0,0 +1,63 @@ +package de.slimecloud.slimeball.features.ticket; + +import de.mineking.databaseutils.Column; +import de.mineking.databaseutils.DataClass; +import de.mineking.databaseutils.Table; +import de.mineking.databaseutils.exception.ConflictException; +import de.slimecloud.slimeball.main.SlimeBot; +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.UserSnowflake; +import org.jetbrains.annotations.NotNull; + +@Getter +@AllArgsConstructor +public class Ticket implements DataClass { + + private final transient SlimeBot bot; + + @Column(key = true) + private final Guild guild; + @Column(key = true) + private final UserSnowflake user; + @Column(key = true) + private final long id; + + + @Column + private final UserSnowflake creator; + @Column + private final UserSnowflake closer; + @Column + private final UserSnowflake claimer; + @Column + private final long openTime; + @Column + private final long closeTime; + @Column + private final String closeReason; + + public Ticket(SlimeBot bot) { + this(bot, null, null, 0, null, null, null, 0, 0, ""); + } + + + /** + * true if staff opened a ticket with this user + */ + public boolean isStaffTicket() { + return user.getIdLong() != creator.getIdLong(); + } + @NotNull + @Override + public Table getTable() { + return bot.getTicket(); + } + + @NotNull + @Override + public Ticket update() throws ConflictException { + return DataClass.super.update(); + } +} diff --git a/src/main/java/de/slimecloud/slimeball/features/ticket/TicketTable.java b/src/main/java/de/slimecloud/slimeball/features/ticket/TicketTable.java new file mode 100644 index 00000000..8300feb5 --- /dev/null +++ b/src/main/java/de/slimecloud/slimeball/features/ticket/TicketTable.java @@ -0,0 +1,25 @@ +package de.slimecloud.slimeball.features.ticket; + +import de.mineking.databaseutils.Table; +import de.mineking.databaseutils.Where; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.UserSnowflake; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Optional; + +public interface TicketTable extends Table { + + default List getTickets(@NotNull Guild guild, @NotNull UserSnowflake user) { + return selectMany(Where.allOf( + Where.equals("user", user), + Where.equals("guild", guild) + )); + } + + default Optional getTicket(long id) { + return selectOne(Where.equals("id", id)); + } + +} diff --git a/src/main/java/de/slimecloud/slimeball/main/SlimeBot.java b/src/main/java/de/slimecloud/slimeball/main/SlimeBot.java index eb8c5c81..b29f5d72 100644 --- a/src/main/java/de/slimecloud/slimeball/main/SlimeBot.java +++ b/src/main/java/de/slimecloud/slimeball/main/SlimeBot.java @@ -66,6 +66,8 @@ import de.slimecloud.slimeball.features.staff.absence.AbsenceTable; import de.slimecloud.slimeball.features.statistic.MemberCount; import de.slimecloud.slimeball.features.statistic.RoleMemberCount; +import de.slimecloud.slimeball.features.ticket.Ticket; +import de.slimecloud.slimeball.features.ticket.TicketTable; import de.slimecloud.slimeball.features.wrapped.DataListener; import de.slimecloud.slimeball.features.wrapped.WrappedData; import de.slimecloud.slimeball.features.wrapped.WrappedDataTable; @@ -128,6 +130,7 @@ public class SlimeBot extends ListenerAdapter { private final ReportTable reports; private final ReportBlockTable reportBlocks; private final FdmdsQueue fdmdsQueue; + private final TicketTable ticket; private final LevelTable level; private final CardDataTable profileData; @@ -177,6 +180,7 @@ public SlimeBot(@NotNull Config config, @NotNull Dotenv credentials) throws IOEx reports = database.getTable(Report.class, () -> new Report(this)).name("reports").table(ReportTable.class).create(); reportBlocks = database.getTable(ReportBlock.class, ReportBlock::new).name("report_blocks").table(ReportBlockTable.class).create(); fdmdsQueue = database.getTable(FdmdsQueueItem.class, () -> new FdmdsQueueItem(this)).name("fdmds_queue").table(FdmdsQueue.class).create(); + ticket = database.getTable(Ticket.class, () -> new Ticket(this)).name("tickets").table(TicketTable.class).create(); level = database.getTable(Level.class, () -> new Level(this)).name("levels").table(LevelTable.class).create(); profileData = database.getTable(CardProfileData.class, () -> new CardProfileData(this)).name("card_data").table(CardDataTable.class).create(); @@ -196,6 +200,7 @@ public SlimeBot(@NotNull Config config, @NotNull Dotenv credentials) throws IOEx reports = null; reportBlocks = null; fdmdsQueue = null; + ticket = null; level = null; profileData = null; cardProfiles = null;