Sección 3: Música

Conexión a base de datos, generación de servicios REST registro, actualización,eliminación y obtención de pacientes

La tercera sección es el CRUD de música, creación, registro modificación y eliminación de datos relacionados a las pistas musicales a ser aplicadas durante la terapia.

La interfaz de usuario reside en el nodo "Música HTML", el cual esta escrito en html, css, js y utiliza jsgrid para poblar una tabla y permitir las acciones de CRUD, además cuenta con la funcionalidad de reproducir las pistas musicales que han sido ingresadas en la base de datos.

Las extensiones permitidas deben ser del tipo MIME audio y son las siguientes:

File Extension

MIME Type

au

audio/basic

snd

audio/basic

Linear PCM

audio/L24

mid

audio/mid

rmi

audio/mid

mp3

audio/mp3

mp4 audio

audio/mp4

aif

audio/x-aiff

aifc

audio/x-aiff

aiff

audio/x-aiff

m3u

audio/x-mpegurl

ra

audio/vnd.rn-realaudio

ram

audio/vnd.rn-realaudio

Ogg Vorbis

audio/ogg

Vorbis

audio/vorbis

wav

audio/vnd.wav

La eficiencia no es ingresada por el usuario al contrario es calculado al finalizar la terapia.

Para la interpretación de la eficiencia se utiliza la siguiente tabla, valorada de 0 a 5

Clase de eficiencia

Valor generado

La mayor eficiencia posible

5

Muy eficiente

4

Eficiente

3

Eficiente intermedio

2

Poco eficiente

1

La menor eficiencia posible

0

El código que permite el poblado de datos, registro, modificación y eliminación es el siguiente:

    <script type="text/javascript">
        $(function() {
            $("#jsgrid").jsGrid({
                width: "98%",
                inserting: true,
                editing: true,
                sorting: true,
                paging: true,
                filtering: true,
                inserting: true,
                autoload: true,
                pageSize: 15,
                pageButtonCount: 5,
                autoload: true,
                deleteConfirm: function(item) {
                    return "La pista músical \"" + item.musica_nombre + "\" va a ser eliminada del registro";
                },
                fields: [
                    {
                    name: "musica_id",
                    type: "hidden",
                    css: 'hide'
                    },
                    {
                    title: "Título",
                    name: "musica_nombre",
                    type: "text",
                    width: 50,
                    validate: "required"
                    }, 
                    {
                    title: "Género",
                    name: "musica_genero",
                    type: "text",
                    width: 50,
                    validate: "required"
                    }, 
					{
                    title: "Url",
                    name: "musica_url",
                    type: "text",
                    width: 100,
                    validate: "required"
                    }, 
					{
                    title: "Eficiencia",
                    name: "musica_eficiencia",
                    width: 50
					},
					{
                    type: "control"
                    }],

                controller: 
                                
                {
                        loadData: function(filter) {
                          return $.ajax({
                            url: "/api/musica",
                            dataType: "json"
                          });
                        },

                    insertItem: function(item) {
                        var d = $.Deferred();
                        $.ajax({
                            type: "POST",
                            url: "/api/musica",
                            data: item
                        }).done(function(insertItemReturnedFromServer) {
                            d.resolve(insertItemReturnedFromServer); 
                            $("#jsgrid").jsGrid("loadData");
                            reloadSelect();
                        });
                        return d.promise();
                    },
                    updateItem: function(item) {

                            var d = $.Deferred();
                            $.ajax({
                                type: "PUT",
                                url: "/api/musica/update",
                                data: item
                            }).done(function(updatedItemReturnedFromServer) {
                                d.resolve(updatedItemReturnedFromServer); 
                                                reloadSelect();
                            });
                            return d.promise();
                    },
                    /*updateItem: function(item) {
                        return $.ajax({
                            type: "PUT",
                            url: "/api/pacientes/update",
                            data: item
                        });
                    },*/
                    deleteItem: function(item) {
                        return $.ajax({
                            type: "DELETE",
                            url: "/api/musica/delete",
                            data: item,
                             success: function () {
                                reloadSelect();
                            }
                        }).done(function(deleteItemReturnedFromServer)
                        {
                            d.resolve(deleteItemReturnedFromServer); 
                              
                        });
                        return d.promise();
                    }
                }
            });
           // setInterval(function(){$("#jsgrid").jsGrid("loadData");}, 5000);
        });
    </script>

Para permitir la reproducción de música, y la actualización del ajax al realizar un registro o modificación se utiliza la siguiente función, la cual se basa en asignar los valores a través de DOM

<section class="row">
            <br/>
            <label>Escuchar música</label>
            <select
id="clienteP"
class="form-control"
name="clienteP"
data-source="/api/musica"
data-valueKey="musica_url"
data-displayKey="musica_nombre">
</select>
        <div class="col-md-4"></div>
        <div class="col-md-4">
                <audio id="audio" preload="metadata" controls>
        <source id="audioSource" src=""></source>
    Your browser does not support the audio element.
    </audio> 
        </div>
        <div class="col-md-4"></div>
        </section>
        </div>
<script>

var globalid = 0;
                $(document).on('change', '#clienteP', function(e) {
                globalid = this.options[e.target.selectedIndex].value;
                console.log(globalid);
                  var audio = document.getElementById('audio');

                  var source = document.getElementById('audioSource');
                  source.src = globalid;
                  
                  audio.addEventListener('loadedmetadata', function() {
                        console.log("Playing " + audio.src + ", for: " + audio.duration + "seconds.");
                        audio.play(); 
                    });
                  audio.load(); //call this to just preload the audio without playing
                 
                });
                function reloadSelect()
                {
                     $('#clienteP').find('option').remove()    
                     $('#clienteP').each(function() {

                                        var $select = $(this);

                                            $select.append('<option>Por favor seleccione música a escuchar</option>');
                                            
                                            $.ajax({
                                                url: $select.attr('data-source'),
                                            }).then(function(options) {
                                                options.map(function(option) {
                                                var $option = $('<option>');
                                                
                                                $option
                                                    .val(option[$select.attr('data-valueKey')])
                                                    .text(option[$select.attr('data-displayKey')]);
                                                
                                                $select.append($option);
                                                $select.trigger("chosen:updated");
                                                });
                                            });
                                        });
                }
                reloadSelect();
</script>

Cada REST es bastante similar al de la sección 2 con la excepción del REST en POST y PUT, los cuales utilizan una función para remplazar caracteres especiales en el campo URL y así evitar SQL injection.

nombre = msg.payload.musica_nombre
//Remplazamos el caracter ' con su valor en ASCII
url = msg.payload.musica_url.replace(/[']/g, "%27")
genero = msg.payload.musica_genero
msg.topic = "INSERT INTO musica (`musica_nombre`,`musica_genero`,`musica_url`) VALUES ('"+ nombre +"','"+ genero +"','"+ url +"');"
return msg;

GET Música

GET http://localhost:1880/api/musica

Obtiene todas las pistas musicales en la base de datos

[{"musica_id":2,"musica_nombre":"Rock and rolls","musica_genero":"Rock","musica_url":"http://www.panacherock.com/downloads/mp3/01_Sayso.mp3","musica_duracion":"0","musica_eficiencia":1.1123}]

POST Música

POST http://localhost:1880/api/musica

Ingresa los datos de las pistas musicales a la base de datos

Request Body

Name
Type
Description

musica_url

string

musica_genero

string

musica_nombre

string

"La pista musical fue ingresada"

UPDATE Música

PUT http://localhost:1880/api/musica/update

Query Parameters

Name
Type
Description

musica_id

integer

Request Body

Name
Type
Description

musica_url

string

musica_genero

string

musica_nombre

string

DELETE Música

DELETE

Path Parameters

Name
Type
Description

string

Última actualización

¿Te fue útil?