se registra cambios de usuarios y consultas dispositivos en base mongodb
parent
0032c1af1e
commit
3ff0eb4898
|
@ -10,6 +10,12 @@ DBPASS=password
|
||||||
DB_REDIS_HOST=dbproto
|
DB_REDIS_HOST=dbproto
|
||||||
DB_REDIS_PORT=6379
|
DB_REDIS_PORT=6379
|
||||||
|
|
||||||
|
# Conexion con base datos mongo
|
||||||
|
DB_MONGO_HOST=dbmongo
|
||||||
|
DB_MONGO_PORT=27017
|
||||||
|
DB_MONGO_USER=root
|
||||||
|
DB_MONGO_PASS=password
|
||||||
|
|
||||||
# Datos de emisor de correos
|
# Datos de emisor de correos
|
||||||
SMTP_HOST=smtp-mail.outlook.com
|
SMTP_HOST=smtp-mail.outlook.com
|
||||||
SMTP_PORT=587
|
SMTP_PORT=587
|
||||||
|
|
|
@ -9,7 +9,7 @@ POST {{server}}/auth/
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
{
|
{
|
||||||
"username": "usuario1",
|
"rut": "11111111-1",
|
||||||
"password": "usuario1"
|
"password": "usuario1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,15 @@ from django.db.models import F
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from .. import models, serializers
|
from api import models, serializers
|
||||||
from os import getenv
|
from os import getenv
|
||||||
import redis
|
import redis
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
# funcion para registrar en mongo
|
||||||
|
from logger.views import save_log_dispositivo
|
||||||
|
|
||||||
class DispositivoViewSet(viewsets.ModelViewSet):
|
class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
queryset = models.Dispositivo.objects.all()
|
queryset = models.Dispositivo.objects.all()
|
||||||
serializer_class = serializers.DispositivoSerializer
|
serializer_class = serializers.DispositivoSerializer
|
||||||
|
@ -29,6 +32,8 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
.first()
|
.first()
|
||||||
|
|
||||||
if (record):
|
if (record):
|
||||||
|
save_log_dispositivo(id_dispositivo=whoami['idDispositivo'], accion_url='whoami')
|
||||||
|
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
"WhoamiResponse": {
|
"WhoamiResponse": {
|
||||||
"NroParadero": record.nro_paradero,
|
"NroParadero": record.nro_paradero,
|
||||||
|
@ -51,7 +56,6 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
input = json.loads(request.body)
|
input = json.loads(request.body)
|
||||||
getInfoDevice = input['GetInfoDevice']
|
getInfoDevice = input['GetInfoDevice']
|
||||||
|
|
||||||
|
|
||||||
record = models.Paradero.objects \
|
record = models.Paradero.objects \
|
||||||
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
|
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
|
||||||
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
|
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
|
||||||
|
@ -106,10 +110,13 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
for pk_linea in lineas_agrupadas:
|
for pk_linea in lineas_agrupadas:
|
||||||
detalle_lineas.append(lineas_agrupadas[pk_linea])
|
detalle_lineas.append(lineas_agrupadas[pk_linea])
|
||||||
|
|
||||||
|
save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
||||||
|
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
"GetInfoDeviceResponse": {
|
"GetInfoDeviceResponse": {
|
||||||
"DetalleLineas": detalle_lineas,
|
"DetalleLineas": detalle_lineas,
|
||||||
"MensajeParadero": "No considerar, uso futuro"
|
"MensajeParadero": "No considerar, uso futuro",
|
||||||
|
"NroParadero": record.nro_paradero,
|
||||||
|
"NombreParadero": record.nombre_paradero
|
||||||
}
|
}
|
||||||
})
|
})
|
|
@ -18,6 +18,7 @@ class PersonaViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
def create(self, request):
|
def create(self, request):
|
||||||
try:
|
try:
|
||||||
|
if 'photo' in request.data:
|
||||||
fs = FileSystemStorage(location = config('PHOTOS_UPLOADS','/tmp'))
|
fs = FileSystemStorage(location = config('PHOTOS_UPLOADS','/tmp'))
|
||||||
fs.save(request.data['photo'], request.data['photo'])
|
fs.save(request.data['photo'], request.data['photo'])
|
||||||
|
|
||||||
|
@ -27,8 +28,10 @@ class PersonaViewSet(viewsets.ModelViewSet):
|
||||||
return HttpResponse(e.detail['rut'][0], status=400)
|
return HttpResponse(e.detail['rut'][0], status=400)
|
||||||
return HttpResponse(e, status=400)
|
return HttpResponse(e, status=400)
|
||||||
|
|
||||||
|
|
||||||
def partial_update(self, request, pk=None):
|
def partial_update(self, request, pk=None):
|
||||||
try:
|
try:
|
||||||
|
if 'photo' in request.data:
|
||||||
# indicar el nombre con que se guardara el archivo
|
# indicar el nombre con que se guardara el archivo
|
||||||
archivo = request.data['photo']
|
archivo = request.data['photo']
|
||||||
extension = Path(archivo.name).suffix
|
extension = Path(archivo.name).suffix
|
||||||
|
|
|
@ -6,9 +6,10 @@ from rest_framework import viewsets
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
from .. import models, schemas, serializers
|
from api import models, schemas, serializers
|
||||||
|
from logger.views import save_log_usuario
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import datetime
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
class UsuarioViewSet(viewsets.ModelViewSet):
|
class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
|
@ -22,13 +23,18 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
def create(self, request):
|
def create(self, request):
|
||||||
try:
|
try:
|
||||||
|
login = self.request.jwt_info['login']
|
||||||
|
usuario_session = models.Usuario.objects.filter(login=login)
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
input = json.loads(request.body)
|
input = json.loads(request.body)
|
||||||
|
|
||||||
persona = models.Persona.objects.filter(rut = input['rut']).first()
|
persona = models.Persona.objects.filter(rut = input['rut']).first()
|
||||||
id_tipo_tratamiento = input.get('id_tipo_tratamiento',None)
|
id_tipo_tratamiento = input.get('id_tipo_tratamiento',None)
|
||||||
if not id_tipo_tratamiento:
|
|
||||||
id_tipo_tratamiento = None
|
tipo_tratamiento = None
|
||||||
|
if id_tipo_tratamiento:
|
||||||
|
tipo_tratamiento = models.TipoTratamientoPersona.objects.filter(id_tipo_tratamiento = id_tipo_tratamiento).first()
|
||||||
|
|
||||||
if not persona:
|
if not persona:
|
||||||
persona = models.Persona(
|
persona = models.Persona(
|
||||||
|
@ -38,7 +44,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
apellido_a = input.get('apellido_a',None),
|
apellido_a = input.get('apellido_a',None),
|
||||||
apellido_b = input.get('apellido_b',None),
|
apellido_b = input.get('apellido_b',None),
|
||||||
email = input.get('email',None),
|
email = input.get('email',None),
|
||||||
id_tipo_tratamiento = id_tipo_tratamiento
|
id_tipo_tratamiento = tipo_tratamiento
|
||||||
)
|
)
|
||||||
persona.save()
|
persona.save()
|
||||||
else:
|
else:
|
||||||
|
@ -46,7 +52,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
persona.apellido_a = input.get('apellido_a',None)
|
persona.apellido_a = input.get('apellido_a',None)
|
||||||
persona.apellido_b = input.get('apellido_b',None)
|
persona.apellido_b = input.get('apellido_b',None)
|
||||||
persona.email = input.get('email',None)
|
persona.email = input.get('email',None)
|
||||||
persona.id_tipo_tratamiento = id_tipo_tratamiento
|
persona.id_tipo_tratamiento = tipo_tratamiento
|
||||||
persona.save()
|
persona.save()
|
||||||
|
|
||||||
rol = models.Rol.objects.filter(id_rol=input.get('id_rol',None)).first()
|
rol = models.Rol.objects.filter(id_rol=input.get('id_rol',None)).first()
|
||||||
|
@ -61,6 +67,8 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
)
|
)
|
||||||
usuario.save()
|
usuario.save()
|
||||||
|
|
||||||
|
save_log_usuario(accion_tabla='create', rut_tabla=persona.rut, rut_usuario_ejecutor=usuario_session.rut.rut)
|
||||||
|
|
||||||
if input['clave']:
|
if input['clave']:
|
||||||
logging.error('Modificar clave de usuario')
|
logging.error('Modificar clave de usuario')
|
||||||
usuario.clave = make_password(input['clave'])
|
usuario.clave = make_password(input['clave'])
|
||||||
|
@ -86,10 +94,14 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
print(e)
|
print(e)
|
||||||
return HttpResponse(str(e), status = 500)
|
return HttpResponse(str(e), status = 500)
|
||||||
|
|
||||||
def update(self, request, *args, **kwargs):
|
|
||||||
|
def partial_update(self, request, *args, **kwargs):
|
||||||
input = json.loads(request.body)
|
input = json.loads(request.body)
|
||||||
try:
|
try:
|
||||||
pk = input['rut']
|
pk = input['rut']
|
||||||
|
login = self.request.jwt_info['login']
|
||||||
|
usuario_session = models.Usuario.objects.filter(login=login).first()
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
|
||||||
# validaciones se realiza a nivel del model
|
# validaciones se realiza a nivel del model
|
||||||
|
@ -107,6 +119,8 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
usuario.clave = make_password(input['clave'])
|
usuario.clave = make_password(input['clave'])
|
||||||
usuario.save()
|
usuario.save()
|
||||||
|
|
||||||
|
save_log_usuario(accion_tabla='update', rut_tabla=persona.rut, rut_usuario_ejecutor=usuario_session.rut.rut)
|
||||||
|
|
||||||
return Response({
|
return Response({
|
||||||
'rut': persona.rut,
|
'rut': persona.rut,
|
||||||
'dv': persona.dv,
|
'dv': persona.dv,
|
||||||
|
@ -127,6 +141,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
||||||
logging.error(e)
|
logging.error(e)
|
||||||
return HttpResponse(str(e), status = 500)
|
return HttpResponse(str(e), status = 500)
|
||||||
|
|
||||||
|
|
||||||
@action(detail=False, methods=['post'])
|
@action(detail=False, methods=['post'])
|
||||||
def permisos(self, request):
|
def permisos(self, request):
|
||||||
input = {}
|
input = {}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class LoggerConfig(AppConfig):
|
||||||
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
|
name = 'logger'
|
|
@ -0,0 +1,17 @@
|
||||||
|
# from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
# ref: https://docs.mongoengine.org/tutorial.html
|
||||||
|
|
||||||
|
from mongoengine import Document, StringField, DateTimeField
|
||||||
|
|
||||||
|
class LogConsultaDispositivo(Document):
|
||||||
|
id_dispositivo = StringField(required=True)
|
||||||
|
accion_url = StringField(required=True)
|
||||||
|
fecha_hora = DateTimeField(required=True)
|
||||||
|
|
||||||
|
class LogTablaUsuario(Document):
|
||||||
|
accion_tabla = StringField(required=True)
|
||||||
|
rut_usuario_tabla = StringField(required=True)
|
||||||
|
rut_usuario_ejecutor = StringField(required=True)
|
||||||
|
fecha_hora = DateTimeField(required=True)
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,48 @@
|
||||||
|
# from django.shortcuts import render
|
||||||
|
from mongoengine import connect
|
||||||
|
from decouple import config
|
||||||
|
from logger.models import LogConsultaDispositivo, LogTablaUsuario
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
dbname = config('DB_MONGO_NAME', 'nombre_basedatos')
|
||||||
|
dbhost = config('DB_MONGO_HOST', 'localhost')
|
||||||
|
dbport = int(config('DB_MONGO_PORT', '27017'))
|
||||||
|
dbuser = config('DB_MONGO_USER', 'usuario')
|
||||||
|
dbpass = config('DB_MONGO_PASS', 'contrasena')
|
||||||
|
|
||||||
|
connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
|
def save_log_dispositivo(id_dispositivo, accion_url):
|
||||||
|
try:
|
||||||
|
# connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
|
||||||
|
nuevo_registro = LogConsultaDispositivo(
|
||||||
|
id_dispositivo = id_dispositivo,
|
||||||
|
accion_url = accion_url,
|
||||||
|
fecha_hora = datetime.datetime.now()
|
||||||
|
)
|
||||||
|
nuevo_registro.save()
|
||||||
|
return True
|
||||||
|
except Exception as err:
|
||||||
|
print(err, flush=True)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def save_log_usuario(accion_tabla, rut_tabla, rut_usuario_ejecutor):
|
||||||
|
try:
|
||||||
|
print(rut_tabla, flush=True)
|
||||||
|
print(rut_usuario_ejecutor, flush=True)
|
||||||
|
|
||||||
|
# connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
|
||||||
|
nuevo_registro = LogTablaUsuario(
|
||||||
|
accion_tabla = accion_tabla,
|
||||||
|
rut_usuario_tabla = str(rut_tabla),
|
||||||
|
rut_usuario_ejecutor = str(rut_usuario_ejecutor),
|
||||||
|
fecha_hora = datetime.datetime.now()
|
||||||
|
)
|
||||||
|
nuevo_registro.save()
|
||||||
|
return True
|
||||||
|
except Exception as err:
|
||||||
|
print(err, flush=True)
|
||||||
|
return False
|
||||||
|
|
|
@ -46,6 +46,7 @@ INSTALLED_APPS = [
|
||||||
'corsheaders',
|
'corsheaders',
|
||||||
'django_filters',
|
'django_filters',
|
||||||
'api',
|
'api',
|
||||||
|
'logger',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|
|
@ -8,6 +8,7 @@ python-dotenv
|
||||||
python-decouple
|
python-decouple
|
||||||
PyJWT
|
PyJWT
|
||||||
pymongo
|
pymongo
|
||||||
|
mongoengine
|
||||||
Pillow
|
Pillow
|
||||||
openpyxl
|
openpyxl
|
||||||
google
|
google
|
||||||
|
|
Loading…
Reference in New Issue