f78949c21a
Build & Deploy / build-and-deploy (push) Failing after 9s
Backend (server/): - Fastify + Prisma + PostgreSQL 16 - JWT 인증 (bcrypt) + 카카오 OAuth (/auth/kakao — kapi.kakao.com 호출) - REST API: auth, users, family, policies, claims, score, notifications, diagnosis, consults - 실제 보험점수 알고리즘 (카테고리별 가중치·최소보장 기반) - Multipart 업로드 (영수증/진단서 → 디스크 persistence) - Swagger UI /docs Client: - api/client.ts + api/endpoints.ts (fetch 래퍼 + AsyncStorage 토큰) - 인증 스토어 (hydrate/login/register/kakao/logout) - 로그인/회원가입 화면 + 카카오 버튼 - 홈/내보험/가족/점수/청구 API 연동 (pull-to-refresh) - 보험 추가 모달 + 가족 구성원 추가 모달 - 로그인 전/후 스택 분기 (RootNavigator) Infra: - docker-compose.yml (로컬 Postgres+API) - server/Dockerfile (Prisma migrate deploy + node) - deploy/k8s/postgres.yaml (StatefulSet + 10Gi PVC) - deploy/k8s/api.yaml (Deployment + Ingress api.insurance.junggomoa.com) - CI workflow 확장 (web + api 동시 빌드·배포) - POSTGRES_PASSWORD / JWT_SECRET Gitea Secrets 추가 필요 - 반응형 웹 레이아웃 (max-width 480px 폰 프레임) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import React from 'react';
|
|
import { View, StyleSheet, Platform } from 'react-native';
|
|
import { StatusBar } from 'expo-status-bar';
|
|
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
import { NavigationContainer } from '@react-navigation/native';
|
|
import RootNavigator from './src/navigation/RootNavigator';
|
|
import ErrorBoundary from './src/components/ErrorBoundary';
|
|
|
|
export default function App() {
|
|
const isWeb = Platform.OS === 'web';
|
|
return (
|
|
<ErrorBoundary>
|
|
<SafeAreaProvider>
|
|
<View style={[styles.outer, isWeb && styles.webOuter]}>
|
|
<View style={[styles.inner, isWeb && styles.webInner]}>
|
|
<NavigationContainer>
|
|
<StatusBar style="dark" />
|
|
<RootNavigator />
|
|
</NavigationContainer>
|
|
</View>
|
|
</View>
|
|
</SafeAreaProvider>
|
|
</ErrorBoundary>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
outer: { flex: 1 },
|
|
webOuter: {
|
|
flex: 1,
|
|
backgroundColor: '#E5E7EB',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
minHeight: '100%' as any,
|
|
},
|
|
inner: { flex: 1 },
|
|
webInner: {
|
|
width: '100%',
|
|
maxWidth: 480,
|
|
height: '100%' as any,
|
|
minHeight: 800,
|
|
backgroundColor: '#F9FAFB',
|
|
shadowColor: '#000',
|
|
shadowOffset: { width: 0, height: 4 },
|
|
shadowOpacity: 0.15,
|
|
shadowRadius: 20,
|
|
elevation: 10,
|
|
},
|
|
});
|