검색/필터 UI 개선, 채널 정렬, 드래그 스크롤, 지도링크 수정
- 검색바: 아이콘 내장, 모드 select 제거 (hybrid 고정), 엔터 검색 - 필터 그룹화: [음식 장르·가격] [지역 나라·시·구] + X 해제 버튼 - 채널 필터: 드롭다운 → 유튜브 아이콘 토글 카드, 드래그 스크롤 - 채널 정렬: sort_order 컬럼 추가, 백오피스 순서 편집 - 채널+필터 동시 적용: API 호출 대신 클라이언트 필터링 - 내위치 ON 시 다른 필터 초기화, 역방향도 동일 - 전체보기 버튼: 모든 필터 일괄 해제 - 네이버맵: 한국 식당만, 식당명만 검색 - 구글맵: 식당명+주소/지역 검색 - 로그인 영역 데스크톱 Row 1 우측 배치 - scrollbar-hide CSS 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -77,9 +77,10 @@ public class ChannelController {
|
||||
}
|
||||
|
||||
@PutMapping("/{id}")
|
||||
public Map<String, Object> update(@PathVariable String id, @RequestBody Map<String, String> body) {
|
||||
public Map<String, Object> update(@PathVariable String id, @RequestBody Map<String, Object> body) {
|
||||
AuthUtil.requireAdmin();
|
||||
channelService.update(id, body.get("description"), body.get("tags"));
|
||||
Integer sortOrder = body.get("sort_order") != null ? ((Number) body.get("sort_order")).intValue() : null;
|
||||
channelService.update(id, (String) body.get("description"), (String) body.get("tags"), sortOrder);
|
||||
cache.flush();
|
||||
return Map.of("ok", true);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ public class Channel {
|
||||
private String titleFilter;
|
||||
private String description;
|
||||
private String tags;
|
||||
private Integer sortOrder;
|
||||
private int videoCount;
|
||||
private String lastVideoAt;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,8 @@ public interface ChannelMapper {
|
||||
|
||||
Channel findByChannelId(@Param("channelId") String channelId);
|
||||
|
||||
void updateDescriptionTags(@Param("id") String id,
|
||||
@Param("description") String description,
|
||||
@Param("tags") String tags);
|
||||
void updateChannel(@Param("id") String id,
|
||||
@Param("description") String description,
|
||||
@Param("tags") String tags,
|
||||
@Param("sortOrder") Integer sortOrder);
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ public class ChannelService {
|
||||
return mapper.findByChannelId(channelId);
|
||||
}
|
||||
|
||||
public void update(String id, String description, String tags) {
|
||||
mapper.updateDescriptionTags(id, description, tags);
|
||||
public void update(String id, String description, String tags, Integer sortOrder) {
|
||||
mapper.updateChannel(id, description, tags, sortOrder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,17 +9,18 @@
|
||||
<result property="titleFilter" column="title_filter"/>
|
||||
<result property="description" column="description"/>
|
||||
<result property="tags" column="tags"/>
|
||||
<result property="sortOrder" column="sort_order"/>
|
||||
<result property="videoCount" column="video_count"/>
|
||||
<result property="lastVideoAt" column="last_video_at"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="findAllActive" resultMap="channelResultMap">
|
||||
SELECT c.id, c.channel_id, c.channel_name, c.title_filter, c.description, c.tags,
|
||||
SELECT c.id, c.channel_id, c.channel_name, c.title_filter, c.description, c.tags, c.sort_order,
|
||||
(SELECT COUNT(*) FROM videos v WHERE v.channel_id = c.id) AS video_count,
|
||||
(SELECT MAX(v.published_at) FROM videos v WHERE v.channel_id = c.id) AS last_video_at
|
||||
FROM channels c
|
||||
WHERE c.is_active = 1
|
||||
ORDER BY c.channel_name
|
||||
ORDER BY c.sort_order, c.channel_name
|
||||
</select>
|
||||
|
||||
<insert id="insert">
|
||||
@@ -37,8 +38,8 @@
|
||||
WHERE id = #{id} AND is_active = 1
|
||||
</update>
|
||||
|
||||
<update id="updateDescriptionTags">
|
||||
UPDATE channels SET description = #{description}, tags = #{tags}
|
||||
<update id="updateChannel">
|
||||
UPDATE channels SET description = #{description}, tags = #{tags}, sort_order = #{sortOrder}
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user