feature/implementacion de gestor de informacion y archivos minIO
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
|
||||
|
||||
from api.utils.storage_service import storage_service
|
||||
from rest_framework import serializers
|
||||
from .models import Vucem, CredencialesImportador
|
||||
|
||||
@@ -9,11 +10,91 @@ from .models import Vucem, CredencialesImportador
|
||||
class VucemSerializer(serializers.ModelSerializer):
|
||||
importadores = serializers.SerializerMethodField()
|
||||
|
||||
key = serializers.FileField(write_only=True, required=False, allow_null=True)
|
||||
cer = serializers.FileField(write_only=True, required=False, allow_null=True)
|
||||
|
||||
key_download_url = serializers.SerializerMethodField(read_only=True)
|
||||
cer_download_url = serializers.SerializerMethodField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Vucem
|
||||
fields = '__all__'
|
||||
read_only_fields = ('created_at', 'updated_at', 'organizacion', 'created_by', 'updated_by')
|
||||
|
||||
|
||||
def get_key_download_url(self, obj):
|
||||
if obj.key:
|
||||
return storage_service.get_file_url(obj.key)
|
||||
return None
|
||||
|
||||
def get_cer_download_url(self, obj):
|
||||
if obj.cer:
|
||||
return storage_service.get_file_url(obj.cer)
|
||||
return None
|
||||
|
||||
def create(self, validated_data):
|
||||
key_file = validated_data.pop('key', None)
|
||||
cer_file = validated_data.pop('cer', None)
|
||||
organizacion = validated_data.get('organizacion')
|
||||
|
||||
vucem = super().create(validated_data)
|
||||
|
||||
if key_file:
|
||||
ruta = storage_service.save_vucem_key(
|
||||
file=key_file,
|
||||
organizacion_id=organizacion.id,
|
||||
metadata={'vucem_id': str(vucem.id)}
|
||||
)
|
||||
if ruta:
|
||||
vucem.key = ruta
|
||||
else:
|
||||
vucem.delete()
|
||||
raise serializers.ValidationError({"key": "Error al guardar la llave"})
|
||||
|
||||
if cer_file:
|
||||
ruta = storage_service.save_vucem_cert(
|
||||
file=cer_file,
|
||||
organizacion_id=organizacion.id,
|
||||
metadata={'vucem_id': str(vucem.id)}
|
||||
)
|
||||
if ruta:
|
||||
vucem.cer = ruta
|
||||
else:
|
||||
vucem.delete()
|
||||
raise serializers.ValidationError({"cer_file": "Error al guardar el certificado"})
|
||||
|
||||
vucem.save()
|
||||
return vucem
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
key_file = validated_data.pop('key', None)
|
||||
cer_file = validated_data.pop('cer', None)
|
||||
organizacion = validated_data.get('organizacion', instance.organizacion)
|
||||
|
||||
instance = super().update(instance, validated_data)
|
||||
|
||||
if key_file:
|
||||
if instance.key:
|
||||
storage_service.delete_file(str(instance.key))
|
||||
ruta = storage_service.save_vucem_key(
|
||||
file=key_file,
|
||||
organizacion_id=organizacion.id
|
||||
)
|
||||
if ruta:
|
||||
instance.key = ruta
|
||||
|
||||
if cer_file:
|
||||
if instance.cer:
|
||||
storage_service.delete_file(str(instance.cer))
|
||||
ruta = storage_service.save_vucem_cert(
|
||||
file=cer_file,
|
||||
organizacion_id=organizacion.id
|
||||
)
|
||||
if ruta:
|
||||
instance.cer = ruta
|
||||
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
def get_importadores(self, obj):
|
||||
# Importar aquí para evitar importación circular
|
||||
from api.customs.serializers import ImportadorSerializer
|
||||
|
||||
Reference in New Issue
Block a user