|
|
@@ -38,11 +38,26 @@ export const fetchSongs = async (criteria: Criteria, keyword: string): Promise<S
|
|
|
const data: ApiSongResponse[] = await response.json();
|
|
|
|
|
|
// API 응답 데이터를 Song 타입으로 변환 (키를 상수로 정의)
|
|
|
- return data.map((item) => ({
|
|
|
- [API_FIELDS.NO]: item[API_FIELDS.NO],
|
|
|
- [API_FIELDS.TITLE]: item[API_FIELDS.TITLE],
|
|
|
- [API_FIELDS.SINGER]: item[API_FIELDS.SINGER],
|
|
|
- }));
|
|
|
+ return data
|
|
|
+ .filter((item) => item[API_FIELDS.BRAND] === 'tj')
|
|
|
+ .map((item) => ({
|
|
|
+ [API_FIELDS.NO]: item[API_FIELDS.NO],
|
|
|
+ [API_FIELDS.TITLE]: item[API_FIELDS.TITLE],
|
|
|
+ [API_FIELDS.SINGER]: item[API_FIELDS.SINGER],
|
|
|
+ }))
|
|
|
+ .sort((a, b) => {
|
|
|
+ const aNormalized = normalizeText(a[API_FIELDS.TITLE]);
|
|
|
+ const bNormalized = normalizeText(b[API_FIELDS.TITLE]);
|
|
|
+
|
|
|
+ const aStartsWith = aNormalized.startsWith(normalizedKeyword);
|
|
|
+ const bStartsWith = bNormalized.startsWith(normalizedKeyword);
|
|
|
+
|
|
|
+ if (aStartsWith && !bStartsWith) return -1;
|
|
|
+ if (!aStartsWith && bStartsWith) return 1;
|
|
|
+
|
|
|
+ // 둘 다 앞글자 일치 또는 둘 다 불일치할 경우, 알파벳순 정렬
|
|
|
+ return aNormalized.localeCompare(bNormalized);
|
|
|
+ });
|
|
|
} catch (error) {
|
|
|
console.error('Error fetching songs:', error);
|
|
|
return [];
|