diff --git a/build.gradle.kts b/build.gradle.kts index 21a04252..d927bf95 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,6 @@ plugins { kotlin("plugin.jpa") version "2.1.10" apply false kotlin("plugin.serialization") version "2.1.10" apply false kotlin("plugin.allopen") version "2.1.10" apply false - kotlin("kapt") version "2.1.10" apply false id("org.springframework.boot") version "3.2.3" apply false id("io.spring.dependency-management") version "1.1.4" apply false id("com.github.ben-manes.versions") version "0.51.0" diff --git a/planet/build.gradle.kts b/planet/build.gradle.kts index 0065726f..1e4a35f7 100644 --- a/planet/build.gradle.kts +++ b/planet/build.gradle.kts @@ -11,7 +11,6 @@ plugins { kotlin("plugin.jpa") version ktVer kotlin("plugin.serialization") version ktVer kotlin("plugin.allopen") version ktVer - kotlin("kapt") version ktVer id("org.springframework.boot") version "3.2.3" id("io.spring.dependency-management") version "1.1.4" id("com.github.ben-manes.versions") version "0.51.0" @@ -49,9 +48,6 @@ dependencies { runtimeOnly("org.xerial:sqlite-jdbc:3.45.2.0") implementation("org.hibernate.orm:hibernate-core:6.4.4.Final") implementation("org.hibernate.orm:hibernate-community-dialects:6.4.4.Final") - implementation("io.github.openfeign.querydsl:querydsl-jpa:6.10.1") - kapt("io.github.openfeign.querydsl:querydsl-apt:6.10.1:jpa") - // JSR305 for nullable implementation("com.google.code.findbugs:jsr305:3.0.2") @@ -117,10 +113,6 @@ hibernate { } } -kapt { - includeCompileClasspath = true - keepJavacAnnotationProcessors = true -} allOpen { annotation("jakarta.persistence.Entity") @@ -156,11 +148,6 @@ tasks.getByName("jar") { enabled = false } -sourceSets { - main { - java.srcDir("${layout.buildDirectory.get()}/generated/source/kapt/main") - } -} val copyDependencies by tasks.registering(Copy::class) { from(configurations.runtimeClasspath) diff --git a/planet/src/main/kotlin/aquadx/sega/maimai2/handler/GetGameRankingHandler.kt b/planet/src/main/kotlin/aquadx/sega/maimai2/handler/GetGameRankingHandler.kt index b74b11bc..3580c1d5 100644 --- a/planet/src/main/kotlin/aquadx/sega/maimai2/handler/GetGameRankingHandler.kt +++ b/planet/src/main/kotlin/aquadx/sega/maimai2/handler/GetGameRankingHandler.kt @@ -1,11 +1,11 @@ package aquadx.sega.maimai2.handler -import com.querydsl.jpa.impl.JPAQueryFactory +import aquadx.sega.maimai2.model.Mai2UserPlaylogRepo import ext.logger import ext.thread import aquadx.sega.allnet.TokenChecker import aquadx.sega.general.BaseHandler -import aquadx.sega.maimai2.model.userdata.QMai2UserPlaylog +import org.springframework.data.domain.PageRequest import org.springframework.scheduling.annotation.Scheduled import org.springframework.stereotype.Component import java.time.LocalDateTime @@ -17,7 +17,7 @@ import kotlin.concurrent.Volatile */ @Component("Maimai2GetGameRankingHandler") class GetGameRankingHandler( - private val queryFactory: JPAQueryFactory + private val playlogRepo: Mai2UserPlaylogRepo ) : BaseHandler { private data class MusicRankingItem(val musicId: Int, val weight: Long) @@ -37,18 +37,8 @@ class GetGameRankingHandler( val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") val queryAfterStr = queryAfter.format(formatter) - val qPlaylog = QMai2UserPlaylog.mai2UserPlaylog - val cMusicId = qPlaylog.musicId - val cUserCount = qPlaylog.user.id.countDistinct() - musicRankingCache = queryFactory - .select(cMusicId, cUserCount) - .from(qPlaylog) - .where(qPlaylog.userPlayDate.stringValue().goe(queryAfterStr)) - .groupBy(cMusicId) - .orderBy(cUserCount.desc()) - .limit(QUERY_LIMIT) - .fetch() - .map { MusicRankingItem(it.get(cMusicId)!!, it.get(cUserCount)!!) } + musicRankingCache = playlogRepo.getMusicRanking(queryAfterStr, PageRequest.of(0, QUERY_LIMIT.toInt())) + .map { MusicRankingItem(it.musicId, it.userCount) } log.info("Refreshed music ranking cache: ${musicRankingCache.size} items") } diff --git a/planet/src/main/kotlin/aquadx/sega/maimai2/model/Repos.kt b/planet/src/main/kotlin/aquadx/sega/maimai2/model/Repos.kt index bf84f3d3..5c7c8ea6 100644 --- a/planet/src/main/kotlin/aquadx/sega/maimai2/model/Repos.kt +++ b/planet/src/main/kotlin/aquadx/sega/maimai2/model/Repos.kt @@ -12,6 +12,7 @@ import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.Modifying +import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.NoRepositoryBean import org.springframework.stereotype.Component import org.springframework.transaction.annotation.Transactional @@ -105,6 +106,14 @@ interface Mai2UserPlaylogRepo : GenericPlaylogRepo, Mai2UserLin userPlayDate: String ): MutableList fun findByUserAndUserPlayDateAfter(user: Mai2UserDetail, userPlayDate: String): List + + @Query("select p.musicId as musicId, count(distinct p.user.id) as userCount from Mai2UserPlaylog p where p.userPlayDate >= :date group by p.musicId order by userCount desc") + fun getMusicRanking(date: String, pageable: Pageable): List +} + +interface Mai2MusicRanking { + val musicId: Int + val userCount: Long } interface Mai2UserPrintDetailRepo : JpaRepository diff --git a/planet/src/main/kotlin/aquadx/spring/QuerydslConfig.kt b/planet/src/main/kotlin/aquadx/spring/QuerydslConfig.kt deleted file mode 100644 index bedd2058..00000000 --- a/planet/src/main/kotlin/aquadx/spring/QuerydslConfig.kt +++ /dev/null @@ -1,18 +0,0 @@ -package aquadx.spring - -import com.querydsl.jpa.impl.JPAQueryFactory -import jakarta.persistence.EntityManager -import jakarta.persistence.PersistenceContext -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration - -@Configuration -class QuerydslConfig { - @PersistenceContext - private lateinit var entityManager: EntityManager - - @Bean - fun jpaQueryFactory(): JPAQueryFactory { - return JPAQueryFactory(entityManager) - } -} diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index a54b9294..4e6a1123 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -2,7 +2,6 @@ plugins { kotlin("jvm") kotlin("plugin.jpa") kotlin("plugin.serialization") - kotlin("kapt") id("org.hibernate.orm") version "6.4.4.Final" } @@ -13,10 +12,6 @@ dependencies { api("com.fasterxml.jackson.core:jackson-databind:2.17.0") api("com.fasterxml.jackson.module:jackson-module-kotlin:2.17.0") - // QueryDSL - implementation("io.github.openfeign.querydsl:querydsl-jpa:6.10.1") - kapt("io.github.openfeign.querydsl:querydsl-apt:6.10.1:jpa") - // Core libraries api("org.slf4j:slf4j-api:2.0.12") api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") @@ -35,8 +30,3 @@ hibernate { } } -sourceSets { - main { - java.srcDir("${layout.buildDirectory.get()}/generated/source/kapt/main") - } -}