- 벌크 자막: 브라우저 우선 + API fallback, 광고 즉시 skip, 대기 시간 단축 - 벌크 자막/추출: 선택한 영상만 처리 가능 (체크박스 선택 후 실행) - 자막 실패 시 no_transcript 상태 마킹하여 재시도 방지 - 검색 시 필터 조건 무시 (채널/장르/가격/지역/영역 초기화) - 리셋 버튼 클릭 시 검색어 입력란 초기화 - RestaurantMapper updateFields에 google_place_id, rating 등 geocoding 필드 추가 - SearchMapper에 tabling_url, catchtable_url, phone, website 필드 추가 - 식당 상세에 네이버 지도 링크 추가 - YouTubeService.getTranscriptApi public 전환 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
54 lines
2.4 KiB
XML
54 lines
2.4 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
<mapper namespace="com.tasteby.mapper.SearchMapper">
|
|
|
|
<resultMap id="restaurantMap" type="Restaurant">
|
|
<id property="id" column="id"/>
|
|
<result property="name" column="name"/>
|
|
<result property="address" column="address"/>
|
|
<result property="region" column="region"/>
|
|
<result property="latitude" column="latitude"/>
|
|
<result property="longitude" column="longitude"/>
|
|
<result property="cuisineType" column="cuisine_type"/>
|
|
<result property="priceRange" column="price_range"/>
|
|
<result property="phone" column="phone"/>
|
|
<result property="website" column="website"/>
|
|
<result property="googlePlaceId" column="google_place_id"/>
|
|
<result property="tablingUrl" column="tabling_url"/>
|
|
<result property="catchtableUrl" column="catchtable_url"/>
|
|
<result property="businessStatus" column="business_status"/>
|
|
<result property="rating" column="rating"/>
|
|
<result property="ratingCount" column="rating_count"/>
|
|
</resultMap>
|
|
|
|
<select id="keywordSearch" resultMap="restaurantMap">
|
|
SELECT DISTINCT r.id, r.name, r.address, r.region, r.latitude, r.longitude,
|
|
r.cuisine_type, r.price_range, r.phone, r.website, r.google_place_id,
|
|
r.tabling_url, r.catchtable_url,
|
|
r.business_status, r.rating, r.rating_count
|
|
FROM restaurants r
|
|
JOIN video_restaurants vr ON vr.restaurant_id = r.id
|
|
JOIN videos v ON v.id = vr.video_id
|
|
WHERE r.latitude IS NOT NULL
|
|
AND (UPPER(r.name) LIKE UPPER(#{query})
|
|
OR UPPER(r.address) LIKE UPPER(#{query})
|
|
OR UPPER(r.region) LIKE UPPER(#{query})
|
|
OR UPPER(r.cuisine_type) LIKE UPPER(#{query})
|
|
OR UPPER(vr.foods_mentioned) LIKE UPPER(#{query})
|
|
OR UPPER(v.title) LIKE UPPER(#{query}))
|
|
FETCH FIRST #{limit} ROWS ONLY
|
|
</select>
|
|
|
|
<select id="findChannelsByRestaurantIds" resultType="map">
|
|
SELECT DISTINCT vr.restaurant_id, c.channel_name
|
|
FROM video_restaurants vr
|
|
JOIN videos v ON v.id = vr.video_id
|
|
JOIN channels c ON c.id = v.channel_id
|
|
WHERE vr.restaurant_id IN
|
|
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
|
#{id}
|
|
</foreach>
|
|
</select>
|
|
|
|
</mapper>
|