/*
* Copyright (c) 2023. yo-saito. All Rights Reserved.
*/
package net.piedpiper.bremer.dao
import net.piedpiper.bremer.entity.AudioPlayHistoryEntity
import net.piedpiper.bremer.utils.SelectSQLBuilder
import net.piedpiper.bremer.utils.WHERE_IN
import org.apache.ibatis.annotations.*
import org.apache.ibatis.jdbc.SQL
import org.springframework.stereotype.Repository
@Repository("bremer.dao.AudioPlayHistoryDao")
@Mapper
interface AudioPlayHistoryDao {
@ResultMap("net.piedpiper.bremer.AudioPlayHistoryEntity")
@Select(
"SELECT * FROM audio_play_history ORDER BY last_played_at DESC " +
"LIMIT #{limit} OFFSET #{offset}"
)
fun findAllOrderLastPlayedAtDescLimit(
@Param("limit") limit: Int,
@Param("offset") offset: Long
): List<AudioPlayHistoryEntity>
@Insert(
"""
INSERT INTO audio_play_history (audio_id,last_played_at) VALUES (#{entity.audioId},
#{entity.lastPlayedAt, typeHandler=net.piedpiper.bremer.dao.handler.LocalDateTimeTypeHandler})
ON DUPLICATE KEY UPDATE last_played_at = VALUES (last_played_at);
"""
)
@Options(useGeneratedKeys = true, keyProperty = "id")
fun insertOrUpdateOne(@Param("entity") entity: AudioPlayHistoryEntity): Boolean
@DeleteProvider(type = Sql::class, method = "deleteAllByIds")
fun deleteAllByIds(@Param("ids") ids: List<Long>): Long
class Sql {
companion object {
@JvmStatic
fun deleteAllByIds(@Param("ids") ids: List<Long>): String = SQL()
.DELETE_FROM("audio_play_history")
.WHERE_IN("id", "ids", ids.size)
.toString()
}
}
}