Эх сурвалжийг харах

- tj만 응답
- 정렬 알고리즘 적용

jh-mac 7 сар өмнө
parent
commit
8f16f9d486
4 өөрчлөгдсөн 24 нэмэгдсэн , 44 устгасан
  1. 0 19
      app/favorites.tsx
  2. 1 19
      app/myInfo.tsx
  3. 3 1
      app/seach.tsx
  4. 20 5
      service/api.ts

+ 0 - 19
app/favorites.tsx

@@ -2,27 +2,8 @@ import React, { useState } from 'react';
 import {
   View,
   Text,
-  TextInput,
-  TouchableOpacity,
-  FlatList,
   StyleSheet,
-  Dimensions,
-  KeyboardAvoidingView,
-  Platform,
-  Modal,
-  Keyboard,
-  StatusBar
 } from 'react-native';
-import { fetchSongs } from '@/service/api';
-import { addToFavoritesStorage } from '@/service/storage';
-import { Song, Criteria } from '@/types/song';
-import { API_FIELDS } from '@/constants/apiFields';
-import Loading from '@/components/Loading';
-
-interface Option {
-  label: string;
-  value: Criteria;
-}
 
 export default function FavoriteScreen() {
   

+ 1 - 19
app/myInfo.tsx

@@ -2,33 +2,15 @@ import React, { useState } from 'react';
 import {
   View,
   Text,
-  TextInput,
-  TouchableOpacity,
-  FlatList,
   StyleSheet,
-  Dimensions,
-  KeyboardAvoidingView,
-  Platform,
-  Modal,
-  Keyboard,
-  StatusBar
 } from 'react-native';
-import { fetchSongs } from '@/service/api';
-import { addToFavoritesStorage } from '@/service/storage';
-import { Song, Criteria } from '@/types/song';
-import { API_FIELDS } from '@/constants/apiFields';
-import Loading from '@/components/Loading';
 
-interface Option {
-  label: string;
-  value: Criteria;
-}
 
 export default function MyInfoScreen() {
   
   return (
     <View>
-      <Text>👤 내 설정 화면</Text>
+      <Text>👤 내 설정 화면(개발예정)</Text>
     </View>
   );
 }

+ 3 - 1
app/seach.tsx

@@ -37,7 +37,9 @@ export default function SearchScreen() {
   ];
 
   const handleSearch = async (): Promise<void> => {
-    if (!keyword.trim()) return; // 빈 검색어 처리
+    // 빈 검색어 처리
+    if (!keyword.trim()) return;
+    
     setIsLoading(true); // 검색 시작 시 로딩 시작
     Keyboard.dismiss();
     try {

+ 20 - 5
service/api.ts

@@ -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 [];