7 changed files with 111 additions and 3 deletions
@ -1,4 +1,5 @@ |
|||
.idea/ |
|||
backend/node_modules/ |
|||
frontend/node_modules/ |
|||
.env |
|||
.env |
|||
data/ |
|||
@ -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,0 +1,8 @@ |
|||
import {Router} from 'express'; |
|||
import {scan} from "../controllers/files.controllers.js"; |
|||
|
|||
const router = Router(); |
|||
|
|||
router.get('/', scan); |
|||
|
|||
export default router; |
|||
@ -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); |
|||
} |
|||
@ -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…
Reference in new issue