· 6 years ago · Dec 08, 2019, 10:10 AM
1package com.redecommunity.common.shared.permissions.user.dao;
2
3import com.google.common.collect.Sets;
4import com.redecommunity.common.shared.databases.mysql.dao.Table;
5import com.redecommunity.common.shared.permissions.user.data.User;
6
7import java.sql.PreparedStatement;
8import java.sql.ResultSet;
9import java.sql.SQLException;
10import java.util.Set;
11import java.util.UUID;
12
13/**
14 * Created by @SrGutyerrez
15 */
16public class UserDao extends Table {
17 public UserDao() {
18 super("server_users", "general");
19 }
20
21 @Override
22 public void createTable() throws SQLException {
23 this.execute(
24 String.format(
25 "CREATE TABLE IF NOT EXISTS %s" +
26 "(" +
27 "`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT," +
28 "`name` VARCHAR(16) NOT NULL," +
29 "`display_name` VARCHAR(16) NOT NULL," +
30 "`unique_id` UUID NOT NULL," +
31 "`email` VARCHAR(255)," +
32 "`discord_id` LONG," +
33 "`created_at` LONG NOT NULL," +
34 "`first_login` LONG," +
35 "`last_login` LONG," +
36 "`last_address` VARCHAR(255)," +
37 "`last_lobby_id` INTEGER," +
38 "`lang_id` INTEGER" +
39 ");",
40 this.getTableName()
41 )
42 );
43 }
44
45 public <T extends User> void insert(T user) throws SQLException {
46 PreparedStatement preparedStatement = this.prepareStatement(
47 String.format(
48 "INSERT INTO %s (" +
49 "`name`," +
50 "`display_name`," +
51 "`unique_id`," +
52 "`created_at`," +
53 "`lang_id`" +
54 ")" +
55 " VALUES " +
56 "(" +
57 "'%s'," +
58 "'%s'," +
59 "'%s'," +
60 "%d," +
61 "%d" +
62 ");",
63 this.getTableName(),
64 user.getName().toLowerCase(),
65 user.getDisplayName(),
66 user.getUniqueId(),
67 user.getCreatedAt(),
68 user.getLangId()
69 )
70 );
71
72 preparedStatement.executeQuery();
73 }
74
75 public <K, V, K1, V1> void update(K key1, V value1, K1 key2, V1 value2) throws SQLException {
76 this.execute(
77 String.format(
78 "UPDATE %s SET `%s`=%s WHERE `%s`=%s",
79 this.getTableName(),
80 key1,
81 value1,
82 key2,
83 value2
84 )
85 );
86 }
87
88 public <K, V> void delete(K key, V value) throws SQLException {
89 this.execute(
90 String.format(
91 "DELETE FROM %s WHERE `%s`=%s",
92 this.getTableName(),
93 key,
94 value
95 )
96 );
97 }
98
99 public <K, V, T> T findOne(K key, V value) throws SQLException {
100 PreparedStatement preparedStatement = this.prepareStatement(
101 String.format(
102 "SELECT * FROM %s WHERE `%s`='%s'",
103 this.getTableName(),
104 key,
105 value
106 )
107 );
108 ResultSet resultSet = preparedStatement.executeQuery();
109
110 if (!resultSet.next()) return null;
111
112 User user = new User(
113 resultSet.getInt("id"),
114 resultSet.getString("name"),
115 resultSet.getString("display_name"),
116 UUID.fromString(resultSet.getString("unique_id")),
117 resultSet.getString("email"),
118 resultSet.getLong("discord_id"),
119 resultSet.getLong("created_at"),
120 resultSet.getLong("first_login"),
121 resultSet.getLong("last_login"),
122 resultSet.getString("last_address"),
123 resultSet.getInt("last_lobby_id"),
124 resultSet.getInt("lang_id")
125 );
126
127 return (T) user;
128 }
129
130 public <T> Set<T> findAll() throws SQLException {
131 PreparedStatement preparedStatement = this.prepareStatement(
132 String.format(
133 "SELECT * FROM %s",
134 this.getTableName()
135 )
136 );
137
138 ResultSet resultSet = preparedStatement.executeQuery();
139
140 Set<T> users = Sets.newConcurrentHashSet();
141
142 while (resultSet.next()) {
143 User user = new User(
144 resultSet.getInt("id"),
145 resultSet.getString("name"),
146 resultSet.getString("display_name"),
147 UUID.fromString(resultSet.getString("unique_id")),
148 resultSet.getString("email"),
149 resultSet.getLong("discord_id"),
150 resultSet.getLong("created_at"),
151 resultSet.getLong("first_login"),
152 resultSet.getLong("last_login"),
153 resultSet.getString("last_address"),
154 resultSet.getInt("last_lobby_id"),
155 resultSet.getInt("lang_id")
156 );
157
158 users.add((T) user);
159 }
160
161 return users;
162 }
163}