diff --git a/.DS_Store b/.DS_Store index b11d54a3..3a6867e1 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Backend/momment/accounts/__pycache__/models.cpython-39.pyc b/Backend/momment/accounts/__pycache__/models.cpython-39.pyc index 2aba3b83..474db9f0 100644 Binary files a/Backend/momment/accounts/__pycache__/models.cpython-39.pyc and b/Backend/momment/accounts/__pycache__/models.cpython-39.pyc differ diff --git a/Backend/momment/accounts/__pycache__/views.cpython-39.pyc b/Backend/momment/accounts/__pycache__/views.cpython-39.pyc index dbbb1db5..baf574bc 100644 Binary files a/Backend/momment/accounts/__pycache__/views.cpython-39.pyc and b/Backend/momment/accounts/__pycache__/views.cpython-39.pyc differ diff --git a/Backend/momment/accounts/migrations/0001_initial.py b/Backend/momment/accounts/migrations/0001_initial.py index b7997419..76965742 100644 --- a/Backend/momment/accounts/migrations/0001_initial.py +++ b/Backend/momment/accounts/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.13 on 2023-01-06 07:00 +# Generated by Django 3.2.13 on 2023-01-19 16:21 from django.db import migrations, models import django.db.models.manager @@ -16,11 +16,11 @@ class Migration(migrations.Migration): name='User', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), ('email', models.EmailField(max_length=60, unique=True, verbose_name='ID')), - ('password', models.CharField(max_length=20)), ('name', models.CharField(max_length=20)), ('digit', models.CharField(max_length=11)), - ('birth', models.DateField(verbose_name='생년월일')), + ('birth', models.DateField(null=True, verbose_name='생년월일')), ('address', models.CharField(max_length=80)), ('is_admin', models.BooleanField(default=False)), ('is_active', models.BooleanField(default=True)), diff --git a/Backend/momment/accounts/migrations/0002_alter_user_birth.py b/Backend/momment/accounts/migrations/0002_alter_user_birth.py new file mode 100644 index 00000000..ded19250 --- /dev/null +++ b/Backend/momment/accounts/migrations/0002_alter_user_birth.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.13 on 2023-01-19 16:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='birth', + field=models.DateField(blank=True, null=True, verbose_name='생년월일'), + ), + ] diff --git a/Backend/momment/accounts/migrations/0002_auto_20230111_1443.py b/Backend/momment/accounts/migrations/0002_auto_20230111_1443.py deleted file mode 100644 index 6dca4de1..00000000 --- a/Backend/momment/accounts/migrations/0002_auto_20230111_1443.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.13 on 2023-01-11 14:43 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='birth', - field=models.DateField(null=True, verbose_name='생년월일'), - ), - migrations.AlterField( - model_name='user', - name='password', - field=models.CharField(max_length=128, verbose_name='password'), - ), - ] diff --git a/Backend/momment/accounts/migrations/0003_alter_user_managers.py b/Backend/momment/accounts/migrations/0003_alter_user_managers.py new file mode 100644 index 00000000..62ac8a4c --- /dev/null +++ b/Backend/momment/accounts/migrations/0003_alter_user_managers.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.13 on 2023-01-19 16:25 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0002_alter_user_birth'), + ] + + operations = [ + migrations.AlterModelManagers( + name='user', + managers=[ + ], + ), + ] diff --git a/Backend/momment/accounts/migrations/__pycache__/0001_initial.cpython-39.pyc b/Backend/momment/accounts/migrations/__pycache__/0001_initial.cpython-39.pyc index 307cb5e3..2c65f111 100644 Binary files a/Backend/momment/accounts/migrations/__pycache__/0001_initial.cpython-39.pyc and b/Backend/momment/accounts/migrations/__pycache__/0001_initial.cpython-39.pyc differ diff --git a/Backend/momment/accounts/models.py b/Backend/momment/accounts/models.py index 516bc687..a306ff8d 100644 --- a/Backend/momment/accounts/models.py +++ b/Backend/momment/accounts/models.py @@ -39,7 +39,7 @@ class User(AbstractBaseUser): email = models.EmailField(verbose_name='ID', max_length=60, unique=True, null=False, blank=False) name = models.CharField(max_length=20, null=False, blank=False) digit = models.CharField(max_length=11) - birth = models.DateField(verbose_name="생년월일", null=True) + birth = models.DateField(verbose_name="생년월일", null=True, blank=True) address = models.CharField(max_length=80) is_admin = models.BooleanField(default=False) is_active = models.BooleanField(default=True) @@ -48,7 +48,7 @@ class User(AbstractBaseUser): create_at = models.DateTimeField(verbose_name='date joined', auto_now_add=True) last_login = models.DateTimeField(verbose_name='last login', auto_now=True) - object = Account() + objects = Account() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['name', 'digit', 'address', 'birth'] diff --git a/Backend/momment/accounts/views.py b/Backend/momment/accounts/views.py index 74bfad23..acc765f5 100644 --- a/Backend/momment/accounts/views.py +++ b/Backend/momment/accounts/views.py @@ -37,7 +37,7 @@ def signup(request): birth = data['birth'] address = data['address'] - if User.object.filter(email=email).exists(): + if User.objects.filter(email=email).exists(): return JsonResponse({'message' : 'ALREADY_EXIST'}, status = 400) regex_email = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9-.]+$' @@ -47,7 +47,7 @@ def signup(request): if not re.match(regex_password, password): return JsonResponse({'message' : 'INVALID_PASSWORD'}, status = 400) - user = User.object.create_user(email=email, password=password, name=name, digit=digit, birth=birth, address=address) + user = User.objects.create_user(email=email, password=password, name=name, digit=digit, birth=birth, address=address) token = Token.objects.create(user=user) return JsonResponse({'message' : 'SUCCESS', 'token' : token.key}, status=200) @@ -63,14 +63,16 @@ def login(request): email = data['email'] password = data['password'] - user = User.object.filter(email=email) + user = User.objects.filter(email=email) if not check_password(password, user.get().password): return JsonResponse({'message' : 'WRONG_PASSWORD'}) token = Token.objects.get(user=user.get()) + + is_seller = user.get().is_staff - return JsonResponse({'message' : 'LOGIN_SUCCESS', 'token' : token.key}, status=200) + return JsonResponse({'message' : 'LOGIN_SUCCESS', 'token' : token.key, 'is_seller' : is_seller}, status=200) except: return JsonResponse({'message' : 'LOGIN_FAILED'}) diff --git a/Backend/momment/cake/__init__.py b/Backend/momment/cake/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Backend/momment/cake/admin.py b/Backend/momment/cake/admin.py new file mode 100644 index 00000000..d5fe8c4a --- /dev/null +++ b/Backend/momment/cake/admin.py @@ -0,0 +1,15 @@ +from django.contrib import admin +from .models import * + +class CakeAdmin(admin.ModelAdmin): + # 관리자 화면에 보여질 칼럼 지정 + list_display = ('name', 'store', 'price') + search_fields = () + readonly_fields = () + + filter_horizontal = () + list_filter = () + fieldsets = () + ordering = () + +admin.site.register(Cake, CakeAdmin) \ No newline at end of file diff --git a/Backend/momment/cake/apps.py b/Backend/momment/cake/apps.py new file mode 100644 index 00000000..ae1439cf --- /dev/null +++ b/Backend/momment/cake/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CakeConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'cake' diff --git a/Backend/momment/cake/migrations/0001_initial.py b/Backend/momment/cake/migrations/0001_initial.py new file mode 100644 index 00000000..127df3eb --- /dev/null +++ b/Backend/momment/cake/migrations/0001_initial.py @@ -0,0 +1,124 @@ +# Generated by Django 3.2.13 on 2023-01-19 16:21 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('store', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Cake', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('store', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='store.store')), + ], + ), + migrations.CreateModel( + name='CakeSize', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('size', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeSideDeco', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('side_deco', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakePicture', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('picture', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakePackage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('package', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeLettering', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('lettering', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeFont', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('font', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeFlavor', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('flavor', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeDesign', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('design', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeDeco', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('deco', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeColor', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('color', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + migrations.CreateModel( + name='CakeCandle', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('candle', models.CharField(max_length=40)), + ('price', models.IntegerField()), + ('cake', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cake.cake')), + ], + ), + ] diff --git a/Backend/momment/cake/migrations/__init__.py b/Backend/momment/cake/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Backend/momment/cake/models.py b/Backend/momment/cake/models.py new file mode 100644 index 00000000..0be3114c --- /dev/null +++ b/Backend/momment/cake/models.py @@ -0,0 +1,78 @@ +from django.db import models +from store.models import Store +# Create your models here. + +class Cake(models.Model): + name = models.CharField(max_length=40) + price = models.IntegerField() + store = models.ForeignKey(Store, on_delete=models.CASCADE) + +class CakeSize(models.Model): + size = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeFlavor(models.Model): + flavor = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeColor(models.Model): + color = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeDesign(models.Model): + design = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeSideDeco(models.Model): + side_deco = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeDeco(models.Model): + deco = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeLettering(models.Model): + lettering = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeFont(models.Model): + font = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakePicture(models.Model): + picture = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakePackage(models.Model): + package = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + +class CakeCandle(models.Model): + candle = models.CharField(max_length=40) + price = models.IntegerField() + cake = models.ForeignKey(Cake, on_delete=models.CASCADE) + + +# class Cake(models.Model): +# name = models.CharField(max_length=40, unique=True) +# size = models.ForeignKey(CakeSize, on_delete=models.CASCADE) +# flavor = models.ForeignKey(CakeFlavor, on_delete=models.CASCADE) +# color = models.ForeignKey(CakeColor, on_delete=models.CASCADE) +# design = models.ForeignKey(CakeDesign, on_delete=models.CASCADE) +# side_deco = models.ForeignKey(CakeSideDeco, on_delete=models.CASCADE, null=True, blank=True) +# deco = models.ForeignKey(CakeDeco, on_delete=models.CASCADE, null=True, blank=True) +# lettering = models.ForeignKey(CakeLettering, on_delete=models.CASCADE, null=True, blank=True) +# font = models.ForeignKey(CakeFont, on_delete=models.CASCADE, null=True, blank=True) +# picture = models.ForeignKey(CakePicture, on_delete=models.CASCADE, null=True, blank=True) +# package = models.ForeignKey(CakePackage, on_delete=models.CASCADE) +# candle = models.ForeignKey(CakeCandle, on_delete=models.CASCADE, null=True, blank=True) \ No newline at end of file diff --git a/Backend/momment/cake/tests.py b/Backend/momment/cake/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/Backend/momment/cake/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Backend/momment/cake/urls.py b/Backend/momment/cake/urls.py new file mode 100644 index 00000000..22798427 --- /dev/null +++ b/Backend/momment/cake/urls.py @@ -0,0 +1,9 @@ +from . import views +from django.urls import path + +urlpatterns = [ + path('update/', views.update), + path('delete_detail/', views.delete_detail), + path('delete_option/', views.delete_option), + path('delete_all/', views.delete_all), +] \ No newline at end of file diff --git a/Backend/momment/cake/views.py b/Backend/momment/cake/views.py new file mode 100644 index 00000000..ec963ed3 --- /dev/null +++ b/Backend/momment/cake/views.py @@ -0,0 +1,180 @@ +from django.shortcuts import render +from accounts.models import User +from cake.models import * + +import json +from django.http import HttpResponse, JsonResponse +from rest_framework import status +from rest_framework.response import Response +from rest_framework.decorators import api_view + +@api_view(['POST', 'PUT']) +def update(request): + try: + data = json.loads(request.body) + + user_email = data['user_email'] # 차후에 jwt 인증방식으로 변경 + cake_name = data['cake_name'] + cake_price = data['cake_price'] + + 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() + + cake = Cake.objects.get(name=cake_name, store=store) + # basic options = cake_size, cake falvor, cake color .... + + for basic_option in basic_options: + options = data['cake_basic_option'][basic_option].keys() + # option_key : 1, 2, 3 + for option_key in options: + option = data['cake_basic_option'][basic_option][option_key]['option'] + price = data['cake_basic_option'][basic_option][option_key]['price'] + + if basic_option == 'cake_size': + CakeSize.objects.update_or_create(size=option, price=price, cake=cake) + elif basic_option == 'cake_flavor': + CakeFlavor.objects.update_or_create(flavor=option, price=price, cake=cake) + elif basic_option == 'cake_color': + CakeColor.objects.update_or_create(color=option, price=price, cake=cake) + elif basic_option == 'cake_design': + CakeDesign.objects.update_or_create(design=option, price=price, cake=cake) + + + for addtional_option in addtional_options: + options = data['cake_additional_option'][addtional_option].keys() + for option_key in options: + option = data['cake_additional_option'][addtional_option][option_key]['option'] + price = int(data['cake_additional_option'][addtional_option][option_key]['price']) + + if addtional_option == 'cake_sidedeco': + CakeSideDeco.objects.update_or_create(side_deco=option, price=price, cake=cake) + elif addtional_option == 'cake_deco': + CakeDeco.objects.update_or_create(deco=option, price=price, cake=cake) + elif addtional_option == 'cake_lettering': + CakeLettering.objects.update_or_create(lettering=option, price=price, cake=cake) + elif addtional_option == 'cake_font': + CakeFont.objects.update_or_create(font=option, price=price, cake=cake) + elif addtional_option == 'cake_picture': + CakePicture.objects.update_or_create(picture=option, price=price, cake=cake) + elif addtional_option == 'cake_package': + CakePackage.objects.update_or_create(package=option, price=price, cake=cake) + elif addtional_option == 'cake_candle': + CakeCandle.objects.update_or_create(candle=option, price=price, cake=cake) + + + return JsonResponse({'message' : 'SUCCESS'}, status=200) + + except KeyError: + return JsonResponse({'message' : 'KEY_ERROR'}, status=400) + +@api_view(['POST', 'PUT']) +def delete_detail(request): + try: + data = json.loads(request.body) + user_email = data['user_email'] # 차후에 jwt 인증방식으로 변경 + cake_name = data['cake_name'] + option = data['option'] + detail = data['detail'] + + user = User.objects.get(email=user_email) + store = Store.objects.get(user=user) + cake = Cake.objects.get(name=cake_name, store=store) + + if option == 'cake_size': + CakeSize.objects.filter(cake=cake, size=detail).delete() + elif option == 'cake_flavor': + CakeFlavor.objects.filter(cake=cake, flavor=detail).delete() + elif option == 'cake_color': + CakeColor.objects.filter(cake=cake, color=detail).delete() + elif option == 'cake_design': + CakeDesign.objects.filter(cake=cake, design=detail).delete() + elif option == 'cake_sidedeco': + CakeSideDeco.objects.filter(cake=cake, side_deco=detail).delete() + elif option == 'cake_deco': + CakeDeco.objects.filter(cake=cake, deco=detail).delete() + elif option == 'cake_lettering': + CakeLettering.objects.filter(cake=cake, lettering=detail).delete() + elif option == 'cake_font': + CakeFont.objects.filter(cake=cake, font=detail).delete() + elif option == 'cake_picture': + CakePicture.objects.filter(cake=cake, picture=detail).delete() + elif option == 'cake_package': + CakePackage.objects.filter(cake=cake, package=detail).delete() + elif option == 'cake_candle': + CakeCandle.objects.filter(cake=cake, candle=detail).delete() + + return JsonResponse({'message' : 'SUCCESS'}, status=200) + + except KeyError: + return JsonResponse({'message' : 'KEY_ERROR'}, status=400) + + + +@api_view(['POST', 'PUT']) +def delete_option(request): + try: + data = json.loads(request.body) + user_email = data['user_email'] # 차후에 jwt 인증방식으로 변경 + cake_name = data['cake_name'] + option = data['option'] + + user = User.objects.get(email=user_email) + store = Store.objects.get(user=user) + cake = Cake.objects.get(name=cake_name, store=store) + + if option == 'cake_size': + CakeSize.objects.filter(cake=cake).delete() + elif option == 'cake_flavor': + CakeFlavor.objects.filter(cake=cake).delete() + elif option == 'cake_color': + CakeColor.objects.filter(cake=cake).delete() + elif option == 'cake_design': + CakeDesign.objects.filter(cake=cake).delete() + elif option == 'cake_sidedeco': + CakeSideDeco.objects.filter(cake=cake).delete() + elif option == 'cake_deco': + CakeDeco.objects.filter(cake=cake).delete() + elif option == 'cake_lettering': + CakeLettering.objects.filter(cake=cake).delete() + elif option == 'cake_font': + CakeFont.objects.filter(cake=cake).delete() + elif option == 'cake_picture': + CakePicture.objects.filter(cake=cake).delete() + elif option == 'cake_package': + CakePackage.objects.filter(cake=cake).delete() + elif option == 'cake_candle': + CakeCandle.objects.filter(cake=cake).delete() + + return JsonResponse({'message' : 'SUCCESS'}, status=200) + + except KeyError: + return JsonResponse({'message' : 'KEY_ERROR'}, status=400) + + +@api_view(['POST', 'PUT']) +def delete_all(request): + try: + data = json.loads(request.body) + + user_email = data['user_email'] # 차후에 jwt 인증방식으로 변경 + cake_name = data['cake_name'] + + user = User.objects.get(email=user_email) + store = Store.objects.get(user=user) + + cake = Cake.objects.get(name=cake_name, store=store) + cake.delete() + + return JsonResponse({'message' : 'SUCCESS'}, status=200) + + + 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 91c61909..3dd4c98f 100644 Binary files a/Backend/momment/db.sqlite3 and b/Backend/momment/db.sqlite3 differ diff --git a/Backend/momment/momment/__pycache__/settings.cpython-39.pyc b/Backend/momment/momment/__pycache__/settings.cpython-39.pyc index ffa99337..b7432197 100644 Binary files a/Backend/momment/momment/__pycache__/settings.cpython-39.pyc and b/Backend/momment/momment/__pycache__/settings.cpython-39.pyc differ diff --git a/Backend/momment/momment/__pycache__/urls.cpython-39.pyc b/Backend/momment/momment/__pycache__/urls.cpython-39.pyc index b9ed5340..053c5b93 100644 Binary files a/Backend/momment/momment/__pycache__/urls.cpython-39.pyc and b/Backend/momment/momment/__pycache__/urls.cpython-39.pyc differ diff --git a/Backend/momment/momment/settings.py b/Backend/momment/momment/settings.py index 0931e40f..7ae94f9b 100644 --- a/Backend/momment/momment/settings.py +++ b/Backend/momment/momment/settings.py @@ -63,6 +63,7 @@ def get_secret(setting, secrets=secrets): # local app 'accounts', 'store', + 'cake', 'rest_framework', 'rest_framework.authtoken', diff --git a/Backend/momment/momment/urls.py b/Backend/momment/momment/urls.py index 3289f21e..9ac60e01 100644 --- a/Backend/momment/momment/urls.py +++ b/Backend/momment/momment/urls.py @@ -20,6 +20,7 @@ path('admin/', admin.site.urls), path('accounts/', include('accounts.urls')), path('store/', include('store.urls')), + path('cake/', include('cake.urls')), # path('dj-accounts/', include('dj_rest_auth.urls')), # path('dj-accounts/signup/', include('dj_rest_auth.registration.urls')), ] diff --git a/Backend/momment/store/admin.py b/Backend/momment/store/admin.py index 8c38f3f3..176bfffb 100644 --- a/Backend/momment/store/admin.py +++ b/Backend/momment/store/admin.py @@ -1,3 +1,15 @@ from django.contrib import admin - -# Register your models here. +from .models import Store + +class StoreAdmin(admin.ModelAdmin): + # 관리자 화면에 보여질 칼럼 지정 + list_display = ('store_name', 'store_digit', 'user') + search_fields = ('user', 'store_name') + readonly_fields = () + + filter_horizontal = () + list_filter = () + fieldsets = () + ordering = ('id',) + +admin.site.register(Store, StoreAdmin) \ No newline at end of file diff --git a/Backend/momment/store/migrations/0001_initial.py b/Backend/momment/store/migrations/0001_initial.py index abeb2a02..0ea6a573 100644 --- a/Backend/momment/store/migrations/0001_initial.py +++ b/Backend/momment/store/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.13 on 2023-01-12 15:53 +# Generated by Django 3.2.13 on 2023-01-19 15:47 from django.conf import settings from django.db import migrations, models @@ -21,10 +21,10 @@ class Migration(migrations.Migration): ('store_name', models.CharField(max_length=255)), ('store_intro', models.TextField(verbose_name='store intro')), ('store_opentime', models.TimeField(verbose_name='open time')), - ('store_close', models.TimeField(verbose_name='close time')), + ('store_closetime', models.TimeField(verbose_name='close time')), ('store_digit', models.CharField(max_length=13)), ('store_address', models.CharField(max_length=255)), - ('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), ] diff --git a/Backend/momment/store/models.py b/Backend/momment/store/models.py index 4b334231..5fdeb0fb 100644 --- a/Backend/momment/store/models.py +++ b/Backend/momment/store/models.py @@ -4,10 +4,10 @@ # Create your models here. class Store(models.Model): - store_name = models.CharField(max_length=255) - store_intro = models.TextField(verbose_name='store intro') - store_opentime = models.TimeField(verbose_name='open time') - store_close = models.TimeField(verbose_name='close time') - store_digit = models.CharField(max_length=13) - store_address = models.CharField(max_length=255) - user_id = models.ForeignKey(User, on_delete=models.CASCADE) \ No newline at end of file + store_name = models.CharField(max_length=255) + store_intro = models.TextField(verbose_name='store intro') + store_opentime = models.TimeField(verbose_name='open time') + store_closetime = models.TimeField(verbose_name='close time') + store_digit = models.CharField(max_length=13) + store_address = models.CharField(max_length=255) + user = models.OneToOneField(User, on_delete=models.CASCADE) diff --git a/Backend/momment/store/serializers.py b/Backend/momment/store/serializers.py new file mode 100644 index 00000000..9570b69d --- /dev/null +++ b/Backend/momment/store/serializers.py @@ -0,0 +1,9 @@ +from .models import Store + +from rest_framework import serializers + +class StoreSerializer(serializers.ModelSerializer): + + class Meta: + model = Store + field = '__all__' \ No newline at end of file diff --git a/Backend/momment/store/urls.py b/Backend/momment/store/urls.py index 41d0f3b7..73662ac9 100644 --- a/Backend/momment/store/urls.py +++ b/Backend/momment/store/urls.py @@ -2,5 +2,6 @@ from django.urls import path urlpatterns = [ - + path('update/', views.update), + path('delete/', views.delete) ] \ No newline at end of file diff --git a/Backend/momment/store/views.py b/Backend/momment/store/views.py index 91ea44a2..982d2a64 100644 --- a/Backend/momment/store/views.py +++ b/Backend/momment/store/views.py @@ -1,3 +1,58 @@ -from django.shortcuts import render +from .models import Store +from accounts.models import User +from .serializers import StoreSerializer -# Create your views here. +import json +from django.http import HttpResponse, JsonResponse +from rest_framework import status +from rest_framework.response import Response +from rest_framework.decorators import api_view + +@api_view(['POST', 'PUT']) +def update(request): + try: + data = json.loads(request.body) + + store_name = data['store_name'] + store_intro = data['store_intro'] + store_opentime = data['store_opentime'] + store_closetime = data['store_closetime'] + store_digit = data['store_digit'] + store_address = data['store_address'] + user_email = data['user_email'] + + # user email을 이용하여 user_id 값 가져오기 + print(user_email) + user = User.objects.get(email=user_email) + + if Store.objects.filter(user=user).exists(): + Store.objects.update(store_name=store_name, store_intro=store_intro, store_opentime=store_opentime, + store_closetime=store_closetime, store_digit=store_digit, store_address=store_address, user=user) + return JsonResponse({'message' : 'UPDATE_SUCCESS'}, status=200) + + + Store.objects.create(store_name=store_name, store_intro=store_intro, store_opentime=store_opentime, + store_closetime=store_closetime, store_digit=store_digit, store_address=store_address, user=user) + + + return JsonResponse({'message' : "SUCCESS"}, status=200) + + except KeyError: + return JsonResponse({'message' : 'KEY_ERROR'}, status=400) + + +@api_view(['POST', 'PUT']) +def delete(request): + try: + data = json.loads(request.body) + + user_email = data['user_email'] + user = User.objects.get(email=user_email) + store = Store.objects.get(user=user) + + store.delete() + + return JsonResponse({'message' : "SUCCESS"}, status=200) + + except: + return JsonResponse({'message' : 'KEY_ERROR'}, status=400) diff --git a/Backend/momment/test.json b/Backend/momment/test.json new file mode 100644 index 00000000..35ca7aed --- /dev/null +++ b/Backend/momment/test.json @@ -0,0 +1,139 @@ +{ + "user_email" : "rubat0@gmail.com", + "cake_name" : "test cake", + "cake_price" : "10000", + "cake_basic_option" : { + "cake_size" : { + "1" : { + "option" : "도시락", + "price" : "1000" + }, + "2" : { + "option" : "미니케이크 1호", + "price" : "2000" + }, + "3" : { + "option" : "미니케이크 2호", + "price" : "3000" + } + }, + "cake_flavor" : { + "1" : { + "option" : "바닐라", + "price" : "0" + }, + "2" : { + "option" : "초코", + "price" : "1000" + } + }, + "cake_color" : { + "1" : { + "option" : "기본", + "price" : "0" + }, + "2" : { + "option" : "배경", + "price" : "1000" + }, + "3" : { + "option" : "꽃", + "price" : "2000" + } + }, + "cake_design" : { + "1" : { + "option" : "동물", + "price" : "1000" + }, + "2" : { + "option" : "얼굴", + "price" : "2000" + }, + "3" : { + "option" : "앞면", + "price" : "1000" + }, + "4" : { + "option" : "뒷면", + "price" : "1000" + } + } + }, + "cake_additional_option" : { + "cake_sidedeco" : { + "1" : { + "option" : "sidedeco", + "price" : "2000" + } + }, + "cake_deco" : { + "1" : { + "option" : "악세시리", + "price" : "1000" + }, + "2" : { + "option" : "리본", + "price" : "2000" + }, + "3" : { + "option" : "티아라", + "price" : "3000" + }, + "4" : { + "option" : "소주", + "price" : "5000" + } + }, + "cake_lettering" : { + "1" : { + "option" : "케이크", + "price" : "1000" + }, + "2" : { + "option" : "하판", + "price" : "1000" + }, + "3" : { + "option" : "옆면", + "price" : "1000" + } + }, + "cake_font" : { + "1" : { + "option" : "궁서체", + "price" : "0" + }, + "2" : { + "option" : "바탕체", + "price" : "0" + } + }, + "cake_picture" : { + "1" : { + "option" : "True", + "price" : "2000" + } + }, + "cake_package" : { + "1" : { + "option" : "기본", + "price" : "0" + }, + "2" : { + "option" : "스페셜", + "price" : "2000" + } + }, + "cake_candle" : { + "1" : { + "option" : "숫자초", + "price" : "500" + }, + "2" : { + "option" : "일반초", + "price" : "100" + } + } + } +} \ No newline at end of file diff --git a/Frontend/.DS_Store b/Frontend/.DS_Store index a19c98cb..7dc11358 100644 Binary files a/Frontend/.DS_Store and b/Frontend/.DS_Store differ