sfuosdev / SFU-RMP

Chrome extension for SFU students to provide access to prof rating from RateMyProfessor.com on SFU course registration pages (goSFU, mySchedule)
3 stars 1 forks source link

local storage interface #12

Closed jiin-kim109 closed 1 year ago

jiin-kim109 commented 1 year ago

Description: storage access interface to provide access to chrome local storage providing a wrapper function of chrome.storage API.

JSON data to store:

  1. list of course/section data
  2. RMP search result cache for a professor name

Required features)

Acceptance Criteria:

jiin-kim109 commented 1 year ago

위 Issue는 storage.js에서 두개의 functinon을 export 할 것을 요구하고 있습니다. (물론 export 하지 않는 function은 몇개든 상관 없습니다)

(1)번 JSON은 courses.js가 storage에 저장하는 JSON 입니다.

참고하실 수 있는 링크 입니다. https://github.com/jumbosushi/ubc-rmp/tree/master/src/data https://github.com/jumbosushi/ubc-rmp/blob/master/src/data/2019_W_UBC_courseToInstrID.json

즉 저희로 치면 https://www.sfu.ca/students/calendar/2023/spring/courses.html 페이지를 JSON으로 가공한다고 보면 될 것 같습니다.

여기는 instructor id를 사용했는데 저희는 session 코드(D100, D200 등)과 professor name 형태로 보관하면 좋을 것 같습니다.

courses.js가 storage에 저장하는 JSON의 주 목적은 이름 찾기 입니다. goSFU나 mySchedule의 교수님 이름들은 축약된 이름이 많아서 그대로 RMP 검색에 사용하기는 무리가 있을 것 같습니다.

가령 Steve Ko라는 이름이 Steve. K로 나와있고는 합니다. 당연히 이런 이름으로 RMP에 검색하면 결과가 잘 나오지 않습니다. 교수님을 특정할 수 있는건 그 외에는 유일하게 course session이 있는데 RMP는 이름으로 검색을 하니 바로 사용할 수 없습니다.

따라서 goSFU나 mySchedule에 RMP rating 정보를 그려줄 때 사이트 위 교수님 이름을 사용하기 보단, 먼저 storage로 부터 아래 JSON을 불러온 뒤 Course Session 코드를 사용하려 합니다 (D100, D200) 등. Academic Calander로 부터 course와 session을 모두 수집해 정리하는건 courses.js의 역활이고 storage.js는 그 결과를 저장할 JSON의 포맷, 저장을 위한 함수를 export, 그리고 validation만 수행하면 됩니다.

즉 goSFU session code(D100) -> professor name (courses.js가 저장한 JSON) -> RMP 검색 형태 입니다.

JSON 포맷은 대충 아래 정도로 만들면 될 것 같습니다. Format은 편하신대로 만들어 주세요. 저장할때 Validation이 수행되어야 할 점과 program name, course number, session code가 들어가면 괜찮습니다.

{ "ECON": { "110": [ { "D100": "prof name 1" } ] }, "CMPT": [ "300": [ { "D100": "prof name 2" }, { "D200": "prof name 3" } ] ] }

jiin-kim109 commented 1 year ago

(2)번은 RMP 검색 결과 JSON 입니다.

https://www.ratemyprofessors.com/search/teachers?query=jason&sid=U2Nob29sLTE0ODI=

rmp.js가 전달 받은 세션 코드(e.g. CMPT300-D100)을 위 (1)번 JSON을 사용해 professor name을 뽑아낸 후, 위 링크처럼 rmp에 검색합니다.

그리고 그 결과를 다시 goSFU나 mySchedule에 렌더링하기 위해 돌려주는데, 다음번에 똑같은 이름으로 조회가 오면 다시 RMP까지 가서 검색하는건 낭비임으로 JSON형태로 storage에 일종의 캐시 형태로 저장합니다.

e.g.
{ "name": "Jason Bell", "quality": 3.7, "difficulty": 3.2, "would_like_to_retake_ratio": 0.26 }

똑같이 저장을 위한 함수를 export해주고 validation을 수행하는 코드를 넣으면 될 것 같습니다.

jiin-kim109 commented 1 year ago

의존성 문제로 storage.js는 chrome.storage wrapper 역활만 수행합니다.