내일배움캠프/내일배움캠프 TIL

내일배움캠프 TIL 43일 - 토스페이 API

sogummi 2023. 5. 11. 05:58

TIL - 장고 심화 프로젝트 중간 상황 

오늘은 merging작업에 팀원들이 하루종일 맘고생을.. (묭님 : 어? 금지입니다) 
우리 git branch전략은 developbranch(머지담당: 나) / admin_developbranch(머지담당:묭님) 각각 나누어서 진행을 했는데
developbranch에는 예약, 숙소 상세조회, 리뷰, 유저, 마이페이지 기능이었고 
admin_developbranch는 숙소 crud, 예약자 명단 조회 등의 기능(관리자만 사용 가능한)이었는데 
app은 users와 hotels 단 2개 밖에 없다보니 branch를 나누어서 conflict를 해결하고 merge해도 각자 로컬에서 pull을 하니 
충돌이 많이 생겼다. 규모가 작은 프로젝트인데 사람은 다섯명이니 같은 폴더를 작업하게 되어서 자꾸 엄청난 충돌들이 나는 건 당연하긴 함..
=> 그래서 생각한 방법이 merge브랜치를 하나 더 만들어서 거기에 디벨롭브랜치를 병합하는 것 (1명만 고생하자?)
근데 이 방법 또한 충돌이 엄청났다. 이유는 조금 더 알아봐야 할 것 같다. 
차라리 app을 더 세분화해서 각자 작업을 하거나 아예 같은 폴더를 건드리지 않는 방식도 다음 프로젝트 때 생각해봐야겠다.

 

def get(self, request, booked_id):
        room_review = get_object_or_404(Rooms, id=booked_id) #booked_id에 해당하는 숙소
        serializer = RoomSerializer(room_review)
        return Response(serializer.data, status=status.HTTP_200_OK)
    def post(self, request, booked_id):
        book = get_object_or_404(Book, id=booked_id) #booked_id에 해당하는 예약
        if book.user_id == request.user.id: #booked_id에 해당하는 예약자만 리뷰달 수 있게 
            serializer = ReviewCreateSerializer(data=request.data)
            if serializer.is_valid(raise_exception=True):
                serializer.save(room = book.room, user=request.user, booked=book)
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        return Response("권한이 없습니다.", status=status.HTTP_401_UNAUTHORIZED)

오늘 나름 고심해서 작성한  코드! room_id를 따로 받지않고, 외래키로 참조하고 있는 booked_id만을 받아서
해당하는 숙소와 해당 숙소를 예약한 예약자만 리뷰를 달 수 있게 하였다. 기능 구현이 생각보다 빨리 끝난덕분에 추가기능도 생각해보게 되었다. 

내가 맡은 부분의 권한 설정, 예외처리, 기능구현은 거의 마쳤는데 해보고싶은 기능이..
바로 결제 및 포인트 적립..! & 예약 취소 시 수수료 등 결제 관련에 관한 기능들이었다.
튜터님들에게 조언을 조금 물어서 한번 해보기로(테스트파일에 열심히 삽질) 했다. 


현재 새벽.. .. .. 삽질의 삽질 끝에!!!  API연동 성공했고, 결제 성공 시 페이지처리가 안되었는데 그 부분도 해결됐다.
또한 DB에 결제 금액 및 포인트도 적립가능하게는 했는데, 우리 프로젝트에 연결시키려면 이제 시작인 느낌

API 연동, 현재 자동으로 하드코딩된 값들이 들어가는데 이 부분을 실 구매자명, 숙소 명, 금액등으로 바꾸는게 목표
주문번호는 자동으로 랜덤 생성되며, uniqe값으로 설정되어있어서  readonly 설정으로 바꾸었다. 

입력한 금액과 상품명이 오른쪽란에 뜨는 것을 볼 수 있다.  

실제 가입된 핸드폰 번호와 생년월일을 입력해야한다.

실제 토스에 가입된 번호와 생년월일을 입력하면 핸드폰으로 알림이 전송되고 알림을 클릭해서 결제를 누르면
(나는 테스트키로 하고 있기 때문에 실결제 적용되지 않음) 

결제 성공페이지가 render된다. 모든 data가 불러와지는 것이 마음에 들지 않아서 


좀 더 직관적이게 바꿔보았다. 

payment모델을 만들어서 amount(결제 금액), supplied_amount(세금을 제외한 결제금액), point(결제 금액의 3%) 필드를 작성해보았고 DB에 저장도 잘 된다.(1번째는 포인트가 결제금액의 5%였음)

좀 더 공부해서 연동하는 방법에 대해 자세하게 포스팅도 해보는게 목표