From a502fe908866f0730cc8be69a07fdbee64639afd Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 17 Feb 2022 09:37:25 +0100 Subject: [PATCH] nodecdtheque => MyMusicLibrary & new UI for adding album --- README.md | 4 +- docker-compose.yml | 16 +-- package.json | 4 +- public/logo.png | Bin 2936 -> 2368 bytes sass/bulma.scss | 6 +- src/app.js | 5 +- src/bin/www.js | 2 +- src/config/index.js | 3 +- src/middleware/Pages.js | 4 + src/routes/api/v1/{index.js => search.js} | 16 ++- src/routes/index.js | 13 +- views/index.ejs | 14 +- views/pages/ajouter-un-album/search.ejs | 152 +++++++++++++++++++++- views/pages/home.ejs | 29 ++++- 14 files changed, 231 insertions(+), 37 deletions(-) rename src/routes/api/v1/{index.js => search.js} (52%) diff --git a/README.md b/README.md index c8dc26a..806e1ae 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# nodecdtheque +# My Music Library -NodeCDThèque (non temporaire faute de mieux haha) est une application Web permettant de lister votre collection de CD ou vinyles. +My Music Library est une application Web permettant de lister votre collection de CD ou vinyles. ## Prérequis diff --git a/docker-compose.yml b/docker-compose.yml index ffc15e0..e78630b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,8 @@ version: "2.4" services: - nodecdtheque-www: - container_name: nodecdtheque-www + mymusiclibrary-www: + container_name: mymusiclibrary-www image: "node:16" restart: always user: "node" @@ -17,21 +17,21 @@ services: ports: - 3001:3001 depends_on: - - nodecdtheque-db + - mymusiclibrary-db environment: NODE_ENV: ${NODE_ENV} DISCOGS_TOKEN: ${DISCOGS_TOKEN} networks: - - nodecdtheque - nodecdtheque-db: - container_name: nodecdtheque-db + - mymusiclibrary + mymusiclibrary-db: + container_name: mymusiclibrary-db image: mongo:latest restart: always ports: - 27617:27017 networks: - - nodecdtheque + - mymusiclibrary networks: - nodecdtheque: + mymusiclibrary: driver: bridge diff --git a/package.json b/package.json index 0579244..53bd4c4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "nodecdtheque", + "name": "mymusiclibrary", "version": "1.0.0", "description": "Simple application to manage your CD/Vinyl collection", "scripts": { @@ -18,7 +18,7 @@ }, "repository": { "type": "git", - "url": "git@git.darkou.fr:dbroqua/nodecdtheque.git" + "url": "git@git.darkou.fr:dbroqua/MyMusicLibrary.git" }, "author": { "name": "Damien Broqua", diff --git a/public/logo.png b/public/logo.png index 116d933feba4c776f9da4f30e98a3989f55dd361..1ab3ccaa35f82b0cfc469e8bd04dea30fa11bec0 100644 GIT binary patch delta 2355 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 Z{{#3E6<>=B*>L~>002ovPDHLkV1lNsjky2- delta 2928 zcmV-$3y<``68IK2iBL{Q4GJ0x0000DNk~Le0001z0000S2nGNE0E)rpCIA2c32;bR za{vGn(*OVy(*c}}b%T*MCw~hCNklWEk@4X#RXaN0&q()f%Y=1))xCNCSphSWi z0TinWMT$zMqN<-54E~$8uYa?wA$={lJfUdaNE|e&m1^K|6{Z8mM(DCA@Uq<&_(JC9 z^fMRF#1>o%@JOUSLnn_%QC9-N7ohW`igH)xXMg{qX{NQ{Qi5NdtF$y-LSWniMPUgL zaDh6_D9XgxPFGtB4u9^=XtISZxFn!+y?D3Rbzg>s2G7Pz$ZHG~Rn;jd3loM;p57$u zT5!pr#v`r$c+>Kf8~5xXh2!%N;{Oz<*f4S>gEu-vh2>O8_!` zT*?d#ce&mGRQNDo2Mhr|)3_go*bSfp?*Qc*vQCTwx;A3%O5}OJX@qREgbpAsrqw%6 z5&>MF)Qfw^kGLocR8?0+82#+CT!zjeRiGJoANT-x2)NN<&qClX;0Yg=2?CY^2apZv z0z~*|>Vv@Dz<+HT_hW!)U^9>lyonqFZ@3kC#)f`+0);->+pM5p{`$HOy}Ebp>3(C( zh!hHoO88{+w*Z8hDjA)WOP}}?gqp0JIu}UBfoMM36;FAk-s>XOs(n^M!qf$sndvsi z&BCrf7aoFIF zVuVDw4x3&DrUG^iy>^GJH{9u1>wu3oH!J8%EoUe0|M@T-+s9!t2G+Sb?ViyT6_;Q+ z`7O_l+exU=T5~Tlq=Ig-rQF;zkJ<0_C9hb!Q(&`J8Kb%f4JVU-x(qwRLIiLccpeA` zN`Y2Lh=1u0!~;1l^K`(oz-r(Gbx9QF(B%vK5E4&ALe>o66^EWIjX8I>Wlqys-|=wh*OxWtVv7 zK6oqaUqVoT)uV=}uyPiR+evEr@2Ir-d6WS#`Ul<*b%^A|0AP~irxdsv@mSXb=iOv= zz>C1gju#LBJcW=b6$k|uYZ~Dh(-BfuAjCKaqyaAjcWBI+34H622?6E+3p~iVl42x6 zCVvoOq#?usA>tz7aku#<;4jn?wZL)h34cTgIUe{F_)vRdu-8xlzhEt{c*tvTj06Ils#)w1Qe3kot)WtZr1X6W00RQ;&=wm8t#uGc9@JgggTeY|3_uokJIu1E~Z)wOKMSnJW zA@DFlqEX1n-Hdp%#=;Mnhq!ngddC41kT8?)Wv+sp)|p6NwGwy?*_?Gg*x-&xAlc=* zt%lq_w7o+_w8~Wk^_g1nAa)9w(lmHnE+AY`{tl*+e7uUjZ|Qx%k>B(gu7!E@VVRAS!x@wrNHZmN1BH`V}Fi|T&RzBIT3_Z zv|HWAkLe>L!V8OvOEqiv55A9QSg$A&Wa)-)}Zz^CTqaGy#2p4-xyj0{?N5*8yW( zuC)^Ja!+gP+g%Zvk)4yfNJ8rp!{#zjkMPYs@u7ur&x_-a;xC*UuQmNZzy(aewK@keB8SUn5=YM6{ci z9g&TA+GVUY(%15a*?6z`nu2hoEcevn7z2EPgjFZrM-EFrr15D&2p$XMIbdJPne3g+k$x@;1aSoph=DzfsxTW`D`gABF%v?$FIU_rA zqS>@J4qLU3qJKRN^m9S9LYPaFHk*+YnCvNu))Gu2X10C>OX`Dtp z%upo%IY!-3SPp5?n>UygJq##K4EM9|G@$4;J;ofj-i@b|A9%Nmy1gX~6d$^}{ zc;+LO7& z5qFOs&cr*0)fwBhJ6qKo)b=R@1~fJqPDL7$SqRB;yo+BF7>Rh^Xe9j2q_%1bMk+BY z;988#K`P5T5fa&fIHXPB348EdiTP98=~k#80sN@#L%Bnx_G>|Vq@_>~3c!YqUrk%O z`u!E9XMdXhC)bLiF!TNiq}EjcyM0uZf|S20Ts}m40?E&``eg11 zLA*s5U@+R>^nP{d0L%t8eZr`eJb!=hA72{-RaIH~##%D>?#E`caV)>Urn6Q*-SEtM z*o1^CU%#C-R~$t;;Eg2_NQE^GSo@1ubP-XLhktyzEu;7D?3|2s8@3qKi|}_yW|NWW zsbdHWGEW;cu-~gqR@j1OjhaT}pn?5%U(=&&>f|xQ2ng`n>~0VyQy>#Yr4SZuUfn{X z{}0sZXeSTsyQW*mc2gd>>o!|#RO<^;7~eLQ>GzJNbNkp8x~lV28=ldE%K;w$$bZYW zjDP-i)V2He=U%a8dnN@%r@Sjs6xzl{l6?KObcv6%sEYb<@__4B{UR2(pjkrmzeU#l z@PnasN!dLr>im+^XCr?)m`7nz31yaYD$ZA84h$qD*hEZJYr1u6M@X>QrlPJksD`wG z1N#*GFCU@>zdjoLx1$|9b{NlB`Q4;qzcB?!Kp__C@RlMi{cKg?Q~Y(GCnqI&cU>*G aZ1G<}eJ;>@ { diff --git a/src/bin/www.js b/src/bin/www.js index 3fc7b77..f184155 100644 --- a/src/bin/www.js +++ b/src/bin/www.js @@ -9,7 +9,7 @@ import http from "http"; import app from "../app"; import { port } from "../config"; -const debug = debugLib("nodecdtheque:server"); +const debug = debugLib("mymusiclibrary:server"); const server = http.createServer(app); /** diff --git a/src/config/index.js b/src/config/index.js index e8f4a6e..c241bcc 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -1,7 +1,8 @@ module.exports = { nodeEnv: process.env.NODE_ENV || "development", port: parseInt(process.env.PORT || "3001", 10), - mongoDbUri: process.env.MONGODB_URI || "mongodb://nodecdtheque-db/cdtheque", + mongoDbUri: + process.env.MONGODB_URI || "mongodb://mymusiclibrary-db/mymusiclibrary", secret: process.env.SECRET || "waemaeMe5ahc6ce1chaeKohKa6Io8Eik", discogsToken: process.env.DISCOGS_TOKEN, }; diff --git a/src/middleware/Pages.js b/src/middleware/Pages.js index ff9669f..e5a59af 100644 --- a/src/middleware/Pages.js +++ b/src/middleware/Pages.js @@ -38,6 +38,10 @@ class Pages { this.pageContent.page[field] = value; } + getPageContent(field) { + return this.pageContent.page[field]; + } + /** * Rendu de la page * @return {Object} diff --git a/src/routes/api/v1/index.js b/src/routes/api/v1/search.js similarity index 52% rename from src/routes/api/v1/index.js rename to src/routes/api/v1/search.js index 5553c0a..76e1c7e 100644 --- a/src/routes/api/v1/index.js +++ b/src/routes/api/v1/search.js @@ -2,16 +2,26 @@ import express from "express"; import { ensureLoggedIn } from "connect-ensure-login"; import { sendResponse } from "../../../libs/format"; -import { searchSong } from "../../../helpers"; +import { searchSong, getAlbumDetails } from "../../../helpers"; // eslint-disable-next-line new-cap const router = express.Router(); +router.route("/").get(ensureLoggedIn("/connexion"), async (req, res, next) => { + try { + const data = await searchSong(req.query.q); + + sendResponse(req, res, data); + } catch (err) { + next(err); + } +}); + router - .route("/search") + .route("/:discogsId") .get(ensureLoggedIn("/connexion"), async (req, res, next) => { try { - const data = await searchSong(req.query.q); + const data = await getAlbumDetails(req.params.discogsId); sendResponse(req, res, data); } catch (err) { diff --git a/src/routes/index.js b/src/routes/index.js index 8a47e02..578fd63 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -12,15 +12,12 @@ import render from "../libs/format"; const router = express.Router(); router.route("/").get((req, res, next) => { - if (req.user) { - return res.redirect("/ma-collection"); - } try { const page = new Pages(req, "home"); - return render(res, page); + render(res, page); } catch (err) { - return next(err); + next(err); } }); @@ -88,7 +85,11 @@ router await page.loadMyCollection(); - render(res, page); + if (page.getPageContent("artists").length > 0) { + render(res, page); + } else { + res.redirect("/ajouter-un-album"); + } } catch (err) { next(err); } diff --git a/views/index.ejs b/views/index.ejs index a556a56..cb99a5c 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -4,7 +4,7 @@ - <% if (page.title) { %><%= page.title %> <% } else { %> DarKou - Ma CDThèque <% } %> + <% if (page.title) { %><%= page.title %> <% } else { %> DarKou - My Music Library <% } %> @@ -55,7 +55,8 @@