From 044d31d403b5cda27d6a226ba39f066bda39d92f Mon Sep 17 00:00:00 2001 From: SeongHunTed <4047ksh@naver.com> Date: Wed, 8 Feb 2023 18:07:37 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20filter=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accounts/__pycache__/views.cpython-39.pyc | Bin 4553 -> 4604 bytes Backend/momment/accounts/serializers.py | 11 +++- Backend/momment/accounts/views.py | 29 +++++------ Backend/momment/cakes/models.py | 3 -- Backend/momment/cakes/serializers.py | 10 ++-- Backend/momment/cakes/urls.py | 3 +- Backend/momment/cakes/views.py | 48 +++++++++++++----- Backend/momment/db.sqlite3 | Bin 405504 -> 405504 bytes 8 files changed, 66 insertions(+), 38 deletions(-) diff --git a/Backend/momment/accounts/__pycache__/views.cpython-39.pyc b/Backend/momment/accounts/__pycache__/views.cpython-39.pyc index d06bcb3992e68acc4667c67aa572e4c97bf8924d..34039abd01488db02f5d6441acf8c9d6a1a98ece 100644 GIT binary patch delta 1738 zcmZux%}?A$6!*;9yT)rT%ks5+ES~|gq)hhrVZMNUC`Be)HzNd7k%vZ|sxq zf4U9JFf<9C4;KDdu6t&r$k?+>-|y}2)tNo4-t4uLtbsMI(mleGtZ84`BW54kRtZ>|SxaEK z_}bFSQu|UrY)Vf`tc|trORU{)-3yuhulIm}Qt1m=&1A zFo(rR=$G9gPtGg(>I!A*0ol>Kctrz$;{n~#EBay05uC$&K}#G-MDl7YdcJOtEJ|5v zQ7T=KC9nP|*?K_02VRv`v7|#-l<5aFEG@yV0pJ%(YMS;HyJ$HD-T?Xga>**%zQUYU z;mL`ZudZ9J`=rd-G2uz^o&3#o61MRaLK8wWLJLAGz%lXV4cF#=B)c#%k;!J$l(&Q3 zSG@9?U3z(f8yf+DKABmbC2VCoXT}yFCTnxYDmdE^tvYUQ6LjXwuC;0NdJOBq_o#R5 ztqkX7o;Lglx4+!5T`%zPAg_0%#8cu*xU;DfU(t=P(BQ1IgN`LWEFOkuM~A^7QJLse zB^pRDs7ezg0amb+1PV>k7-^t7piVTR(l}`Rs`xWJKcXB-`N$r1KLfI5rZ{lnuo+%e z9@KbspG7|6}sIVBva;bQ>lT8?y{QgatHQ(G=LcF7CMn?zTS*p2m* zd*Y|q;Kz$-cz|#p0g3ZNz=*E`td~o0@z0A6>czxXMWVWVl)LRaz}y zUM`nb0>;evnZb`GV5T+k1)Gw z)yh?nQgJ}4)M_Loq#|1N)N>Dr6XIA7oH(rn;>rd70S^3rg z``6IxA=5EULxSIzU;Vb(^~B7PD^E^6-IHjv)?4qh`s!ILOC%~$vv#DOvvR_Y)sEKt zt$ty5){fN&tO2m&)*$V&hG@bXrb%nW&CnE0Z^`?FcGI4R(mt_{qi>6VCqsLM=foRN zAI%ES$vKH08Kk*~63w~UeZ|Uy<0$QidB2#CQne)IkMSMyg6HI4(oslWhdu?}D-%h2 zOzuzcP9@EY;qYLKP^DLTpu(uasKKbg7-~sXg@(3e_6NVEe7iT{t5vPq*^;ULh&(V_ zO3Se0Efv_+(twFp2$*ac&r;7NBKbP)pvelMX&QYbZ%8F+Luw4GlAnG|?tMfc;vl96 zVj>t5l5RuPIZzUk&nyL+TX!n8Ky5g6H_-TJYC6eMaDqVJaXjyClhK!ib@LbM=d<15 zW?4iJB7^8f^Z{OyK;89R7KBUdQ&TggQeI{`@CTaT+;$tkzsA5cfZx^b7vHu+pnA?7 zH_#W{dozqRSw0$snfvLk>-m979p7Ohfw#PyWqC0)VD{rH1^_Q5HqO5Y71P&XBFQR= z$~rk{vcdlh<>DdIZo1s9#0a~@GvT#T__Ljz8LZO~ zltpXX)yRVoM21^hHQEYM{iy=QFxq7}kiLU|AI^|&UI-;m$2L}%m*(tZp;X#fUY%w~ zAveohT%Ma>vj5Rc5t^|9-lLz`GuaS?uwldqLPMNDoJ52XXAz<(3R)3BpjSNG^PO^; zoq=gS%r4;47~-&oZ`5L!abf%oE`k+kwdV1yN@E^u4+|~Ha$7|?CdWxkPRNFw0S(y% z|5cy8lE7#5$wFzyUSD0zllB|`yC=H}K_5c*RDdKKgk630K}QE!>w;;Z?XXJ2XJV(s zLSdn>Y)=&y7bgo-3$W*WUV;1J*2-e%Aj;rY*v?MH-gfW(FLxmc<=+|eqe7g+EQE!} zW7h$j&^;NT6L$U8>B!fF+~7Y(SI9g+V$P5;{;_#cUx0Nu&LaQD9Dq9hV4gpf1Q+W7 zSgD(9Yejqf+&O!)Fm12StgO$J*4R6^jz?kzo{Nn*qKKGD(6#MsJ576sHOrNnYwxlO zdl&pxMC@|`_E}zNmkCv1czg3nHi@>VAXdXNHft5P;fsS$;nEm?5gR49_)oF(mrLka zL#!g!0f7Qq1v+4-*?>Rjp&UX9OsvK)bvDmV;}eIghhp7?g(~#6STe(T{uKYY^Zm#M zJ|hk|$}h%W&sr%_m@%>SwSL5No0XXhq00000 diff --git a/Backend/momment/accounts/serializers.py b/Backend/momment/accounts/serializers.py index fa7f6598..4b024f7c 100644 --- a/Backend/momment/accounts/serializers.py +++ b/Backend/momment/accounts/serializers.py @@ -1,2 +1,11 @@ from rest_framework.serializers import ModelSerializer, ReadOnlyField -from .models import Account +from .models import User +from rest_framework import serializers + +class UserSerializer(serializers.ModelSerializer): + + class Meta: + model = User + # fields = ('name', 'digit', 'birth', 'address') + # read_only_fields = ('email', 'password') + exclude = ('password',) \ No newline at end of file diff --git a/Backend/momment/accounts/views.py b/Backend/momment/accounts/views.py index e5c428c0..519a68eb 100644 --- a/Backend/momment/accounts/views.py +++ b/Backend/momment/accounts/views.py @@ -10,7 +10,7 @@ from rest_framework.permissions import IsAuthenticated from django.contrib import auth from rest_framework.decorators import api_view - +from .serializers import * # 카카오 로그인 @@ -31,13 +31,13 @@ def signup(request): data = json.loads(request.body) email = data['email'] - name = data['name'] - digit = data['digit'] - birth = data['birth'] - address = data['address'] - if request.method == 'POST': + name = data['name'] + digit = data['digit'] + birth = data['birth'] + address = data['address'] + password = data['password'] if User.objects.filter(email=email).exists(): @@ -56,16 +56,13 @@ def signup(request): return JsonResponse({'message' : 'SUCCESS', 'token' : token.key}, status=201) elif request.method == 'PUT': - + user = User.objects.get(email=email) - user.name = name - user.digit = digit - user.birth = birth - user.address = address - user.save() - - return JsonResponse({'message' : 'SUCCESS'}, status=201) + serializer = UserSerializer(user, data=data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data) except KeyError: return JsonResponse({'message' : 'KEY_ERROR'}, status=400) @@ -74,11 +71,9 @@ def signup(request): def login(request): try: data = json.loads(request.body) - email = data['email'] password = data['password'] - - user = User.objects.filter(email=email) + user = User.objects.get(email=email) if not check_password(password, user.get().password): return JsonResponse({'message' : 'WRONG_PASSWORD'}) diff --git a/Backend/momment/cakes/models.py b/Backend/momment/cakes/models.py index d9b16bb3..af83cb76 100644 --- a/Backend/momment/cakes/models.py +++ b/Backend/momment/cakes/models.py @@ -62,9 +62,6 @@ class CakeCandle(models.Model): price = models.IntegerField() cake = models.ForeignKey(Cake, on_delete=models.CASCADE, related_name='candle') - - - # 상품 상세 페이지용 class Location(models.Model): locate = models.CharField(max_length=24, primary_key=True) diff --git a/Backend/momment/cakes/serializers.py b/Backend/momment/cakes/serializers.py index e3a38188..e2831c1a 100644 --- a/Backend/momment/cakes/serializers.py +++ b/Backend/momment/cakes/serializers.py @@ -112,7 +112,7 @@ class CakeOnlySerializer(serializers.ModelSerializer): class Meta: model = Cake - fields = ('name', 'price', 'id') + fields = ('name', 'price',) # 메인 페이지에 케이크 보내줄 때 스토어 정보는 어떻게 보낼 것인가? class StoreCakeSerializer(serializers.ModelSerializer): @@ -125,8 +125,10 @@ class Meta: class CakeSearchSerializer(serializers.ModelSerializer): - store_name = serializers.CharField(source='store.store_name') + store_name = serializers.CharField(source='cake.store.store_name') + cake_name = serializers.CharField(source='cake.name') + cake_price = serializers.CharField(source='cake.price') class Meta: - model = Cake - fields = ['name', 'price', 'store_name'] \ No newline at end of file + model = CakeInfo + fields = ['cake_name', 'cake_price', 'store_name'] \ No newline at end of file diff --git a/Backend/momment/cakes/urls.py b/Backend/momment/cakes/urls.py index d3ad0c74..ef5346bb 100644 --- a/Backend/momment/cakes/urls.py +++ b/Backend/momment/cakes/urls.py @@ -9,5 +9,6 @@ path('detail', views.detail), path('main/', views.main), path('order', views.order), - path('search/', views.search) + path('search/', views.search), + path('filter/', views.filter) ] \ No newline at end of file diff --git a/Backend/momment/cakes/views.py b/Backend/momment/cakes/views.py index 2d3b0964..c58fdc9a 100644 --- a/Backend/momment/cakes/views.py +++ b/Backend/momment/cakes/views.py @@ -10,7 +10,7 @@ from rest_framework.response import Response from rest_framework.decorators import api_view - +# 판매자에게 모든 케이크 보여줌 @api_view(['GET']) def show(request): try: @@ -25,7 +25,6 @@ def show(request): return Response(cake_size.data,status=200) - except KeyError: return JsonResponse({'message' : 'KEY_ERROR'}, status=400) @@ -42,12 +41,8 @@ def cake(request): user = User.objects.get(email=user_email) store = Store.objects.get(user=user) - - # if CakeName.objects.filter(name=cake_name).exists(): - # CakeName.objects.update(name=cake_name, store=store) cake = Cake.objects.update_or_create(name=cake_name, price=cake_price, store=store)[0] - # cake = CakeName.objects.get(name=cake_name, store=store) basic_options = data['cake_basic_option'].keys() addtional_options = data['cake_additional_option'].keys() @@ -243,12 +238,17 @@ def detail(request): flavor = Flavor.objects.get(flavor=flavor) if CakeInfo.objects.filter(cake=cake).exists(): - CakeInfo.objects.update(locate=locate, flavor=flavor, price_range=price, info=info, cake=cake) + cake_info = CakeInfo.objects.get(cake=cake) + cake_info.locate = locate + cake_info.flavor = flavor + cake_info.info = info + cake_info.price_range = price + cake_info.save() else: CakeInfo.objects.create(locate=locate, flavor=flavor, price_range=price, info=info, cake=cake) return JsonResponse({'message' : 'SUCCESS'}, status=status.HTTP_201_CREATED) - + except KeyError: return JsonResponse({'message' : 'KEY_ERROR'}, status=400) @@ -260,7 +260,7 @@ def main(request, page): # 차후 인기 있는 케이크를 보여줄 때 order_by 메소드 이용 # 6개씩 보여주는 로직 # cakes = Cake.objects.all()[:page*6] - store = Store.objects.all()[:page*6] + store = Store.objects.all()[(page-1)*6:page*6] cake = StoreCakeSerializer(store, many=True) return Response(cake.data, status=status.HTTP_201_CREATED) @@ -273,7 +273,6 @@ def main(request, page): def order(request): try: data = json.loads(request.body) - user_email = data['user_email'] store_name = data['store_name'] cake_name = data['cake_name'] @@ -284,15 +283,14 @@ def order(request): return Response(cake.data, status=200) - except KeyError: return JsonResponse({'message' : 'KEY_ERROR'}, status=400) +# 검색기능 @api_view(['GET']) def search(request, page): try: data = json.loads(request.body) - keyword = data['keyword'] stores = {} @@ -313,6 +311,32 @@ def search(request, page): return Response(response_data, status=200) + except KeyError: + return JsonResponse({'message' : 'KEY_ERROR'}, status=400) + +# 필터 검색 기능 +@api_view(['GET']) +def filter(request, page): + try: + data = json.loads(request.body) + + price = data['price'] + locate = data['locate'] + flavor = data['flavor'] + + # related name 때ㅜㄴ에 오류발생하는듯 + + locate_filter = CakeInfo.objects.filter(locate=locate) + price_filter = CakeInfo.objects.filter(price_range=price) + flavor_filter = CakeInfo.objects.filter(flavor=flavor) + + cakes = locate_filter.union(price_filter, all=False) + cakes = cakes.union(flavor_filter, all=False) + + cake = cakes[(page-1)*12:page*12] + serializer = CakeSearchSerializer(cake, many=True) + + return Response(serializer.data) except KeyError: return JsonResponse({'message' : 'KEY_ERROR'}, status=400) \ No newline at end of file diff --git a/Backend/momment/db.sqlite3 b/Backend/momment/db.sqlite3 index 5e7e58fedf0bdb86995c1b5a8f64687aaabc04b9..d457934977e2809735f8626364685ae2a0dfb558 100644 GIT binary patch delta 1308 zcmZ{jOH30{6o%){w4FzL=Ts2OpfF>MQ5MkB2OtSekVK*p7Cu6P3n2)`7d67d6_h}L z1Q(E2NaP_gVs)WbNbX8aqk;~nuR+{KSWW!`4&n<>%n&#^GYsI}!r zTjymhUh8Q0;Lu`86w&a>_riKSm!c?br9ZxJ)F|t(^Mn8PL=6b2OfDx&} z6P6=X3&(R@O-rzT+FM$?Ja-gQ`TIow_me`I(hGPSfjw@fzdRvhtKbtnc(vMVd6-;?7LoHHw@+mquGoFgm8?8&hS&YqQ{ z_u@_&2*=BkT$Y8io+Q&`PM@f9W88PEx-z3Kl9Njw8Jq5V!aQg zfB~ZL6+XjTcn#0t5%^(%Ox#WA5f}-@JHq74lrm)~BW7fjv_{BKe1_sO6q}(8CPwB{ zyJ(%|!L;_f5!i;0@D5gB9-hH8`Q83RYq813vA$xdDU}+vG(LtxD&8 hyeTpFk}Bq2QpMa$s+fC8Wf+Y1Fl6Z#qCI*X{0IAl_J#le delta 371 zcmZp8AkpwZVuCc|x`{H*jO#WgER$#4IhkESQ-J>(p8)R<-t)Xq_*D5Tc$aJzbV%Tx zyg-+gv1Ix}T~^`EJ9R%ZGBGerUZ<}iEGW*b$(fv(omw0ZA~W;S@+ZI4m*sF};Fshx z=5^gHXkgCE*_h4D&(LUVDL&c8PR`jYwJgyjD?i+%ATY