def get_user(token): try: user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] user = Usuario.objects.get(uid=user_uid) user.ultima_conexion = timezone_now() user.save() return user except: return None
def BorradoProducto(token,productId): user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] user = Usuario.objects.get(uid=user_uid) product = Producto.objects.get(id=productId) if product.vendido_por == user: product.delete() return 'Ok' else: return 'Unauthorized'
def ProductosFavoritos(token,ultimo_indice,elementos_pagina): user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] user = Usuario.objects.get(uid=user_uid) products = Producto.objects.filter(le_gusta_a=user, estado_venta=True) ultimo_indice = int(ultimo_indice) elementos_pagina = int(elementos_pagina) if(elementos_pagina != -1): products = itertools.islice(products, ultimo_indice, ultimo_indice + elementos_pagina) serializer = ProductoSerializerList(products, many=True, read_only=True, context = {"user": user}) return serializer
def check_user_logged_in(token): try: user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] user = Usuario.objects.get(uid=user_uid) user.ultima_conexion = timezone_now() user.save() #auth.refresh(token) return True except: return False
def CrearChat(token, otroUserUid, productId): user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] user = Usuario.objects.get(uid=user_uid) otroUser = Usuario.objects.get(uid=otroUserUid) product = Producto.objects.get(pk=int(productId)) #Comprobamos que no exista el chat previamente try: chat = Chat.objects.get(vendedor=otroUser, comprador=user, producto=product) except: chat = Chat.objects.create(vendedor=otroUser, comprador=user, producto=product) return chat
def BorradoChat(token, chatId): user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] user = Usuario.objects.get(uid=user_uid) chat = Chat.objects.get(id=chatId) if chat.vendedor == user: chat.borrado_vendedor = True chat.save() if chat.borrado_comprador == True: chat.delete() return 'Ok' elif chat.comprador == user: chat.borrado_comprador = True chat.save() if chat.borrado_vendedor == True: chat.delete() return 'Ok' else: return 'Unauthorized'
def EditarProducto(biblio,id_producto, movil): token = biblio['token'] user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] try: user = Usuario.objects.get(uid=user_uid) except: return 'Not found' if user == None: return 'Not found' #Get all the required parameters for the product files = biblio['files'] latitud = biblio['latitud'] longitud = biblio['longitud'] nombre = biblio['nombre'] precio = biblio['precio'] estado_producto = biblio['estado_producto'] tipo_envio = biblio['tipo_envio'] descripcion = biblio['descripcion'] tags = biblio['tags'] isbn = biblio['isbn'] #Check that the request is correct if tags != '': lista_tags = [x.strip() for x in tags.split(',')] #Prueba si el precio es un numero o no try: if precio != '': precio = precio.replace(',', '.') precio = Decimal(precio) if latitud != '' and longitud != '': latitud = latitud.replace(',', '.') longitud = longitud.replace(',', '.') except: return 'Bad request' #Selecciona si el usuario ha creado el producto para enviar a domicilio o no if tipo_envio != '': if tipo_envio == 'True': tipo_envio = True else: tipo_envio = False #Selecciona el estado en el que se encuentra el producto, entre Nuevo, Seminuevo o Usado if estado_producto != '' and estado_producto != 'Nuevo' and estado_producto != 'Seminuevo' and estado_producto != 'Usado': return 'Bad request' try: producto = Producto.objects.get(pk=id_producto) except: return 'Bad request' if latitud != '' and longitud != '': producto.latitud = Decimal(latitud) producto.longitud = Decimal(longitud) if nombre != '': producto.nombre = nombre if precio != '': producto.precio = precio if estado_producto != '': producto.estado_producto = estado_producto if tipo_envio != '': producto.tipo_envio = tipo_envio if descripcion != '': producto.descripcion = descripcion if isbn != '': producto.isbn = isbn producto.save() if tags != '': if movil == 'true': tags_in_producto = producto.tiene_tags.all() for tag in tags_in_producto: tag.number_of_uses = tag.number_of_uses - 1 tag.save() producto.tiene_tags.remove(tag) for tag in lista_tags: tag_estandar = re.sub('[^A-Za-z0-9á-źÁ-Źüñ]+', '', tag) tag_estandar = strip_accents(tag_estandar) tag_estandar = tag_estandar.lower() try: t = Tag.objects.get(nombre=tag_estandar) except: t = Tag.objects.create(nombre=tag_estandar) producto.tiene_tags.add(t) t.number_of_uses = t.number_of_uses + 1 t.save() if files != []: if movil == 'true': ContenidoMultimedia.objects.filter(producto=producto).delete() i = 0 else: multiExistentes = ContenidoMultimedia.objects.filter(producto=producto) i = multiExistentes.count() for file in files: multi = ContenidoMultimedia(contenido=file, producto=producto, orden_en_producto=i) multi.save() i = i + 1 return 'Modified'
def CreacionProducto(biblio): token = biblio['token'] user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] try: user = Usuario.objects.get(uid=user_uid) except: return 'Not found' if user == None: return 'Not found' #Get all the required parameters for the product files = biblio['files'] latitud = biblio['latitud'] longitud = biblio['longitud'] nombre = biblio['nombre'] precio = biblio['precio'] estado_producto = biblio['estado_producto'] tipo_envio = biblio['tipo_envio'] descripcion = biblio['descripcion'] tags = biblio['tags'] isbn = biblio['isbn'] #Check that the request is correct if latitud == '' or longitud == '' or nombre == '' or precio == '' or estado_producto == '' or tipo_envio == '' or descripcion == '': return 'Bad request' if tags != '': lista_tags = [x.strip() for x in tags.split(',')] #Prueba si el precio es un numero o no try: precio = precio.replace(',', '.') precio = Decimal(precio) latitud = latitud.replace(',', '.') longitud = longitud.replace(',', '.') except: return 'Bad request' #Selecciona si el usuario ha creado el producto para enviar a domicilio o no if tipo_envio == 'True': tipo_envio = True else: tipo_envio = False #Selecciona el estado en el que se encuentra el producto, entre Nuevo, Seminuevo o Usado if estado_producto != 'Nuevo' and estado_producto != 'Seminuevo' and estado_producto != 'Usado': return 'Bad request' producto = Producto(vendido_por=user, latitud=Decimal(latitud), longitud=Decimal(longitud), nombre=nombre, precio=precio, estado_producto=estado_producto, estado_venta=True, tipo_envio=tipo_envio, descripcion=descripcion, isbn=isbn) producto.save() producto = Producto.objects.get(pk=producto.pk) print(producto) if tags != '': for tag in lista_tags: print(tag) tag_estandar = re.sub('[^A-Za-z0-9á-źÁ-Źüñ]+', '', tag) tag_estandar = strip_accents(tag_estandar) tag_estandar = tag_estandar.lower() try: t = Tag.objects.get(nombre=tag_estandar) producto.tiene_tags.add(t) t.number_of_uses = t.number_of_uses + 1 t.save() except: t = Tag.objects.create(nombre=tag_estandar) producto.tiene_tags.add(t) t.number_of_uses = t.number_of_uses + 1 t.save() i = 0 for file in files: multi = ContenidoMultimedia(contenido=file, producto=producto, orden_en_producto=i) multi.save() i = i + 1 return 'Created'
def usuario_login(token, token_fcm, latitude, longitude, fcm_type, movil): if latitude == '-1': latitud_registro = 41.683490 else: latitud_registro = Decimal(latitude) if longitude == '-1': longitud_registro = -0.888479 else: longitud_registro = Decimal(longitude) if token == 'nothing': return 'Error' else: try: user_info = auth.get_account_info(token) user_uid = user_info['users'][0]['localId'] try: name = user_info['users'][0]['displayName'] if name == '': name = user_info['users'][0]['email'].split("@")[0] except: name = user_info['users'][0]['email'].split("@")[0] try: profile_image = user_info['users'][0]['providerUserInfo'][0][ 'photoUrl'] except: profile_image = 'https://www.iconsdb.com/icons/preview/black/book-xxl.png' except: print("Error con firebase en login social") return 'Error' try: geolocator = Nominatim(user_agent="bookalo") location = geolocator.reverse( str(latitud_registro) + ',' + str(longitud_registro)) try: ciudad = location.raw['address']['city'] except: ciudad = location.raw['address']['county'] except: ciudad = 'Zaragoza' try: user = Usuario.objects.get(uid=user_uid) if user.esta_baneado: return status.HTTP_401_UNAUTHORIZED else: user.latitud_registro = latitud_registro user.longitud_registro = longitud_registro user.ciudad = ciudad user.save() update_last_connection(user) try: if movil == 'true': es_movil = True else: es_movil = False sessions = Sesion.objects.filter(usuario=user) if sessions: for session in sessions: if session_needs_deleting(session): session.delete() user = Usuario.objects.get(uid=user_uid) try: sesion = Sesion.objects.get(token_fcm=token_fcm, usuario=user) sesion.token = token sesion.save() except Exception as ex: Sesion.objects.create(token=token, token_fcm=token_fcm, usuario=user, es_movil=es_movil) else: try: user = Usuario.objects.get(uid=user_uid) Sesion.objects.create(token=token, token_fcm=token_fcm, usuario=user, es_movil=es_movil) except Exception as ex: user = Usuario.objects.get(uid=user_uid) Sesion.objects.create(token=token, token_fcm=str(ex), usuario=user, es_movil=es_movil) except Exception as ex: print("Error while looking for active sessions") return UserSerializer(user).data except Usuario.DoesNotExist: new_user_data = Usuario.objects.create( username=user_uid, uid=user_uid, token_fcm=token_fcm, nombre=name, latitud_registro=latitud_registro, longitud_registro=longitud_registro, imagen_perfil=profile_image, ciudad=ciudad) Sesion.objects.create(token=token, token_fcm=token_fcm, usuario=new_user_data) update_last_connection(new_user_data) return UserSerializer(new_user_data).data