Skip to content
This repository was archived by the owner on Sep 17, 2020. It is now read-only.
Open
4 changes: 3 additions & 1 deletion server/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,6 @@ venv.bak/

server/settings.py
.idea/
db.sqlite3
db.sqlite3

tmp/
11 changes: 3 additions & 8 deletions server/emil/serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,9 @@ class Meta:
fields = ('random_id', 'available_smileage', 'used_smileage')


# class SoundSerializer(serializers.Serializer):
# content_type = serializers.CharField(allow_blank=False, allow_null=False, required=True)
# filename = serializers.CharField(allow_blank=False, allow_null=False, required=True)
# file_data = serializers.CharField(allow_blank=False, allow_null=False, required=True)


# class PostCafSerializer(serializers.Serializer):
# sound = serializers.CharField(allow_blank=False, allow_null=False, required=True)
class SoundSerializer(serializers.Serializer):
user_id = serializers.CharField(allow_null=False, allow_blank=False, required=True, max_length=10)
file_data = serializers.CharField(allow_blank=False, allow_null=False, required=True)


class LaughsSerializer(serializers.Serializer):
Expand Down
2 changes: 1 addition & 1 deletion server/emil/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

router = routers.DefaultRouter()
router.register(r'users/(?P<user_id>[0-9])', UsersViewSet, 'users')
# router.register(r'post_caf', PostCafViewSet, 'post_caf')
router.register(r'laughs/(?P<user_id>[0-9])/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})', LaughsViewSet, 'laughs')
router.register(r'laughs/detail/(?P<user_id>[0-9])/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})', LaughsDetailViewSet, 'laughs-detail')
router.register(r'laugh', LaughViewSet, 'laugh')
router.register(r'sound', SoundViewSet, 'sound')
71 changes: 47 additions & 24 deletions server/emil/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import os
import base64
from django.core.exceptions import ObjectDoesNotExist
from rest_framework import viewsets
from rest_framework.exceptions import ValidationError
Expand All @@ -14,37 +16,17 @@ def list(self, request, **kwargs):
try:
user = self.get_queryset()
except ObjectDoesNotExist:
raise ValidationError(404)
raise ValidationError(404)

return Response({
'available': user.available_smileage,
'used': user.used_smileage
})
})

def get_queryset(self):
return User.objects.get(id=self.kwargs.get('user_id'))


# class PostCafViewSet(viewsets.ViewSet):
#
# @staticmethod
# def create(request):
# if request.method == 'POST':
# serializer = PostCafSerializer(data=request.data)
#
# if serializer.is_valid():
# serializer = SoundSerializer(data=json.loads(request.data['sound']))
#
# if serializer.is_valid():
# return Response({'result': 'OK'})
# else:
# return Response(serializer.errors)
# else:
# return Response(serializer.errors)
# else:
# return Response('Not Allow GET method')


class LaughsViewSet(viewsets.ModelViewSet):
http_method_names = ['get']
serializer_class = LaughsSerializer
Expand Down Expand Up @@ -91,7 +73,8 @@ def list(self, request, **kwargs):

if serializer.is_valid():

weekday = datetime.strptime(kwargs.get('year') + '/' + kwargs.get('month') + '/' + kwargs.get('day'), '%Y/%m/%d').weekday()
weekday = datetime.strptime(kwargs.get('year') + '/' + kwargs.get('month') + '/' + kwargs.get('day'),
'%Y/%m/%d').weekday()

# 指定された日付が日曜日かをチェック
if weekday != 6:
Expand Down Expand Up @@ -142,7 +125,8 @@ def list(self, request, **kwargs):
# print(start, end, laughs.filter(created_at__range=(start, end)).count())

# 1コマに笑った回数を記録
day_laughs_by_one_class.append(laughs.filter(created_at__range=(start+timedelta(hours=9), end+timedelta(hours=9))).count())
day_laughs_by_one_class.append(
laughs.filter(created_at__range=(start + timedelta(hours=9), end + timedelta(hours=9))).count())

start = start + timedelta(days=1)
end = end + timedelta(days=1)
Expand Down Expand Up @@ -183,3 +167,42 @@ def create(self, request, *args, **kwargs):

def get_queryset(self):
return User.objects.get(random_id=self.request.data['user_id'])


class SoundViewSet(viewsets.ModelViewSet):
http_method_names = ['post']
serializer_class = SoundSerializer

def create(self, request, *args, **kwargs):
if request.method == 'POST':
sound_serializer = SoundSerializer(data=request.data)

if not sound_serializer.is_valid():
return Response(sound_serializer.errors)

json_data = dict(request.data)
encoded = json_data['file_data']

# 規定に合わせるために=で埋め合わせ
missing_padding = len(encoded) % 4
if missing_padding != 0:
encoded += '=' * (4 - len(encoded) % 4)

now = datetime.now()
now_str = now.strftime('%Y-%m-%d %H:%M:%S')

filename_caf = 'tmp/' + json_data['user_id'][0] + '_' + now_str + '.caf'

f = open(filename_caf, 'wb')

try:
f.write(base64.b64decode(encoded))
f.close()
except ValueError:
os.remove(filename_caf)
raise ValueError(500)

return Response(filename_caf)

def get_queryset(self):
return User.objects.get(id=self.request.data['user_id'])