Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,8 @@

# simple jwt setting
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(hours=1), # 토큰 유효시간 설정 1시간으로 설정
"REFRESH_TOKEN_LIFETIME": timedelta(days=5), # 리프레시 토큰 유효기간 설정 리프레시 토큰 유효기간은 5일로 설정
"ACCESS_TOKEN_LIFETIME": timedelta(hours=5), # 토큰 유효시간 설정 1시간으로 설정
"REFRESH_TOKEN_LIFETIME": timedelta(days=30), # 리프레시 토큰 유효기간 설정 리프레시 토큰 유효기간은 5일로 설정
"ROTATE_REFRESH_TOKENS": True, # 리프레시 토큰도 같이 반환됩니다.
"BLACKLIST_AFTER_ROTATION": True, # 이전 토큰 블랙리스트 적용, 사용시 설치앱에 rest_framework_simplejwt.token_blacklist 추가 필요
"UPDATE_LAST_LOGIN": False, # last_login field가 업데이트 됩니다. (커스텀 모델이라 X)
Expand Down
5 changes: 3 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ services:
db:
image: mysql:latest
restart: always
# ports:
# - "3306:3306"
# 배포 땐 아래 포트 막을 것
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
Expand Down
10 changes: 10 additions & 0 deletions mission/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@
get_my_function,
NoAttributeException, NoRequiredParameterException, ValueException, UnExpectedException
)
from config.settings import (
APP_LOGGER
)
import logging

logger = logging.getLogger(APP_LOGGER)

# Create your views here.
class MissionListView(viewsets.ModelViewSet):
Expand Down Expand Up @@ -104,6 +110,10 @@ def create(self, request, *args, **kwargs):
similarity_score = None
method = "object_detection"

if image_pass == False: # 미션 실패시 S3 사진 삭제
logger.debug('사진 삭제')
travel_place.mission_image.delete()

return Response({
"image_check_passed": image_pass,
"method_used": method,
Expand Down
7 changes: 7 additions & 0 deletions tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@

from usr.models import User

from config.settings import APP_LOGGER
import logging

logger = logging.getLogger(APP_LOGGER)


class BaseTestCase(TestCase):
is_issued_token = False # 토큰 발급을 하였는가
Expand All @@ -21,6 +26,8 @@ def setUpClass(cls):
kakao_tokens = token_service.get_new_tokens(KAKAO_REFRESH_TOKEN)
cls.KAKAO_TEST_ACCESS_TOKEN = tokens.access_token
cls.KAKAO_TEST_ID_TOKEN = kakao_tokens.id_token
logger.debug('ACCESS_TOKEN: ' + str(cls.KAKAO_TEST_ACCESS_TOKEN))
logger.debug('ID_TOKEN: ' + str(cls.KAKAO_TEST_ID_TOKEN))

@classmethod
def setUpTestData(cls):
Expand Down
5 changes: 3 additions & 2 deletions tour/admin.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from django.contrib import admin
from .models import Place, Travel, TravelDaysAndPlaces, PlaceImages, Event
from .models import Place, Travel, TravelDaysAndPlaces, PlaceImages, Event, UserTourImages

# Register your models here.
admin.site.register(Place) # 장소 정보 관리자가 관리 가능하도록 함
admin.site.register(Travel)
admin.site.register(TravelDaysAndPlaces)
admin.site.register(PlaceImages)
admin.site.register(Event)
admin.site.register(Event)
admin.site.register(UserTourImages)
19 changes: 15 additions & 4 deletions tour/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from django.db import models
from django.db.models import ForeignKey

from usr.models import User
from mission.models import Mission

Expand All @@ -8,8 +10,9 @@ class Travel(models.Model):
# id: pk
user = models.ManyToManyField(User) # 유저 제거시 해당 여행도 제거
tour_name = models.CharField(max_length=255) # 여행 이름 필드 추가
start_date = models.DateField() # 여행 시작 날짜
end_date = models.DateField() # 여행 마감 날짜
# start_date = models.DateField() # 여행 시작 날짜
# end_date = models.DateField() # 여행 마감 날짜
tour_date = models.DateField() # 여행 날짜

def __str__(self):
return self.tour_name
Expand All @@ -29,13 +32,13 @@ class TravelDaysAndPlaces(models.Model):
# id: pk
travel = models.ForeignKey(Travel, on_delete=models.CASCADE) # 여행 제거시 해당 일차도 제거
place = models.ForeignKey(Place, on_delete=models.CASCADE) # 장소 제거시 해당 일차도 제거
date = models.DateField() # 여행 날짜
# date = models.DateField() # 여행 날짜
mission = models.ForeignKey(Mission, on_delete=models.SET_NULL, blank=True, null=True) # 미션을 추가합니다. 미션 제거시 해당 일차 미션 NULL
mission_image = models.ImageField(upload_to='', blank=True, null=True) # 이미지 필드를 추가합니다.
mission_success = models.BooleanField(null = True, blank = True)

def __str__(self):
return self.travel.tour_name + " " + self.place.name + " " + str(self.date)
return self.travel.tour_name + " " + self.place.name + " " + str(self.travel.tour_date)

class PlaceImages(models.Model):
# id: pk
Expand All @@ -60,4 +63,12 @@ class Event(models.Model):
def __str__(self):
return self.title

class UserTourImages(models.Model):
# id: pk
tour = ForeignKey(Travel, on_delete=models.CASCADE)
user = ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to='', blank=True, null=True) # 이미지 필드를 추가합니다.

def __str__(self):
return f"{self.tour.tour_name} - {self.tour.tour_date}"

40 changes: 38 additions & 2 deletions tour/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
from rest_framework import serializers
from .models import Travel, Place, Event, TravelDaysAndPlaces
from .models import Travel, Place, Event, TravelDaysAndPlaces, PlaceImages, UserTourImages
from usr.serializers import UserSerializer
from config.settings import APP_LOGGER
import logging

logger = logging.getLogger(APP_LOGGER)

class TravelSerializer(serializers.ModelSerializer):

Expand All @@ -10,9 +14,25 @@ class Meta:
read_only_fields = ('user',)

def to_representation(self, instance):
logger.debug('Tour 시리얼라이저 to_representation 실행')
data = super().to_representation(instance)
data['user'] = UserSerializer(instance.user.all(), many=True).data
# data['user'] = instance.user.all().values_list('username', flat=True) # 사용자 username만 가져옵니다.
# instance는 DB 객체가 들어옴
# 여행 id, tour_name, tour_date만 들어왔음
data['places'] = PlaceSerializer(
Place.objects.filter(traveldaysandplaces__travel=instance.id), many=True).data
return data

class TravelListSerializer(serializers.ModelSerializer):
class Meta:
model = Travel
fields = '__all__'
read_only_fields = ('user',)

def to_representation(self, instance):
data = super().to_representation(instance)
data.pop('user')
return data

class EventSerializer(serializers.ModelSerializer):
Expand All @@ -29,8 +49,24 @@ class Meta:
fields = '__all__'

class TravelDaysAndPlacesSerializer(serializers.ModelSerializer):
place = PlaceSerializer() # 장소 정보는 시리얼라이저를 통해 반환합니다.
# place = PlaceSerializer() # 장소 정보는 시리얼라이저를 통해 반환합니다.

class Meta:
model = TravelDaysAndPlaces
fields = '__all__'

class PlaceImageSerializer(serializers.ModelSerializer):
class Meta:
model = PlaceImages
fields = '__all__'

class TourSnapshotsSerializer(serializers.ModelSerializer):
class Meta:
model = UserTourImages
fields = '__all__'

def to_representation(self, instance):
# 사진 날짜 보여주기
data = super().to_representation(instance)
data['tour_date'] = instance.tour.tour_date
return data
Loading