El presente software toma como motivación principal el trabajo practico de la materia Seminario: Taller de Desarrollos de Servicios Web / Cloud Modernos, el cual pide modelar (diseñar e implementar) una aplicación similar a Spotify, llamada UNQfy . En esta, existe una gran cantidad de temas musicales (tracks) los cuales siempre pertenecen a un álbum. Un álbum tiene un sólo artista como autor pero un artista puede ser autor de múltiples albumes. Cada track tiene asociado uno o más géneros, que son strings. También existen playlists, que son conjuntos de tracks que pueden pertenecer a diferentes álbumes. En UNQfy, además de las típicas operaciones de alta, baja y modificación de todos estos elementos (tracks, albums, artistas), es posible:
- Realizar búsquedas de temas.
- Recuperar todas las canciones (tracks) que fueron interpretadas por un determinado artista, y todas las canciones que se correspondan con un determinado género.
- Autogenerar una Playlist en base a una lista de géneros, es decir, rellenar una playlist con canciones de determinados géneros y con una duración máxima.
Para operar con UNQfy vamos a usar, en principio, la línea de comando. Esto implica tener una serie de comandos que permitan alterar e inspeccionar el modelo de objetos de UNQfy.
Integrante | Legajo | github user | |
---|---|---|---|
- Facundo Pacheco | Leg. 40340 | pache.facundo@gmail.com | pache0015 |
- Horacio Valenzuela | Leg. 38613 | valenzuelahoracioe@gmail.com | UnderABloodySky |
Los requisitos necesarios para correr el proyecto:_
Se menciona brevemente las herramientas que se utilizon para crear el proyecto_
- Se utilizó Programacion Orientada a Objetos para el desarrollo del mismo, definiendo clases con la sintaxis ECMA Script 6.
- Javascript
- nodejs - Para el back-end (Utilizamos la version 12.8.x).
- mocha - Para los tests.
Más allá de la instalación de los pre-requisitos, el proyecto no necesita de ninguna instalación previa.
Una vez clonado el repositorio, se interactúa con el programa desde la línea de comandos (CLI), para esto se debe contar con nodejs
instalado y ejecutar npm install
en una terminal desde la carpeta /unquify.
Aclaración: Todos los comandos se deben correr desde la carpeta /unquify
Ejecutar npm test
desde la carpeta /unquify para correr los tests del proyecto.
Para ejercitar el modelo, se recomienda ejecutar el script de la carpeta ./script el archivo script_ejercicio_modelo.sh.
Su ejecucion implica darle ciertos privilegios
chmod +x script_ejercicio_modelo.sh
./script_ejercicio_modelo.sh
A continuación se listan los comandos que acepta y cómo deben ser usados los mismos:
tabla de contenidos
Links a tipos de comandos:
Aclaración A: Al ingresar tracks, álbumes y artistas, hay que tener en cuenta que para dar de alta, por ejemplo, un álbum el artista debe existir, y para agregar un track el álbum al que pertenece debe existir. Si los mismos, no existen entonces se reporta en la consola que no se pudo completar dicha operación, indicando el error correspondiente.
- Agregar artista
node main.js addArtist <aName> <aCountry>
Reemplazar aName
por el nombre del artista y aCountry
por el país del mismo.
- Agregar album
node main.js addAlbum <aName> <aArtistID> <aYear>
Reemplazar aName
por el nombre del albúm, aArtistID
por el ID del artista autor del mismo, aYear
por su año de lanzamiento.
- Agregar track
node main.js addTrack <aAlbumID> <aName> <aDuration> <genre1> <genre2> .. <genreN>
Reemplazar aAlbumID
por el ID de su _album, aName
por el nombre del track, _, aDuration
por la duración del mismo, y el resto de los argumentos, los géneros (genre1
, genre2
, etc. Hasta el genreN
).
Aclaración: Debe darse al menos un genero
- Agregar usuario
node main.js addUser <aNickname>
Reemplazar aNickname
por el alías del usuario a crear.
- Generar un playlist con duración máxima y de ciertos géneros
node main.js createPlaylist <name> <maxDuration> <genre1> <genre2> .. <genreN>
Reemplazar aName
por el nombre del playlist, aMaxDuration
por la duración máxima de la misma, y genre1
, genre2
,etc, hasta genreN
para los posibles géneros para sus tracks.
- Obtener todxs lxs artistas de la aplicación
node main.js getArtists
- Obtener todos los albumes de unx artista dado
node main.js getAlbums <aArtistID>
Reemplazar aArtistID
por el id del artista a buscar, que es autor de los albumes.
- Obtener todos los tracks de un album
node main.js getTracks <aAlbumID>
Reemplazar aAlbumID
por el ID del album a buscar, donde pertenecen los tracks.
- Obtener todas las playlists
node main.js getPlaylists
- Obetener todxs lxs users
node main.js getUsers
- Obtener artista
node main.js getArtist <aArtistID>
Reemplazar aArtistID
por el id del artista a buscar.
- Obtener album
node main.js getAlbum <aAlbumID>
Reemplazar aAlbumID
por el Id del album a buscar.
- Obtener track
node main.js getTrack <aTrackID>
Reemplazar aTrackID
por el ID del track a buscar.
- Obtener playlist
node main.js getPlaylist <aPlaylistID>
Reemplazar aPlaylistID
por el ID de la playlist a buscar.
- Obtener user
node main.js getUser <aUserID>
Reemplazar aUserID
por el ID del user a buscar.
- Buscar todos los tracks de un artista
node main.js getTracksMatchingArtist <aArtistID>
Reemplazar aArtistsID
por el ID del artista a buscar.
- Buscar tracks por géneros
node main.js getTracksMatchingGenres <genre1> <genre2> .. <genreN>
Reemplazar genre1
, genre2
y todos los siguientes argumentos por los géneros de todos los tracks a buscar.
- Eliminar artista
node main.js removeArtist <aArtistID>
Reemplazar aArtistID
por el id del artista.
- Elminar album
node main.js removeAlbum <aAlbumID>
Reemplazar aAlbumID
el iD del album.
- Eliminar track
node main.js removeTrack <aTrackID>
Reemplazar aTrackID
por el iD del track.
- Eliminar playlist
node main.js removePlaylist <aPlaylistID>
Reemplazar aPlaylistID
por el ID del playlist.
- Buscar todas las entidades por nombre parcial (artistas, albumes, tracks y playlists)
node main.js searchByName <stringToSearch>
Reemplazar stringToSearch
por el nombre parcial a buscar.
- Buscar tracks por nombre parcial
node main.js searchTracksWithPartialName <stringToSearch>
Reemplazar stringToSearch
por el nombre parcial a buscar.
- Buscar albumes por nombre parcial
node main.js searchAlbumsWithPartialName <stringToSearch>
Reemplazar stringToSearch
por el nombre parcial a buscar.
- Buscar artistas por nombre parcial
node main.js searchArtistsWithPartialName <stringToSearch>
Reemplazar stringToSearch
por el nombre parcial a buscar.
- Buscar playlists por nombre parcial
node main.js searchPlaylistsWithPartialName <stringToSearch>
Reemplazar stringToSearch
por el nombre parcial a buscar.
- Cantidad de veces que un user escuchó un track particular
node main.js timesUserListenedTrack <userId> <trackId>
Reemplazar userId
por el id del user, y trackId
por el id del track.
- Top 3 tracks más escuchados de un artista
node main.js top3TracksFromArtist <artistId>
Reemplazar artistId
por el id del artista.
- Unx usuarix escucha un track
node main.js userListenTrack <aUserID> <aTrackID>
Reemplazar aUserID
por el ID del usuario, y aTrackID
por el ID del track.