98 lines
3.2 KiB
Python
98 lines
3.2 KiB
Python
import json
|
|
|
|
from django.contrib.auth.models import AnonymousUser
|
|
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:
|
|
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]
|
|
elif request.user and not isinstance(request.user, AnonymousUser):
|
|
user = request.user
|
|
else:
|
|
return JsonResponse({'status': 400, 'error': 'No se entrego un id de usuario ni hay un usuario logeado'},
|
|
status=400)
|
|
|
|
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):
|
|
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)
|