fix(api): 콘텐츠 설정 PATCH 제외 API 파라미터를 제거한다

This commit is contained in:
2026-03-27 22:28:02 +09:00
parent 25d549b06f
commit 4815cac49b
15 changed files with 36 additions and 123 deletions

View File

@@ -22,7 +22,6 @@ import kr.co.vividnext.sodalive.audio_content.upload.theme.GetAudioContentThemeR
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.explorer.profile.GetAudioContentListResponse import kr.co.vividnext.sodalive.explorer.profile.GetAudioContentListResponse
import kr.co.vividnext.sodalive.home.AudioContentMainItem import kr.co.vividnext.sodalive.home.AudioContentMainItem
import kr.co.vividnext.sodalive.settings.ContentType
import okhttp3.MultipartBody import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.http.Body import retrofit2.http.Body
@@ -39,8 +38,6 @@ import retrofit2.http.Query
interface AudioContentApi { interface AudioContentApi {
@GET("/audio-content/all") @GET("/audio-content/all")
fun getAllAudioContents( fun getAllAudioContents(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Query("isFree") isFree: Boolean?, @Query("isFree") isFree: Boolean?,
@@ -54,7 +51,6 @@ interface AudioContentApi {
fun getAudioContentList( fun getAudioContentList(
@Query("creator-id") id: Long, @Query("creator-id") id: Long,
@Query("category-id") categoryId: Long, @Query("category-id") categoryId: Long,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Query("sort-type") sort: AudioContentViewModel.Sort, @Query("sort-type") sort: AudioContentViewModel.Sort,
@@ -63,8 +59,6 @@ interface AudioContentApi {
@GET("/audio-content/replay-live") @GET("/audio-content/replay-live")
fun getAudioContentReplayLiveList( fun getAudioContentReplayLiveList(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Flowable<ApiResponse<List<GetAudioContentMainItem>>> ): Flowable<ApiResponse<List<GetAudioContentMainItem>>>
@@ -75,8 +69,6 @@ interface AudioContentApi {
@GET("/audio-content/theme/active") @GET("/audio-content/theme/active")
fun getAudioContentActiveThemeList( fun getAudioContentActiveThemeList(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("isFree") isFree: Boolean?, @Query("isFree") isFree: Boolean?,
@Query("isPointAvailableOnly") isPointAvailableOnly: Boolean?, @Query("isPointAvailableOnly") isPointAvailableOnly: Boolean?,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
@@ -85,8 +77,6 @@ interface AudioContentApi {
@GET("/audio-content/theme/{id}/content") @GET("/audio-content/theme/{id}/content")
fun getAudioContentByTheme( fun getAudioContentByTheme(
@Path("id") id: Long, @Path("id") id: Long,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Query("sort-type") sort: AudioContentViewModel.Sort, @Query("sort-type") sort: AudioContentViewModel.Sort,
@@ -175,8 +165,6 @@ interface AudioContentApi {
@GET("/audio-content/main/new") @GET("/audio-content/main/new")
fun getNewContentOfTheme( fun getNewContentOfTheme(
@Query("theme") theme: String, @Query("theme") theme: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<GetAudioContentMainItem>>> ): Single<ApiResponse<List<GetAudioContentMainItem>>>
@@ -184,8 +172,6 @@ interface AudioContentApi {
fun getNewContentAllOfTheme( fun getNewContentAllOfTheme(
@Query("isFree") isFree: Boolean, @Query("isFree") isFree: Boolean,
@Query("theme") theme: String, @Query("theme") theme: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
@@ -205,8 +191,6 @@ interface AudioContentApi {
@GET("/audio-content/main/theme") @GET("/audio-content/main/theme")
fun getNewContentThemeList( fun getNewContentThemeList(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<String>>> ): Single<ApiResponse<List<String>>>
@@ -225,8 +209,6 @@ interface AudioContentApi {
@GET("/audio-content/main/curation-list") @GET("/audio-content/main/curation-list")
fun getCurationList( fun getCurationList(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String

View File

@@ -6,9 +6,7 @@ import kr.co.vividnext.sodalive.audio_content.detail.PutAudioContentLikeRequest
import kr.co.vividnext.sodalive.audio_content.donation.AudioContentDonationRequest import kr.co.vividnext.sodalive.audio_content.donation.AudioContentDonationRequest
import kr.co.vividnext.sodalive.audio_content.order.OrderRequest import kr.co.vividnext.sodalive.audio_content.order.OrderRequest
import kr.co.vividnext.sodalive.audio_content.order.OrderType import kr.co.vividnext.sodalive.audio_content.order.OrderType
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder
import kr.co.vividnext.sodalive.settings.ContentType
import okhttp3.MultipartBody import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import java.util.TimeZone import java.util.TimeZone
@@ -27,7 +25,6 @@ class AudioContentRepository(
) = api.getAudioContentList( ) = api.getAudioContentList(
id = id, id = id,
categoryId = categoryId, categoryId = categoryId,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
page = page - 1, page = page - 1,
size = size, size = size,
sort = sort, sort = sort,
@@ -35,8 +32,6 @@ class AudioContentRepository(
) )
fun getAudioContentReplayLiveList(token: String) = api.getAudioContentReplayLiveList( fun getAudioContentReplayLiveList(token: String) = api.getAudioContentReplayLiveList(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
@@ -123,16 +118,12 @@ class AudioContentRepository(
) = api.getNewContentAllOfTheme( ) = api.getNewContentAllOfTheme(
isFree = isFree, isFree = isFree,
theme = theme, theme = theme,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
authHeader = token authHeader = token
) )
fun getNewContentThemeList(token: String) = api.getNewContentThemeList( fun getNewContentThemeList(token: String) = api.getNewContentThemeList(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
@@ -188,8 +179,6 @@ class AudioContentRepository(
token: String token: String
) = api.getAudioContentByTheme( ) = api.getAudioContentByTheme(
id = themeId, id = themeId,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
sort = sort, sort = sort,
@@ -205,8 +194,6 @@ class AudioContentRepository(
theme: String? = null, theme: String? = null,
token: String token: String
) = api.getAllAudioContents( ) = api.getAllAudioContents(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
isFree = isFree, isFree = isFree,
@@ -221,8 +208,6 @@ class AudioContentRepository(
isPointAvailableOnly: Boolean? = null, isPointAvailableOnly: Boolean? = null,
token: String token: String
) = api.getAudioContentActiveThemeList( ) = api.getAudioContentActiveThemeList(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
isFree = isFree, isFree = isFree,
isPointAvailableOnly = isPointAvailableOnly, isPointAvailableOnly = isPointAvailableOnly,
authHeader = token authHeader = token

View File

@@ -4,7 +4,6 @@ import io.reactivex.rxjava3.core.Single
import kr.co.vividnext.sodalive.audio_content.series.detail.GetSeriesContentListResponse import kr.co.vividnext.sodalive.audio_content.series.detail.GetSeriesContentListResponse
import kr.co.vividnext.sodalive.audio_content.series.detail.GetSeriesDetailResponse import kr.co.vividnext.sodalive.audio_content.series.detail.GetSeriesDetailResponse
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.settings.ContentType
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Header import retrofit2.http.Header
import retrofit2.http.Path import retrofit2.http.Path
@@ -15,8 +14,6 @@ interface SeriesApi {
fun getSeriesList( fun getSeriesList(
@Query("creatorId") creatorId: Long?, @Query("creatorId") creatorId: Long?,
@Query("sortType") sortType: SeriesListAllViewModel.SeriesSortType, @Query("sortType") sortType: SeriesListAllViewModel.SeriesSortType,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("isOriginal") isOriginal: Boolean?, @Query("isOriginal") isOriginal: Boolean?,
@Query("isCompleted") isCompleted: Boolean?, @Query("isCompleted") isCompleted: Boolean?,
@Query("page") page: Int, @Query("page") page: Int,
@@ -27,14 +24,12 @@ interface SeriesApi {
@GET("/audio-content/series/{id}") @GET("/audio-content/series/{id}")
fun getSeriesDetail( fun getSeriesDetail(
@Path("id") seriesId: Long, @Path("id") seriesId: Long,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<GetSeriesDetailResponse>> ): Single<ApiResponse<GetSeriesDetailResponse>>
@GET("/audio-content/series/{id}/content") @GET("/audio-content/series/{id}/content")
fun getSeriesContentList( fun getSeriesContentList(
@Path("id") seriesId: Long, @Path("id") seriesId: Long,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Query("sortType") sortType: SeriesListAllViewModel.SeriesSortType, @Query("sortType") sortType: SeriesListAllViewModel.SeriesSortType,

View File

@@ -1,8 +1,5 @@
package kr.co.vividnext.sodalive.audio_content.series package kr.co.vividnext.sodalive.audio_content.series
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.settings.ContentType
class SeriesRepository(private val api: SeriesApi) { class SeriesRepository(private val api: SeriesApi) {
fun getSeriesList( fun getSeriesList(
creatorId: Long?, creatorId: Long?,
@@ -15,8 +12,6 @@ class SeriesRepository(private val api: SeriesApi) {
) = api.getSeriesList( ) = api.getSeriesList(
creatorId = creatorId, creatorId = creatorId,
sortType = sortType, sortType = sortType,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
isOriginal = isOriginal, isOriginal = isOriginal,
isCompleted = isCompleted, isCompleted = isCompleted,
page = page - 1, page = page - 1,
@@ -26,7 +21,6 @@ class SeriesRepository(private val api: SeriesApi) {
fun getSeriesDetail(seriesId: Long, token: String) = api.getSeriesDetail( fun getSeriesDetail(seriesId: Long, token: String) = api.getSeriesDetail(
seriesId = seriesId, seriesId = seriesId,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
authHeader = token authHeader = token
) )
@@ -38,7 +32,6 @@ class SeriesRepository(private val api: SeriesApi) {
token: String token: String
) = api.getSeriesContentList( ) = api.getSeriesContentList(
seriesId = seriesId, seriesId = seriesId,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
page = page - 1, page = page - 1,
size = size, size = size,
sortType = sortType, sortType = sortType,

View File

@@ -6,7 +6,6 @@ import kr.co.vividnext.sodalive.audio_content.series.main.by_genre.GetSeriesGenr
import kr.co.vividnext.sodalive.audio_content.series.main.home.SeriesHomeResponse import kr.co.vividnext.sodalive.audio_content.series.main.home.SeriesHomeResponse
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek
import kr.co.vividnext.sodalive.settings.ContentType
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Header import retrofit2.http.Header
import retrofit2.http.Query import retrofit2.http.Query
@@ -14,23 +13,17 @@ import retrofit2.http.Query
interface SeriesMainApi { interface SeriesMainApi {
@GET("/audio-content/series/main") @GET("/audio-content/series/main")
fun fetchHome( fun fetchHome(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<SeriesHomeResponse>> ): Single<ApiResponse<SeriesHomeResponse>>
@GET("/audio-content/series/main/recommend") @GET("/audio-content/series/main/recommend")
fun getRecommendSeriesList( fun getRecommendSeriesList(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<GetSeriesListResponse.SeriesListItem>>> ): Single<ApiResponse<List<GetSeriesListResponse.SeriesListItem>>>
@GET("/audio-content/series/main/day-of-week") @GET("/audio-content/series/main/day-of-week")
fun getDayOfWeekSeriesList( fun getDayOfWeekSeriesList(
@Query("dayOfWeek") dayOfWeek: SeriesPublishedDaysOfWeek, @Query("dayOfWeek") dayOfWeek: SeriesPublishedDaysOfWeek,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
@@ -38,16 +31,12 @@ interface SeriesMainApi {
@GET("/audio-content/series/main/genre-list") @GET("/audio-content/series/main/genre-list")
fun getGenreList( fun getGenreList(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<GetSeriesGenreListResponse>>> ): Single<ApiResponse<List<GetSeriesGenreListResponse>>>
@GET("/audio-content/series/main/list-by-genre") @GET("/audio-content/series/main/list-by-genre")
fun getSeriesListByGenre( fun getSeriesListByGenre(
@Query("genreId") genreId: Long, @Query("genreId") genreId: Long,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String

View File

@@ -1,21 +1,15 @@
package kr.co.vividnext.sodalive.audio_content.series.main package kr.co.vividnext.sodalive.audio_content.series.main
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek
import kr.co.vividnext.sodalive.settings.ContentType
class SeriesMainRepository( class SeriesMainRepository(
private val api: SeriesMainApi private val api: SeriesMainApi
) { ) {
fun fetchData(token: String) = api.fetchHome( fun fetchData(token: String) = api.fetchHome(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
fun getRecommendSeriesList(token: String) = api.getRecommendSeriesList( fun getRecommendSeriesList(token: String) = api.getRecommendSeriesList(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
@@ -26,16 +20,12 @@ class SeriesMainRepository(
token: String token: String
) = api.getDayOfWeekSeriesList( ) = api.getDayOfWeekSeriesList(
dayOfWeek = dayOfWeek, dayOfWeek = dayOfWeek,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
authHeader = token authHeader = token
) )
fun getGenreList(token: String) = api.getGenreList( fun getGenreList(token: String) = api.getGenreList(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
@@ -46,8 +36,6 @@ class SeriesMainRepository(
token: String token: String
) = api.getSeriesListByGenre( ) = api.getSeriesListByGenre(
genreId = genreId, genreId = genreId,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
authHeader = token authHeader = token

View File

@@ -42,7 +42,6 @@ interface ExplorerApi {
fun getCreatorProfile( fun getCreatorProfile(
@Path("id") id: Long, @Path("id") id: Long,
@Query("timezone") timezone: String, @Query("timezone") timezone: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<GetCreatorProfileResponse>> ): Single<ApiResponse<GetCreatorProfileResponse>>

View File

@@ -3,7 +3,6 @@ package kr.co.vividnext.sodalive.explorer
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.core.Single
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.explorer.profile.GetCheersResponse import kr.co.vividnext.sodalive.explorer.profile.GetCheersResponse
import kr.co.vividnext.sodalive.explorer.profile.cheers.PostWriteCheersRequest import kr.co.vividnext.sodalive.explorer.profile.cheers.PostWriteCheersRequest
import kr.co.vividnext.sodalive.explorer.profile.cheers.PutModifyCheersRequest import kr.co.vividnext.sodalive.explorer.profile.cheers.PutModifyCheersRequest
@@ -25,7 +24,6 @@ class ExplorerRepository(
fun getCreatorProfile(id: Long, token: String) = api.getCreatorProfile( fun getCreatorProfile(id: Long, token: String) = api.getCreatorProfile(
id = id, id = id,
timezone = TimeZone.getDefault().id, timezone = TimeZone.getDefault().id,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
authHeader = token authHeader = token
) )

View File

@@ -4,7 +4,6 @@ import io.reactivex.rxjava3.core.Single
import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentRankingItem import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentRankingItem
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.settings.ContentType
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Header import retrofit2.http.Header
import retrofit2.http.Query import retrofit2.http.Query
@@ -13,39 +12,29 @@ interface HomeApi {
@GET("/api/home") @GET("/api/home")
fun getHomeData( fun getHomeData(
@Query("timezone") timezone: String, @Query("timezone") timezone: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<GetHomeResponse>> ): Single<ApiResponse<GetHomeResponse>>
@GET("/api/home/latest-content") @GET("/api/home/latest-content")
fun getLatestContentByTheme( fun getLatestContentByTheme(
@Query("theme") theme: String, @Query("theme") theme: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<AudioContentMainItem>>> ): Single<ApiResponse<List<AudioContentMainItem>>>
@GET("/api/home/day-of-week-series") @GET("/api/home/day-of-week-series")
fun getDayOfWeekSeriesList( fun getDayOfWeekSeriesList(
@Query("dayOfWeek") dayOfWeek: SeriesPublishedDaysOfWeek, @Query("dayOfWeek") dayOfWeek: SeriesPublishedDaysOfWeek,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<GetSeriesListResponse.SeriesListItem>>> ): Single<ApiResponse<List<GetSeriesListResponse.SeriesListItem>>>
@GET("/api/home/recommend-contents") @GET("/api/home/recommend-contents")
fun getRecommendContents( fun getRecommendContents(
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<AudioContentMainItem>>> ): Single<ApiResponse<List<AudioContentMainItem>>>
@GET("/api/home/content-ranking") @GET("/api/home/content-ranking")
fun getContentRankingBySort( fun getContentRankingBySort(
@Query("sort") sort: ContentRankingSortType, @Query("sort") sort: ContentRankingSortType,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<List<GetAudioContentRankingItem>>> ): Single<ApiResponse<List<GetAudioContentRankingItem>>>
} }

View File

@@ -1,21 +1,15 @@
package kr.co.vividnext.sodalive.home package kr.co.vividnext.sodalive.home
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.settings.ContentType
import java.util.TimeZone import java.util.TimeZone
class HomeRepository(private val api: HomeApi) { class HomeRepository(private val api: HomeApi) {
fun fetchData(token: String) = api.getHomeData( fun fetchData(token: String) = api.getHomeData(
timezone = TimeZone.getDefault().id, timezone = TimeZone.getDefault().id,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
fun getLatestContentByTheme(theme: String, token: String) = api.getLatestContentByTheme( fun getLatestContentByTheme(theme: String, token: String) = api.getLatestContentByTheme(
theme = theme, theme = theme,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
@@ -23,14 +17,10 @@ class HomeRepository(private val api: HomeApi) {
dayOfWeek: SeriesPublishedDaysOfWeek, token: String dayOfWeek: SeriesPublishedDaysOfWeek, token: String
) = api.getDayOfWeekSeriesList( ) = api.getDayOfWeekSeriesList(
dayOfWeek = dayOfWeek, dayOfWeek = dayOfWeek,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
fun getRecommendContents(token: String) = api.getRecommendContents( fun getRecommendContents(token: String) = api.getRecommendContents(
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
@@ -39,8 +29,6 @@ class HomeRepository(private val api: HomeApi) {
token: String token: String
) = api.getContentRankingBySort( ) = api.getContentRankingBySort(
sort = sortType, sort = sortType,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.entries[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
} }

View File

@@ -30,7 +30,6 @@ import kr.co.vividnext.sodalive.live.room.like.GetLiveRoomHeartTotalResponse
import kr.co.vividnext.sodalive.live.room.like.LiveRoomLikeHeartRequest import kr.co.vividnext.sodalive.live.room.like.LiveRoomLikeHeartRequest
import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse
import kr.co.vividnext.sodalive.live.room.tag.GetLiveTagResponse import kr.co.vividnext.sodalive.live.room.tag.GetLiveTagResponse
import kr.co.vividnext.sodalive.settings.ContentType
import okhttp3.MultipartBody import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.http.Body import retrofit2.http.Body
@@ -55,7 +54,6 @@ interface LiveApi {
@Query("timezone") timezone: String, @Query("timezone") timezone: String,
@Query("dateString") dateString: String?, @Query("dateString") dateString: String?,
@Query("status") status: LiveRoomStatus, @Query("status") status: LiveRoomStatus,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
@@ -250,8 +248,6 @@ interface LiveApi {
@GET("/api/live") @GET("/api/live")
fun getLiveMain( fun getLiveMain(
@Query("timezone") timezone: String, @Query("timezone") timezone: String,
@Query("contentType") contentType: ContentType,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<LiveMainResponse>> ): Single<ApiResponse<LiveMainResponse>>
} }

View File

@@ -3,7 +3,6 @@ package kr.co.vividnext.sodalive.live
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.core.Single
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.live.reservation.MakeLiveReservationRequest import kr.co.vividnext.sodalive.live.reservation.MakeLiveReservationRequest
import kr.co.vividnext.sodalive.live.reservation_status.CancelLiveReservationRequest import kr.co.vividnext.sodalive.live.reservation_status.CancelLiveReservationRequest
import kr.co.vividnext.sodalive.live.room.CancelLiveRequest import kr.co.vividnext.sodalive.live.room.CancelLiveRequest
@@ -20,7 +19,6 @@ import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse
import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest
import kr.co.vividnext.sodalive.live.room.like.LiveRoomLikeHeartRequest import kr.co.vividnext.sodalive.live.room.like.LiveRoomLikeHeartRequest
import kr.co.vividnext.sodalive.live.room.menu.MenuApi import kr.co.vividnext.sodalive.live.room.menu.MenuApi
import kr.co.vividnext.sodalive.settings.ContentType
import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest
import kr.co.vividnext.sodalive.user.UserApi import kr.co.vividnext.sodalive.user.UserApi
import okhttp3.MultipartBody import okhttp3.MultipartBody
@@ -43,7 +41,6 @@ class LiveRepository(
timezone = TimeZone.getDefault().id, timezone = TimeZone.getDefault().id,
dateString = dateString, dateString = dateString,
status = status, status = status,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
page = page - 1, page = page - 1,
size = size, size = size,
authHeader = token authHeader = token
@@ -287,8 +284,6 @@ class LiveRepository(
fun getLiveMain(token: String) = api.getLiveMain( fun getLiveMain(token: String) = api.getLiveMain(
timezone = TimeZone.getDefault().id, timezone = TimeZone.getDefault().id,
contentType = ContentType.values()[SharedPreferenceManager.contentPreference],
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
authHeader = token authHeader = token
) )
} }

View File

@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.search
import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.core.Single
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.settings.ContentType
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Header import retrofit2.http.Header
import retrofit2.http.Query import retrofit2.http.Query
@@ -11,16 +10,12 @@ interface SearchApi {
@GET("/search") @GET("/search")
fun searchUnified( fun searchUnified(
@Query("keyword") keyword: String, @Query("keyword") keyword: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
): Single<ApiResponse<SearchUnifiedResponse>> ): Single<ApiResponse<SearchUnifiedResponse>>
@GET("/search/creators") @GET("/search/creators")
fun searchCreatorList( fun searchCreatorList(
@Query("keyword") keyword: String, @Query("keyword") keyword: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
@@ -29,8 +24,6 @@ interface SearchApi {
@GET("/search/contents") @GET("/search/contents")
fun searchContentList( fun searchContentList(
@Query("keyword") keyword: String, @Query("keyword") keyword: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String
@@ -39,8 +32,6 @@ interface SearchApi {
@GET("/search/series") @GET("/search/series")
fun searchSeriesList( fun searchSeriesList(
@Query("keyword") keyword: String, @Query("keyword") keyword: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@Query("page") page: Int, @Query("page") page: Int,
@Query("size") size: Int, @Query("size") size: Int,
@Header("Authorization") authHeader: String @Header("Authorization") authHeader: String

View File

@@ -1,16 +1,11 @@
package kr.co.vividnext.sodalive.search package kr.co.vividnext.sodalive.search
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.settings.ContentType
class SearchRepository(private val api: SearchApi) { class SearchRepository(private val api: SearchApi) {
fun searchUnified( fun searchUnified(
keyword: String, keyword: String,
token: String token: String
) = api.searchUnified( ) = api.searchUnified(
keyword = keyword, keyword = keyword,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.values()[SharedPreferenceManager.contentPreference],
authHeader = token authHeader = token
) )
@@ -21,8 +16,6 @@ class SearchRepository(private val api: SearchApi) {
token: String token: String
) = api.searchCreatorList( ) = api.searchCreatorList(
keyword = keyword, keyword = keyword,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.values()[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
authHeader = token authHeader = token
@@ -35,8 +28,6 @@ class SearchRepository(private val api: SearchApi) {
token: String token: String
) = api.searchContentList( ) = api.searchContentList(
keyword = keyword, keyword = keyword,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.values()[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
authHeader = token authHeader = token
@@ -49,8 +40,6 @@ class SearchRepository(private val api: SearchApi) {
token: String token: String
) = api.searchSeriesList( ) = api.searchSeriesList(
keyword = keyword, keyword = keyword,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.values()[SharedPreferenceManager.contentPreference],
page = page - 1, page = page - 1,
size = size, size = size,
authHeader = token authHeader = token

View File

@@ -0,0 +1,36 @@
# 20260327_콘텐츠보기설정파라미터전송정리
## 작업 목적
- `PATCH /member/content-preference`를 제외한 모든 API 요청에서 `isAdultContentVisible`, `contentType` 전송을 제거한다.
## 구현 체크리스트
- [x] 코드베이스에서 `isAdultContentVisible`, `contentType` 전송 위치를 전수 확인한다.
- [x] 예외 API(`PATCH /member/content-preference`) 선언 및 호출 경로를 확인한다.
- [x] 예외 API 외 DTO/호출부에서 두 파라미터를 제거한다.
- [x] 수정 파일 진단, 테스트, 빌드 검증을 수행한다.
- [x] 검증 기록을 문서 하단에 누적한다.
## 수용 기준 (Pass/Fail)
- [x] PASS: `PATCH /member/content-preference`에서는 `isAdultContentVisible`, `contentType`가 유지된다.
- [x] PASS: 그 외 API 요청에서는 `isAdultContentVisible`, `contentType`가 전송되지 않는다.
- [x] PASS: `./gradlew :app:testDebugUnitTest`가 성공한다.
- [x] PASS: `./gradlew :app:assembleDebug`가 성공한다.
## 검증 기록
- 2026-03-27
- 무엇/왜/어떻게: `/member/content-preference` PATCH를 제외한 API 요청에서 `isAdultContentVisible`, `contentType` 전송을 제거했다. Retrofit API 시그니처와 각 Repository 호출 인자를 함께 정리해 누락 없이 제거했다.
- 실행 명령/도구:
- `task(explore: 전송 경로 탐색 2건)`
- `grep("@Query(\"isAdultContentVisible\")|@Query(\"contentType\")", include="*Api.kt")`
- `apply_patch(Live/Home/Search/Explorer/AudioContent/Series API·Repository 수정)`
- `lsp_diagnostics(수정된 .kt 파일 14개)`
- `grep("@PATCH(\"/member/content-preference\")", include="UserApi.kt")`
- `grep("@Query(\"isAdultContentVisible\")|@Query(\"contentType\")", include="*Api.kt")`
- `grep("isAdultContentVisible|contentType", include="*Request*.kt")`
- `./gradlew :app:testDebugUnitTest :app:assembleDebug`
- 결과:
- `UserApi.kt``@PATCH("/member/content-preference")`는 유지됨을 확인했다.
- 전체 `*Api.kt`에서 `@Query("isAdultContentVisible")`, `@Query("contentType")`가 0건임을 확인했다.
- `*Request*.kt`에서 두 필드는 `UpdateContentPreferenceRequest.kt` 1건만 남아 예외 API 요청으로 제한됨을 확인했다.
- `lsp_diagnostics`는 Kotlin LSP 미구성으로 진단 불가 메시지를 확인했다.
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` 성공(`BUILD SUCCESSFUL`).