/sanhak-server

람다 함수 및 백엔드 코드 저장소

Primary LanguageJavaScript

sanhak-server

백엔드 서버 저장소

userDB REST API 사용법

endpoint https://9u31ip8rz2.execute-api.ap-northeast-2.amazonaws.com/deployment-stage/rest-resource

header에 "myauth": "allow" 값을 넣어야 endpoint사용가능

4월27일 이후 get부터 적용예정

    Item: {
        "user_id": userId,
        "user_pw": userPw,
        "boj_name": bojName,
        "user_email": userEmail,
        "user_level": 0,
        "user_rank": -1,
        "user_status": true,
        "active_group_set": {},
        "inactive_group_set": {},
        "created_at": `${new Date()}`,
        "user_message": "",
        "organization": organization,
        "solved_problems": [],
        "homepage": "",
        "email_accept": false,
        "direct_messages": [],
    }
    
    userDB 초기 항목

GET

  • 기본적으로 userid와 funcname 두가지의 값을 쿼리 문자열에 같이 줘야한다.

  • 아래는 funcname에 들어갈 함수 이름들이다.

  • getUser

    • userId에 해당하는 유저의 데이터를 비밀번호를 제외하고 가져온다.
    • 그룹셋 정보들은 배열형태로 반환해준다.

    ex) https://9u31ip8rz2.execute-api.ap-northeast-2.amazonaws.com/deployment-stage/rest-resource?userid=testid&funcname=getUser

  • getAllUsers

    • 모든 user의 데이터를 가져온다
    • userid에 쓰레기 값이라도 넣어야 한다.
  • getSolved

    • userid의 solved_problems를 반환한다.
  • getDirectMessages

    • userid의 direct_messages를 반환한다.
    • body에 sended_messages와 received_messages로 나눠서 반환한다.

POST

  • 요청 본문에 userid, userpw, useremail, bojname이 들어가야 한다.

  • 선택사항) organization 조직정보

  • 값이 비어있거나 빈 문자열이면 오류 메시지를 반환한다.

DELETE

  • 요청 본문에 userid, userpw가 들어가야한다.

  • 해당id가 없거나 비밀번호가 틀리면 오류 메시지를 반환한다.

  • INACTIVE_USER 데이터베이스로 해당 유저데이터가 옮겨진다.

PUT

PATCH

  • 기본적으로 funcname이 요청본문에 들어가야 한다. 아래는 함수명과 필요한 파라미터 이름들이다.

  • 나중에 엔드포인트/함수명 이런방식으로 작동되게 바꿀 예정

body에 들어갈 내용 예시

image

  • updateProblems

    • 유저의 문제들을 업데이트 해주는 함수. active group에서 solved: true를 표시해준다.
    • userid가 필요
  • updateMessage

    • 유저의 상태메시지를 업데이트 해주는 함수.
    • userid와 message가 반드시 필요
  • updateOrganization

    • 유저의 조직정보를 업데이트 해주는 함수.
    • userid와 organization 반드시 필요
  • updateHomepage

    • 유저의 홈페이지 정보 업데이트
    • userid와 homepage 반드시 필요
  • updateGroupRank(userId, groupId, rank, callback)

    • 유저의 그룹안 랭크 업데이트
    • userid와 groupid 반드시 필요
  • updateSolved

    • solved_problems의 문제를 대체하는 함수
    • 입력받는 problems는 항상 내부의 데이터셋과 중복되지 않음이 보장되야한다.
    • userid, problems 반드시 필요
  • updateEmailAccept

    • email_accept 항목 업데이트
    • userid 반드시 필요
  • addGroup

    • 유저의 active group set에 그룹 추가
    • inactive group set에 동일 그룹이 있으면 복원, 그렇지 않으면 새로 생성
    • userid, groupname, groupid 반드시 필요 ismaster 선택 (default: false)
  • addGroupProblems

    • groupid에 해당하는 그룹에 문제 추가 (default: (solved: false))
    • userid, groupid, problems 반드시 필요
  • createDirectMessage

    • msgid에 해당하는 메시지 저장
    • userid, msgid, msgfrom, msgto, msgcontent, msgcreatedat 필요
    • 우선적으로는 userid에만 저장하게 함.(보내는 곳과 받는곳 모두에서 저장하게 하지는 않음)
  • deleteDirectMessage

    • msgid에 해당하는 메시지 삭제
    • userid, msgid 반드시 필요
  • deleteGroup

    • 그룹을 활성 그룹 목록에서 제거, 비활성 그룹 목록에 삽입
    • userid, groupid 반드시 필요
  • deleteGroupProblems(userId, groupName, problems, callback)

    • 그룹에서 problems에 해당하는 문제 제거
    • userid, groupid, problems 반드시

차후 수정예정

groupDB 구조

rank_member

image

group_attendance

image

group_goal

image

groupDB REST API 사용법

endpoint

https://bb80o1csdl.execute-api.ap-northeast-2.amazonaws.com/groupDB

get

  • 기본적으로 'id('id=')&getGroup' 두가지의 값 혹은 'getAllGroup'을 쿼리에 같이 줘야한다.

  • getUser

    • id(groupID)를 입력하여 GroupDB(func)의 테이블에 속해 있는 데이터를 모두 불러온다.
    • 'id=(group_id 입력)&func=getGroup'을 쿼리문자열에 입력한다.
  • getAllUsers

    • DB의 모든 데이터들을 한번에 불러온다
    • 'func=getAllGroup'을 쿼리문자열에 입력한다.

post

  • 요청 본문에 id(그룹id), leader(그룹명), name(그룹이름), member(그룹멤버) 등의 데이터를 입력하면 DB에 테이블이 생성된다.

delete

  • 요청 본문에 id(그룹id) 입력 시 DB에서 해당 테이블 삭제

patch

  • func, id의 값이 무조건 들어가야하며, 업데이트를 원하는 요소에 따라 각 수정값을 입력한다.

  • updateCycle

    • 출석체크 주기를 업데이트하는 함수
    • func와 id를 입력하고, 변경을 원하는 cycle을 문자열의 형식으로 입력한다
    • ex) image
  • updateProblemNumber

    • 출석 확인 문제 갯수를 변경하는 함수
    • func와 id를 입력하고, 변경을 원하는 출석 문제를 숫자 형식으로 입력한다
    • ex) image
  • updateAttendance

    • 출석여부를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 그룹원의 이름과 출석여부를 문자열 형식으로 입력한다
    • ex) image
  • updateAttendDate

    • 출석일자를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 그룹원의 이름과 출석일자를 각각 문자열과 숫자 형식으로 입력한다
    • ex) image
  • updateAttendanceProblems

    • 출석확인 문제를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 출석문제를 배열 형식으로 입력한다
    • ex) image
  • updateGroupType

    • 그룹 생성의 목적을 변경하는 함수
    • func와 id를 입력하고, 변경을 원하는 목표를 문자열 형식으로 입력한다
    • ex)
      image
  • updateGroupNotice

    • 그룹 공지를 변경하는 함수
    • func와 id를 입력하고, 변경을 원하는 공지를 문자열 형식으로 입력한다
    • ex) image
  • updateProblemLevel

    • 출석확인 문제의 난이도를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 문제의 난이도를 배열 형식으로 입력한다
    • ex) image
  • updateGroupRank

    • 그룹의 랭크를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 그룹의 랭크를 숫자 형식으로 입력한다
    • ex) image
  • updatePersonalScore

    • 랭크 판별을 위한 멤버 개인의 점수를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 멤버의 이름과 점수를 각각 문자열과 숫자 형식으로 입력한다
    • ex) image
  • updateProblems

    • 출석관련 문제를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 문제들을 배열 형식으로 입력한다
    • ex) image
  • updateGroupPoint

    • 그룹의 랭킹계산을 위한 point를 업데이트 하는 함수
    • func와 id를 입력하고, 변경을 원하는 그룹의 point를 숫자 형식으로 입력한다
    • ex) image
  • addMember

    • 새 그룹원을 업데이트 하는 함수
    • func와 id를 입력하고, 추가를 원하는 멤버의 이름을 문자열 형식으로 입력한다
  • addRankMember

    • 새 그룹원의 랭크 판별을 위한 정보를 업데이트 하는 함수
    • func와 id를 입력하고, 추가를 원하는 멤버의 이름과 정보들을 맵 형식으로 입력한다
  • ★★★★deleteMember★★★★

    • 탈퇴 그룹원을 그룹 명단에서 삭제 하는 함수
    • func와 id를 입력하고, 삭제를 원하는 멤버의 이름을 문자열 형식으로 입력한다
    • ex) image
  • deleteRankMember

    • 탈퇴 그룹원의 정보를 삭제하는 함수
    • func와 id를 입력하고, 삭제를 원하는 멤버의 이름을 문자열 형식으로 입력한다

그룹 기능 관련 REST API 사용법

1. 백준에서 지금까지 해결한 모든 문제를 반환하는 API

2. Solved-ac에서 지금까지 해결한 모든 문제의 난이도를 반환하는 API

3. 그룹 내 모든 인원들에 대한 출석 체크를 진행 후 DB 갱신하는 API(출석 기능 API)

API 진행 흐름

    1. Front에서 그룹 ID를 받아옴
    1. Group DB로부터 출석 문제(attend_probs), 그룹에 속한 멤버들의 정보를 받아옴(members_id)
    1. loop를 돌며 그룹 내 각 인원들이 지금까지 해결한 문제(solved_probs)를 받아와 출석 문제와 비교, 출석 체크 진행, DB 갱신

기존 DB 예시 image

API 실행 후 DB 예시 image

4. 그룹 내 모든 인원들에 대하여 해당 인원들이 출석 문제 중 어떤 문제를 풀었는지 반환하는 API

5. 그룹 내 모든 인원들에 대하여 랭킹 점수를 정렬된 형태로 반환하는 API

6. 그룹 목표와 관련된 문제집 크롤링 해서 그룹 DB에 넣어주는 API

  • endpoint : https://pj6kuuwo4e.execute-api.us-east-2.amazonaws.com/backend_api/getproblemset
  • 메소드 : POST
  • 요청 본문 : { "id" : "1", "diff" : "top", "arr" : ["samsung"], "goal" : "test" }
  • diff = 그룹장이 선택한 난이도(기본값으로 아무거나 주기, 그룹 목표가 학습(study)라면 해당하는 난이도는 상(top), 중(mid), 하(bottom)으로 주면 됨
  • arr = 그룹 세부 태그들 (예를 들어 코테가 그룹 목표면 삼성(samsung), 또는 카카오(kakao)이고 학습이면 bfsdfs, bruteforce 등
  • goal = 그룹 목표. 코딩 테스트 = test, 대회 = contest, 학습 = study로 주면 됨
  • 응답 : DB 갱신

7. 문제 추천 API

8. 그룹 간 랭킹 산출 API

9. 매일 12시 정각마다 부르는 API들 Scheduling image 스케듈려

10. 메일 보내는 API

11. 주간마다 scheduling 하여 주간 분석보고서 보내주는 최종적 API

12. 그룹 문제집 비었을 때 메일링 API

13. 그룹장이 그룹원 강퇴할 수 있는 API

14. 그룹 해체 API

noticeDB 구조

전체 DB image

noticeDB REST API 사용법

endpoint

https://tdwcyrlp8g.execute-api.ap-northeast-2.amazonaws.com/noticeDB

get

  • 기본적으로 'id('id=')&getNotice' 두가지의 값 혹은 'getAllNotice'을 쿼리에 같이 줘야한다.

  • getNotice

    • id를 입력하여 noticeDB(func)의 테이블에 속해 있는 데이터를 모두 불러온다.
    • 'id=(id 입력)&func=getGroup'을 쿼리문자열에 입력한다.
  • getAllNotice

    • DB의 모든 데이터들을 한번에 불러온다
    • 'func=getAllNotice'을 쿼리문자열에 입력한다.

post

  • 요청 본문에 id, infoName(대회정보), date(대회 날짜), link(웹사이트 링크) 등의 데이터를 입력하면 DB에 테이블이 생성된다.

delete

  • 요청 본문에 id 입력 시 DB에서 해당 테이블 삭제

patch

  • func, id의 값이 무조건 들어가야하며, 업데이트를 원하는 요소에 따라 각 수정값을 입력한다.

infoDB 구조

전체 DB image

infoDB REST API 사용법

endpoint

https://qojk0ukeu2.execute-api.ap-northeast-2.amazonaws.com/infoDB