mirror of
https://github.com/hykilpikonna/AquaDX.git
synced 2026-05-06 21:12:38 -05:00
[-] QueryDSL
This commit is contained in:
parent
8d4a027d48
commit
48efafdc44
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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>("jar") {
|
|||
enabled = false
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
java.srcDir("${layout.buildDirectory.get()}/generated/source/kapt/main")
|
||||
}
|
||||
}
|
||||
|
||||
val copyDependencies by tasks.registering(Copy::class) {
|
||||
from(configurations.runtimeClasspath)
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Mai2UserPlaylog>, Mai2UserLin
|
|||
userPlayDate: String
|
||||
): MutableList<Mai2UserPlaylog>
|
||||
fun findByUserAndUserPlayDateAfter(user: Mai2UserDetail, userPlayDate: String): List<Mai2UserPlaylog>
|
||||
|
||||
@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<Mai2MusicRanking>
|
||||
}
|
||||
|
||||
interface Mai2MusicRanking {
|
||||
val musicId: Int
|
||||
val userCount: Long
|
||||
}
|
||||
|
||||
interface Mai2UserPrintDetailRepo : JpaRepository<Mai2UserPrintDetail, Long>
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user