From 4e911e82ab051732b88a72c3ca18faf6f378beee Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 4 Mar 2022 16:32:47 +0100 Subject: [PATCH] #2 {xml} --- .eslintrc.js | 2 +- src/middleware/Albums.js | 309 ++++++++++++++++++++++++++++++++++++ src/routes/api/v1/albums.js | 3 + 3 files changed, 313 insertions(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index c8f8a9d..143bf10 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -16,7 +16,7 @@ module.exports = { 'no-underscore-dangle': [ 'error', { - allow: ['_id', 'artists_sort'], + allow: ['_id', 'artists_sort', 'type_'], }, ], 'camelcase': [ diff --git a/src/middleware/Albums.js b/src/middleware/Albums.js index 249b12b..4796207 100644 --- a/src/middleware/Albums.js +++ b/src/middleware/Albums.js @@ -11,6 +11,21 @@ import ErrorEvent from "../libs/error"; * Classe permettant la gestion des albums d'un utilisateur */ class Albums extends Pages { + static replaceSpecialChars(str) { + if (!str) { + return ""; + } + let final = str.toString(); + const find = ["&", "<", ">"]; + const replace = ["&", "<", ">"]; + + for (let i = 0; i < find.length; i += 1) { + final = final.replace(new RegExp(find[i], "g"), replace[i]); + } + + return final; + } + /** * Méthode permettant de convertir les rows en csv * @param {Array} rows @@ -129,6 +144,298 @@ class Albums extends Pages { return wb; } + /** + * Méthode permettant de convertir les rows en csv pour importer dans MusicTopus + * @param {Array} rows + * + * @return {string} + */ + static async convertToXml(rows) { + let data = '\n\r'; + + for (let i = 0; i < rows.length; i += 1) { + const { + discogsId, + year, + released, + uri, + artists, + artists_sort, + labels, + series, + companies, + formats, + title, + country, + notes, + identifiers, + videos, + genres, + styles, + tracklist, + extraartists, + images, + thumb, + } = rows[i]; + + let artistsList = ""; + let labelList = ""; + let serieList = ""; + let companiesList = ""; + let formatsList = ""; + let identifiersList = ""; + let videosList = ""; + let genresList = ""; + let stylesList = ""; + let tracklistList = ""; + let extraartistsList = ""; + let imagesList = ""; + + for (let j = 0; j < artists.length; j += 1) { + artistsList += ` + ${Albums.replaceSpecialChars(artists[j].name)} + ${Albums.replaceSpecialChars(artists[j].anv)} + ${Albums.replaceSpecialChars(artists[j].join)} + ${Albums.replaceSpecialChars(artists[j].role)} + ${Albums.replaceSpecialChars( + artists[j].tracks + )} + ${Albums.replaceSpecialChars(artists[j].id)} + ${Albums.replaceSpecialChars( + artists[j].resource_url + )} + ${Albums.replaceSpecialChars( + artists[j].thumbnail_url + )} + `; + } + + for (let j = 0; j < labels.length; j += 1) { + labelList += ` + `; + } + + for (let j = 0; j < series.length; j += 1) { + serieList += ` + ${Albums.replaceSpecialChars(series[j].name)} + ${Albums.replaceSpecialChars(series[j].catno)} + ${Albums.replaceSpecialChars( + series[j].entity_type + )} + ${Albums.replaceSpecialChars( + series[j].entity_type_name + )} + ${Albums.replaceSpecialChars(series[j].id)} + ${Albums.replaceSpecialChars( + series[j].resource_url + )} + ${Albums.replaceSpecialChars( + series[j].thumbnail_url + )} + + `; + } + + for (let j = 0; j < companies.length; j += 1) { + companiesList += ` + ${Albums.replaceSpecialChars(companies[j].name)} + ${Albums.replaceSpecialChars(companies[j].catno)} + ${Albums.replaceSpecialChars( + companies[j].entity_type + )} + ${Albums.replaceSpecialChars( + companies[j].entity_type_name + )} + ${Albums.replaceSpecialChars(companies[j].id)} + ${Albums.replaceSpecialChars( + companies[j].resource_url + )} + ${Albums.replaceSpecialChars( + companies[j].thumbnail_url + )} + + `; + } + + for (let j = 0; j < formats.length; j += 1) { + let descriptions = ""; + if (formats[j].descriptions) { + for ( + let k = 0; + k < formats[j].descriptions.length; + k += 1 + ) { + descriptions += `${formats[j].descriptions[k]} + `; + } + } + formatsList += ` + ${Albums.replaceSpecialChars(formats[j].name)} + ${Albums.replaceSpecialChars(formats[j].qty)} + ${Albums.replaceSpecialChars(formats[j].text)} + + ${descriptions} + + + `; + } + + for (let j = 0; j < identifiers.length; j += 1) { + identifiersList += ` + ${Albums.replaceSpecialChars(identifiers[j].type)} + ${Albums.replaceSpecialChars( + identifiers[j].value + )} + ${Albums.replaceSpecialChars( + identifiers[j].description + )} + + `; + } + + for (let j = 0; j < videos.length; j += 1) { + videosList += ` + `; + } + + for (let j = 0; j < genres.length; j += 1) { + genresList += `${Albums.replaceSpecialChars( + genres[j] + )} + `; + } + + for (let j = 0; j < styles.length; j += 1) { + stylesList += ` + `; + } + + for (let j = 0; j < tracklist.length; j += 1) { + tracklistList += ` + ${Albums.replaceSpecialChars(tracklist[j].title)} + + `; + } + + for (let j = 0; j < extraartists.length; j += 1) { + extraartistsList += ` + ${Albums.replaceSpecialChars(extraartists[j].name)} + ${Albums.replaceSpecialChars(extraartists[j].anv)} + ${Albums.replaceSpecialChars(extraartists[j].join)} + ${Albums.replaceSpecialChars(extraartists[j].role)} + ${Albums.replaceSpecialChars( + extraartists[j].tracks + )} + ${Albums.replaceSpecialChars(extraartists[j].id)} + ${Albums.replaceSpecialChars( + extraartists[j].resource_url + )} + ${Albums.replaceSpecialChars( + extraartists[j].thumbnail_url + )} + + `; + } + + for (let j = 0; j < images.length; j += 1) { + imagesList += ` + ${Albums.replaceSpecialChars(images[j].uri)} + ${Albums.replaceSpecialChars( + images[j].resource_url + )} + ${Albums.replaceSpecialChars( + images[j].resource_url + )} + + `; + } + + data += ` + + ${discogsId} + ${Albums.replaceSpecialChars(title)} + ${Albums.replaceSpecialChars(artists_sort)} + + ${artistsList} + + ${year} + ${Albums.replaceSpecialChars(country)} + ${released} + ${uri} + ${thumb} + + ${labelList} + + + ${serieList} + + + ${companiesList} + + + ${formatsList} + + ${Albums.replaceSpecialChars(notes)} + + ${identifiersList} + + + ${videosList} + + + ${genresList} + + + ${stylesList} + + + ${tracklistList} + + + ${extraartistsList} + + + ${imagesList} + + `; + } + + return `${data}`; + } + /** * Méthode permettant de convertir les rows en csv pour importer dans MusicTopus * @param {Array} rows @@ -252,6 +559,8 @@ class Albums extends Pages { return Albums.convertToCsv(rows); case "xls": return Albums.convertToXls(rows); + case "xml": + return Albums.convertToXml(rows); case "musictopus": return Albums.convertToMusicTopus(rows); case "json": diff --git a/src/routes/api/v1/albums.js b/src/routes/api/v1/albums.js index c4a7aee..164ea40 100644 --- a/src/routes/api/v1/albums.js +++ b/src/routes/api/v1/albums.js @@ -20,6 +20,9 @@ router case "musictopus": res.header("Content-Type", "text/csv"); return res.status(200).send(data); + case "xml": + res.header("Content-type", "text/xml"); + return res.status(200).send(data); case "xls": return data.write("musictopus.xls", res); case "json":