11package org .mangorage .mangobotplugin .commands .trick ;
22
3- import org .hibernate .Session ;
4- import org .hibernate .SessionFactory ;
5- import org .hibernate .Transaction ;
6- import org .hibernate .cfg .Configuration ;
73import org .mangorage .mangobotcore .api .util .data .DataHandler ;
4+ import org .mangorage .mangobotcore .api .util .data .DatabaseHandler ;
85import org .mangorage .mangobotplugin .entrypoint .MangoBot ;
96
107import java .util .HashMap ;
118import java .util .List ;
129import java .util .Map ;
10+ import java .util .UUID ;
1311
1412public final class TrickManager {
1513
16- public static final DataHandler <Trick > TRICKS_DATA_HANDLER = DataHandler .create ()
14+ private static final DataHandler <Trick > TRICKS_DATA_HANDLER = DataHandler .create ()
1715 .path ("data/tricksV2" )
1816 .maxDepth (3 )
1917 .build (Trick .class );
2018
19+ private static final DatabaseHandler <UUID , Trick > TRICKS_DATABASE_HANDLER = DatabaseHandler .create (
20+ MangoBot .BOT_DATABASE_URL .get (),
21+ MangoBot .BOT_DATABASE_USERNAME .get (),
22+ MangoBot .BOT_DATABASE_PASSWORD .get (),
23+ Trick .class
24+ );
25+
2126 private final Map <TrickKey , Trick > loadedTricks = new HashMap <>();
2227 private final MangoBot plugin ;
23- private final SessionFactory sessionFactory ;
2428 private final boolean useDatabase ;
2529
2630 public TrickManager (MangoBot plugin ) {
2731 this .plugin = plugin ;
28-
29- String url = MangoBot .BOT_DATABASE_URL .get ();
30- String user = MangoBot .BOT_DATABASE_USERNAME .get ();
31- String pass = MangoBot .BOT_DATABASE_PASSWORD .get ();
32-
3332 this .useDatabase = MangoBot .BOT_USE_DATABASE .get ();
3433
3534 if (useDatabase ) {
36- this .sessionFactory = new Configuration ()
37- .setProperty ("hibernate.connection.url" , url )
38- .setProperty ("hibernate.connection.username" , user )
39- .setProperty ("hibernate.connection.password" , pass )
40-
41- .setProperty ("hibernate.connection.driver_class" , "com.mysql.cj.jdbc.Driver" )
42- .setProperty ("hibernate.dialect" , "org.hibernate.dialect.MySQLDialect" )
43-
44- .setProperty ("hibernate.hbm2ddl.auto" , "update" )
45- .setProperty ("hibernate.show_sql" , "false" )
46-
47- .addAnnotatedClass (Trick .class )
48- .buildSessionFactory ();
49-
5035 migrateFilesToDatabase ();
51-
5236 loadFromDatabase ();
5337 } else {
54- this .sessionFactory = null ;
5538 loadFromFiles ();
5639 }
5740 }
5841
5942 private void migrateFilesToDatabase () {
60- List <Trick > fileTricks = TRICKS_DATA_HANDLER .load (plugin .getPluginDirectory ());
61-
62- if (fileTricks .isEmpty ()) return ;
63-
64- try (Session session = sessionFactory .openSession ()) {
65- Transaction tx = session .beginTransaction ();
66-
67- for (Trick trick : fileTricks ) {
68- session .merge (trick );
69- TRICKS_DATA_HANDLER .delete (plugin .getPluginDirectory (), trick );
70- }
71-
72- tx .commit ();
73- }
43+ List <Trick > tricks = TRICKS_DATA_HANDLER .load (plugin .getPluginDirectory ());
44+ TRICKS_DATABASE_HANDLER .migrateToDatabase (tricks );
7445 }
7546
7647 private void loadFromFiles () {
@@ -80,11 +51,8 @@ private void loadFromFiles() {
8051 }
8152
8253 private void loadFromDatabase () {
83- try (Session session = sessionFactory .openSession ()) {
84- List <Trick > tricks = session .createQuery ("from Trick" , Trick .class ).list ();
85- for (Trick trick : tricks ) {
86- loadedTricks .put (new TrickKey (trick .getTrickID (), trick .getGuildID ()), trick );
87- }
54+ for (Trick trick : TRICKS_DATABASE_HANDLER .loadEntitiesFromDatabase ()) {
55+ loadedTricks .put (new TrickKey (trick .getTrickID (), trick .getGuildID ()), trick );
8856 }
8957 }
9058
@@ -107,11 +75,7 @@ public Trick getTrickForGuildByName(long guildId, String name) {
10775
10876 public void saveTrick (Trick trick ) {
10977 if (useDatabase ) {
110- try (Session session = sessionFactory .openSession ()) {
111- Transaction tx = session .beginTransaction ();
112- session .merge (trick );
113- tx .commit ();
114- }
78+ TRICKS_DATABASE_HANDLER .saveEntity (trick );
11579 } else {
11680 TRICKS_DATA_HANDLER .save (plugin .getPluginDirectory (), trick );
11781 }
@@ -123,17 +87,7 @@ public boolean removeTrick(String trickID, long guildID) {
12387 if (removed == null ) return false ;
12488
12589 if (useDatabase ) {
126- try (Session session = sessionFactory .openSession ()) {
127- final var transaction = session .beginTransaction ();
128- session
129- .createMutationQuery (
130- "delete from Trick t where t.trickID = :trickId and t.guildID = :guildId"
131- )
132- .setParameter ("trickId" , trickID )
133- .setParameter ("guildId" , guildID )
134- .executeUpdate ();
135- transaction .commit ();
136- }
90+ TRICKS_DATABASE_HANDLER .removeEntity (removed );
13791 } else {
13892 TRICKS_DATA_HANDLER .delete (plugin .getPluginDirectory (), removed );
13993 }
0 commit comments