/* * Copyright (c) 2023. yo-saito. All Rights Reserved. */ package net.piedpiper.bremer.dao import net.piedpiper.bremer.entity.PlaylistAudioEntity import net.piedpiper.bremer.entity.PlaylistEntity import net.piedpiper.bremer.utils.DaoUtils import net.piedpiper.bremer.utils.SelectSQLBuilder import org.apache.ibatis.annotations.* import org.springframework.stereotype.Repository @Repository("bremer.dao.PlaylistDao") @Mapper interface PlaylistDao { @ResultMap("net.piedpiper.bremer.PlaylistEntity") @SelectProvider(type = Sql::class, method = "findOneById") fun findOneById(@Param("id") id: Long): PlaylistEntity? @ResultMap("net.piedpiper.bremer.PlaylistEntity") @Select("SELECT * FROM playlist WHERE slug = #{slug} FOR UPDATE") fun findOneBySlugWithLock(@Param("slug") slug: String): PlaylistEntity? @ResultMap("net.piedpiper.bremer.PlaylistEntity") @SelectProvider(type = Sql::class, method = "findOneBySlug") fun findOneBySlug(@Param("slug") slug: String): PlaylistEntity? @ResultMap("net.piedpiper.bremer.PlaylistEntity") @Select("SELECT * FROM playlist ORDER BY sequence ASC") fun findAllOrderBySequence(): List<PlaylistEntity> @InsertProvider(type = Sql::class, method = "insertOne") @Options(useGeneratedKeys = true, keyProperty = "id") fun insertOne(@Param("entity") entity: PlaylistEntity): Boolean @Delete("DELETE FROM playlist WHERE slug = #{slug}") fun deleteBySlug(@Param("slug") slug: String): Boolean @UpdateProvider(type = Sql::class, method = "updateOne") fun updateOne(@Param("entity") entity: PlaylistEntity) class Sql { companion object { @JvmStatic fun findOneById(): String = SelectSQLBuilder(PlaylistEntity::class) .leftOuterJoin( PlaylistAudioEntity::class, "playlist.id = playlist_audio.playlist_id" ) .toSql() .WHERE("playlist.id = #{id}") .ORDER_BY("playlist_audio.sequence ASC") .toString() @JvmStatic fun findOneBySlug(): String = SelectSQLBuilder(PlaylistEntity::class) .leftOuterJoin( PlaylistAudioEntity::class, "playlist.id = playlist_audio.playlist_id" ) .toSql() .WHERE("playlist.slug = #{slug}") .ORDER_BY("playlist_audio.sequence ASC") .toString() @JvmStatic @Options(useGeneratedKeys = true, keyColumn = "id") fun insertOne(@Param("entity") entity: PlaylistEntity): String = DaoUtils.insertOne(entity) @JvmStatic fun updateOne(@Param("entity") entity: PlaylistEntity): String = DaoUtils.updateOne(entity) } } }