CustomCurriculumTeachingSidebar

curl 'https://gwstage.english.management/graphql' \ -H 'accept: */*' \ -H 'accept-language: ko' \ -H 'authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEzIiwib3JnYW5pemF0aW9uSWQiOjEsImlhdCI6MTczNDQ4NjMwNywiZXhwIjoxNzQzMTI2MzA3fQ.fFOqi8qtBgTnueQEStj018Cps0mmskaV1ZyHT-YNao4' \ -H 'content-type: application/json' \ -H 'origin: http://localhost:8787' \ -H 'priority: u=1, i' \ -H 'referer: http://localhost:8787/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ --data-raw $'{"operationName":"CustomCurriculumTeachingSidebar","variables":{"groupId":"34316","filters":{"customStudyModuleStatusList":["OPEN","READ_ONLY"]},"csmId":"N2U4YTIzNTEtYzZlYi00NjMxLWExNzEtMThhYzU0ZDRlMDAx"},"query":"query CustomCurriculumTeachingSidebar($groupId: ID\u0021, $filters: CustomStudyModuleFilterArgs, $csmId: ID\u0021) {\\n group(id: $groupId) {\\n id\\n customCurriculums {\\n id\\n customDailyCurriculums {\\n id\\n title\\n customStudyModules(filters: $filters) {\\n id\\n title\\n customStudyUnits {\\n id\\n customStudyActivities {\\n id\\n __typename\\n }\\n customActivities {\\n id\\n __typename\\n }\\n __typename\\n }\\n ...VisibilityStatusChip_CustomStudyModule\\n ...CustomCurriculumTeachingSidebarHeader_CustomStudyModule\\n __typename\\n }\\n __typename\\n }\\n ...CustomCurriculumTeachingCDCDrawer_CustomCurriculum\\n __typename\\n }\\n ...UseSetGroupTheme_Group\\n __typename\\n }\\n customStudyModule(id: $csmId) {\\n id\\n title\\n customDailyCurriculum {\\n id\\n title\\n customCurriculum {\\n id\\n status\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment VisibilityStatusChip_CustomStudyModule on CustomStudyModule {\\n id\\n status\\n __typename\\n}\\n\\nfragment CustomCurriculumTeachingSidebarHeader_CustomStudyModule on CustomStudyModule {\\n id\\n firstIntegratedActivity {\\n id\\n type\\n __typename\\n }\\n __typename\\n}\\n\\nfragment CustomCurriculumTeachingCDCDrawer_CustomCurriculum on CustomCurriculum {\\n id\\n title\\n customDailyCurriculums {\\n id\\n title\\n customStudyModules(filters: $filters) {\\n id\\n title\\n __typename\\n }\\n __typename\\n }\\n __typename\\n}\\n\\nfragment UseSetGroupTheme_Group on Group {\\n id\\n groupTheme {\\n id\\n type\\n imageUrl\\n colorCode\\n gradientColor {\\n type\\n colors\\n direction\\n __typename\\n }\\n __typename\\n }\\n __typename\\n}"}'
JavaScript
복사

2번씩 요청하는 이슈

CustomCurriculumTeachingSidebarLayout_learningActivity 요청과 캐싱 정규화 충돌로 2번 요청하는걸로 예상 개선 필요

customStudyModules 요청 용도

1.
현재 위치해 있는 csm를 알아내는 용도 currentCustomStudyModule
→ 이미 주소에 csmId가 있어서 특정된 상태인데 이렇게 가져오는 이유가 있는지? 담당자 확인 필요
2.
삭제된 sa? 필터링 용도
// TODO: CCC 필터 - 서버 이관 예정 const customStudyModules = useMemo( () => customCurriculum?.customDailyCurriculums ?.flatMap((cdc) => cdc.customStudyModules) .map((csm) => ({ ...csm, customStudyUnits: csm.customStudyUnits.filter( (csu) => csu.customStudyActivities.length > 0 || csu.customActivities.length > 0, ), })) .filter((csm) => csm.customStudyUnits.length > 0), [customCurriculum?.customDailyCurriculums], );
JavaScript
복사
3. 다음 이전 네비게이션 용도
모든 csm을 조회해서 가져올 필요는 없고 이전 이후 데이터만 있으면 된다. (페이지네이션)

사용안하는 필드

자식이 비어 있으면 가려야 하는 요구 사항이 있음
fragment CustomCurriculumTeachingCDCDrawer_CustomCurriculum on CustomCurriculum { id title # customDailyCurriculums { # id # title # customStudyModules(filters: $filters) { # id # title # } # } }
GraphQL
복사

개선안

1.
2번 요청 1번 요청으로 개선 (작업 완료)
2.
firstIntegratedActivity는 앞 뒤 에서만 가져오게 변경
3.
사용 안하는 필드 업데이트
4.
currentCustomStudyModule 특정 로직 제거