- DeletePlace.resolver place.id로 findout()하고 place.remove() 한다
- GetMyPlace.resover를 할때는 유저아이디와 유저 관계중에 place로 place 리스트를 얻는다. place 관련 crud 테스트
- GetNearbyDrivers.resolver find()에 조건을 줘서 드라이빙 중인 유저를 찾는다. isDriving: true, 경도와 위도 Between 값을 주는데 오류남
- Active Record vs. Data Mpper 그동안 active record 패턴으로 하고 있엇는데 지금 상황은 Data Mapper 패턴으로 한다고 한다. 더 좋은것 같은데 정확히는 모름 typeorm 에서는 Data Mapper 패턴을 사용하기 위해 getRepository()를 사용한다. 다른건 크게 이전과 달라지는게 없음 between()을 사용하려면.
- DriversSubscription 고객이 주변에 있는 드라이버를 구독한다. 웹소켓을 사용해서 드라이버 정보를 계속 받아서 업데이트 시킴, http방식의 정보를 받아서 ok상태를 리턴하는 방식으로 안함. popsub를 사용하고. 이거는 데모용. 초기 설정
- 운전자가 위치를 이동하면 그정보를 계속 DriverSubscription에 업데이트 됨. pubSub.publish() 를 이용하는데 잘 이해는 안감 ?? asnycIterator()도 씀.
- index.ts에서 subscription endpoint 만들어줌 하다가 토큰 문제 생김. 다음화 보니까 별건 아닌듯
- 웹소캣 때문에 context 수정하는데 디폴트로 null과 빈 오브젝트를 줌. 꼼수같기도 잘 모르겠음.
- withFilter() 를 쓴다. withFilter 안에 함수 두개 들어가는데 처음 함수는 66번에 asyncIterator()로 구독한 정보 얻어오고 두번째 함수는 그중에서 조건에 맞는거 걸러냄 여기서는 아규먼트중에 첫번째 payload에서 드라이버의 위치, 세번째 context에 담아둔 currentUser 의 위치 비교해서 걸러줌
- 웹소캣 만든거 테스트. 테스트 중에 지연되는 버그 발생. RoportMovement.resolver 에서 유저의 위치를 업데이트 한 후에 다시 그 유저객체를 findone()해서 pubSub.publish()에 넣는데. 앞에 "driverUpdate"가 payload가 되는건가봄
- RequestRide.resolver 만들기. req에서 받아온 유저 정보 넣어서 create() 함.
- GetNearbyRideds.resolver getRepository()를 사용해서 픽업 가능 구간 설정한다 상태도 "REQUESTING" 으로 설정.
- NearbyRideSubscrioption pubSub.publish("riderequest", {NearbyRideSubscription: ride}) riderequest를 구독하고 NearbyRideSubscription가 payload에 들어간다
- 테스트
- UpdateRideStatus.resolver 운전자의 유저 아이디와 status만 update 한다. status는 enum 으로 5개만 만들어서 사용한다.
- ride status 분기문으로 결정하는데 조금 복잡함 다음에 다시보기.
- GetRide.resolver 에서는 운전자든 사용자든 상관없이 getRide 할수 있다 User 객체를 다 가져오면 무거우니까 필요한 id만 가져오기위해서 엔티티 수정한다. driverId passenserId 추가함
- RideStatusSubscription은 구독상태로 만듬. 그래서 UpdateRideStatus.resolver 안에 분기 한부분에 낑겨넣음.
- test
- Chat 시작. ride status가 ACCETED 가 되면 드라이버와 승객은 chat을 할 수 있음. chat.create() 해주고 드라이버는 받아온 user, 승객은 relations: ["passenger"] 추가해서 passenger 넣음. 왜 배열 형태지.
- GetChat 만드는데 버그 생겨서 내용 없음. User 에 chat 지움.
- ride와 chat은 onetoone 관계가 된다. 각각에 맞게 엔티티 대수정. UpdateRideStatus에도 chat생성하고 ride.chat에 chat 넣어주고 save()
- ride status가 ACCETED 가 됐을 때 chatId 가 생성되는지 테스트 GetChat에 relations에 ["messages"] 추가
- SendChatMessage.resolver chat과 user.id를 if문으로 참인지 확인하고 Message.create()
- MessageSubscription withfilter로 newchatmessge를 구독하고, currentrUser가 chat의 driverId 나 passengerId와 일치하면 true를 return 한다.
- 마무리. 프엔에서 만나자.