Está en la página 1de 8

Métricas desarrollo

● Todos los controladores asíncronos que no sean de API tendrán el prefijo


AJAX p.e. /ajax/inventario/cancel, pero si son de API serán como se indica: /
api/v1/inventario/cancel. Todos los controladores asíncronos se omite el
prefijo: /ajax o /api…
● Todas las tablas deben llevar STATUS y FCREACION
● Todos los forms y modales se deben validar a los datos mínimos necesarios
sean asíncronos o síncronos
● En forms asíncronos, al añadir un dato limpiar form y colocar focus en el
campo de búsqueda
● En Service en todas los métodos que hagan varias insert,delete o update
anotar con @transactional
● Mensajes para usuario muy amigables en primera persona
● Comentar todos los controladores que NO sean muy obvios, esto por si hacen
varias funciones dentro del mismo
● Colocar 2 y 3 enter entre funciones en archivos java y JS
● Usar en java métricas camel case, en HTML snake case, en JS camel case
● Probar todos los objetos con null para realizar operaciones
● Todos los ID en java son Long y en el método de return validar que si es null
retorne cero con operador ternario
● Todas las funciones ajax que impriman el error en consola
● Todas las funciones de consulta considerar un numero de máximo 100
registros, status ACTIVO, etc.
● Todos los métodos de service por JDBC colocar en el nombre del método el
sufijo Jdbc p.e. deleteAllJdbc(…)
● Todas las búsquedas ordenar por idDesc o del mas reciente
● No usar findAllBy a menos que sea una operación aritmética o similar, usar
fintTop100 o paginar
● En JS los eventos de modal dentro de la función que lo muestra para
encontrarlo fácil??

Pruebas Web
● Probar todos los botones y links de la vista
● Probar envío vacío de formularios, con lo mínimo requerido y con datos
completos cotejando en BD los resultados
● Probar que las búsquedas no consideren campos inactivos, borrados, etc.

Añadir dependencia JAR en Maven


1. Colocar esto en POM.xml
<dependency>
<groupId>com.facturama</groupId>
@OneToOne

public class Avaluo {


@OneToOne
@JoinColumn(name = "Tramite_idTram")
private Tramite tramite;

public class Tramite {


@OneToOne(mappedBy = "tramite")
     private Avaluo avaluo;
}

// SAVE
Tramite tramite = new Tramite("Proyecto ejecutivo", new Timestamp(new
Date().getTime()));
session.save(tramite);
Avaluo avaluo = new Avaluo("hidalgo #102");
avaluo.setTramite(tramite);
session.save(avaluo);

// UPDATE
Tramite tramite2 = session.load(Tramite.class, 2);
Avaluo avaluo2 = new Avaluo("calzada veracruz #1000");
avaluo2.setTramite(tramite2);
session.save(avaluo2);

@OneToMany
public class Tramite {
@OneToMany(mappedBy = "tramite")
private Set<DiarioCliente> diarioClienteSet;

public class DiarioCliente {


@ManyToOne
@JoinColumn(name = "Tramite_idTram")
private Tramite tramite;

Tramite tramite = new Tramite("Ampliación", time);


Tramite tramite2 = new Tramite("Crédito", time);
session.save(tramite);
session.save(tramite2);
            
DiarioCliente diarioCliente = new DiarioCliente("Entrada 1", time);
DiarioCliente diarioCliente2 = new DiarioCliente("Entrada 2", time);
DiarioCliente diarioCliente3 = new DiarioCliente("Entrada 3", time);
            
diarioCliente.setTramite(tramite);
diarioCliente2.setTramite(tramite);
diarioCliente3.setTramite(tramite2);
            
session.save(diarioCliente);
session.save(diarioCliente2);
session.save(diarioCliente3);
 
// Update
Tramite tramite4 = session.load(Tramite.class, 2);
DiarioCliente diarioCliente4 = new DiarioCliente("Nueva Entrada 1", time);
diarioCliente4.setTramite(tramite4);
            
session.save(diarioCliente4);

@ManyToMany

public class Inmueble {


    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
@JoinTable(name = "InmuebleImagenMap",
joinColumns = { @JoinColumn(name = "idInm") },
inverseJoinColumns = { @JoinColumn(name = "idImg") })
private List<Requisicion> imagenes = new ArrayList<>();

public class Imagen {


@ManyToMany(mappedBy = "imagenes")
private List<Inmueble> inmuebles = new ArrayList<>();
}

Timestamp time = new Timestamp(new Date().getTime());


            Inmueble inmueble1 = new Inmueble("terreno", "morelos #100");
            Inmueble inmueble2 = new Inmueble("casa", "hidalgo #700");
            
            Imagen imagen1 = new Imagen("www.imageshack...", time);
            Imagen imagen2 = new Imagen("www.drive...", time);
            Imagen imagen3 = new Imagen("www.mega...", time);
            
            inmueble1.getImagenes().add(imagen1);
            inmueble1.getImagenes().add(imagen2);
            
            inmueble2.getImagenes().add(imagen1);
            inmueble2.getImagenes().add(imagen3);
            
            session.save(inmueble1);
            session.save(inmueble2);

@ManyToMany

*NOTA. En Spring se pude usar la clase “InmuebleImagen” para por ejemplo


crear una lista de en sesión y mediante AJAX
Editarla, en caso de que se requieran operaciones adicionales por ejemplo sumar
las elementos de la lista, se crea una clase wrapper en session.

public class Inmueble {

 @OneToMany(fetch = FetchType.LAZY,
             mappedBy = "pk.inmueble”,
             cascade = CascadeType.ALL
             )
    private Set<InmuebleImagen> inmuebleImagenSet = new HashSet<>();

// Copiar este….
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "pk.inmueble",cascade = CascadeType.ALL)
private Set<PartidaInventario> partidaInventarioSet = new HashSet<>();

public class Imagen {    


    @OneToMany(fetch = FetchType.LAZY,
             mappedBy = "pk.imagen",
             cascade = CascadeType.ALL
             )
    private Set<InmuebleImagen> inmuebleImagenSet = new HashSet<>();
}

@Entity
@Table(name = "InmuebleImagen")
@AssociationOverrides({@AssociationOverride(name = "pk.imagen", joinColumns
= @JoinColumn(name = "idImg")),@AssociationOverride(name = "pk.inmueble",
joinColumns = @JoinColumn(name = "idInm"))})

public class InmuebleImagen {


    private InmuebleImagenId pk = new InmuebleImagenId();
    // Campos extras :)
    private String status;

@EmbeddedId
public PartidaRutaId getPk() {
return pk;
}
public void setPk(PartidaRutaId pk) {
this.pk = pk;
}

    public String getStatus() {


        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @Transient
    public Inmueble getInmueble() {
        return getPk().getInmueble();
    }
    public void setInmueble(Inmueble inmueble) {
        getPk().setInmueble(inmueble);
    }
    @Transient
    public Imagen getImagen() {
        return getPk().getImagen();
    }
    public void setImagen(Imagen imagen) {
        getPk().setImagen(imagen);
    }
}

@Embeddable
public class InmuebleImagenId implements Serializable {
    private static final long serialVersionUID = -1193697384656663409L;
    private Imagen imagen;
    private Inmueble inmueble;

    @ManyToOne
    public Imagen getImagen() {
        return imagen;
    }
    public void setImagen(Imagen imagen) {
        this.imagen = imagen;
    }
    @ManyToOne
    public Inmueble getInmueble() {
        return inmueble;
    }
    public void setInmueble(Inmueble inmueble) {
        this.inmueble = inmueble;
    }
}
Timestamp ts = new Timestamp(new Date().getTime());

Inmueble inmueble = new Inmueble("Terreno", "Hidalgo #200");

Imagen imagen1 = new Imagen("www.drive...", ts);


Imagen imagen2 = new Imagen("www.mega...", ts);

imagenService.save(imagen1);
imagenService.save(imagen2);

InmuebleImagen inmuebleImagen = new InmuebleImagen();


inmuebleImagen.setImagen(imagen1);
inmuebleImagen.setInmueble(inmueble);
// Campos extra :)
inmuebleImagen.setStatus("ACTIVO");

InmuebleImagen inmuebleImagen2 = new InmuebleImagen();


inmuebleImagen2.setImagen(imagen2);
inmuebleImagen2.setInmueble(inmueble);
inmuebleImagen2.setStatus("SUSPENDIDO");

inmueble.getInmuebleImagenSet().add(inmuebleImagen);
inmueble.getInmuebleImagenSet().add(inmuebleImagen2);

inmuebleService.save(inmueble);

Relaciones Manuales Alter Table


INDEX `fk_CategoriaGeneral_unidadnegocio1_idx` (`idUn` ASC),
CONSTRAINT `fk_CategoriaGeneral_unidadnegocio1`
FOREIGN KEY (`idUn`)
REFERENCES `benjies_db`.`unidadnegocio` (`idUn`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)

También podría gustarte