| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 마스킹
- resnet50
- re-id
- WIL
- 미니프로젝트
- Git
- Commpot
- vscode
- sql
- 알고리즘
- 장고
- 정보처리기사
- 채팅
- 프로그래머스
- js
- 백준
- REDIS
- poetry
- 파이썬
- 개발일지
- 2주차
- 1주차
- 가상환경
- WebSocket
- 프로젝트
- Class
- WHERE절
- 정보처리기사실기
- channels
- github
Archives
- Today
- Total
개발일기
유저 피드백 반영하기(채팅, 마이페이지 업그레이드, 주문취소와 환불처리) 본문
- 포인트 통계
- 원래는 이번달 리워드, 총 포인트 이렇게 되어있었는데, 사용자 중 이해하기 어렵다는 피드백이 있었다.
- 그래서 이번달 획득포인트, 이용포인트, 현재포인트총액으로 직관적으로 이해할 수 있도록 바꾸었다.

- 채팅
- 비밀채팅방 기능: 비밀채팅방 기능이 있으면 좋겠다는 평이 있어서 추가했다.
- make_password을 사용하여 비밀번호 해싱
- check_password을 사용해 프론트 요청 온 비밀번호와 db에 담긴 해싱된 비밀번호 비교
- super(): 파이썬에서 부모 클래스의 메소드나 속성을 직접 참조하기 위해 사용하는 내장함수
- super(ChatRoom, self)는 ChatRoom 클래스의 부모클래스를 의미한다.
- super(ChatRoom, self).save(*args,**kwargs)는 ChatRoom클래스의 부모클래스인 Model 클래스의 save()메소드를 호출한다. 즉, 코드에서 save() 메소드가 호출되면 먼저 password 필드에 저장된 값을 암호화하고, 부모클래스인 Model 클래스의 save()를 호출하여 해당 ChatRoom 객체를 데이터베이스에 저장한다.
- 코드중복을 줄이고 상속 구조에 따른 코드의 확장성과 유연성을 제공할 수 있다.
# 모델
class ChatRoom(CommonModel):
author = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(unique=True, max_length=10, blank=False, null=False)
desc = models.CharField(max_length=50, blank=False)
password = models.CharField(max_length=128, null=True, blank=True)
class Meta:
ordering = ['-created_at']
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if self.password:
self.password = make_password(self.password)
super(ChatRoom, self).save(*args, **kwargs)
# views.py
def checkpassword(self, request, room_id, password):
room = get_object_or_404(ChatRoom, pk=room_id)
if check_password(password, room.password):
return Response(status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_403_FORBIDDEN)


- 마이페이지 팔로우한 스토어 오류 수정
- 팔로우한 스토어가 제대로 작동하지 않았고, 페이지네이션도 존재하지 않았다.
- 페이지네이션 및 오류를 해결하고, css와 모바일 반응형도 추가했다.

- 주문취소와 환불처리 구현
- 원래는 주문취소와 환불처리 기능이 없었다.
- 유저피드백에서 구현요청이 있어서 추가로 구현을 했다.
- 주문 상태 카테고리를 추가하여 구현하였다.
def order_point_refund(user: object, total_buy_price: int):
"""환불 포인트 생성"""
Point.objects.create(user=user, point_type_id=9, point=total_buy_price)
def product_amount_restock(product: object, buy_amount: int):
"""환불 시 상품 재고량 복구"""
product.amount += buy_amount
product.item_state = 1 # 판매중(1)상태로 변경
product.save()
class StatusChangeView(UpdateAPIView):
"""주문 상태 변경"""
'''결제대기(1) 주문확인중(2) 배송준비중(3) 발송완료(4) 배송완료(5) 구매확정(6) 주문취소(7) 환불요청중(8) 환불완료(9)'''
permission_classes = [IsAuthenticated]
serializer_class = OrderStatusSerializer
queryset = OrderItem.objects.all()
def perform_update(self, serializer):
order_item = self.get_object()
cur_status = order_item.order_status.id
new_status = self.request.data.get("order_status")
# 배송완료(5)상태에서 구매확정(6)이 되었을 때
if cur_status == 5 and new_status == 6:
seller = order_item.seller.user
total_point = order_item.amount * order_item.price
# 유저 포인트 적립 및 판매자 포인트 지급
order_point_create(self.request.user, seller, total_point)
# 주문취소(7), 환불완료(9) 되었을 때
if new_status in [7,9] :
# 유저 포인트 환불
total_point = order_item.amount * order_item.price
order_point_refund(self.request.user, total_point)
# 상품 수량 복구
product = get_object_or_404(Product, id=order_item.product_id)
product_amount_restock(product=product, buy_amount=order_item.amount)
serializer.save()'Project Portfolio' 카테고리의 다른 글
| [대표색상 뽑기] 색상 히스토그램 & Kmeans 알고리즘으로 색상 정보 추출하기 (0) | 2025.04.28 |
|---|---|
| [대표색상 뽑기] Kmeans로 색상 정보 추출하기 (1) | 2025.04.23 |
| [16주차 WIL] 최종프로젝트 4주차 트러블슈팅 (배포관련) 정리 (0) | 2023.07.04 |
| 부트스트랩 툴팁 커스터마이징) 너비(크기)랑 폰트 조절, 줄바꿈, 위치 조절 (0) | 2023.06.28 |
| [channels] 실시간 단체채팅방 구현하기 (3) (0) | 2023.06.23 |