Code Monkey home page Code Monkey logo

mdmy's People

Contributors

20112909 avatar chickengak avatar dependabot[bot] avatar gychoics avatar jeldo avatar lchoish avatar younghwan avatar

Stargazers

 avatar

Watchers

 avatar  avatar

mdmy's Issues

Add coordinates argument

  • CreateMeetingMutation에 Coordinates[longitude, latitude]를 argument로 넣기 위한 object type 및 input type 정의

Add makeroomactivity

방 생성 Activity 구현

  • 모임 이름과 인원수 입력 받기
  • Placeholder에 도움말 추가
  • Apollo client를 통해 서버로부터 생성된 토큰 전달 받기

Update createMeeting

  • 에러문구 editText아래쪽에서 보여주도록 수정
    "2명 이상의 인원수를 입력해주세요"
    "모임 이름을 입력해주세요"
    이 두개 외에도 Hardcode text -> xml string에서 정의
    Toast -> 에러 출력으로 변경, Figma 참고
  • createMeeting에서 유효하지 않은 토큰으로 request시, response error 핸들링
  • graphql 스키마 갱신
    query, mutation 이름 변경
  • 80글자 넘는 코드 개행

add submit user's Info

  • RecyclerView에서 받아온 위치정보를 Map에 표시
  • submit 버튼 클릭시 위치정보 저장

Add error handlers

  • 각 Resolver들의 query, mutation에서 발생하는 error에 대한 handler 정의 및 문서화

Add getMeetingByToken

공유를 위한 기능 추가

  • 공유에 사용되는 Token을 사용해 해당 Meeting을 찾는 getMeetingByToken query 추가
  • Meeting 모델과 Result 모델의 관계 추가
  • Result GraphQL Type 추가
    Result는 Meeting의 PK를 가지는 1:1 관계이므로 Meeting에서 graphql subfield로 접근 가능
    따라서 별도의 query, mutation은 아직까지 필요하지 않고 기존의 getMeetingById 혹은 위의 getMeetingByToken으로 접근함
    Meeting 리턴시 Result 모델을 참조하여 결과가 있으면 결과와 함께 반환
    현재는 result는 null만 반환하고 이후 후보지역 탐색하는 mutation을 추가해서 result를 변경할 예정

Refactoring

  • Meeting의 numberOfParticipants가 현재 participants와 같으면 인원 추가 불가능하게 수정

Modify CreateMeetingActivity

  • 모임 만들기 버튼 실행시 모든 입력값에 대한 확인 절차 필요
    현재는 listener의 입력마다 확인을 하고 바로 return을 하고 있음.
    둘 다 입력을 하지 않았을 경우에는 인원수에 대한 확인이 되지 않아서 인원수에 대한 에러 메세지는 보여주지 않음.
    따라서 onClick시 모임 이름이 isEmpty, 인원수가 null, 인원수가 2보다 작은 경우를 모두 확인하면서 에러 메세지를 경우에 맞게 출력하고 입력값이 유효하다면 INVISIBLE 처리하고 모두 유효하다면 mutate를 실행하도록 해야함.
  • 이름 변경
    btn_makeroom => btn_create_meeting
    layout_makeroom => layout_create_meeting
    이외에도 git grep으로 make 혹은 room 사용코드를 찾고 정해진 이름으로 정정

Add update meeting resolver

  • Participant 추가할 때 참가하는 Meeting Participants에서 참조할 수 있도록 변경
    잘못된 토큰 입력시 UserInputError 발생
  • Meeting 삭제시 해당 Meeting의 참가자들 삭제
    잘못된 meetingId 입력시 Error 발생
  • Collection 이름 변경, User -> participant
    모임 참가하는 유저를 '참가자'로 정의
    실제 가입하는 유저를 위한 collections을 추후에 user로 사용

typeDef와 resolver가 변경됨에 따라 Client에서도 다시 graphql 스키마를 갱신해야함.

Add getMeetingResult

  • getMeetingResult mutation 추가
    MeetingtokenParticipant들의 중심 위치(Client에서 미리 계산)를 파라미터로 받고
    Meeting을 return한다.
    MeetingResult를 참조할 수 있어서 subfield의 result에서 결과를 참조할 수 있다.
    자세한 로직은 아래에 서술.
  1. Invalid Token => Error
  2. 이미 결과가 있는 Meeting일 때 => 저장된 결과를 찾아서 반환
  3. 최초 요청일 때 => LocationCandidates를 찾는 내부 로직 실행후 결과를 반환

- 후보지역 탐색 로직 (v2)

  1. Token을 통해 해당 Meeting 참조
  2. result 모듈에게 위의 Meeting의 각 Participant들의 정보(좌표, 교통수단,...)와 searchPoint를 전달
  3. candidateFinder 모듈에게 searchPoint 전달
    3.1. 최소 개수가 탐색될 때까지 재귀적으로 후보 지역 탐색 후 반환
    3.2. 최대 탐색 횟수를 넘어갈 때 처리 필요
  4. by_driving, by_public 모듈에게 Participant들의 좌표와 각 후보 지역들의 좌표를 전달
    4.1. 교통수단에 맞게 해당 교통 API 호출 후 응답을 파싱하여 반환
  5. 소요시간의 표준편차(기본값)을 기준으로 한 여행 정보 결과를 반환
  6. Result DB에 Meeting의 ID를 참조하여 저장
  7. 클라이언트에게 결과 전달

v3에서는 위의 로직을 개선해서 적용

Result에서 JSON Type의 area를 graphql에서 사용하기 위한 Result Type 내부 정의가 필요함

result 내부는 클라이언트의 요청에 따라서 변동이 크므로 v2에서 사용하는 방식대로 JSONObject를 Array에 담아서 응답을 주는 것으로 한다
CustomScalar 모음

- 후보지역 탐색 (v3)

  1. getMeetingResult mutation 추가
  2. 결과가 있으면 Meeting 객체 내부에서 Result를 참조
  3. 결과가 없으면 v2와 같이 Result 생성후 Meeting에서 참조

Add apollo client

Android용 Apollo Client 기본 기능 구현

  • 미팅 이름과 인원수를 입력받아 서버에게 전달하기

  • 서버로부터 생성된 미팅 정보 전달받기
    meetingName은 String, numberOfPeople는 2 이상의 Signed Integer로 받기(editText inputType 정의)
    meetingNamenumberOfPeople이 Null이 아닐 때 방만들기 버튼 활성화
    Response 받을 때의 status code 확인

  • 서버와의 기본적인 네트워크 통신 확인

확인해야할 것

  1. gql query, mutation 파일에서 return되는 attribute 정확하게 확인
  2. manifest / android:usesCleartextTraffic 옵션

Add castVote

  • 투표 기능 추가
    v2에서는 voting 모델을 추가하고 여기에 투표한 후보 지역의 이름을 저장한다. 그리고 Meeting을 불러오는 API에서는 voting 모델에 저장된 후보 지역 이름의 횟수를 더해서 후보 지역의 투표수를 구했다. 이는 불필요한 데이터를 저장하는 구조이므로 result 모델의 JSONObject내 vote field를 업데이트하는 방식으로 변경한다.
  1. lib의 getResult에서 candidatesnumberOfVotes를 0으로 초기화
  2. castVote mutation으로 Client에서 meeting의 token과 투표할 후보 지역 이름을 입력받아 meeting, 해당 result를 찾고 후보 지역 이름과 매칭되면 해당 지역의 numberOfVotes에 1을 더하고 result를 update한다.

이는 총 인원수보다 더 많이 투표를 할 수 있어서 이를 클라이언트나 서버쪽에서 막는 방법을 생각해야함.

  • Result DB내 key 이름 변경 areas => candidates
    이에 따른 나머지 코드들에서도 변경

Add test code

각 기능에 맞는 테스트 코드 작성. (예정)

Add transportation option

기존 코드:
미팅 참가자 생성시 이동수단 선택이 서버에서 핸들링 되지 않음
수정:
이동수단 핸들링 코드 추가

Update server framework

  • express.js에서 apollo-graphql-express로 서버 프레임워크 변경
  • minor refactoring
  • 기본적인 GraphQL typeDef, Resolver 추가

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.