Files
musiclist-server/users/api_views.py
2020-06-28 16:23:00 -04:00

97 lines
3.1 KiB
Python

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)