1 package club.wpia.gigi.dbObjects;
3 import java.sql.Timestamp;
5 import java.util.HashMap;
7 import club.wpia.gigi.database.GigiPreparedStatement;
8 import club.wpia.gigi.database.GigiResultSet;
9 import club.wpia.gigi.util.TimeConditions;
13 public enum CATSType {
14 AGENT_CHALLENGE("Agent Qualifying Challenge"),
16 ORG_AGENT_CHALLENGE("Organisation Agent Qualifying Challenge"),
18 TTP_AGENT_CHALLENGE("TTP Agent Qualifying Challenge"),
20 TTP_TOPUP_AGENT_CHALLENGE_NAME("TTP TOPUP Agent Qualifying Challenge"),
22 CODE_SIGNING_CHALLENGE_NAME("Code Signing Challenge"),
24 ORG_ADMIN_DP_CHALLENGE_NAME("Organisation Administrator Data Protection Challenge"),
26 SUPPORT_DP_CHALLENGE_NAME("Support Data Protection Challenge");
28 private final String displayName;
32 private CATSType(String displayName) {
33 this.displayName = displayName;
34 id = getID(displayName);
37 public String getDisplayName() {
47 * The maximal number of months a passed test is considered "recent".
49 public static final int TEST_MONTHS = TimeConditions.getInstance().getTestMonths();
51 private static HashMap<String, Integer> names = new HashMap<>();
58 try (GigiPreparedStatement st = new GigiPreparedStatement("SELECT `id`, `type_text` FROM `cats_type`")) {
59 GigiResultSet res = st.executeQuery();
61 names.put(res.getString(2), res.getInt(1));
66 public static synchronized int getID(String name) {
67 Integer i = names.get(name);
69 try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `cats_type` SET `type_text`=?")) {
70 ps.setString(1, name);
72 i = ps.lastInsertId();
79 public static void enterResult(User user, CATSType testType, Date passDate, String language, String version) {
80 enterResult(user, testType.id, passDate, language, version);
83 public static void enterResult(User user, String testType, Date passDate, String language, String version) {
84 enterResult(user, getID(testType), passDate, language, version);
87 private static void enterResult(User user, int testTypeId, Date passDate, String language, String version) {
89 try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `cats_passed` SET `user_id`=?, `variant_id`=?, `pass_date`=?, `language`=?, `version`=?")) {
90 ps.setInt(1, user.getId());
91 ps.setInt(2, testTypeId);
92 ps.setTimestamp(3, new Timestamp(passDate.getTime()));
93 ps.setString(4, language);
94 ps.setString(5, version);
99 public static boolean isInCatsLimit(int uID, int testID) {
100 try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT 1 FROM `cats_passed` WHERE `user_id` = ? AND `variant_id` = ? AND`pass_date` > (now() - interval '1 months' * ?)")) {
102 ps.setInt(2, testID);
103 ps.setInt(3, TEST_MONTHS);
105 GigiResultSet rs = ps.executeQuery();