Skip to main content

JMoordbCore @DeleteMany

A partir de la versión 0.29, se implementa el uso de @DeleteMany en Jmoordb-core permitiendo eliminar muchos documentos de una colección.

Asuma que tiene una entidad

@Entity
public class Tarjeta {

    @Id(autogeneratedActive = AutogeneratedActive.ON)
    private Long idtarjeta;
    @Column
    private String tarjeta;
    @Column
    private String descripcion;

    @ViewReferenced(from = "user", localField = "iduser")
    List<UserView> userView;

    @Column
    private Date fechainicial;
    @Column
    private Date fechafinal;
    @Referenced(from = "icono", localField = "idicono", commentary = "Esta asociado a la prioridad")
    private Icono icono;
    @Referenced(from = "tipotarjeta", localField = "idtipotarjeta", commentary = "Ayuda para la implementación de Deep Learning")
    private Tipotarjeta tipotarjeta;

    @Column
    private Long idsprint;

    @Column
    private Long idproyecto;

    @Column
    private Boolean backlog;

    @Column(commentary = "alta,baja,media")
    private String prioridad;

    @Column
    private String estimacion;

    @Column(commentary = "pendiente,progreso,finalizado")
    private String columna;
    @Column
    private Boolean active;

    @Embedded
    List<Tarea> tarea;

    @Embedded
    List<Comentario> comentario;

    @Embedded
    List<Etiqueta> etiqueta;

    @Embedded
    List<Archivo> archivo;

    @Embedded
    List<Impedimento> impedimento;

    @Column(commentary = "true cuando la crea un colaborador que no pertenece al proyecto y es un proyecto publico")
    private Boolean foreaneo;

}

Defina un repositorio, recuerde que CrudRepository implementa el método deleteMauy

@Repository(database = "{mongodb.database1}", entity = Tarjeta.class)
public interface TarjetaRepository extends CrudRepository<Tarjeta, Long> {

    @Lookup
    public List<Tarjeta> lookup(Search search);

    @Count()
    public Long count(Search... search);
}

Defina un Controller

@Path("tarjeta")
@Tag(name = "Información del tarjeta", description = "End-point para entidad Tarjeta")
@RolesAllowed({"admin"})
public class TarjetaController {
 @Inject
 TarjetaRepository tarjetaRepository;
 
 @DELETE
 @Path("deletemany")
 public Response deleteMany(@QueryParam("filter") String filter  ) {
   Search search = DocumentUtil.convertForLookup(filter, "", 0, 0);
        if (tarjetaRepository.deleteMany(search) == 0L) {
            return Response.status(201).entity(Boolean.TRUE).build();
        } else {
            return Response.status(400).entity("Error " + tarjetaRepository.getJmoordbException().getLocalizedMessage()).build();
        }
    }
    
    }

  En el cliente crear la interface RestClient

public interface TarjetaRestClient {

     // <editor-fold defaultstate="collapsed" desc="lookupAuth()">
    default String lookupAuth() {
        /**
         * *
         * Leer las configuraciones del archivo microprofile-config.properties
         */

        String secretKey = "SCox1jmWrkma$*opne2Amwz";

        Config config = ConfigProvider.getConfig();

        String userSecurity = config.getValue("userSecurity", String.class);

        // or
        ConfigValue passwordSecurity = config.getConfigValue("passwordSecurity");

        String userDecrypted = Encryptor.decrypt(userSecurity, secretKey);
        String passwordDecrypted = Encryptor.decrypt(passwordSecurity.getValue(), secretKey);

        return "Basic "
                + Base64.getEncoder().encodeToString((userDecrypted + ":" + passwordDecrypted).getBytes());
    }
// </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Response deleteMany(@QueryParam("filter") String filter)">
     @DELETE
     @Path("deletemany")
    public Response deleteMany(@QueryParam("filter") String filter  ) ;
  // </editor-fold>
  
  
  }

   Crear la interface Services


public interface TarjetaServices {

    public Boolean deleteMany(Bson filter);
    
}


Implementar la interface Services

@ApplicationScoped
public class ProyectoServicesImpl implements TarjetaServices {

// <editor-fold defaultstate="collapsed" desc="Services">

    @Inject
    TarjetaServices tarjetaServices;
// </editor-fold>

 @Override
    public Boolean deleteMany(Bson filter) {
       Boolean result = Boolean.FALSE;
        try {
        Integer status =  tarjetaRestClient.deleteMany(EncodeUtil.encodeBson(filter)).getStatus();
         if (status == 201) {
                result = Boolean.TRUE;
            }
        } catch (Exception e) {
            FacesUtil.errorMessage(FacesUtil.nameOfClassAndMethod() + " " + e.getLocalizedMessage());
        }
        return result;
    }
    
 }


En otra clase que implementa la funcionalidad cree el filtro y realice la consulta

    Bson filter = and(
                    eq("active", Boolean.TRUE),
                    eq("age", 25)
     );
     
     tarjetaServices.deleteMany(filter);

Comments

Popular posts from this blog

Primefaces v13

 La versión nueva de primefaces v13.0 elimina el componente <p:repeat>  Consulte los cambios en  https://github.com/primefaces/primefaces/releases/tag/13.0.0 por lo tanto si necesita una solución similar considere utilizar  <p:carousel>  o  <ui:repeat> En la versión 13 genera una excepción

JUnit con DataClassG

JUnit con DataClassG 0. ESQUEMA Services: Por cada beans crearemos una clase Services que se encargará de interactuar con el controller para realizar las operaciones de la base de datos. Se crearan los métodos insert, update,delete y los demas metodos para realizar las diversas operaciones. Test: Se crearán las clases para test de las clases Services. Form: Los formularios para la interactuar con el usuario. ProvinciasServices.java colocamos los métodos, insert, update,delete public class ProvinciasServices {    ProvinciasController provinciasController = new ProvinciasController();    public ProvinciasServices() {    }    public Boolean insert (Provincias provincias){        try{            if(provinciasController.insert(provincias)){              return tru...