Browse Source

ADD scan directory && retrieve info from discogs

master
astria 3 weeks ago
parent
commit
60374561ff
  1. 3
      .gitignore
  2. 42
      backend/app/controllers/files.controllers.js
  3. 0
      backend/app/middlewares/multer.middlewares.js
  4. 8
      backend/app/routes/files.routes.js
  5. 35
      backend/app/services/musics.services.js
  6. 8
      backend/index.js
  7. 18
      backend/utils/folders.js

3
.gitignore

@ -1,4 +1,5 @@
.idea/
backend/node_modules/
frontend/node_modules/
.env
.env
data/

42
backend/app/controllers/files.controllers.js

@ -0,0 +1,42 @@
import * as fs from "node:fs";
import * as path from "node:path";
import {getAllMusics, getMusicMetadata, insertMusicFile, insertMusicMetadata} from "../services/musics.services.js";
export async function scan(req, res) {
const dir = process.env.DATA_PATH;
const content = fs.readdirSync(path.join(dir, "import"), 'utf8');
const inBase = await getAllMusics();
console.log("MUSIC IN BASE");
console.log(inBase.rows);
if (content.length > 1) {
res.status(400).json({
"error": "400",
"message": "Too many files"
})
}
const discogs_metadata = await getMusicMetadata(content[0]);
const filename = content[0].split('.')[0];
const file_id = await insertMusicFile(content[0])
console.log("FILE ID")
console.log(file_id.rows[0].id);
const metadata = {
name: filename.split('---')[0],
artist: filename.split('---')[1],
album: discogs_metadata.results[0].title,
cover: discogs_metadata.results[0]["cover_image"],
file: file_id.rows[0].id
}
const meta = await insertMusicMetadata(metadata)
res.status(200).json(meta);
}

0
backend/app/middlewares/multer.middlewares.js

8
backend/app/routes/files.routes.js

@ -0,0 +1,8 @@
import {Router} from 'express';
import {scan} from "../controllers/files.controllers.js";
const router = Router();
router.get('/', scan);
export default router;

35
backend/app/services/musics.services.js

@ -0,0 +1,35 @@
import db from './db.services.js'
export async function getAllMusics() {
const query = "SELECT * FROM music_files";
const values = [];
return await db(query, values);
}
export async function getMusicMetadata(file) {
const filename = file.split(".")[0];
const name = filename.split("---")[0];
const artist = filename.split("---")[1];
const endpoint = encodeURI(`https://api.discogs.com/database/search?q=${name}${(artist && artist.length > 0) ? "&artist=" + artist : ""}&type=track&track=${name}&token=EyYNWEgsvjQWwDrLPeRkkgjnUNdFxyNfimkbPqCn`);
const req = await fetch(endpoint, {});
const res = await req.json();
console.log(endpoint);
console.log(res);
return res;
}
export async function insertMusicFile(filename) {
const query = "INSERT INTO music_files (file) VALUES ($1) RETURNING *";
const values = [filename];
return await db(query, values);
}
export async function insertMusicMetadata(metadata) {
const query = "INSERT INTO music_metadatas (name, artist, album, cover, file) VALUES ($1, $2, $3, $4, $5) RETURNING *";
const values = [metadata.name, metadata.artist, metadata.album, metadata.cover, metadata.file];
return await db(query, values);
}

8
backend/index.js

@ -3,6 +3,8 @@ import dotenv from 'dotenv';
import cors from 'cors';
import UserRouter from "./app/routes/users.routes.js";
import FileRouter from "./app/routes/files.routes.js";
import createDir from "./utils/folders.js";
console.clear()
@ -10,8 +12,9 @@ dotenv.config({
path: `../.env`,
});
const app = express();
createDir();
const app = express();
const port = process.env.BACKEND_PORT || 3000;
app.use(express.json());
@ -24,9 +27,10 @@ app.use((err, req, res, next) => {
message: err.message,
})
})
app.use("/scan", FileRouter)
app.use("/users", UserRouter);
app.get('/', (req, res) => {
res.send("Welcome");
})

18
backend/utils/folders.js

@ -0,0 +1,18 @@
import * as fs from "node:fs";
import * as path from "node:path";
export default function createDir() {
const dir = process.env.DATA_PATH;
const content = fs.readdirSync(dir, 'utf8');
console.log(content);
if (!fs.existsSync(path.join(dir, "import"))) {
fs.mkdirSync(path.join(dir, 'import'));
} else if (!fs.existsSync(path.join(dir, 'musics'))) {
fs.mkdirSync(path.join(dir, 'musics'));
}
}
Loading…
Cancel
Save