-
-
-
\ No newline at end of file
diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml
deleted file mode 100644
index d0dfc26..0000000
--- a/.idea/material_theme_project_new.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 28b24cc..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index fe84480..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules/batch.main.iml b/.idea/modules/batch.main.iml
deleted file mode 100644
index 68d742b..0000000
--- a/.idea/modules/batch.main.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules/batch.test.iml b/.idea/modules/batch.test.iml
deleted file mode 100644
index eaaf6bb..0000000
--- a/.idea/modules/batch.test.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/worker.iml b/.idea/worker.iml
deleted file mode 100644
index d6ebd48..0000000
--- a/.idea/worker.iml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/slackjudge/Dockerfile b/Dockerfile
similarity index 100%
rename from slackjudge/Dockerfile
rename to Dockerfile
diff --git a/slackjudge/build.gradle b/build.gradle
similarity index 100%
rename from slackjudge/build.gradle
rename to build.gradle
diff --git a/slackjudge/docker-compose.yml b/docker-compose.yml
similarity index 100%
rename from slackjudge/docker-compose.yml
rename to docker-compose.yml
diff --git a/slackjudge/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from slackjudge/gradle/wrapper/gradle-wrapper.jar
rename to gradle/wrapper/gradle-wrapper.jar
diff --git a/slackjudge/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from slackjudge/gradle/wrapper/gradle-wrapper.properties
rename to gradle/wrapper/gradle-wrapper.properties
diff --git a/slackjudge/gradlew b/gradlew
old mode 100755
new mode 100644
similarity index 100%
rename from slackjudge/gradlew
rename to gradlew
diff --git a/slackjudge/gradlew.bat b/gradlew.bat
similarity index 100%
rename from slackjudge/gradlew.bat
rename to gradlew.bat
diff --git a/slackjudge/settings.gradle b/settings.gradle
similarity index 100%
rename from slackjudge/settings.gradle
rename to settings.gradle
diff --git a/slackjudge/logs/batch.log b/slackjudge/logs/batch.log
deleted file mode 100644
index 2c60a1a..0000000
--- a/slackjudge/logs/batch.log
+++ /dev/null
@@ -1,184 +0,0 @@
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JDBC - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 24 ms. Found 0 JDBC repository interfaces.
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 4 ms. Found 0 JPA repository interfaces.
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
-2025-12-15 17:10:44 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 88 ms. Found 1 MongoDB repository interface.
-2025-12-15 17:10:45 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-15 17:10:49 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-15 17:10:49 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:10:50 [Test worker] DEBUG org.mongodb.driver.connection - Connection pool created for localhost:27017 using options maxIdleTimeMS=0, minPoolSize=0, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000
-2025-12-15 17:10:50 [cluster-ClusterId{value='693fc28a58416b7585e8b001', description='null'}-localhost:27017] DEBUG org.mongodb.driver.connection - Connection pool ready for localhost:27017
-2025-12-15 17:10:50 [Test worker] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
-2025-12-15 17:10:51 [Test worker] INFO o.s.b.c.l.s.TaskExecutorJobLauncher - Job: [SimpleJob: [name=slackJudge]] launched with the following parameters: [{'batchTime':'{value=2025-12-15T17:10:51.309046, type=class java.time.LocalDateTime, identifying=true}'}]
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [LoadAllUsersStep]
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [LoadAllUsersStep] executed in 15ms
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [LoadSnapshotStep]
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [LoadSnapshotStep] executed in 38ms
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [FetchSolvedAcUserInfoStep]
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [FetchSolvedAcUserInfoStep] executed in 4ms
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [detectAndUpdateUserTierAndProblemStep]
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [detectAndUpdateUserTierAndProblemStep] executed in 5ms
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [saveSnapshotStep]
-2025-12-15 17:10:51 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [saveSnapshotStep] executed in 4ms
-2025-12-15 17:10:51 [Test worker] INFO o.s.b.c.l.s.TaskExecutorJobLauncher - Job: [SimpleJob: [name=slackJudge]] completed with the following parameters: [{'batchTime':'{value=2025-12-15T17:10:51.309046, type=class java.time.LocalDateTime, identifying=true}'}] and the following status: [COMPLETED] in 250ms
-2025-12-15 17:10:51 [SpringApplicationShutdownHook] DEBUG org.mongodb.driver.connection - Connection pool closed for localhost:27017
-2025-12-15 17:10:51 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:11:15 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:15 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
-2025-12-15 17:11:15 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 146 ms. Found 1 MongoDB repository interface.
-2025-12-15 17:11:16 [Test worker] DEBUG org.mongodb.driver.connection - Connection pool created for localhost:27017 using options maxIdleTimeMS=0, minPoolSize=0, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000
-2025-12-15 17:11:16 [cluster-ClusterId{value='693fc2a4db724850dd768ec9', description='null'}-localhost:27017] DEBUG org.mongodb.driver.connection - Connection pool ready for localhost:27017
-2025-12-15 17:11:17 [Test worker] DEBUG o.s.data.mongodb.core.MongoTemplate - Saving Document containing fields: [_id, problems_ids, solved_count, tier, rating, user_id, _class]
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Checkout started for connection to localhost:27017
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection created: address=localhost:27017, driver-generated ID=3
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection ready: address=localhost:27017, driver-generated ID=3, established in=1 ms
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection checked out: address=localhost:27017, driver-generated ID=3, duration=4 ms
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.protocol.command - Command "update" started on database "snapshot" using a connection with driver-generated ID 3 and server-generated ID 159 to localhost:27017. The request ID is 5 and the operation ID is 5. Command: {"update": "snapshot", "ordered": true, "$db": "snapshot", "lsid": {"id": {"$binary": {"base64": "FKdgpw/bQQC+LDgGU/zB9w==", "subType": "04"}}}, "updates": [{"q": {"_id": {"bojId": "test", "snapShotAt": {"$date": "2025-12-15T08:00:00Z"}}}, "u": {"_id": {"bojId": "test", "snapShotAt": {"$date": "2025-12-15T08:00:00Z"}}, "problems_ids": [], "solved_count": 33, "tier": 23, "rating": 100, "user_id": 123, "_class": "store.slackjudge.batch.infra.mongo.document.UserSolvedSnapShotDocument"}, "upsert": true}]}
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.protocol.command - Command "update" succeeded on database "snapshot" in 36.284458 ms using a connection with driver-generated ID 3 and server-generated ID 159 to localhost:27017. The request ID is 5 and the operation ID is 5. Command reply: {"n": 1, "upserted": [{"index": 0, "_id": {"bojId": "test", "snapShotAt": {"$date": "2025-12-15T08:00:00Z"}}}], "nModified": 0, "ok": 1.0}
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection checked in: address=localhost:27017, driver-generated ID=3
-2025-12-15 17:11:17 [Test worker] DEBUG o.s.data.mongodb.core.MongoTemplate - find using query: { "_id.bojId" : "test", "_id.snapShotAt" : { "$date" : "2025-12-15T08:00:00Z"}} fields: Document{{}} sort: { "_id.bojId" : "test", "_id.snapShotAt" : { "$java" : 2025-12-15T17:00 } } for class: class store.slackjudge.batch.infra.mongo.document.UserSolvedSnapShotDocument in collection: snapshot
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Checkout started for connection to localhost:27017
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection checked out: address=localhost:27017, driver-generated ID=3, duration=0 ms
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.protocol.command - Command "find" started on database "snapshot" using a connection with driver-generated ID 3 and server-generated ID 159 to localhost:27017. The request ID is 6 and the operation ID is 6. Command: {"find": "snapshot", "filter": {"_id.bojId": "test", "_id.snapShotAt": {"$date": "2025-12-15T08:00:00Z"}}, "limit": 2, "$db": "snapshot", "lsid": {"id": {"$binary": {"base64": "FKdgpw/bQQC+LDgGU/zB9w==", "subType": "04"}}}}
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.protocol.command - Command "find" succeeded on database "snapshot" in 8.679292 ms using a connection with driver-generated ID 3 and server-generated ID 159 to localhost:27017. The request ID is 6 and the operation ID is 6. Command reply: {"cursor": {"firstBatch": [{"_id": {"bojId": "test", "snapShotAt": {"$date": "2025-12-15T08:00:00Z"}}, "problems_ids": [], "solved_count": 33, "tier": 23, "rating": 100, "user_id": 123, "_class": "store.slackjudge.batch.infra.mongo.document.UserSolvedSnapShotDocument"}], "id": 0, "ns": "snapshot.snapshot"}, "ok": 1.0}
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection checked in: address=localhost:27017, driver-generated ID=3
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Checkout started for connection to localhost:27017
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection checked out: address=localhost:27017, driver-generated ID=3, duration=0 ms
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.protocol.command - Command "endSessions" started on database "admin" using a connection with driver-generated ID 3 and server-generated ID 159 to localhost:27017. The request ID is 7 and the operation ID is 1. Command: {"endSessions": [{"id": {"$binary": {"base64": "FKdgpw/bQQC+LDgGU/zB9w==", "subType": "04"}}}], "$db": "admin", "$readPreference": {"mode": "primaryPreferred"}}
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.protocol.command - Command "endSessions" succeeded on database "admin" in 1.354458 ms using a connection with driver-generated ID 3 and server-generated ID 159 to localhost:27017. The request ID is 7 and the operation ID is 1. Command reply: {"ok": 1.0}
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection checked in: address=localhost:27017, driver-generated ID=3
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection closed: address=localhost:27017, driver-generated ID=3. Reason: Connection pool was closed.
-2025-12-15 17:11:17 [Test worker] DEBUG org.mongodb.driver.connection - Connection pool closed for localhost:27017
-2025-12-15 17:11:17 [Test worker] WARN s.s.b.i.s.c.AbstractSolvedAcApiClient - [calling solved.ac API] request failed attempt = 1/3
-2025-12-15 17:11:17 [Test worker] WARN s.s.b.i.s.c.AbstractSolvedAcApiClient - [calling solved.ac API] request failed attempt = 2/3
-2025-12-15 17:11:17 [Test worker] ERROR s.s.b.i.s.c.AbstractSolvedAcApiClient - [calling solved.ac API] retry all failed
-2025-12-15 17:11:17 [Test worker] WARN s.s.b.i.s.c.AbstractSolvedAcApiClient - [calling solved.ac API] request failed attempt = 1/3
-2025-12-15 17:11:17 [Test worker] WARN s.s.b.i.s.c.AbstractSolvedAcApiClient - [calling solved.ac API] request failed attempt = 2/3
-2025-12-15 17:11:18 [Test worker] ERROR s.s.b.i.s.c.SolvedAcProblemInfoClient - [calling solved.ac API] fetch problemInfo api json parsing error : Unexpected character (',' (code 44)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
- at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 2, column: 13]
-2025-12-15 17:11:18 [Test worker] ERROR s.s.b.i.s.c.SolvedAcProblemInfoClient - [calling solved.ac API] fetch problemInfo api json parsing error : Cannot deserialize value of type `java.util.ArrayList` from Integer value (token `JsonToken.VALUE_NUMBER_INT`)
- at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 2, column: 13] (through reference chain: store.slackjudge.batch.infra.solvedac.dto.ProblemSearchResponse["items"])
-2025-12-15 17:11:18 [Test worker] WARN s.s.b.i.s.c.SolvedAcProblemInfoClient - [invalid page value] max page value : 689 min page value : 1 now page value : -1
-2025-12-15 17:11:18 [Test worker] WARN s.s.b.i.s.c.SolvedAcProblemInfoClient - [invalid page value] max page value : 689 min page value : 1 now page value : 700
-2025-12-15 17:11:18 [Test worker] ERROR s.s.b.i.s.c.SolvedAcUserInfoClient - [calling solved.ac API] fetch userInfo api json parsing error : Unexpected character (',' (code 44)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
- at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 2, column: 13]
-2025-12-15 17:11:18 [Test worker] ERROR s.s.b.i.s.c.SolvedAcUserInfoClient - [calling solved.ac API] fetch userInfo api json parsing error : Unexpected end-of-input within/between Object entries
- at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 4, column: 1]
-2025-12-15 17:11:26 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:26 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-15 17:11:26 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-15 17:11:26 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 28 ms. Found 0 JPA repository interfaces.
-2025-12-15 17:11:27 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-15 17:11:30 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-15 17:11:31 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:11:32 [Test worker] INFO o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [store.slackjudge.batch.repository.UserJdbcRepositoryTest]: UserJdbcRepositoryTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
-2025-12-15 17:11:32 [Test worker] INFO o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration store.slackjudge.batch.SlackjudgeApplication for test class store.slackjudge.batch.repository.UserJdbcRepositoryTest
-2025-12-15 17:11:32 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:32 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-15 17:11:32 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-15 17:11:32 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 5 ms. Found 0 JPA repository interfaces.
-2025-12-15 17:11:32 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-15 17:11:33 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-15 17:11:33 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:11:33 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:11:33 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JDBC - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 0 JDBC repository interfaces.
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 5 ms. Found 0 JPA repository interfaces.
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
-2025-12-15 17:11:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 56 ms. Found 1 MongoDB repository interface.
-2025-12-15 17:11:39 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-15 17:11:41 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-15 17:11:41 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:11:41 [Test worker] DEBUG org.mongodb.driver.connection - Connection pool created for localhost:27017 using options maxIdleTimeMS=0, minPoolSize=0, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000
-2025-12-15 17:11:41 [cluster-ClusterId{value='693fc2bd400f052caa60fa20', description='null'}-localhost:27017] DEBUG org.mongodb.driver.connection - Connection pool ready for localhost:27017
-2025-12-15 17:11:42 [Test worker] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
-2025-12-15 17:11:42 [Test worker] INFO o.s.b.c.l.s.TaskExecutorJobLauncher - Job: [SimpleJob: [name=slackJudge]] launched with the following parameters: [{'batchTime':'{value=2025-12-15T17:11:42.653289, type=class java.time.LocalDateTime, identifying=true}'}]
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [LoadAllUsersStep]
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [LoadAllUsersStep] executed in 9ms
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [LoadSnapshotStep]
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [LoadSnapshotStep] executed in 19ms
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [FetchSolvedAcUserInfoStep]
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [FetchSolvedAcUserInfoStep] executed in 4ms
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [detectAndUpdateUserTierAndProblemStep]
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [detectAndUpdateUserTierAndProblemStep] executed in 5ms
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [saveSnapshotStep]
-2025-12-15 17:11:42 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [saveSnapshotStep] executed in 3ms
-2025-12-15 17:11:42 [Test worker] INFO o.s.b.c.l.s.TaskExecutorJobLauncher - Job: [SimpleJob: [name=slackJudge]] completed with the following parameters: [{'batchTime':'{value=2025-12-15T17:11:42.653289, type=class java.time.LocalDateTime, identifying=true}'}] and the following status: [COMPLETED] in 150ms
-2025-12-15 17:11:42 [SpringApplicationShutdownHook] DEBUG org.mongodb.driver.connection - Connection pool closed for localhost:27017
-2025-12-15 17:11:42 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JDBC - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 0 JDBC repository interfaces.
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 4 ms. Found 0 JPA repository interfaces.
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
-2025-12-15 17:11:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 53 ms. Found 1 MongoDB repository interface.
-2025-12-15 17:11:57 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-15 17:11:59 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-15 17:11:59 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-15 17:12:00 [Test worker] DEBUG org.mongodb.driver.connection - Connection pool created for localhost:27017 using options maxIdleTimeMS=0, minPoolSize=0, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000
-2025-12-15 17:12:00 [cluster-ClusterId{value='693fc2d0052b6b3b4c6bc452', description='null'}-localhost:27017] DEBUG org.mongodb.driver.connection - Connection pool ready for localhost:27017
-2025-12-15 17:12:00 [Test worker] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
-2025-12-15 17:12:00 [Test worker] INFO o.s.b.c.l.s.TaskExecutorJobLauncher - Job: [SimpleJob: [name=slackJudge]] launched with the following parameters: [{'batchTime':'{value=2025-12-15T17:12:00.542972, type=class java.time.LocalDateTime, identifying=true}'}]
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [LoadAllUsersStep]
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [LoadAllUsersStep] executed in 9ms
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [LoadSnapshotStep]
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [LoadSnapshotStep] executed in 16ms
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [FetchSolvedAcUserInfoStep]
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [FetchSolvedAcUserInfoStep] executed in 3ms
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [detectAndUpdateUserTierAndProblemStep]
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [detectAndUpdateUserTierAndProblemStep] executed in 4ms
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.job.SimpleStepHandler - Executing step: [saveSnapshotStep]
-2025-12-15 17:12:00 [Test worker] INFO o.s.batch.core.step.AbstractStep - Step: [saveSnapshotStep] executed in 2ms
-2025-12-15 17:12:00 [Test worker] INFO o.s.b.c.l.s.TaskExecutorJobLauncher - Job: [SimpleJob: [name=slackJudge]] completed with the following parameters: [{'batchTime':'{value=2025-12-15T17:12:00.542972, type=class java.time.LocalDateTime, identifying=true}'}] and the following status: [COMPLETED] in 127ms
-2025-12-15 17:12:00 [SpringApplicationShutdownHook] DEBUG org.mongodb.driver.connection - Connection pool closed for localhost:27017
-2025-12-15 17:12:00 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:03:17 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-16 16:03:17 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-16 16:03:17 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-16 16:03:17 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 58 ms. Found 0 JPA repository interfaces.
-2025-12-16 16:03:18 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-16 16:03:24 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-16 16:03:25 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:03:26 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:03:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-16 16:03:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-16 16:03:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-16 16:03:57 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 22 ms. Found 0 JPA repository interfaces.
-2025-12-16 16:03:57 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-16 16:03:59 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-16 16:04:00 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:04:01 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:04:25 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-16 16:04:25 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-16 16:04:25 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-16 16:04:25 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 0 JPA repository interfaces.
-2025-12-16 16:04:26 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-16 16:04:28 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-16 16:04:28 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:04:30 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:05:22 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2025-12-16 16:05:22 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2025-12-16 16:05:22 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface store.slackjudge.batch.infra.mongo.repository.UserSolvedSnapShotRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
-2025-12-16 16:05:22 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 25 ms. Found 0 JPA repository interfaces.
-2025-12-16 16:05:22 [Test worker] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
-2025-12-16 16:05:25 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
-2025-12-16 16:05:25 [Test worker] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2025-12-16 16:05:27 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/SlackJudgeBatchRunner.java b/src/main/java/store/slackjudge/batch/SlackJudgeBatchRunner.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/SlackJudgeBatchRunner.java
rename to src/main/java/store/slackjudge/batch/SlackJudgeBatchRunner.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/SlackjudgeApplication.java b/src/main/java/store/slackjudge/batch/SlackjudgeApplication.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/SlackjudgeApplication.java
rename to src/main/java/store/slackjudge/batch/SlackjudgeApplication.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/common/CalculateSnapShotDate.java b/src/main/java/store/slackjudge/batch/common/CalculateSnapShotDate.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/common/CalculateSnapShotDate.java
rename to src/main/java/store/slackjudge/batch/common/CalculateSnapShotDate.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/BatchConfig.java b/src/main/java/store/slackjudge/batch/config/BatchConfig.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/BatchConfig.java
rename to src/main/java/store/slackjudge/batch/config/BatchConfig.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/BatchJobListener.java b/src/main/java/store/slackjudge/batch/config/BatchJobListener.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/BatchJobListener.java
rename to src/main/java/store/slackjudge/batch/config/BatchJobListener.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/BatchLogger.java b/src/main/java/store/slackjudge/batch/config/BatchLogger.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/BatchLogger.java
rename to src/main/java/store/slackjudge/batch/config/BatchLogger.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/MongoConfig.java b/src/main/java/store/slackjudge/batch/config/MongoConfig.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/MongoConfig.java
rename to src/main/java/store/slackjudge/batch/config/MongoConfig.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/RetryConfig.java b/src/main/java/store/slackjudge/batch/config/RetryConfig.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/RetryConfig.java
rename to src/main/java/store/slackjudge/batch/config/RetryConfig.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/TimeConfig.java b/src/main/java/store/slackjudge/batch/config/TimeConfig.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/TimeConfig.java
rename to src/main/java/store/slackjudge/batch/config/TimeConfig.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/WebClientConfig.java b/src/main/java/store/slackjudge/batch/config/WebClientConfig.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/WebClientConfig.java
rename to src/main/java/store/slackjudge/batch/config/WebClientConfig.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/converter/DateToLocalDateTimeKstConverter.java b/src/main/java/store/slackjudge/batch/config/converter/DateToLocalDateTimeKstConverter.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/converter/DateToLocalDateTimeKstConverter.java
rename to src/main/java/store/slackjudge/batch/config/converter/DateToLocalDateTimeKstConverter.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/config/converter/LocalDateTimeToDateKstConverter.java b/src/main/java/store/slackjudge/batch/config/converter/LocalDateTimeToDateKstConverter.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/config/converter/LocalDateTimeToDateKstConverter.java
rename to src/main/java/store/slackjudge/batch/config/converter/LocalDateTimeToDateKstConverter.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/dto/UserInfo.java b/src/main/java/store/slackjudge/batch/dto/UserInfo.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/dto/UserInfo.java
rename to src/main/java/store/slackjudge/batch/dto/UserInfo.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/document/SnapShotId.java b/src/main/java/store/slackjudge/batch/infra/mongo/document/SnapShotId.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/document/SnapShotId.java
rename to src/main/java/store/slackjudge/batch/infra/mongo/document/SnapShotId.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/document/UserSolvedSnapShotDocument.java b/src/main/java/store/slackjudge/batch/infra/mongo/document/UserSolvedSnapShotDocument.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/document/UserSolvedSnapShotDocument.java
rename to src/main/java/store/slackjudge/batch/infra/mongo/document/UserSolvedSnapShotDocument.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/dto/SaveSnapshot.java b/src/main/java/store/slackjudge/batch/infra/mongo/dto/SaveSnapshot.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/dto/SaveSnapshot.java
rename to src/main/java/store/slackjudge/batch/infra/mongo/dto/SaveSnapshot.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepository.java b/src/main/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepository.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepository.java
rename to src/main/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepository.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotService.java b/src/main/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotService.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotService.java
rename to src/main/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotService.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/SlackNotificationService.java b/src/main/java/store/slackjudge/batch/infra/slack/SlackNotificationService.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/SlackNotificationService.java
rename to src/main/java/store/slackjudge/batch/infra/slack/SlackNotificationService.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/LogEventMessageSpec.java b/src/main/java/store/slackjudge/batch/infra/slack/logging/LogEventMessageSpec.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/LogEventMessageSpec.java
rename to src/main/java/store/slackjudge/batch/infra/slack/logging/LogEventMessageSpec.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogAppender.java b/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogAppender.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogAppender.java
rename to src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogAppender.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogFormatter.java b/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogFormatter.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogFormatter.java
rename to src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLogFormatter.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLoggingWebhookSender.java b/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLoggingWebhookSender.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLoggingWebhookSender.java
rename to src/main/java/store/slackjudge/batch/infra/slack/logging/SlackLoggingWebhookSender.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/BatchEndMessageSpec.java b/src/main/java/store/slackjudge/batch/infra/slack/message/BatchEndMessageSpec.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/BatchEndMessageSpec.java
rename to src/main/java/store/slackjudge/batch/infra/slack/message/BatchEndMessageSpec.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/BatchStartMessageSpec.java b/src/main/java/store/slackjudge/batch/infra/slack/message/BatchStartMessageSpec.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/BatchStartMessageSpec.java
rename to src/main/java/store/slackjudge/batch/infra/slack/message/BatchStartMessageSpec.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactory.java b/src/main/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactory.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactory.java
rename to src/main/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactory.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/SlackTextLayout.java b/src/main/java/store/slackjudge/batch/infra/slack/message/SlackTextLayout.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/message/SlackTextLayout.java
rename to src/main/java/store/slackjudge/batch/infra/slack/message/SlackTextLayout.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/sender/SlackSender.java b/src/main/java/store/slackjudge/batch/infra/slack/sender/SlackSender.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/sender/SlackSender.java
rename to src/main/java/store/slackjudge/batch/infra/slack/sender/SlackSender.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/slack/sender/SlackWebhookSender.java b/src/main/java/store/slackjudge/batch/infra/slack/sender/SlackWebhookSender.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/slack/sender/SlackWebhookSender.java
rename to src/main/java/store/slackjudge/batch/infra/slack/sender/SlackWebhookSender.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/SolvedAcProperties.java b/src/main/java/store/slackjudge/batch/infra/solvedac/SolvedAcProperties.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/SolvedAcProperties.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/SolvedAcProperties.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClient.java b/src/main/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClient.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClient.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClient.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClient.java b/src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClient.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClient.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClient.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClient.java b/src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClient.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClient.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClient.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemInfoResponse.java b/src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemInfoResponse.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemInfoResponse.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemInfoResponse.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemSearchResponse.java b/src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemSearchResponse.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemSearchResponse.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/dto/ProblemSearchResponse.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/dto/UserInfoResponse.java b/src/main/java/store/slackjudge/batch/infra/solvedac/dto/UserInfoResponse.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/dto/UserInfoResponse.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/dto/UserInfoResponse.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilder.java b/src/main/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilder.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilder.java
rename to src/main/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilder.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/repository/ProblemJdbcRepository.java b/src/main/java/store/slackjudge/batch/repository/ProblemJdbcRepository.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/repository/ProblemJdbcRepository.java
rename to src/main/java/store/slackjudge/batch/repository/ProblemJdbcRepository.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/repository/UserJdbcRepository.java b/src/main/java/store/slackjudge/batch/repository/UserJdbcRepository.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/repository/UserJdbcRepository.java
rename to src/main/java/store/slackjudge/batch/repository/UserJdbcRepository.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/service/DetectionContext.java b/src/main/java/store/slackjudge/batch/service/DetectionContext.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/service/DetectionContext.java
rename to src/main/java/store/slackjudge/batch/service/DetectionContext.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/service/ProblemChangeDetector.java b/src/main/java/store/slackjudge/batch/service/ProblemChangeDetector.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/service/ProblemChangeDetector.java
rename to src/main/java/store/slackjudge/batch/service/ProblemChangeDetector.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/service/SnapshotDetectStrategy.java b/src/main/java/store/slackjudge/batch/service/SnapshotDetectStrategy.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/service/SnapshotDetectStrategy.java
rename to src/main/java/store/slackjudge/batch/service/SnapshotDetectStrategy.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/service/TierChangeDetector.java b/src/main/java/store/slackjudge/batch/service/TierChangeDetector.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/service/TierChangeDetector.java
rename to src/main/java/store/slackjudge/batch/service/TierChangeDetector.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTasklet.java b/src/main/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTasklet.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTasklet.java
rename to src/main/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTasklet.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTasklet.java b/src/main/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTasklet.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTasklet.java
rename to src/main/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTasklet.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/tasklet/LoadAllUsersTasklet.java b/src/main/java/store/slackjudge/batch/tasklet/LoadAllUsersTasklet.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/tasklet/LoadAllUsersTasklet.java
rename to src/main/java/store/slackjudge/batch/tasklet/LoadAllUsersTasklet.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/tasklet/LoadSnapshotTasklet.java b/src/main/java/store/slackjudge/batch/tasklet/LoadSnapshotTasklet.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/tasklet/LoadSnapshotTasklet.java
rename to src/main/java/store/slackjudge/batch/tasklet/LoadSnapshotTasklet.java
diff --git a/slackjudge/src/main/java/store/slackjudge/batch/tasklet/SaveSnapshotTasklet.java b/src/main/java/store/slackjudge/batch/tasklet/SaveSnapshotTasklet.java
similarity index 100%
rename from slackjudge/src/main/java/store/slackjudge/batch/tasklet/SaveSnapshotTasklet.java
rename to src/main/java/store/slackjudge/batch/tasklet/SaveSnapshotTasklet.java
diff --git a/slackjudge/src/main/resources/application.yml b/src/main/resources/application.yml
similarity index 100%
rename from slackjudge/src/main/resources/application.yml
rename to src/main/resources/application.yml
diff --git a/slackjudge/src/main/resources/batch.yml b/src/main/resources/batch.yml
similarity index 100%
rename from slackjudge/src/main/resources/batch.yml
rename to src/main/resources/batch.yml
diff --git a/slackjudge/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
similarity index 100%
rename from slackjudge/src/main/resources/logback-spring.xml
rename to src/main/resources/logback-spring.xml
diff --git a/slackjudge/src/main/resources/mongo.yml b/src/main/resources/mongo.yml
similarity index 100%
rename from slackjudge/src/main/resources/mongo.yml
rename to src/main/resources/mongo.yml
diff --git a/slackjudge/src/main/resources/postgres.yml b/src/main/resources/postgres.yml
similarity index 100%
rename from slackjudge/src/main/resources/postgres.yml
rename to src/main/resources/postgres.yml
diff --git a/slackjudge/src/test/java/sql/create_problem_problem_type_table.sql b/src/test/java/sql/create_problem_problem_type_table.sql
similarity index 100%
rename from slackjudge/src/test/java/sql/create_problem_problem_type_table.sql
rename to src/test/java/sql/create_problem_problem_type_table.sql
diff --git a/slackjudge/src/test/java/sql/create_problem_table.sql b/src/test/java/sql/create_problem_table.sql
similarity index 100%
rename from slackjudge/src/test/java/sql/create_problem_table.sql
rename to src/test/java/sql/create_problem_table.sql
diff --git a/slackjudge/src/test/java/sql/create_problem_type_table.sql b/src/test/java/sql/create_problem_type_table.sql
similarity index 100%
rename from slackjudge/src/test/java/sql/create_problem_type_table.sql
rename to src/test/java/sql/create_problem_type_table.sql
diff --git a/slackjudge/src/test/java/sql/create_user_problem_table.sql b/src/test/java/sql/create_user_problem_table.sql
similarity index 100%
rename from slackjudge/src/test/java/sql/create_user_problem_table.sql
rename to src/test/java/sql/create_user_problem_table.sql
diff --git a/slackjudge/src/test/java/sql/create_user_table.sql b/src/test/java/sql/create_user_table.sql
similarity index 100%
rename from slackjudge/src/test/java/sql/create_user_table.sql
rename to src/test/java/sql/create_user_table.sql
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/EnablePostgresTest.java b/src/test/java/store/slackjudge/batch/EnablePostgresTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/EnablePostgresTest.java
rename to src/test/java/store/slackjudge/batch/EnablePostgresTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/PostgresTestContainer.java b/src/test/java/store/slackjudge/batch/PostgresTestContainer.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/PostgresTestContainer.java
rename to src/test/java/store/slackjudge/batch/PostgresTestContainer.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/SlackjudgeApplicationTests.java b/src/test/java/store/slackjudge/batch/SlackjudgeApplicationTests.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/SlackjudgeApplicationTests.java
rename to src/test/java/store/slackjudge/batch/SlackjudgeApplicationTests.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/TestContainer.java b/src/test/java/store/slackjudge/batch/TestContainer.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/TestContainer.java
rename to src/test/java/store/slackjudge/batch/TestContainer.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/common/CalculateSnapShotDateTest.java b/src/test/java/store/slackjudge/batch/common/CalculateSnapShotDateTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/common/CalculateSnapShotDateTest.java
rename to src/test/java/store/slackjudge/batch/common/CalculateSnapShotDateTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/document/SnapShotIdTest.java b/src/test/java/store/slackjudge/batch/infra/mongo/document/SnapShotIdTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/document/SnapShotIdTest.java
rename to src/test/java/store/slackjudge/batch/infra/mongo/document/SnapShotIdTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepositoryTest.java b/src/test/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepositoryTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepositoryTest.java
rename to src/test/java/store/slackjudge/batch/infra/mongo/repository/UserSolvedSnapShotRepositoryTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotServiceTest.java b/src/test/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotServiceTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotServiceTest.java
rename to src/test/java/store/slackjudge/batch/infra/mongo/service/UserSnapShotServiceTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/service/detector/ProblemChangeDetectorTest.java b/src/test/java/store/slackjudge/batch/infra/mongo/service/detector/ProblemChangeDetectorTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/service/detector/ProblemChangeDetectorTest.java
rename to src/test/java/store/slackjudge/batch/infra/mongo/service/detector/ProblemChangeDetectorTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/service/detector/TierChangeDetectorTest.java b/src/test/java/store/slackjudge/batch/infra/mongo/service/detector/TierChangeDetectorTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/mongo/service/detector/TierChangeDetectorTest.java
rename to src/test/java/store/slackjudge/batch/infra/mongo/service/detector/TierChangeDetectorTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactoryTest.java b/src/test/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactoryTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactoryTest.java
rename to src/test/java/store/slackjudge/batch/infra/slack/message/SlackMessageFactoryTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/slack/message/SlackTextLayoutTest.java b/src/test/java/store/slackjudge/batch/infra/slack/message/SlackTextLayoutTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/slack/message/SlackTextLayoutTest.java
rename to src/test/java/store/slackjudge/batch/infra/slack/message/SlackTextLayoutTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClientTest.java b/src/test/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClientTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClientTest.java
rename to src/test/java/store/slackjudge/batch/infra/solvedac/client/AbstractSolvedAcApiClientTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClientTest.java b/src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClientTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClientTest.java
rename to src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcProblemInfoClientTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClientTest.java b/src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClientTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClientTest.java
rename to src/test/java/store/slackjudge/batch/infra/solvedac/client/SolvedAcUserInfoClientTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilderTest.java b/src/test/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilderTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilderTest.java
rename to src/test/java/store/slackjudge/batch/infra/solvedac/util/UrlBuilderTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/repository/ProblemJdbcRepositoryTest.java b/src/test/java/store/slackjudge/batch/repository/ProblemJdbcRepositoryTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/repository/ProblemJdbcRepositoryTest.java
rename to src/test/java/store/slackjudge/batch/repository/ProblemJdbcRepositoryTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/repository/UserJdbcRepositoryTest.java b/src/test/java/store/slackjudge/batch/repository/UserJdbcRepositoryTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/repository/UserJdbcRepositoryTest.java
rename to src/test/java/store/slackjudge/batch/repository/UserJdbcRepositoryTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTaskletTest.java b/src/test/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTaskletTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTaskletTest.java
rename to src/test/java/store/slackjudge/batch/tasklet/DetectAndUpdateUserTierAndProblemTaskletTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTaskletTest.java b/src/test/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTaskletTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTaskletTest.java
rename to src/test/java/store/slackjudge/batch/tasklet/FetchSolvedAcUserInfoTaskletTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/tasklet/LoadAllUsersTaskletTest.java b/src/test/java/store/slackjudge/batch/tasklet/LoadAllUsersTaskletTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/tasklet/LoadAllUsersTaskletTest.java
rename to src/test/java/store/slackjudge/batch/tasklet/LoadAllUsersTaskletTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/tasklet/LoadSnapshotTaskletTest.java b/src/test/java/store/slackjudge/batch/tasklet/LoadSnapshotTaskletTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/tasklet/LoadSnapshotTaskletTest.java
rename to src/test/java/store/slackjudge/batch/tasklet/LoadSnapshotTaskletTest.java
diff --git a/slackjudge/src/test/java/store/slackjudge/batch/tasklet/SaveSnapshotTaskletTest.java b/src/test/java/store/slackjudge/batch/tasklet/SaveSnapshotTaskletTest.java
similarity index 100%
rename from slackjudge/src/test/java/store/slackjudge/batch/tasklet/SaveSnapshotTaskletTest.java
rename to src/test/java/store/slackjudge/batch/tasklet/SaveSnapshotTaskletTest.java
diff --git a/slackjudge/src/test/resources/application-test.yml b/src/test/resources/application-test.yml
similarity index 100%
rename from slackjudge/src/test/resources/application-test.yml
rename to src/test/resources/application-test.yml
diff --git a/slackjudge/src/test/resources/init_schema.sql b/src/test/resources/init_schema.sql
similarity index 100%
rename from slackjudge/src/test/resources/init_schema.sql
rename to src/test/resources/init_schema.sql
diff --git a/slackjudge/src/test/resources/valid_problem.json b/src/test/resources/valid_problem.json
similarity index 100%
rename from slackjudge/src/test/resources/valid_problem.json
rename to src/test/resources/valid_problem.json
diff --git a/slackjudge/src/test/resources/valid_user.json b/src/test/resources/valid_user.json
similarity index 100%
rename from slackjudge/src/test/resources/valid_user.json
rename to src/test/resources/valid_user.json