API modificacion de usuario

This commit is contained in:
Daniel Cortes
2020-06-28 16:23:00 -04:00
parent a01d124324
commit 5183d5a65d
8 changed files with 205 additions and 86 deletions

View File

@@ -1,27 +1,28 @@
import json
from django.http import JsonResponse
from django.views.decorators.http import require_GET
from oauth2_provider.decorators import protected_resource
from users.forms import SocialNetworksForm
from users.forms import SocialNetworksForm, UserForm
from users.models import User, SocialNetworks
@protected_resource()
def user(request, user_id=None):
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_id)
return _get_user(request, user)
if request.method == 'PUT':
return _put_user(request, user)
@require_GET
def _get_user(request, user_id=None):
user = request.user
if user_id is not None:
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}'})
user = user[0]
def _get_user(request, user):
encoded_user = {
'id': user.id,
'username': user.username,
@@ -32,23 +33,41 @@ def _get_user(request, user_id=None):
@protected_resource()
def social_networks(request, user_id=None):
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:
user_id = request.user.id
return JsonResponse({'status': 400, 'error': 'No se entrego un user_id'}, status=400)
if request.method == 'GET':
return _get_social_networks(request, user_id)
if request.method == 'PUT':
return _update_social_networks(request, user_id)
def _get_social_networks(request, user_id):
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}'})
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,
@@ -56,26 +75,22 @@ def _get_social_networks(request, user_id):
'youtube': social_networks.youtube,
'twitch': social_networks.twitch
}
return JsonResponse(encoded_social_networks)
def _update_social_networks(request, user_id=None):
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 '
f'con id {user_id}'}, status=404)
@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)
social_networks = social_networks[0]
request_data = json.loads(request.body.decode('utf8'))
form = SocialNetworksForm(request_data, instance=social_networks)
form = SocialNetworksForm(request.PUT or None)
if not form.is_valid():
return JsonResponse({'status': 400, 'errors': form.errors}, status=400)
social_networks.twitter = form.cleaned_data['twitter']
social_networks.facebook = form.cleaned_data['facebook']
social_networks.instagram = form.cleaned_data['instagram']
social_networks.youtube = form.cleaned_data['youtube']
social_networks.twitch = form.cleaned_data['twitch']
social_networks.save()
return JsonResponse({'status': 400, 'error': form.errors.as_json()}, status=400)
form.save()
return JsonResponse({'status': 200}, status=200)