-
Notifications
You must be signed in to change notification settings - Fork 1
Feature/frontend home #7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
마이페이지: - mypage.dart: 메인 마이페이지 (프로필, 학습현황, 설정 메뉴) 설정 페이지 6개: - display_settings_page.dart: 화면 설정 (다크모드, 폰트크기, 자동밝기) - homework_status_page.dart: 숙제 현황 (미완료/완료 숙제 목록) - learning_statistics_page.dart: 학습 통계 (과목별 진행률, 전체 통계) - account_management_page.dart: 계정 관리 (개인정보, 비밀번호 변경, 로그아웃) - academy_management_page.dart: 학원 관리 (등록된 학원, 추가/삭제) - notification_settings_page.dart: 알림 설정 (푸시알림, 학습리마인더) Workbook 상세 페이지 3개 (이전 커밋 누락분): - workbook_detail_page.dart: 문제집 상세 (챕터 목록) - chapter_detail_page.dart: 챕터 상세 (문제별 풀이 상태) - question_detail_page.dart: 문제 상세 (section 이미지, 채점 히스토리) 기타: - main_navigation_page.dart: MyPage 연결 - app_routes.dart: 모든 새 페이지 라우트 추가 - workbook_page.dart: 문제집 터치 시 상세 페이지 이동
- 새로운 홈 화면 (home_page_v2.dart) 구현 - 연속학습 위젯 v2 (continuous_learning_widget_v2.dart) 추가 - 연속학습 상세 페이지 (continuous_learning_detail_page.dart) 구현 - 알림 페이지 (notification_page.dart) 추가 - 마이페이지 및 설정 페이지들 구현 - 업로드 및 채점 결과 수정 페이지 추가 - 공통 헤더 위젯들 (app_header, app_header_title, app_header_menu_button) 추가 - iOS/macOS 플랫폼 설정 업데이트
- UserService 추가: 사용자 정보 2단계 캐싱(메모리+SharedPreferences) 및 /me API 연동 - User 모델 생성: 사용자 정보(userId, name, profileImageUrl) 표현 - ApiConfig 클래스 생성: 모든 API 엔드포인트 중앙 관리 (서버 IP 변경 시 1곳만 수정) - AuthService 추가: JWT 토큰 관리 및 로그인 상태 확인 - AcademyService 추가: 학원 정보 조회 및 가입 요청 API - LocationService 추가: 위치 기반 서비스 - 로그인 시 사용자 정보 자동 로드 및 캐싱 - 마이페이지에서 UserService를 통한 사용자 정보 표시 - 12개 인증/계정 관련 페이지 API 호출 리팩토링 (하드코딩 제거)
[완료된 작업] - 토큰 갱신 로직 개선: 사전 갱신 방식 구현 (만료 5분 전 자동 갱신) - JWT 토큰 만료 확인 기능 추가 (isTokenExpired, isTokenExpiringSoon) - refresh-token API 호출 구현 (Authorization 헤더 방식) - 자동 로그인 기능 구현 (설정 저장/조회, 로딩 페이지에서 처리) - 아이디 저장 기능 구현 (설정 및 저장된 아이디 관리) - 로딩 페이지 추가 (자동 로그인 시 토큰 확인 및 갱신) - 로그인 페이지에 자동 로그인/아이디 저장 체크박스 추가 - API 호출 시 토큰 만료 시 자동 갱신 후 재시도 로직 추가 - 위치 권한 추가 (Android/iOS) - shared_preferences, geolocator 패키지 추가 - UI 개선 (연속학습 페이지 헤더, 홈 페이지 텍스트) [앞으로 해야할 일] 1. 코드 테스트 진행 2. 개선 사항 - 로그아웃 기능 확인/개선 - 로그아웃 시 자동 로그인 설정 해제 여부 확인 - 토큰 삭제 로직 확인 - 에러 처리 강화 - 네트워크 오류 시 사용자 안내 - 토큰 갱신 실패 시 재시도 로직 3. UX 개선 - 로딩 중 인디케이터 표시 - 자동 로그인 실패 시 안내 메시지
- Assessment 모델에 두 가지 JSON 형식 지원 (API 응답 camelCase, 캐시 snake_case) - className 매칭 로직 개선: 캐시에서 로드된 데이터에도 적용 - Assessment 캐시 초기화 기능 추가 (clearAllAssessmentCache) - 클래스 정보 조회 API 통합 및 디버깅 로그 추가 - 홈 화면에서 Assessment 데이터 로드 전 캐시 초기화 - Tab-based Refresh 기능 구현 (홈/학원 페이지) - SSL 인증서 검증 우회를 main.dart로 이동 (kDebugMode 조건부)
- Domain Layer 추가 (chapter, workbook, student_answer, grading_history, section_image) - Repository 패턴 구현 및 UseCase 패턴 적용 - API 레이어 분리 및 Mapper 추가 - AppDependencies를 통한 의존성 주입 설정 - 문제집 상세/챕터/문제 화면 개선 - 채점 이력 기능 추가 - 연속 학습 위젯 개선
- 학습 완료 판단 로직 개선: 모든 과제가 완료되어야 완료로 판단 (any → every) - 홈 페이지에서 다른 페이지 복귀 시 오늘의 숙제 정보 자동 동기화 - 연속학습 위젯에서 날짜 선택 시 최신 데이터로 강제 갱신 - API 호출 및 응답 로깅 추가로 디버깅 개선
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR is being reviewed by Cursor Bugbot
Details
You are on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle.
To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.
|
|
||
| try { | ||
| // 개발 환경에서 SSL 인증서 검증 우회 (프로덕션에서는 제거) | ||
| HttpOverrides.global = MyHttpOverrides(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: SSL bypass enabled unconditionally in production
The HttpOverrides.global = MyHttpOverrides() call disables SSL certificate verification without a kDebugMode guard. Unlike main.dart which correctly wraps this in if (kDebugMode), this code executes unconditionally in all environments including production. This allows man-in-the-middle attacks by accepting any certificate.
| } | ||
| ], | ||
| "configuration_version": "1" | ||
| } No newline at end of file |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Firebase API keys and server IP committed to repository
Sensitive configuration including Firebase API keys (AIzaSyDoT9s6gZZQ6dCznYqVK3_aMDJCXVIHcRk, AIzaSyAYs3bpt4mcglJvZaQXFc6eha2FCVZf72Y), project IDs, and a hardcoded server IP address (3.34.214.133) are committed to the repository. These credentials should be managed via environment variables or secure configuration files excluded from version control.
Additional Locations (2)
| final academy = academies.firstWhere( | ||
| (a) => a.academy_user_id == source.academyUserId, | ||
| orElse: () => academies.first, | ||
| ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Silent fallback to wrong academy on mismatch
The firstWhere with orElse: () => academies.first silently falls back to the first academy when no matching academyUserId is found, rather than throwing an error. This can lead to explanation requests being made with incorrect academyId, causing data integrity issues and potentially leaking explanations to the wrong academy context.
| messagingSenderId: '120799260544', | ||
| projectId: 'gradi-bd52c', | ||
| storageBucket: 'gradi-bd52c.firebasestorage.app', | ||
| ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Firebase Android API key mismatch between config files
The Android apiKey in firebase_options.dart (AIzaSyAYs3bpt4mcglJvZaQXFc6eha2FCVZf72Y) doesn't match the key in google-services.json (AIzaSyDoT9s6gZZQ6dCznYqVK3_aMDJCXVIHcRk). The firebase_options.dart appears to use the iOS API key for both platforms. This mismatch could cause Firebase initialization or authentication failures on Android devices.
2학기 캡스톤디자인 프로젝트 마무리.
앞으로 할 일이 굉장히 많다. 디테일 다듬는 데에는 끝이 없다는 걸 느껴서 시연 하루 전에 욕심을 버리기로 했다.
이번 프로젝트를 하면서 아쉬운 점이 많았다.
1205 G-rise 캡스톤 경진대회 민권이 피드백
학원 자영업자가 인건비가 너무 비싸니까 힘들다. 망해가는 자영업자에서 우리 서비스를 통해 다시 유지할 수 있도록 하는게 우리 목표다. 우리 구독료(산정 잘 해야함, 디바이스 대여가 얼마인지도 굉장히 중요)는 넷플릭스 구독료 정도인데 그걸로 우리가 커버할 수 있는 범위는 훨씬 넓다.
손익분기점이 언제인지를 예상을 해서 그것도 어필해서 우리 사업이 얼마나 버틸 수 있는지 어필하는게 중요하다.
그래서 투자 얼마를 받으면 충분하다를 어필해야함.
-> 수익구조가 굉장히 중요!!
-> 그럼 이게 누가 삼??(타겟 시장이 어디인지) -> 대답
사고싶은 맘이 들도록 설명하는게 중요함.
—
현재 경쟁 서비스들의 문제는 UI가 너무 어렵고 복잡해서 조교 교육에도 비용이 많이 들고, 소형 학원에서도 학원 친구같은 서비스를 도입하는데에 예상되는 비용이 크다보니까 도입하기 힘들다. 이 문제를 Gradi가 해결할 수 있다.
—
확장은 대학교. 전 세계에는 대학교가 있으니까.
Note
Adds Firebase/FCM-backed notifications, grading history and student-answer editing with section images, comprehensive academy/workbook/chapter/question flows, continuous learning calendar, startup auth/loading, and supporting domain/services with DI, caching, and platform configs.
NotificationPagewith read/clear/delete.GradingHistoryPagewith navigation to edit.EditGradingResultPagewith section image preview and inline edits.AcademyPage,AcademyListPage,AcademyDetailPage).WorkbookPage,WorkbookDetailPage,ChapterDetailPage,QuestionDetailPage).LoadingPagefor startup flow; expanded routes and header widgets.Written by Cursor Bugbot for commit 35d5d5f. This will update automatically on new commits. Configure here.