import json from django.http import JsonResponse from oauth2_provider.decorators import protected_resource from users.forms import SocialNetworksForm, UserForm from users.models import User, SocialNetworks def user_view(request, user_id=None): if user_id is None: return JsonResponse({'status': 400, 'error': 'No se entrego un user_id'}, status=400) user = User.objects.filter(pk=user_id) if user.count() != 1: return JsonResponse({'status': 404, 'error': f'No existe un usuario con id {user_id}'}, status=404) user = user[0] if request.method == 'GET': return _get_user(request, user) if request.method == 'PUT': return _put_user(request, user) def _get_user(request, user): encoded_user = { 'id': user.id, 'username': user.username, 'email': user.email, } return JsonResponse(encoded_user) @protected_resource() def _put_user(request, user): if request.user.id != user.id and not request.user.is_admin: return JsonResponse({'status': 403, 'error': 'El usuario no tiene permiso para hacer esta acción'}, status=403) request_data = json.loads(request.body.decode('utf8')) form = UserForm(request_data, instance=user) if not form.is_valid(): return JsonResponse({'status': 400, 'error': form.errors.as_json()}, status=400) form.save() return JsonResponse({'status': 200}, status=200) def social_networks_view(request, user_id=None): if user_id is None: return JsonResponse({'status': 400, 'error': 'No se entrego un user_id'}, status=400) social_networks = SocialNetworks.objects.filter(user_id=user_id) if social_networks.count() != 1: return JsonResponse({'status': 404, 'error': f'No existe redes sociales de un usuario con id {user_id}'}, status=404) social_networks = social_networks[0] if request.method == 'GET': return _get_social_networks(request, social_networks) if request.method == 'PUT': return _update_social_networks(request, social_networks) def _get_social_networks(request, social_networks): encoded_social_networks = { 'twitter': social_networks.twitter, 'facebook': social_networks.facebook, 'instagram': social_networks.instagram, 'youtube': social_networks.youtube, 'twitch': social_networks.twitch } return JsonResponse(encoded_social_networks) @protected_resource() def _update_social_networks(request, social_networks): if request.user.id != social_networks.user_id and not request.user.is_admin: return JsonResponse({'status': 403, 'error': 'El usuario no tiene permiso para hacer esta acción'}, status=403) request_data = json.loads(request.body.decode('utf8')) form = SocialNetworksForm(request_data, instance=social_networks) if not form.is_valid(): return JsonResponse({'status': 400, 'error': form.errors.as_json()}, status=400) form.save() return JsonResponse({'status': 200}, status=200)