From facf9dd8b1e2d65652bdcece1338982fddab3813 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 9 Nov 2023 18:28:22 +0900 Subject: [PATCH 01/66] =?UTF-8?q?API=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=ED=8E=98=EC=9D=B4=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index bdd2783..a2d5177 100644 --- a/main.js +++ b/main.js @@ -228,7 +228,7 @@ app.get('/community/:artistId/favoriteQuant', async (req, res) => { //app.delete //아티스트 내가 가진 컬렉션 조회 -app.get('/community/:artistId/collectionQuant', async (req, res) => { +app.get('/community/:userId/collectionQuant', async (req, res) => { const userId = req.params.artistId; const sql = `SELECT COUNT(*) FROM UserCollections @@ -261,7 +261,7 @@ app.get('/community/:artistId/members', async (req, res) => { }) }); -//아티스트 전체 도안 조회 +//아티스트 멤버별 도안 조회 app.get('/community/:artistId/membersPost', async (req, res) => { const artistId = req.params.artistId; const sql = `SELECT @@ -279,7 +279,7 @@ app.get('/community/:artistId/membersPost', async (req, res) => { }) }); -//아티스트 멤버별 도안 조회 +//아티스트 전체 도안 조회 app.get('/community/:artistId/allPost', async (req, res) => { const artistId = req.params.artistId; const sql = `SELECT @@ -297,8 +297,8 @@ app.get('/community/:artistId/allPost', async (req, res) => { }) }); -//아티스트 멤버별 도안 조회 -app.get('/community/:artistId/uploadPost', async (req, res) => { +//도안 게시 - 컬렉션 선택 +app.get('/community/:userId/uploadPost/collection', async (req, res) => { const artistId = req.params.artistId; const sql = `SELECT memberNum, @@ -315,7 +315,8 @@ app.get('/community/:artistId/uploadPost', async (req, res) => { }) }); -app.get('/community/:artistId/deletePost', async (req, res) => { +//도안 게시 - 도안 선택 +app.get('/community/:artistId/uploadPost/post', async (req, res) => { const artistId = req.params.artistId; const sql = `SELECT memberNum, From d9e7089ce8d0c84a83850f14fa768753cb2d0251 Mon Sep 17 00:00:00 2001 From: urimJ Date: Fri, 10 Nov 2023 00:16:20 +0900 Subject: [PATCH 02/66] =?UTF-8?q?API=20=EB=A9=A4=EB=B2=84=EB=B3=84=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EA=B3=BC=20=EC=82=AC=EC=A7=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 153 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 133 insertions(+), 20 deletions(-) diff --git a/main.js b/main.js index 55860d3..650b40e 100644 --- a/main.js +++ b/main.js @@ -42,7 +42,9 @@ con.query('SELECT * from users', (error, results, fields)=> { }); //connection.end(); - +const getRandomInt = (max) => { + return Math.floor(Math.random() * max); +} app.get('/', async(req, res)=>{ res.send('Hello World!'); @@ -116,27 +118,31 @@ app.get('/mainpage/:userId/now5', async (req, res) => { //랜덤 아티스트 app.get('/mainpage/:userId/artist', async (req, res) => { - function getRandomInt(max) { - return Math.floor(Math.random() * max); - } - const randomInt = getRandomInt(4)+1 // - const sql = `SELECT - enterComp, - groupName, - photo - FROM artists - WHERE artistId=?;`; - con.query(sql,[randomInt], (err, result, fields)=>{ - if(err) throw err; - //res.status(200).send(`randomArtistList: ${result}`); - const r = { - randomArtistList: result // 여기에서 result는 변수명입니다. 원하는 결과 데이터로 대체되어야 합니다. - }; - res.status(200).send(r); - console.log("랜덤아티스트", result); - }) + const sql = `SELECT DISTINCT enterComp FROM artists;`; + + con.query(sql, (err, results, fields) => { + if (err) throw err; + + const randomEnterComp = results[getRandomInt(results.length)].enterComp; + + const sql3 = `SELECT artistId, groupName, photo + FROM artists + WHERE enterComp = ?`; + + con.query(sql3, [randomEnterComp], (err, result, fields) => { + if (err) throw err; + + const r = { + randomArtistList: result + }; + + res.status(200).send(r); + console.log("랜덤아티스트", result); + }); + }); }); + //artistpage app.get('/artistpage', async (req, res) => { const sql1 = `SELECT enterComp FROM artists ORDER BY enterComp DESC`; @@ -252,7 +258,61 @@ app.get('/community/:artistId/collectionQuant', async (req, res) => { }); //아티스트 멤버별 이름 및 사진 조회 +// app.get('/community/:artistId/members', async (req, res) => { +// const artistId = req.params.artistId; +// const sql = `SELECT +// memberNum, +// memberPhoto +// FROM artists +// WHERE artistId = ?; `; +// con.query(sql,1, (err, result, fields)=>{ +// if(err) throw err; +// for(let i=0; i { + const artistId = req.params.artistId; + //const artistId = 1; + const sql = `SELECT + memberNum, + memberPhoto + FROM artists + WHERE artistId = ?; `; + con.query(sql, [artistId], (err, result, fields) => { + if(err) throw err; + + if (result.length > 0) { + const memberNum = result[0].memberNum; + const memberPhoto = JSON.parse(result[0].memberPhoto); // memberPhoto는 배열이 아니라 ''문자열!! + console.log('result',result); + const members = []; + for (let i = 0; i < memberNum; i++) { + const nameAndPhoto = { + name: memberPhoto[i].name, + memPhoto: memberPhoto[i].memPhoto + }; + members.push(nameAndPhoto); + } + + const r = { members }; // Wrap the members array in an object + res.status(200).send(r); + console.log("멤버별 이름과 사진", members); + } else { + res.status(404).send("No members found for the given artist ID."); + } + }); +}); + +//아티스트 멤버별 도안 조회 +app.get('/community/:artistId/membersPost', async (req, res) => { const artistId = req.params.artistId; const sql = `SELECT memberNum, @@ -269,6 +329,59 @@ app.get('/community/:artistId/members', async (req, res) => { }) }); +//아티스트 전체 도안 조회 +app.get('/community/:artistId/allPost', async (req, res) => { + const artistId = req.params.artistId; + const sql = `SELECT + memberNum, + memberPhoto + FROM artists + WHERE artistId = ?; `; + con.query(sql,[artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + memberNumandPhoto: result + }; + res.status(200).send(r); + //console.log("아티스트페이지", result); + }) +}); + +//도안 게시 - 컬렉션 선택 +app.get('/community/:userId/uploadPost/collection', async (req, res) => { + const artistId = req.params.artistId; + const sql = `SELECT + memberNum, + memberPhoto + FROM artists + WHERE artistId = ?; `; + con.query(sql,[artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + memberNumandPhoto: result + }; + res.status(200).send(r); + //console.log("아티스트페이지", result); + }) +}); + +//도안 게시 - 도안 선택 +app.get('/community/:artistId/uploadPost/post', async (req, res) => { + const artistId = req.params.artistId; + const sql = `SELECT + memberNum, + memberPhoto + FROM artists + WHERE artistId = ?; `; + con.query(sql,[artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + memberNumandPhoto: result + }; + res.status(200).send(r); + //console.log("아티스트페이지", result); + }) +}); app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); From f19ad5f9805f41ae56ad7f121a433a600683a5f7 Mon Sep 17 00:00:00 2001 From: urimJ Date: Fri, 10 Nov 2023 01:10:02 +0900 Subject: [PATCH 03/66] =?UTF-8?q?API=20=EC=95=84=ED=8B=B0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A0=84=EC=B2=B4=20=EB=8F=84=EC=95=88=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/main.js b/main.js index f43dc90..f3bf796 100644 --- a/main.js +++ b/main.js @@ -312,20 +312,28 @@ app.get('/community/:artistId/members', async (req, res) => { }); //아티스트 멤버별 도안 조회 -app.get('/community/:artistId/membersPost', async (req, res) => { - const artistId = req.params.artistId; +app.get('/community/:memberName/membersPost', async (req, res) => { + const memberName = req.params.memberName; const sql = `SELECT - memberNum, - memberPhoto - FROM artists - WHERE artistId = ?; `; - con.query(sql,[artistId], (err, result, fields)=>{ + p.postId, + p.post, + p.userId, + pc.enterComp, + pc.groupName, + pc.memberName, + pc.albumName, + u.nickname + FROM Posts p + INNER JOIN users u ON p.userId = u.userId + INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pc.memberName = pl.photoCardMemberName + WHERE pc.memberName = ?; `; + con.query(sql,[memberName], (err, result, fields)=>{ if(err) throw err; const r = { - memberNumandPhoto: result + memberPostList: result }; res.status(200).send(r); - //console.log("아티스트페이지", result); }) }); @@ -333,17 +341,28 @@ app.get('/community/:artistId/membersPost', async (req, res) => { app.get('/community/:artistId/allPost', async (req, res) => { const artistId = req.params.artistId; const sql = `SELECT - memberNum, - memberPhoto - FROM artists - WHERE artistId = ?; `; + a.artistId, + p.postId, + p.post, + p.userId, + pc.enterComp, + pc.groupName, + pc.memberName, + pc.albumName, + u.nickname + FROM artists a + INNER JOIN photoCards pc ON pc.enterComp = a.enterComp + INNER JOIN Polaroids pl ON pc.memberName = pl.photoCardMemberName + INNER JOIN Posts p ON p.PolaroidPolaroidId = pl.polaroidId + INNER JOIN users u ON p.userId = u.userId + WHERE artistId = 1; ` con.query(sql,[artistId], (err, result, fields)=>{ if(err) throw err; const r = { - memberNumandPhoto: result + allPostList: result }; res.status(200).send(r); - //console.log("아티스트페이지", result); + console.log("아티스트 전체 도안", result); }) }); From a48b133177fb9ac36a63d9f232970712a68793af Mon Sep 17 00:00:00 2001 From: urimJ Date: Fri, 10 Nov 2023 22:46:25 +0900 Subject: [PATCH 04/66] =?UTF-8?q?API=20=EB=A9=94=EC=9D=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80/=EB=9E=9C=EB=8D=A4=EC=95=84=ED=8B=B0?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=97=90=EB=9F=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index f3bf796..a773115 100644 --- a/main.js +++ b/main.js @@ -117,14 +117,14 @@ app.get('/mainpage/:userId/now5', async (req, res) => { }); //랜덤 아티스트 -app.get('/mainpage/:userId/artist', async (req, res) => { +app.get('/mainpage/:userId/randomArtist', async (req, res) => { const sql = `SELECT DISTINCT enterComp FROM artists;`; con.query(sql, (err, results, fields) => { if (err) throw err; const randomEnterComp = results[getRandomInt(results.length)].enterComp; - + //console.log("소속사",randomEnterComp); const sql3 = `SELECT artistId, groupName, photo FROM artists WHERE enterComp = ?`; From b53bad615a5fa1c2d858326bd36d3dbdccf41322 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 01:50:54 +0900 Subject: [PATCH 05/66] =?UTF-8?q?API=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20-=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/main.js b/main.js index a773115..2210054 100644 --- a/main.js +++ b/main.js @@ -402,6 +402,24 @@ app.get('/community/:artistId/uploadPost/post', async (req, res) => { }) }); + +//mypage +//프로필 정보 조회 +app.get('/mypage/:userId/myProfile', async(req, res)=>{ + const userId = req.params.userId; + const sql = `SELECT userId, avatar, nickname, biography + FROM users + WHERE userId = ?;`; + con.query(sql, [userId], (err, result, fields)=>{ + if(err) throw err; + const r = { + userProfileInfo : result + }; + res.status(200).send(r); + }) + +}); + app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); }) From 17ac2ee8876bb36dfc6bd6ddd3de14d6b0228214 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 02:00:55 +0900 Subject: [PATCH 06/66] =?UTF-8?q?API=20=EB=A7=88=EC=9D=B4=20-=20=ED=8F=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20-=20=EC=95=84=ED=8B=B0=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=ED=83=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/main.js b/main.js index 2210054..b711895 100644 --- a/main.js +++ b/main.js @@ -420,6 +420,24 @@ app.get('/mypage/:userId/myProfile', async(req, res)=>{ }); +//아티스트 탭 조회(즐겨찾기 기준) +app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ + const userId = req.params.userId; + const sql = `SELECT f.artistId, a.groupName + FROM Favorites f + INNER JOIN artists a ON f.artistId = a.artistId + WHERE userId = 1; + ` + con.query(sql, [userId], (err, result, fields)=>{ + if(err) throw err; + const r = { + artistTabInfo: result + } + res.status(200).send(r); + }) +}); + + app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); }) From 8031bc7b8b8cfe05ac102a16f4871094386574fc Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 02:29:54 +0900 Subject: [PATCH 07/66] =?UTF-8?q?API=20=EB=A7=88=EC=9D=B4-=ED=8F=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8-=EC=95=84=ED=8B=B0=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=B3=84=ED=8F=AC=EC=8A=A4=ED=8A=B8=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/main.js b/main.js index b711895..1771d21 100644 --- a/main.js +++ b/main.js @@ -437,6 +437,28 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ }) }); +//아티스트 별 포스트(게시 도안) 모아보기 +app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ + const userId = req.params.userId; + const artistId = req.params.artistId; + const sql = `SELECT p.postId, p.post, p.postDateTime, + pc.memberName, pc.albumName, pc.enterComp, pc.groupName, + u.userId, u.nickname + FROM Posts p + INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pl.photoCardMemberName = pc.memberName + INNER JOIN users u ON u.userId = p.userId + INNER JOIN artists a ON pc.groupName = a.groupName + WHERE p.userId = ? AND a.artistId = ?;`; + con.query(sql, [userId, artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + postOfArtistList: result + } + res.status(200).send(r); + console.log(r); + }); +}); app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); From 271387ac9f7178f56f5d9a471a9de55e40c86dee Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 02:33:23 +0900 Subject: [PATCH 08/66] =?UTF-8?q?API=20=EC=95=84=ED=8B=B0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=B3=84=20=ED=8F=AC=EC=8A=A4=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index 1771d21..59fce89 100644 --- a/main.js +++ b/main.js @@ -443,12 +443,14 @@ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ const artistId = req.params.artistId; const sql = `SELECT p.postId, p.post, p.postDateTime, pc.memberName, pc.albumName, pc.enterComp, pc.groupName, - u.userId, u.nickname + u.userId, u.nickname, + l.likeQuant FROM Posts p INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId INNER JOIN photoCards pc ON pl.photoCardMemberName = pc.memberName INNER JOIN users u ON u.userId = p.userId INNER JOIN artists a ON pc.groupName = a.groupName + INNER JOIN Likes l ON p.postId = l.postId WHERE p.userId = ? AND a.artistId = ?;`; con.query(sql, [userId, artistId], (err, result, fields)=>{ if(err) throw err; @@ -460,6 +462,8 @@ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ }); }); +// + app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); }) From 8e17ace3f1aa0b4c45d3a5c2a1db611adca6e3c1 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 14:39:44 +0900 Subject: [PATCH 09/66] =?UTF-8?q?API=20=EB=A7=88=EC=9D=B4-=ED=8F=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=82=AD=EC=A0=9C=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index 59fce89..f1a4f51 100644 --- a/main.js +++ b/main.js @@ -462,7 +462,19 @@ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ }); }); -// +//포스트 삭제하기 +app.delete('/mypage/:userId/myPost/delete/:postId', async (req, res)=>{ + const postId = req.params.postId; + const sql = `DELETE FROM Posts WHERE postId = ?` + con.query(sql, [postId], (err, result, fields)=>{ + if(err) throw err; + const r = { + postDeleted: result + } + res.status(200).send(r); + console.log(r); + }) +}); app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); From 5cf1cb58710bc239d42feca4ada6b1d94b532788 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 15:44:02 +0900 Subject: [PATCH 10/66] =?UTF-8?q?MOD=20port=20num=208080=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index f1a4f51..bec5f67 100644 --- a/main.js +++ b/main.js @@ -15,7 +15,7 @@ import { Artist, User } from './db.js'; const app = express(); -const port = 3000; +const port = 8080; app.use(bodyParser.json()); const corsOptions = { origin: "http://localhost:3000", @@ -465,7 +465,7 @@ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ //포스트 삭제하기 app.delete('/mypage/:userId/myPost/delete/:postId', async (req, res)=>{ const postId = req.params.postId; - const sql = `DELETE FROM Posts WHERE postId = ?` + const sql = `DELETE FROM Posts WHERE postId = ?;`; con.query(sql, [postId], (err, result, fields)=>{ if(err) throw err; const r = { @@ -476,6 +476,10 @@ app.delete('/mypage/:userId/myPost/delete/:postId', async (req, res)=>{ }) }); + + + + app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); }) From 30e1b1f54d726edc66cf2e20c9801b02b3b4f6bb Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 16:39:48 +0900 Subject: [PATCH 11/66] DB collection activationCode --- db.js | 11 +++-------- main.js | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/db.js b/db.js index 4ffd597..043507f 100644 --- a/db.js +++ b/db.js @@ -102,7 +102,7 @@ PhotoCard.init( await sequelize.sync(); //컬렉션 -//enterComp, groupName, memberName, albumName, version +//enterComp, groupName, memberName, albumName class Collection extends Model { } Collection.init( @@ -114,13 +114,7 @@ Collection.init( albumJacket: DataTypes.STRING, photoCardQuant: DataTypes.INTEGER, activeDateTime: DataTypes.DATE, - // artistId: { - // type: DataTypes.INTEGER, - // references: { - // model: Artist, // Polaroid 모델을 참조 - // key: 'artistId' // Polaroid 모델의 기본 키를 참조 - // } - // } + activationCode: DataTypes.STRING } , { @@ -130,6 +124,7 @@ Collection.init( } ); +await sequelize.sync(); //도안 class Polaroid extends Model { } diff --git a/main.js b/main.js index bec5f67..18b559b 100644 --- a/main.js +++ b/main.js @@ -420,14 +420,21 @@ app.get('/mypage/:userId/myProfile', async(req, res)=>{ }); -//아티스트 탭 조회(즐겨찾기 기준) +//아티스트 탭 조회(포스트 유무 기준) app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ const userId = req.params.userId; - const sql = `SELECT f.artistId, a.groupName - FROM Favorites f - INNER JOIN artists a ON f.artistId = a.artistId - WHERE userId = 1; - ` + // const sql = `SELECT f.artistId, a.groupName + // FROM Favorites f + // INNER JOIN artists a ON f.artistId = a.artistId + // WHERE userId = 1; + const sql = `SELECT pc.groupName + FROM Posts p + INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pl.photoCardMemberName = pc.memberName + WHERE p.userId = ? + + HAVING COUNT(*) > 0; + `; con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; const r = { From 8ae1edfafc3dfcc91ed9303279d60276d212992d Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 16:51:13 +0900 Subject: [PATCH 12/66] API collectionTabArtistList --- main.js | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index 18b559b..0453f62 100644 --- a/main.js +++ b/main.js @@ -423,10 +423,6 @@ app.get('/mypage/:userId/myProfile', async(req, res)=>{ //아티스트 탭 조회(포스트 유무 기준) app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ const userId = req.params.userId; - // const sql = `SELECT f.artistId, a.groupName - // FROM Favorites f - // INNER JOIN artists a ON f.artistId = a.artistId - // WHERE userId = 1; const sql = `SELECT pc.groupName FROM Posts p INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId @@ -438,7 +434,7 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; const r = { - artistTabInfo: result + postArtistList: result } res.status(200).send(r); }) @@ -483,8 +479,36 @@ app.delete('/mypage/:userId/myPost/delete/:postId', async (req, res)=>{ }) }); +//아티스트 탭 정보 조회(즐겨찾기 기준) +app.get('/mypage/:userId/myCollection/artistTab', async (req, res)=>{ + const userId = req.params.userId; + const sql = `SELECT f.artistId, a.groupName + FROM Favorites f + INNER JOIN artists a ON f.artistId = a.artistId + WHERE userId = 1;`; + con.query(sql, [userId], (err, result, fields)=>{ + if(err) throw err; + const r = { + collectionArtistList: result + } + console.log(r); + res.status(200).send(r); + }) +}); - +//활성화한 컬렉션 정보 조회 +app.get('/mypage/:userId/myCollection/:artistId/active', async (req, res)=>{ + const userId = req.params.userId; + const artistId = req.params.artistId; + const sql = `;`; + con.query(sql, [userId, artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + activeCollectionList: result + } + res.status(200).send(r); + }) +}); app.listen(port, ()=>{ From 9f2160c4884cb417be67968da198bbdd24753c06 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 17:00:03 +0900 Subject: [PATCH 13/66] DB usercollection albumName --- db.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db.js b/db.js index 043507f..79bd3d0 100644 --- a/db.js +++ b/db.js @@ -347,7 +347,7 @@ User.belongsToMany(Collection, { }) Collection.belongsToMany(User, { through: 'UserCollection', - foreignKey: 'collectionId', + foreignKey: 'albumName', }) // 회원: 포토카드 = 다대다 From a09b86e65ee9256cedee53a8d55daeb409453035 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 17:47:45 +0900 Subject: [PATCH 14/66] MOD: --- db.js | 102 +++++++++++++++++----------------------------------------- 1 file changed, 30 insertions(+), 72 deletions(-) diff --git a/db.js b/db.js index 79bd3d0..2a01a86 100644 --- a/db.js +++ b/db.js @@ -184,31 +184,19 @@ Post.init( User.hasMany(Polaroid, { foreignKey: 'userId' }) +Polaroid.belongsTo(User); // 회원: 포스트 = 일대다 User.hasMany(Post, { foreignKey: 'userId' }) +Post.belongsTo(User); // 좋아요 ( 회원: 포스트 = 다대다) class Like extends Model { } Like.init( { - // userId: { - // type: DataTypes.INTEGER, - // references: { - // model: User, - // key: 'userId' - // } - // }, - // postId: { - // type: DataTypes.INTEGER, - // references: { - // model: Post, - // key: 'postId' - // } - // }, likeQuant: { type: DataTypes.INTEGER, //autoIncrement: true, @@ -238,20 +226,6 @@ class Favorite extends Model { } Favorite.init( { - // userId: { - // type: DataTypes.INTEGER, - // references: { - // model: User, - // key: 'userId' - // } - // }, - // artistId: { - // type: DataTypes.INTEGER, - // references: { - // model: Artist, - // key: 'artistId' - // } - // }, favoriteQuant: { type: DataTypes.INTEGER, //autoIncrement: true, @@ -294,20 +268,14 @@ Polaroid.belongsTo(PhotoCard, Post.belongsTo(Polaroid); // 아티스트:컬렉션 = 일대일 -Collection.belongsTo(Artist, -// { -// foreignKey: 'artistId' -// } +Collection.belongsTo(Artist ); -Polaroid.sync(); -Post.sync(); -Collection.sync(); - // 컬렉션: 포토카드 = 일대다 Collection.hasMany(PhotoCard, { foreignKey: 'collectionId' }) +PhotoCard.belongsTo(Collection); // 회원: 컬렉션 = 다대다 @@ -315,20 +283,6 @@ class UserCollection extends Model { } UserCollection.init( { - // userId: { - // type: DataTypes.INTEGER, - // references: { - // model: User, - // key: 'userId' - // } - // }, - // artistId: { - // type: DataTypes.INTEGER, - // references: { - // model: Artist, - // key: 'artistId' - // } - // }, collectionQuant: { type: DataTypes.INTEGER, // autoIncrement: true, @@ -350,26 +304,20 @@ Collection.belongsToMany(User, { foreignKey: 'albumName', }) +// 아티스트: 컬렉션 = 일대다 +Artist.hasMany(Collection, { + foreignKey: 'artistId' +}); +Collection.belongsTo(Artist); + +await sequelize.sync(); + // 회원: 포토카드 = 다대다 class UserPhotoCard extends Model { } UserPhotoCard.init( { - // userId: { - // type: DataTypes.INTEGER, - // references: { - // model: User, - // key: 'userId' - // } - // }, - // artistId: { - // type: DataTypes.INTEGER, - // references: { - // model: Artist, - // key: 'artistId' - // } - // }, collectionQuant: { type: DataTypes.INTEGER, // autoIncrement: true, @@ -391,18 +339,26 @@ PhotoCard.belongsToMany(User, { foreignKey: 'photoCardId', }) + //----일대일---- + Polaroid.sync(); + Post.sync(); + Collection.sync(); + User.sync(); + PhotoCard.sync(); + Artist.sync(); + //await sequelize.sync({alter:true}); await sequelize.sync(); //------------------EXPORT--------------------- -export { Artist, - Collection, - Favorite, - Like, - PhotoCard, - Polaroid, - Post, - User} +// export { Artist, +// Collection, +// Favorite, +// Like, +// PhotoCard, +// Polaroid, +// Post, +// User} @@ -579,8 +535,10 @@ const fav1 = Favorite.build( // await fav1.save(); +//---------------------drop------------------------------------ // await sequelize.drop(); // console.log('All tables dropped!'); + // await Collection.truncate(); // await Artist.truncate(); From 71cb0ee0d2468f3a72c4f4130bf1510b894b04bb Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 19:58:36 +0900 Subject: [PATCH 15/66] MOD --- db.js | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- main.js | 28 ++++++++++-------- 2 files changed, 101 insertions(+), 17 deletions(-) diff --git a/db.js b/db.js index 2a01a86..75c1afd 100644 --- a/db.js +++ b/db.js @@ -84,13 +84,15 @@ PhotoCard.init( }, version: { type: DataTypes.STRING, - primaryKey: true, }, - photocard: DataTypes.STRING, + photocard: + { + type: DataTypes.STRING, + primaryKey: true, + }, albumName: DataTypes.STRING, enterComp: DataTypes.STRING, - groupName: DataTypes.STRING, - activeDateTime: DataTypes.DATE + groupName: DataTypes.STRING } , { @@ -161,7 +163,7 @@ Post.init( type: DataTypes.INTEGER, primaryKey: true, }, - post: DataTypes.STRING, + postDateTime: DataTypes.DATE, // polaroidId: { // type: DataTypes.INTEGER, @@ -502,6 +504,74 @@ const newJeans = Artist.build( // ------collection------- +// ------Photocard----------- +const pc1 = PhotoCard.build({ + memberName: '민지', + version: 'A', + photocard: 'fff', + albumName: 'GET UP(The 2nd EP)', + enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', + groupName: '뉴진스(New Jeans)' +}) +const pc2 = PhotoCard.build({ + memberName: '하니', + version: 'A', + photocard: 'ff', + albumName: 'GET UP(The 2nd EP)', + enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', + groupName: '뉴진스(New Jeans)' +}) +const pc3 = PhotoCard.build({ + memberName: '지민', + version: 'A', + photocard: 'f', + albumName: '[싱글] ', + enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', + groupName: '방탄소년단(BTS)' +}) +// ------Polaroid----------- +const pol1 = Polaroid.build({ + polaroidId:1, + polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', + saveDateTime: '2023-11-12 00:00:01' +}) +const pol2 = Polaroid.build({ + polaroidId:2, + polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', + saveDateTime: '2023-11-12 00:00:22' +}) +const pol3 = Polaroid.build({ + polaroidId:3, + polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', + saveDateTime: '2023-11-12 00:00:33' +}) +// ------Post----------- +const post1 = Post.build({ + postId:1, + post:'', + postDateTime: '2023-11-23 00:00:01' , + userId: 1, + + PolaroidPolaroidId: 1 +}) + +const post2 = Post.build({ + postId:2, + post:'', + postDateTime: '2023-11-23 00:00:22' , + userId: 1, + + PolaroidPolaroidId: 2 +}) + +const post3 = Post.build({ + postId:3, + post:'', + postDateTime: '2023-11-23 00:00:33' , + userId: 1, + + PolaroidPolaroidId: 3 +}) //-------user---------- const userTemp = User.build( @@ -535,6 +605,16 @@ const fav1 = Favorite.build( // await fav1.save(); +// await pc1.save(); +// await pc2.save(); +// await pc3.save(); +// await pol1.save(); +// await pol2.save(); +// await pol3.save(); +// await post1.save(); +// await post2.save(); +// await post3.save(); + //---------------------drop------------------------------------ // await sequelize.drop(); // console.log('All tables dropped!'); diff --git a/main.js b/main.js index 0453f62..54a995a 100644 --- a/main.js +++ b/main.js @@ -5,14 +5,14 @@ import { swaggerUi, specs } from './modules/swagger.js' import mysql from 'mysql'; import { config } from 'dotenv'; config(); -import { Artist, - Favorite, - Collection, - Like, - PhotoCard, - Polaroid, - Post, - User } from './db.js'; +// import { Artist, +// Favorite, +// Collection, +// Like, +// PhotoCard, +// Polaroid, +// Post, +// User } from './db.js'; const app = express(); const port = 8080; @@ -316,7 +316,7 @@ app.get('/community/:memberName/membersPost', async (req, res) => { const memberName = req.params.memberName; const sql = `SELECT p.postId, - p.post, + pl.polaroid, p.userId, pc.enterComp, pc.groupName, @@ -343,7 +343,7 @@ app.get('/community/:artistId/allPost', async (req, res) => { const sql = `SELECT a.artistId, p.postId, - p.post, + pl.polaroid p.userId, pc.enterComp, pc.groupName, @@ -444,7 +444,7 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ const userId = req.params.userId; const artistId = req.params.artistId; - const sql = `SELECT p.postId, p.post, p.postDateTime, + const sql = `SELECT p.postId, pl.polaroid, p.postDateTime, pc.memberName, pc.albumName, pc.enterComp, pc.groupName, u.userId, u.nickname, l.likeQuant @@ -500,7 +500,11 @@ app.get('/mypage/:userId/myCollection/artistTab', async (req, res)=>{ app.get('/mypage/:userId/myCollection/:artistId/active', async (req, res)=>{ const userId = req.params.userId; const artistId = req.params.artistId; - const sql = `;`; + const sql = `SELECT albumJacket, albumName, activeDateTime, photoCardQuant + FROM collections c + INNER JOIN UserCollections uc ON uc.albumName = c.albumName + INNER JOIN users a ON u.userId = uc.userId + WHERE userId = ? AND artistId = ?;`; con.query(sql, [userId, artistId], (err, result, fields)=>{ if(err) throw err; const r = { From b69a190559d01b60bc8aa3b431c965879e28d2a5 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 20:00:28 +0900 Subject: [PATCH 16/66] MOD --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index 54a995a..beb24dc 100644 --- a/main.js +++ b/main.js @@ -15,7 +15,7 @@ config(); // User } from './db.js'; const app = express(); -const port = 8080; +const port = 3000; app.use(bodyParser.json()); const corsOptions = { origin: "http://localhost:3000", From 50ba7ee00762090be4298ba78f154c128dc9eab5 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 13 Nov 2023 20:09:06 +0900 Subject: [PATCH 17/66] MOD --- main.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index beb24dc..c7aaf1d 100644 --- a/main.js +++ b/main.js @@ -100,8 +100,9 @@ app.get('/mainpage/:userId/hot10', async (req, res) => { app.get('/mainpage/:userId/now5', async (req, res) => { const sql = ` - SELECT postId, post - FROM Posts + SELECT p.postId, pl.polaroid + FROM Posts p + INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId ORDER BY postId DESC LIMIT 5; ` From d863d0c2326483ab8004499c95f847e8ac472d09 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 14 Nov 2023 00:29:45 +0900 Subject: [PATCH 18/66] =?UTF-8?q?MOD=20DB=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 559 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 282 insertions(+), 277 deletions(-) diff --git a/db.js b/db.js index 75c1afd..1f11391 100644 --- a/db.js +++ b/db.js @@ -20,7 +20,6 @@ sequelize.authenticate().then(() => { }); //회원 -//userId, email, nickname, password, avatar, biography class User extends Model {} User.init( { @@ -42,10 +41,9 @@ User.init( timestamps: false } ); - +await sequelize.sync(); //아티스트 -//artistId, enterComp, groupName, memberName, collectionQuant class Artist extends Model {} Artist.init( { @@ -69,11 +67,9 @@ Artist.init( timestamps: false } ); - - +await sequelize.sync(); //포토카드 -//enterComp, groupName, memberName, albumName, version class PhotoCard extends Model { } PhotoCard.init( @@ -104,7 +100,6 @@ PhotoCard.init( await sequelize.sync(); //컬렉션 -//enterComp, groupName, memberName, albumName class Collection extends Model { } Collection.init( @@ -125,8 +120,8 @@ Collection.init( timestamps: false } ); - await sequelize.sync(); + //도안 class Polaroid extends Model { } @@ -153,6 +148,7 @@ Polaroid.init( timestamps: false } ); +await sequelize.sync(); //포스트 class Post extends Model { @@ -180,19 +176,21 @@ Post.init( timestamps: false } ); +await sequelize.sync(); // 릴레이션 // 회원 : 도안 = 일대다 -User.hasMany(Polaroid, { - foreignKey: 'userId' -}) +User.hasMany(Polaroid); Polaroid.belongsTo(User); // 회원: 포스트 = 일대다 User.hasMany(Post, { foreignKey: 'userId' }) -Post.belongsTo(User); +Post.belongsTo(User,{ + foreignKey: 'userId' +}); +await sequelize.sync(); // 좋아요 ( 회원: 포스트 = 다대다) class Like extends Model { @@ -215,13 +213,13 @@ Like.init( User.belongsToMany(Post, { through: 'Like', foreignKey: 'userId', - }) +}); + Post.belongsToMany(User, { through: 'Like', foreignKey: 'postId', - }) - - +}); +await sequelize.sync(); // 즐겨찾기 (회원: 아티스트 = 다대다) class Favorite extends Model { @@ -244,43 +242,60 @@ Favorite.init( User.belongsToMany(Artist, { through: 'Favorite', foreignKey: 'userId', - }) +}); + Artist.belongsToMany(User, { through: 'Favorite', foreignKey: 'artistId', - }) - +}); +await sequelize.sync(); // 포토카드 User.hasMany(PhotoCard, { foreignKey: 'userId' +}); +PhotoCard.belongsTo(User,{ + foreignKey:'userId' }) // 컬렉션 User.hasMany(Collection, { foreignKey: 'userId' -}) +}); +Collection.hasMany(User,{ + foreignKey: 'userId' +}); // 포토카드: 도안 = 일대일 Polaroid.belongsTo(PhotoCard, -// { -// foreignKey: 'photocardId' -// } + { + foreignKey: 'photocardId' +} ); // 도안:포스트 = 일대일 -Post.belongsTo(Polaroid); +Post.belongsTo(Polaroid, + { + foreignKey: 'polaroidId' +}); -// 아티스트:컬렉션 = 일대일 -Collection.belongsTo(Artist -); +// 아티스트: 컬렉션 = 일대다 +Artist.hasMany(Collection,{ + foreignKey: 'artistId' +}); +Collection.belongsTo(Artist,{ + foreignKey: 'artistId' +}); // 컬렉션: 포토카드 = 일대다 -Collection.hasMany(PhotoCard, { +Collection.hasMany(PhotoCard,{ foreignKey: 'collectionId' -}) -PhotoCard.belongsTo(Collection); +}); +PhotoCard.belongsTo(Collection,{ + foreignKey: 'collectionId' +}); -// 회원: 컬렉션 = 다대다 +await sequelize.sync(); +// 회원: 컬렉션 = 다대다 class UserCollection extends Model { } UserCollection.init( @@ -300,22 +315,14 @@ UserCollection.init( User.belongsToMany(Collection, { through: 'UserCollection', foreignKey: 'userId', - }) +}); Collection.belongsToMany(User, { through: 'UserCollection', foreignKey: 'albumName', - }) - -// 아티스트: 컬렉션 = 일대다 -Artist.hasMany(Collection, { - foreignKey: 'artistId' }); -Collection.belongsTo(Artist); - await sequelize.sync(); // 회원: 포토카드 = 다대다 - class UserPhotoCard extends Model { } UserPhotoCard.init( @@ -335,264 +342,262 @@ UserPhotoCard.init( User.belongsToMany(PhotoCard, { through: 'UserPhotoCard', foreignKey: 'userId', - }) +}); PhotoCard.belongsToMany(User, { through: 'UserPhotoCard', foreignKey: 'photoCardId', - }) - - //----일대일---- - Polaroid.sync(); - Post.sync(); - Collection.sync(); - User.sync(); - PhotoCard.sync(); - Artist.sync(); - -//await sequelize.sync({alter:true}); +}); await sequelize.sync(); -//------------------EXPORT--------------------- -// export { Artist, -// Collection, -// Favorite, -// Like, -// PhotoCard, -// Polaroid, -// Post, -// User} - - - +// //----일대일---- +// Polaroid.sync(); +// Post.sync(); +// Collection.sync(); +// User.sync(); +// PhotoCard.sync(); +// Artist.sync(); +// //------------------EXPORT--------------------- +// // export { Artist, +// // Collection, +// // Favorite, +// // Like, +// // PhotoCard, +// // Polaroid, +// // Post, +// // User} -//-------------------DATA----------------------- -// const jane = User.build({ firstName: "Jane", lastName: "Doe" }); -// // "jane" has not been saved to the database yet! -// // You can change any of its properties here, and call `save()` later to persist them all at once. -// await jane.save(); -// // "jane" is now saved to the database! -// ------artist------- -const BTS = Artist.build( - { - // artistId: 1, - photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/bts.jpg', - enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', - groupName: '방탄소년단(BTS)', - memberNum: 7, - members: { - "name": ["정국", "뷔", "지민", "슈가", "진","RM", "제이홉"], - }, - memberPhoto: - [ - { - "name": "정국", - "memphoto":"" - }, - { - "name": "뷔", - "memphoto":"" - }, - { - "name": "지민", - "memphoto":"" - }, - { - "name": "슈가", - "memphoto":"" - }, - { - "name": "진", - "memphoto":"" - }, - { - "name": "RM", - "memphoto":"" - }, - { - "name": "제이홉", - "memphoto":"" - } - ] - , - collectionQuant: 18 - } -); +// //-------------------DATA----------------------- +// // const jane = User.build({ firstName: "Jane", lastName: "Doe" }); -const aespa = Artist.build( - { - // artistId: 2, - photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/aespa.jpeg', - enterComp: '에스엠 엔터테인먼트(SM Entertainment)', - groupName: '에스파(aespa)', - memberNum: 4, - members: { - "name": ["카리나", "닝닝", "윈터", "지젤"], - }, - memberPhoto: - [ - { - "name": "카리나", - "memphoto":"" - }, - { - "name": "닝닝", - "memphoto":"" - }, - { - "name": "윈터", - "memphoto":"" - }, - { - "name": "지젤", - "memphoto":"" - } - ] - , - collectionQuant: 6 -}) +// // // "jane" has not been saved to the database yet! +// // // You can change any of its properties here, and call `save()` later to persist them all at once. -const IU = Artist.build( - { - // artistId: 3, - photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/IU.png', - enterComp: '이담 엔터테인먼트(EDAM Entertainment)', - groupName: '아이유(IU)', - memberNum: 1, - members: { - "name": ["아이유"], - }, - collectionQuant: 16 -}) +// // await jane.save(); -const newJeans = Artist.build( - { - // artistId: 4, - photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/NewJeans.jpeg', - enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', - groupName: '뉴진스(New Jeans)', - memberNum: 4, - members: { - "name": ["다니엘", "민지", "해린", "하니"], - }, - memberPhoto: - [ - { - "name": "다니엘", - "memphoto":"" - }, - { - "name": "민지", - "memphoto":"" - }, - { - "name": "해린", - "memphoto":"" - }, - { - "name": "하니", - "memphoto":"" - } - ] - , - collectionQuant: 3 -}) +// // // "jane" is now saved to the database! - -// ------collection------- -// ------Photocard----------- -const pc1 = PhotoCard.build({ - memberName: '민지', - version: 'A', - photocard: 'fff', - albumName: 'GET UP(The 2nd EP)', - enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', - groupName: '뉴진스(New Jeans)' -}) -const pc2 = PhotoCard.build({ - memberName: '하니', - version: 'A', - photocard: 'ff', - albumName: 'GET UP(The 2nd EP)', - enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', - groupName: '뉴진스(New Jeans)' -}) -const pc3 = PhotoCard.build({ - memberName: '지민', - version: 'A', - photocard: 'f', - albumName: '[싱글] ', - enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', - groupName: '방탄소년단(BTS)' -}) -// ------Polaroid----------- -const pol1 = Polaroid.build({ - polaroidId:1, - polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', - saveDateTime: '2023-11-12 00:00:01' -}) -const pol2 = Polaroid.build({ - polaroidId:2, - polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', - saveDateTime: '2023-11-12 00:00:22' -}) -const pol3 = Polaroid.build({ - polaroidId:3, - polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', - saveDateTime: '2023-11-12 00:00:33' -}) -// ------Post----------- -const post1 = Post.build({ - postId:1, - post:'', - postDateTime: '2023-11-23 00:00:01' , - userId: 1, +// // ------artist------- +// const BTS = Artist.build( +// { +// // artistId: 1, +// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/bts.jpg', +// enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', +// groupName: '방탄소년단(BTS)', +// memberNum: 7, +// members: { +// "name": ["정국", "뷔", "지민", "슈가", "진","RM", "제이홉"], +// }, +// memberPhoto: +// [ +// { +// "name": "정국", +// "memphoto":"" +// }, +// { +// "name": "뷔", +// "memphoto":"" +// }, +// { +// "name": "지민", +// "memphoto":"" +// }, +// { +// "name": "슈가", +// "memphoto":"" +// }, +// { +// "name": "진", +// "memphoto":"" +// }, +// { +// "name": "RM", +// "memphoto":"" +// }, +// { +// "name": "제이홉", +// "memphoto":"" +// } +// ] +// , +// collectionQuant: 18 +// } +// ); + +// const aespa = Artist.build( +// { +// // artistId: 2, +// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/aespa.jpeg', +// enterComp: '에스엠 엔터테인먼트(SM Entertainment)', +// groupName: '에스파(aespa)', +// memberNum: 4, +// members: { +// "name": ["카리나", "닝닝", "윈터", "지젤"], +// }, +// memberPhoto: +// [ +// { +// "name": "카리나", +// "memphoto":"" +// }, +// { +// "name": "닝닝", +// "memphoto":"" +// }, +// { +// "name": "윈터", +// "memphoto":"" +// }, +// { +// "name": "지젤", +// "memphoto":"" +// } +// ] +// , +// collectionQuant: 6 +// }) + +// const IU = Artist.build( +// { +// // artistId: 3, +// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/IU.png', +// enterComp: '이담 엔터테인먼트(EDAM Entertainment)', +// groupName: '아이유(IU)', +// memberNum: 1, +// members: { +// "name": ["아이유"], +// }, +// collectionQuant: 16 +// }) + +// const newJeans = Artist.build( +// { +// // artistId: 4, +// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/NewJeans.jpeg', +// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', +// groupName: '뉴진스(New Jeans)', +// memberNum: 4, +// members: { +// "name": ["다니엘", "민지", "해린", "하니"], +// }, +// memberPhoto: +// [ +// { +// "name": "다니엘", +// "memphoto":"" +// }, +// { +// "name": "민지", +// "memphoto":"" +// }, +// { +// "name": "해린", +// "memphoto":"" +// }, +// { +// "name": "하니", +// "memphoto":"" +// } +// ] +// , +// collectionQuant: 3 +// }) +// +// +// // ------collection------- +// // ------Photocard----------- +// const pc1 = PhotoCard.build({ +// memberName: '민지', +// version: 'A', +// photocard: 'fff', +// albumName: 'GET UP(The 2nd EP)', +// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', +// groupName: '뉴진스(New Jeans)' +// }) +// const pc2 = PhotoCard.build({ +// memberName: '하니', +// version: 'A', +// photocard: 'ff', +// albumName: 'GET UP(The 2nd EP)', +// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', +// groupName: '뉴진스(New Jeans)' +// }) +// const pc3 = PhotoCard.build({ +// memberName: '지민', +// version: 'A', +// photocard: 'f', +// albumName: '[싱글] ', +// enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', +// groupName: '방탄소년단(BTS)' +// }) +// // ------Polaroid----------- +// const pol1 = Polaroid.build({ +// polaroidId:1, +// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', +// saveDateTime: '2023-11-12 00:00:01' +// }) +// const pol2 = Polaroid.build({ +// polaroidId:2, +// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', +// saveDateTime: '2023-11-12 00:00:22' +// }) +// const pol3 = Polaroid.build({ +// polaroidId:3, +// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', +// saveDateTime: '2023-11-12 00:00:33' +// }) +// // ------Post----------- +// const post1 = Post.build({ +// postId:1, +// post:'', +// postDateTime: '2023-11-23 00:00:01' , +// userId: 1, - PolaroidPolaroidId: 1 -}) - -const post2 = Post.build({ - postId:2, - post:'', - postDateTime: '2023-11-23 00:00:22' , - userId: 1, +// PolaroidPolaroidId: 1 +// }) + +// const post2 = Post.build({ +// postId:2, +// post:'', +// postDateTime: '2023-11-23 00:00:22' , +// userId: 1, - PolaroidPolaroidId: 2 -}) - -const post3 = Post.build({ - postId:3, - post:'', - postDateTime: '2023-11-23 00:00:33' , - userId: 1, +// PolaroidPolaroidId: 2 +// }) + +// const post3 = Post.build({ +// postId:3, +// post:'', +// postDateTime: '2023-11-23 00:00:33' , +// userId: 1, - PolaroidPolaroidId: 3 -}) +// PolaroidPolaroidId: 3 +// }) -//-------user---------- -const userTemp = User.build( - { - // userId: 1, - email: 'ohnpol1004@naver.com', - nickname: 'ohnpol1004', - password: '1111', - avatar: '', - biography: '자기소개' -}) +// //-------user---------- +// const userTemp = User.build( +// { +// // userId: 1, +// email: 'ohnpol1004@naver.com', +// nickname: 'ohnpol1004', +// password: '1111', +// avatar: '', +// biography: '자기소개' +// }) -//-------favorite---------- +// //-------favorite---------- -const fav1 = Favorite.build( - { - favoriteQuant: 1, - userId: 1, - artistId: 1 - } -) +// const fav1 = Favorite.build( +// { +// favoriteQuant: 1, +// userId: 1, +// artistId: 1 +// } +// ) //----------------------saved--------------------------------- From 1da639162f3965e4843c806283aa77bb510cf53f Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 14 Nov 2023 00:43:53 +0900 Subject: [PATCH 19/66] =?UTF-8?q?MOD=20DB=20photocardMemberName=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 442 ++++++++++++++++++++++++++++---------------------------- main.js | 4 +- 2 files changed, 223 insertions(+), 223 deletions(-) diff --git a/db.js b/db.js index 1f11391..3123d92 100644 --- a/db.js +++ b/db.js @@ -268,7 +268,7 @@ Collection.hasMany(User,{ // 포토카드: 도안 = 일대일 Polaroid.belongsTo(PhotoCard, { - foreignKey: 'photocardId' + foreignKey: 'photocardMemberName' } ); // 도안:포스트 = 일대일 @@ -381,234 +381,234 @@ await sequelize.sync(); // // // "jane" is now saved to the database! -// // ------artist------- -// const BTS = Artist.build( -// { -// // artistId: 1, -// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/bts.jpg', -// enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', -// groupName: '방탄소년단(BTS)', -// memberNum: 7, -// members: { -// "name": ["정국", "뷔", "지민", "슈가", "진","RM", "제이홉"], -// }, -// memberPhoto: -// [ -// { -// "name": "정국", -// "memphoto":"" -// }, -// { -// "name": "뷔", -// "memphoto":"" -// }, -// { -// "name": "지민", -// "memphoto":"" -// }, -// { -// "name": "슈가", -// "memphoto":"" -// }, -// { -// "name": "진", -// "memphoto":"" -// }, -// { -// "name": "RM", -// "memphoto":"" -// }, -// { -// "name": "제이홉", -// "memphoto":"" -// } -// ] -// , -// collectionQuant: 18 -// } -// ); - -// const aespa = Artist.build( -// { -// // artistId: 2, -// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/aespa.jpeg', -// enterComp: '에스엠 엔터테인먼트(SM Entertainment)', -// groupName: '에스파(aespa)', -// memberNum: 4, -// members: { -// "name": ["카리나", "닝닝", "윈터", "지젤"], -// }, -// memberPhoto: -// [ -// { -// "name": "카리나", -// "memphoto":"" -// }, -// { -// "name": "닝닝", -// "memphoto":"" -// }, -// { -// "name": "윈터", -// "memphoto":"" -// }, -// { -// "name": "지젤", -// "memphoto":"" -// } -// ] -// , -// collectionQuant: 6 -// }) - -// const IU = Artist.build( -// { -// // artistId: 3, -// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/IU.png', -// enterComp: '이담 엔터테인먼트(EDAM Entertainment)', -// groupName: '아이유(IU)', -// memberNum: 1, -// members: { -// "name": ["아이유"], -// }, -// collectionQuant: 16 -// }) - -// const newJeans = Artist.build( -// { -// // artistId: 4, -// photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/NewJeans.jpeg', -// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', -// groupName: '뉴진스(New Jeans)', -// memberNum: 4, -// members: { -// "name": ["다니엘", "민지", "해린", "하니"], -// }, -// memberPhoto: -// [ -// { -// "name": "다니엘", -// "memphoto":"" -// }, -// { -// "name": "민지", -// "memphoto":"" -// }, -// { -// "name": "해린", -// "memphoto":"" -// }, -// { -// "name": "하니", -// "memphoto":"" -// } -// ] -// , -// collectionQuant: 3 -// }) -// -// -// // ------collection------- -// // ------Photocard----------- -// const pc1 = PhotoCard.build({ -// memberName: '민지', -// version: 'A', -// photocard: 'fff', -// albumName: 'GET UP(The 2nd EP)', -// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', -// groupName: '뉴진스(New Jeans)' -// }) -// const pc2 = PhotoCard.build({ -// memberName: '하니', -// version: 'A', -// photocard: 'ff', -// albumName: 'GET UP(The 2nd EP)', -// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', -// groupName: '뉴진스(New Jeans)' -// }) -// const pc3 = PhotoCard.build({ -// memberName: '지민', -// version: 'A', -// photocard: 'f', -// albumName: '[싱글] ', -// enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', -// groupName: '방탄소년단(BTS)' -// }) -// // ------Polaroid----------- -// const pol1 = Polaroid.build({ -// polaroidId:1, -// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', -// saveDateTime: '2023-11-12 00:00:01' -// }) -// const pol2 = Polaroid.build({ -// polaroidId:2, -// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', -// saveDateTime: '2023-11-12 00:00:22' -// }) -// const pol3 = Polaroid.build({ -// polaroidId:3, -// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', -// saveDateTime: '2023-11-12 00:00:33' -// }) -// // ------Post----------- -// const post1 = Post.build({ -// postId:1, -// post:'', -// postDateTime: '2023-11-23 00:00:01' , -// userId: 1, +// ------artist------- +const BTS = Artist.build( + { + // artistId: 1, + photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/bts.jpg', + enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', + groupName: '방탄소년단(BTS)', + memberNum: 7, + members: { + "name": ["정국", "뷔", "지민", "슈가", "진","RM", "제이홉"], + }, + memberPhoto: + [ + { + "name": "정국", + "memphoto":"" + }, + { + "name": "뷔", + "memphoto":"" + }, + { + "name": "지민", + "memphoto":"" + }, + { + "name": "슈가", + "memphoto":"" + }, + { + "name": "진", + "memphoto":"" + }, + { + "name": "RM", + "memphoto":"" + }, + { + "name": "제이홉", + "memphoto":"" + } + ] + , + collectionQuant: 18 + } +); + +const aespa = Artist.build( + { + // artistId: 2, + photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/aespa.jpeg', + enterComp: '에스엠 엔터테인먼트(SM Entertainment)', + groupName: '에스파(aespa)', + memberNum: 4, + members: { + "name": ["카리나", "닝닝", "윈터", "지젤"], + }, + memberPhoto: + [ + { + "name": "카리나", + "memphoto":"" + }, + { + "name": "닝닝", + "memphoto":"" + }, + { + "name": "윈터", + "memphoto":"" + }, + { + "name": "지젤", + "memphoto":"" + } + ] + , + collectionQuant: 6 +}) + +const IU = Artist.build( + { + // artistId: 3, + photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/IU.png', + enterComp: '이담 엔터테인먼트(EDAM Entertainment)', + groupName: '아이유(IU)', + memberNum: 1, + members: { + "name": ["아이유"], + }, + collectionQuant: 16 +}) + +const newJeans = Artist.build( + { + // artistId: 4, + photo: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/artist/NewJeans.jpeg', + enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', + groupName: '뉴진스(New Jeans)', + memberNum: 4, + members: { + "name": ["다니엘", "민지", "해린", "하니"], + }, + memberPhoto: + [ + { + "name": "다니엘", + "memphoto":"" + }, + { + "name": "민지", + "memphoto":"" + }, + { + "name": "해린", + "memphoto":"" + }, + { + "name": "하니", + "memphoto":"" + } + ] + , + collectionQuant: 3 +}) + + +// ------collection------- +// ------Photocard----------- +const pc1 = PhotoCard.build({ + memberName: '민지', + version: 'A', + photocard: 'fff', + albumName: 'GET UP(The 2nd EP)', + enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', + groupName: '뉴진스(New Jeans)' +}) +const pc2 = PhotoCard.build({ + memberName: '하니', + version: 'A', + photocard: 'ff', + albumName: 'GET UP(The 2nd EP)', + enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', + groupName: '뉴진스(New Jeans)' +}) +const pc3 = PhotoCard.build({ + memberName: '지민', + version: 'A', + photocard: 'f', + albumName: '[싱글] ', + enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', + groupName: '방탄소년단(BTS)' +}) +// ------Polaroid----------- +const pol1 = Polaroid.build({ + polaroidId:1, + polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', + saveDateTime: '2023-11-12 00:00:01' +}) +const pol2 = Polaroid.build({ + polaroidId:2, + polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', + saveDateTime: '2023-11-12 00:00:22' +}) +const pol3 = Polaroid.build({ + polaroidId:3, + polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', + saveDateTime: '2023-11-12 00:00:33' +}) +// ------Post----------- +const post1 = Post.build({ + postId:1, + post:'', + postDateTime: '2023-11-23 00:00:01' , + userId: 1, -// PolaroidPolaroidId: 1 -// }) - -// const post2 = Post.build({ -// postId:2, -// post:'', -// postDateTime: '2023-11-23 00:00:22' , -// userId: 1, + PolaroidPolaroidId: 1 +}) + +const post2 = Post.build({ + postId:2, + post:'', + postDateTime: '2023-11-23 00:00:22' , + userId: 1, -// PolaroidPolaroidId: 2 -// }) - -// const post3 = Post.build({ -// postId:3, -// post:'', -// postDateTime: '2023-11-23 00:00:33' , -// userId: 1, + PolaroidPolaroidId: 2 +}) + +const post3 = Post.build({ + postId:3, + post:'', + postDateTime: '2023-11-23 00:00:33' , + userId: 1, -// PolaroidPolaroidId: 3 -// }) - -// //-------user---------- -// const userTemp = User.build( -// { -// // userId: 1, -// email: 'ohnpol1004@naver.com', -// nickname: 'ohnpol1004', -// password: '1111', -// avatar: '', -// biography: '자기소개' -// }) - -// //-------favorite---------- - -// const fav1 = Favorite.build( -// { -// favoriteQuant: 1, -// userId: 1, -// artistId: 1 -// } -// ) + PolaroidPolaroidId: 3 +}) + +//-------user---------- +const userTemp = User.build( + { + // userId: 1, + email: 'ohnpol1004@naver.com', + nickname: 'ohnpol1004', + password: '1111', + avatar: '', + biography: '자기소개' +}) + +//-------favorite---------- + +const fav1 = Favorite.build( + { + favoriteQuant: 1, + userId: 1, + artistId: 1 + } +) //----------------------saved--------------------------------- -// await BTS.save(); -// await aespa.save(); -// await IU.save(); -// await newJeans.save(); +await BTS.save(); +await aespa.save(); +await IU.save(); +await newJeans.save(); -// await userTemp.save(); +await userTemp.save(); -// await fav1.save(); +await fav1.save(); // await pc1.save(); // await pc2.save(); diff --git a/main.js b/main.js index c7aaf1d..76c522a 100644 --- a/main.js +++ b/main.js @@ -85,8 +85,8 @@ app.get('/mainpage/:userId/hot10', async (req, res) => { LIMIT 10 ) l INNER JOIN Posts p ON l.postId = p.postId - INNER JOIN Polaroids pr ON p.PolaroidPolaroidId = pr.PhotoCardMemberName - INNER JOIN photoCards pc ON pr.photoCardMemberName = pc.memberName;`; + INNER JOIN Polaroids pl ON p.polaroidId = pl.PhotoCardMemberName + INNER JOIN photoCards pc ON pl.photoCardMemberName = pc.memberName;`; con.query(sql, (err, result, fields)=>{ if(err) throw err; const r = { From d6e5a676583d59fb0168b16d4c5b778f6af9cd2c Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 14 Nov 2023 15:43:35 +0900 Subject: [PATCH 20/66] MOD --- db.js | 117 ++++++++++++++++++++++++++++------------------------ main.js | 125 +++++++++++++++++++++++++++++++------------------------- 2 files changed, 132 insertions(+), 110 deletions(-) diff --git a/db.js b/db.js index 3123d92..5e35628 100644 --- a/db.js +++ b/db.js @@ -516,40 +516,41 @@ const pc1 = PhotoCard.build({ photocard: 'fff', albumName: 'GET UP(The 2nd EP)', enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', - groupName: '뉴진스(New Jeans)' -}) -const pc2 = PhotoCard.build({ - memberName: '하니', - version: 'A', - photocard: 'ff', - albumName: 'GET UP(The 2nd EP)', - enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', - groupName: '뉴진스(New Jeans)' -}) -const pc3 = PhotoCard.build({ - memberName: '지민', - version: 'A', - photocard: 'f', - albumName: '[싱글] ', - enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', - groupName: '방탄소년단(BTS)' + groupName: '뉴진스(New Jeans)', + userId:1 }) +// const pc2 = PhotoCard.build({ +// memberName: '하니', +// version: 'A', +// photocard: 'ff', +// albumName: 'GET UP(The 2nd EP)', +// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', +// groupName: '뉴진스(New Jeans)' +// }) +// const pc3 = PhotoCard.build({ +// memberName: '지민', +// version: 'A', +// photocard: 'f', +// albumName: '[싱글] ', +// enterComp: '빅히트 엔터테인먼트(Big Hit Entertainment)', +// groupName: '방탄소년단(BTS)' +// }) // ------Polaroid----------- const pol1 = Polaroid.build({ polaroidId:1, polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', saveDateTime: '2023-11-12 00:00:01' }) -const pol2 = Polaroid.build({ - polaroidId:2, - polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', - saveDateTime: '2023-11-12 00:00:22' -}) -const pol3 = Polaroid.build({ - polaroidId:3, - polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', - saveDateTime: '2023-11-12 00:00:33' -}) +// const pol2 = Polaroid.build({ +// polaroidId:2, +// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', +// saveDateTime: '2023-11-12 00:00:22' +// }) +// const pol3 = Polaroid.build({ +// polaroidId:3, +// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', +// saveDateTime: '2023-11-12 00:00:33' +// }) // ------Post----------- const post1 = Post.build({ postId:1, @@ -557,26 +558,26 @@ const post1 = Post.build({ postDateTime: '2023-11-23 00:00:01' , userId: 1, - PolaroidPolaroidId: 1 + polaroidId: 1 }) -const post2 = Post.build({ - postId:2, - post:'', - postDateTime: '2023-11-23 00:00:22' , - userId: 1, +// const post2 = Post.build({ +// postId:2, +// post:'', +// postDateTime: '2023-11-23 00:00:22' , +// userId: 1, - PolaroidPolaroidId: 2 -}) - -const post3 = Post.build({ - postId:3, - post:'', - postDateTime: '2023-11-23 00:00:33' , - userId: 1, +// PolaroidPolaroidId: 2 +// }) + +// const post3 = Post.build({ +// postId:3, +// post:'', +// postDateTime: '2023-11-23 00:00:33' , +// userId: 1, - PolaroidPolaroidId: 3 -}) +// PolaroidPolaroidId: 3 +// }) //-------user---------- const userTemp = User.build( @@ -598,28 +599,36 @@ const fav1 = Favorite.build( artistId: 1 } ) - +//------like--------------- +const like1 = Like.build({ + likeQuant: 1, + userId:1, + postId:1 +}) //----------------------saved--------------------------------- -await BTS.save(); -await aespa.save(); -await IU.save(); -await newJeans.save(); +// await BTS.save(); +// await aespa.save(); +// await IU.save(); +// await newJeans.save(); -await userTemp.save(); +// await userTemp.save(); + +// await fav1.save(); -await fav1.save(); // await pc1.save(); -// await pc2.save(); -// await pc3.save(); +// // await pc2.save(); +// // await pc3.save(); // await pol1.save(); -// await pol2.save(); -// await pol3.save(); +// // await pol2.save(); +// // await pol3.save(); // await post1.save(); // await post2.save(); // await post3.save(); +// // await like1.save(); + //---------------------drop------------------------------------ // await sequelize.drop(); // console.log('All tables dropped!'); diff --git a/main.js b/main.js index 76c522a..d27cbf1 100644 --- a/main.js +++ b/main.js @@ -67,42 +67,72 @@ app.get('/mainpage/:userId/favArtist', async (req, res) => { res.status(200).send(r); }) }); + //hot10 app.get('/mainpage/:userId/hot10', async (req, res) => { - - const sql = `SELECT - pc.photocard, - pc.enterComp, - pc.groupName, - pc.memberName, - pc.albumName, - l.userId, - l.postId - FROM ( - SELECT postId, userId - FROM Likes - ORDER BY likeQuant DESC - LIMIT 10 - ) l - INNER JOIN Posts p ON l.postId = p.postId - INNER JOIN Polaroids pl ON p.polaroidId = pl.PhotoCardMemberName - INNER JOIN photoCards pc ON pl.photoCardMemberName = pc.memberName;`; - con.query(sql, (err, result, fields)=>{ - if(err) throw err; - const r = { - hot10List: result // 여기에서 result는 변수명입니다. 원하는 결과 데이터로 대체되어야 합니다. + const hotPostsQuery = `SELECT postId, COUNT(likeQuant) AS likeCount + FROM Likes + GROUP BY postId + ORDER BY likeCount DESC + LIMIT 10;`; + + try { + const hotPosts = await new Promise((resolve, reject) => { + con.query(hotPostsQuery, (err, result, fields) => { + if (err) reject(err); + resolve(result); + console.log('1: ', result); + }); + }); + + const getPostDetails = async (postId) => { + const postDetailsQuery = `SELECT + pc.photocard, + pc.enterComp, + pc.groupName, + pc.memberName, + pc.albumName, + l.userId, + l.postId + FROM Likes l + INNER JOIN Posts p ON l.postId = p.postId + INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName + WHERE l.postId = ?;`; + + return new Promise((resolve, reject) => { + con.query(postDetailsQuery, [postId], (err, result, fields) => { + if (err) reject(err); + resolve(result); + console.log('2: ', result); + }); + }); }; - res.status(200).send(r); - console.log("hot10", result); - }) + + const finalResult = []; + + for (let i = 0; i < hotPosts.length; i++) { + const postDetails = await getPostDetails(hotPosts[i].postId); + finalResult.push(postDetails); + } + + console.log(finalResult); + res.status(200).send(finalResult); + console.log('3: ', finalResult); + } catch (error) { + console.error(error); + res.status(500).send("Internal Server Error"); + } }); + + //실시간도안 app.get('/mainpage/:userId/now5', async (req, res) => { const sql = ` SELECT p.postId, pl.polaroid FROM Posts p - INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId + INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId ORDER BY postId DESC LIMIT 5; ` @@ -126,11 +156,11 @@ app.get('/mainpage/:userId/randomArtist', async (req, res) => { const randomEnterComp = results[getRandomInt(results.length)].enterComp; //console.log("소속사",randomEnterComp); - const sql3 = `SELECT artistId, groupName, photo + const sql2 = `SELECT artistId, groupName, photo FROM artists WHERE enterComp = ?`; - con.query(sql3, [randomEnterComp], (err, result, fields) => { + con.query(sql2, [randomEnterComp], (err, result, fields) => { if (err) throw err; const r = { @@ -206,23 +236,6 @@ app.get('/community/:artistId/artistProfile', async (req, res) => { }) }); -//아티스트 즐겨찾기 수 조회 -app.get('/community/:artistId/favoriteQuant', async (req, res) => { - const artistId = req.params.artistId; - const sql = `SELECT - favoriteQuant - FROM Favorites - WHERE artistId = ? ;`; - con.query(sql,[artistId], (err, result, fields)=>{ - if(err) throw err; - const r = { - ArtistFavoriteQuant: result - }; - res.status(200).send(r); - //console.log("아티스트페이지", result); - }) -}); - //아티스트 즐겨찾기 수 조회 app.get('/community/:artistId/favoriteQuant', async (req, res) => { const artistId = req.params.artistId; @@ -326,8 +339,8 @@ app.get('/community/:memberName/membersPost', async (req, res) => { u.nickname FROM Posts p INNER JOIN users u ON p.userId = u.userId - INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId - INNER JOIN photoCards pc ON pc.memberName = pl.photoCardMemberName + INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pc.memberName = pl.photocardMemberName WHERE pc.memberName = ?; `; con.query(sql,[memberName], (err, result, fields)=>{ if(err) throw err; @@ -350,13 +363,13 @@ app.get('/community/:artistId/allPost', async (req, res) => { pc.groupName, pc.memberName, pc.albumName, - u.nickname + u.nickname, FROM artists a INNER JOIN photoCards pc ON pc.enterComp = a.enterComp - INNER JOIN Polaroids pl ON pc.memberName = pl.photoCardMemberName - INNER JOIN Posts p ON p.PolaroidPolaroidId = pl.polaroidId + INNER JOIN Polaroids pl ON pc.memberName = pl.photocardMemberName + INNER JOIN Posts p ON p.polaroidId = pl.polaroidId INNER JOIN users u ON p.userId = u.userId - WHERE artistId = 1; ` + WHERE artistId = ?; ` con.query(sql,[artistId], (err, result, fields)=>{ if(err) throw err; const r = { @@ -426,8 +439,8 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ const userId = req.params.userId; const sql = `SELECT pc.groupName FROM Posts p - INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId - INNER JOIN photoCards pc ON pl.photoCardMemberName = pc.memberName + INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName WHERE p.userId = ? HAVING COUNT(*) > 0; @@ -450,8 +463,8 @@ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ u.userId, u.nickname, l.likeQuant FROM Posts p - INNER JOIN Polaroids pl ON p.PolaroidPolaroidId = pl.polaroidId - INNER JOIN photoCards pc ON pl.photoCardMemberName = pc.memberName + INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName INNER JOIN users u ON u.userId = p.userId INNER JOIN artists a ON pc.groupName = a.groupName INNER JOIN Likes l ON p.postId = l.postId @@ -486,7 +499,7 @@ app.get('/mypage/:userId/myCollection/artistTab', async (req, res)=>{ const sql = `SELECT f.artistId, a.groupName FROM Favorites f INNER JOIN artists a ON f.artistId = a.artistId - WHERE userId = 1;`; + WHERE userId = ?;`; con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; const r = { From fa0f04de33c3a565ced9f68804e355d4a748552e Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 14 Nov 2023 15:56:25 +0900 Subject: [PATCH 21/66] =?UTF-8?q?MOD=20myprofile=20=EB=B0=B0=EC=97=B4->?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 4 ++-- main.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/db.js b/db.js index 5e35628..d881d18 100644 --- a/db.js +++ b/db.js @@ -586,7 +586,7 @@ const userTemp = User.build( email: 'ohnpol1004@naver.com', nickname: 'ohnpol1004', password: '1111', - avatar: '', + avatar: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/users/avatar.png', biography: '자기소개' }) @@ -612,7 +612,7 @@ const like1 = Like.build({ // await IU.save(); // await newJeans.save(); -// await userTemp.save(); +//await userTemp.save(); // await fav1.save(); diff --git a/main.js b/main.js index d27cbf1..ae34bb6 100644 --- a/main.js +++ b/main.js @@ -427,7 +427,7 @@ app.get('/mypage/:userId/myProfile', async(req, res)=>{ con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; const r = { - userProfileInfo : result + userProfileInfo : result[0] }; res.status(200).send(r); }) From 62b0d21e99e8dfe519f4c9d510faf13d43700261 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 14 Nov 2023 16:19:24 +0900 Subject: [PATCH 22/66] =?UTF-8?q?1.=20DB=20user=201=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=202.=20API=20=EB=A7=88=EC=9D=B4-=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 2 +- main.js | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/db.js b/db.js index d881d18..e6a9218 100644 --- a/db.js +++ b/db.js @@ -612,7 +612,7 @@ const like1 = Like.build({ // await IU.save(); // await newJeans.save(); -//await userTemp.save(); +await userTemp.save(); // await fav1.save(); diff --git a/main.js b/main.js index ae34bb6..6da6c64 100644 --- a/main.js +++ b/main.js @@ -423,13 +423,16 @@ app.get('/mypage/:userId/myProfile', async(req, res)=>{ const userId = req.params.userId; const sql = `SELECT userId, avatar, nickname, biography FROM users - WHERE userId = ?;`; + WHERE userId = ? + + ;`; con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; const r = { userProfileInfo : result[0] }; res.status(200).send(r); + console.log(result[0]); }) }); From d17c16527f6fe5c9447788511f493e3058d2956d Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 14 Nov 2023 17:15:17 +0900 Subject: [PATCH 23/66] MOD --- db.js | 2 +- main.js | 45 ++++++++++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/db.js b/db.js index e6a9218..442f53e 100644 --- a/db.js +++ b/db.js @@ -612,7 +612,7 @@ const like1 = Like.build({ // await IU.save(); // await newJeans.save(); -await userTemp.save(); +// await userTemp.save(); // await fav1.save(); diff --git a/main.js b/main.js index 6da6c64..eddf34e 100644 --- a/main.js +++ b/main.js @@ -93,7 +93,7 @@ app.get('/mainpage/:userId/hot10', async (req, res) => { pc.memberName, pc.albumName, l.userId, - l.postId + l.postId, / 좋아요 개수 FROM Likes l INNER JOIN Posts p ON l.postId = p.postId INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId @@ -440,13 +440,12 @@ app.get('/mypage/:userId/myProfile', async(req, res)=>{ //아티스트 탭 조회(포스트 유무 기준) app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ const userId = req.params.userId; - const sql = `SELECT pc.groupName + const sql = `SELECT pc.groupName, a.artistId FROM Posts p INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName + INNER JOIN artists a ON a.groupName = pc.groupName WHERE p.userId = ? - - HAVING COUNT(*) > 0; `; con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; @@ -461,17 +460,33 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ const userId = req.params.userId; const artistId = req.params.artistId; - const sql = `SELECT p.postId, pl.polaroid, p.postDateTime, - pc.memberName, pc.albumName, pc.enterComp, pc.groupName, - u.userId, u.nickname, - l.likeQuant - FROM Posts p - INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId - INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName - INNER JOIN users u ON u.userId = p.userId - INNER JOIN artists a ON pc.groupName = a.groupName - INNER JOIN Likes l ON p.postId = l.postId - WHERE p.userId = ? AND a.artistId = ?;`; + const sql = `SELECT p.postId, pl.polaroid, u.userId, u.nickname, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + COUNT(l.likeQuant) AS likeCount +FROM Posts p +INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId +INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName +INNER JOIN users u ON u.userId = p.userId +INNER JOIN artists a ON pc.groupName = a.groupName +LEFT JOIN Likes l ON p.postId = l.postId +WHERE p.userId = ? AND a.artistId = ? +GROUP BY p.postId, pl.polaroid, u.userId, u.nickname, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName + +UNION + +SELECT p.postId, pl.polaroid, u.userId, u.nickname, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + COUNT(l.likeQuant) AS likeCount +FROM Posts p +INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId +INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName +INNER JOIN users u ON u.userId = p.userId +INNER JOIN artists a ON pc.groupName = a.groupName +RIGHT JOIN Likes l ON p.postId = l.postId +WHERE p.userId = ? AND a.artistId = ? +GROUP BY p.postId, pl.polaroid, u.userId, u.nickname, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName;`; con.query(sql, [userId, artistId], (err, result, fields)=>{ if(err) throw err; const r = { From dda488ffd886ab99ed99af3ed1c4a23c2cba5d91 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 14 Nov 2023 20:37:08 +0900 Subject: [PATCH 24/66] MOD --- main.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index eddf34e..d9f463d 100644 --- a/main.js +++ b/main.js @@ -253,8 +253,19 @@ app.get('/community/:artistId/favoriteQuant', async (req, res) => { }); //아티스트 즐겨찾기 해제 -//app.delete - +app.delete('/community/:artistId/notFavorite/:userId', async(req,res)=>{ + const artistId = req.params.artistId; + const userId = req.params.userId; + const sql = `DELETE + FROM Likes + WHERE (artistId=? AND userID=?); + ` + con.query(sql, [artistId, userId], (err, result, fields)=>{ + if(err) throw err; + res.status(200).send(result); + console.log(result); + }) +}); //아티스트 내가 가진 컬렉션 조회 app.get('/community/:userId/collectionQuant', async (req, res) => { const userId = req.params.artistId; From d44dd91c6974b5c4c591490ce9aff3374fef2b29 Mon Sep 17 00:00:00 2001 From: urimJ Date: Wed, 15 Nov 2023 00:26:00 +0900 Subject: [PATCH 25/66] =?UTF-8?q?DB=20collectionId->albumName=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=99=B8=EB=9E=98=ED=82=A4=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/db.js b/db.js index 442f53e..1f44f77 100644 --- a/db.js +++ b/db.js @@ -287,10 +287,10 @@ Collection.belongsTo(Artist,{ // 컬렉션: 포토카드 = 일대다 Collection.hasMany(PhotoCard,{ - foreignKey: 'collectionId' + foreignKey: 'albumName' }); PhotoCard.belongsTo(Collection,{ - foreignKey: 'collectionId' + foreignKey: 'albumName' }); await sequelize.sync(); @@ -514,7 +514,7 @@ const pc1 = PhotoCard.build({ memberName: '민지', version: 'A', photocard: 'fff', - albumName: 'GET UP(The 2nd EP)', + albumName: "", enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', groupName: '뉴진스(New Jeans)', userId:1 From fd912c2ee646b795b2e07f0c86f11b21d046ad4d Mon Sep 17 00:00:00 2001 From: urimJ Date: Wed, 15 Nov 2023 00:39:34 +0900 Subject: [PATCH 26/66] =?UTF-8?q?API=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0-=ED=8F=AC=EC=8A=A4=ED=8A=B8=20=EC=A2=8B=EC=95=84?= =?UTF-8?q?=EC=9A=94=20=EA=B0=9C=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/main.js b/main.js index d9f463d..2467af3 100644 --- a/main.js +++ b/main.js @@ -362,6 +362,22 @@ app.get('/community/:memberName/membersPost', async (req, res) => { }) }); +// 아티스트 멤버 별 도안 좋아요 수 조회 +app.get('/community/:memberName/memberPost/:postId/like', async(req, res)=>{ + const memberName = req.params.memberName; + const postId = req.params.postId; + const sql = `SELECT postId, COUNT(postId) + FROM Likes + WHERE postId = ?`; + con.query( sql, [postId], (err, result, fields)=>{ + if(err) throw err; + const r = { + postLikeQuantList: result + } + res.status(200).send(r); + }) +}); + //아티스트 전체 도안 조회 app.get('/community/:artistId/allPost', async (req, res) => { const artistId = req.params.artistId; @@ -391,6 +407,23 @@ app.get('/community/:artistId/allPost', async (req, res) => { }) }); +// 아티스트 전체 도안 좋아요 수 조회 +app.get('/community/:artistId/allPost/:postId/like', async(req, res)=>{ + const artistId = req.params.artistId; + const postId = req.params.postId; + const sql = `SELECT postId, COUNT(postId) + FROM Likes + WHERE postId =?`; + con.query( sql, [postId], (err, result, fields)=>{ + if(err) throw err; + const r = { + allPostLikeQuantList: result + } + res.status(200).send(r); + }) +}); + + //도안 게시 - 컬렉션 선택 app.get('/community/:userId/uploadPost/collection', async (req, res) => { const artistId = req.params.artistId; From cd9723c9200e6f188065e0775fd6eba2fbe7c5bc Mon Sep 17 00:00:00 2001 From: urimJ Date: Wed, 15 Nov 2023 01:19:05 +0900 Subject: [PATCH 27/66] =?UTF-8?q?API=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/main.js b/main.js index 2467af3..7f1b559 100644 --- a/main.js +++ b/main.js @@ -229,7 +229,7 @@ app.get('/community/:artistId/artistProfile', async (req, res) => { con.query(sql,[artistId], (err, result, fields)=>{ if(err) throw err; const r = { - ArtistProfile: result + ArtistProfile: result[0] }; res.status(200).send(r); //console.log("아티스트페이지", result); @@ -245,7 +245,7 @@ app.get('/community/:artistId/favoriteQuant', async (req, res) => { con.query(sql,[artistId], (err, result, fields)=>{ if(err) throw err; const r = { - ArtistFavoriteQuant: result + ArtistFavoriteQuant: result[0] }; res.status(200).send(r); //console.log("아티스트페이지", result); @@ -275,7 +275,7 @@ app.get('/community/:userId/collectionQuant', async (req, res) => { con.query(sql,[userId], (err, result, fields)=>{ if(err) throw err; const r = { - collectionQuantThatIHave: result + collectionQuantThatIHave: result[0] }; res.status(200).send(r); //console.log("아티스트페이지", result); @@ -366,9 +366,9 @@ app.get('/community/:memberName/membersPost', async (req, res) => { app.get('/community/:memberName/memberPost/:postId/like', async(req, res)=>{ const memberName = req.params.memberName; const postId = req.params.postId; - const sql = `SELECT postId, COUNT(postId) + const sql = `SELECT postId, COUNT(*) AS likeQuant FROM Likes - WHERE postId = ?`; + WHERE postId = ?;`; con.query( sql, [postId], (err, result, fields)=>{ if(err) throw err; const r = { @@ -384,13 +384,13 @@ app.get('/community/:artistId/allPost', async (req, res) => { const sql = `SELECT a.artistId, p.postId, - pl.polaroid + pl.polaroid, p.userId, pc.enterComp, pc.groupName, pc.memberName, pc.albumName, - u.nickname, + u.nickname FROM artists a INNER JOIN photoCards pc ON pc.enterComp = a.enterComp INNER JOIN Polaroids pl ON pc.memberName = pl.photocardMemberName @@ -411,9 +411,9 @@ app.get('/community/:artistId/allPost', async (req, res) => { app.get('/community/:artistId/allPost/:postId/like', async(req, res)=>{ const artistId = req.params.artistId; const postId = req.params.postId; - const sql = `SELECT postId, COUNT(postId) + const sql = `SELECT postId, COUNT(*) AS likeQuant FROM Likes - WHERE postId =?`; + WHERE postId =?;`; con.query( sql, [postId], (err, result, fields)=>{ if(err) throw err; const r = { From da2591c2a7823db1860e1aaca6fff02395dd9b95 Mon Sep 17 00:00:00 2001 From: urimJ Date: Wed, 15 Nov 2023 10:59:26 +0900 Subject: [PATCH 28/66] =?UTF-8?q?API=20=EB=A9=A4=EB=B2=84=EB=B3=84=20?= =?UTF-8?q?=EC=82=AC=EC=A7=84=20=EC=A1=B0=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/main.js b/main.js index 7f1b559..53905de 100644 --- a/main.js +++ b/main.js @@ -252,6 +252,7 @@ app.get('/community/:artistId/favoriteQuant', async (req, res) => { }) }); + //아티스트 즐겨찾기 해제 app.delete('/community/:artistId/notFavorite/:userId', async(req,res)=>{ const artistId = req.params.artistId; @@ -317,17 +318,16 @@ app.get('/community/:artistId/members', async (req, res) => { if (result.length > 0) { const memberNum = result[0].memberNum; const memberPhoto = JSON.parse(result[0].memberPhoto); // memberPhoto는 배열이 아니라 ''문자열!! - console.log('result',result); - const members = []; - for (let i = 0; i < memberNum; i++) { - const nameAndPhoto = { - name: memberPhoto[i].name, - memPhoto: memberPhoto[i].memPhoto - }; - members.push(nameAndPhoto); - } - - const r = { members }; // Wrap the members array in an object + console.log('memphoto',memberPhoto); + // const members = []; + // for (let i = 0; i < memberNum; i++) { + // const nameAndPhoto = { + // name: memberPhoto[i].name, + // memPhoto: memberPhoto[i].memPhoto + // }; + // members.push(nameAndPhoto); + // } + const r = { memberPhoto }; // Wrap the members array in an object res.status(200).send(r); console.log("멤버별 이름과 사진", members); } else { From aff7bdfc7217f94327cdd52990b200448f59eb7f Mon Sep 17 00:00:00 2001 From: urimJ Date: Wed, 15 Nov 2023 11:38:08 +0900 Subject: [PATCH 29/66] =?UTF-8?q?API=20=EC=95=84=ED=8B=B0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=ED=94=84=EB=A1=9C=ED=95=84=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 24 ++---------------------- mysql.js | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 mysql.js diff --git a/main.js b/main.js index 53905de..23fdd31 100644 --- a/main.js +++ b/main.js @@ -1,10 +1,8 @@ import bodyParser from 'body-parser'; import express from 'express'; import cors from 'cors'; -import { swaggerUi, specs } from './modules/swagger.js' -import mysql from 'mysql'; -import { config } from 'dotenv'; -config(); +import { swaggerUi, specs } from './modules/swagger.js'; +import con from './mysql.js'; // import { Artist, // Favorite, // Collection, @@ -24,24 +22,7 @@ const corsOptions = { app.use(cors(corsOptions)); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs)) -const con = mysql.createConnection({ - host : process.env.DB_HOST, - user : process.env.DB_USER, - password : process.env.DB_PASSWORD, - database : process.env.DB_DATABASE -}); - -con.connect(); - -con.query('SELECT * from users', (error, results, fields)=> { - if (error){ - console.log(error); - }; - console.log(results); - //console.log(process.env.DB_HOST); -}); -//connection.end(); const getRandomInt = (max) => { return Math.floor(Math.random() * max); } @@ -224,7 +205,6 @@ app.get('/community/:artistId/artistProfile', async (req, res) => { artists.enterComp, artists.collectionQuant FROM artists - INNER JOIN Favorites f ON artists.artistId = f.artistId WHERE artists.artistId = ? `; con.query(sql,[artistId], (err, result, fields)=>{ if(err) throw err; diff --git a/mysql.js b/mysql.js new file mode 100644 index 0000000..d2dfed1 --- /dev/null +++ b/mysql.js @@ -0,0 +1,24 @@ +import mysql from 'mysql'; +import { config } from 'dotenv'; +config(); + +const con = mysql.createConnection({ + host : process.env.DB_HOST, + user : process.env.DB_USER, + password : process.env.DB_PASSWORD, + database : process.env.DB_DATABASE +}); + +con.connect(); + +con.query('SELECT * from users', (error, results, fields)=> { + if (error){ + console.log(error); + }; + console.log(results); + //console.log(process.env.DB_HOST); +}); + +//connection.end(); + +export default con; \ No newline at end of file From 967ed31a5d8a6b2e0665281fdc869b4a4585b1ef Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 16 Nov 2023 10:31:30 +0900 Subject: [PATCH 30/66] API --- main.js | 102 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 32 deletions(-) diff --git a/main.js b/main.js index 23fdd31..a803fa3 100644 --- a/main.js +++ b/main.js @@ -73,8 +73,7 @@ app.get('/mainpage/:userId/hot10', async (req, res) => { pc.groupName, pc.memberName, pc.albumName, - l.userId, - l.postId, / 좋아요 개수 + l.postId, FROM Likes l INNER JOIN Posts p ON l.postId = p.postId INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId @@ -195,43 +194,81 @@ app.get('/artistpage/allArtist', async (req, res) => { -//community page -//아티스트 프로필 조회 +// 아티스트 프로필 조회 +const artistProfile = (artistId) => { + return new Promise((resolve, reject) => { + con.query( + `SELECT + artists.groupName, + artists.photo, + artists.enterComp, + artists.collectionQuant + FROM artists + WHERE artists.artistId = ? + ;`, [artistId], (err, result) => { + if (err) { + reject(err); + } else { + resolve(result[0]); + } + } + ); + }); +}; + +// 아티스트 즐겨찾기 수 조회 +const artistFavoriteQuant = (artistId) => { + return new Promise((resolve, reject) => { + con.query( + `SELECT COUNT(*) AS favoriteQuant + FROM Favorites + WHERE artistId = ?; `, [artistId], (err, result) => { + if (err) { + reject(err); + } else { + resolve(result[0]); + } + } + ); + }); +}; + app.get('/community/:artistId/artistProfile', async (req, res) => { - const artistId = req.params.artistId; - const sql = `SELECT - artists.groupName, - artists.photo, - artists.enterComp, - artists.collectionQuant - FROM artists - WHERE artists.artistId = ? `; - con.query(sql,[artistId], (err, result, fields)=>{ - if(err) throw err; - const r = { - ArtistProfile: result[0] - }; - res.status(200).send(r); - //console.log("아티스트페이지", result); - }) -}); + const artistId = req.params.artistId; + + try { + const profile = await artistProfile(artistId); + const favoriteQuant = await artistFavoriteQuant(artistId); + const result = {...profile, ...favoriteQuant}; -//아티스트 즐겨찾기 수 조회 -app.get('/community/:artistId/favoriteQuant', async (req, res) => { - const artistId = req.params.artistId; - const sql = `SELECT COUNT(*) - FROM Favorites - WHERE artistId = ?; `; - con.query(sql,[artistId], (err, result, fields)=>{ - if(err) throw err; const r = { - ArtistFavoriteQuant: result[0] + artistProfile: result }; + res.status(200).send(r); - //console.log("아티스트페이지", result); - }) + console.log('r', r); + } catch (error) { + console.error('에러:', error); + res.status(500).send('내부 서버 오류'); + } }); +// //아티스트 즐겨찾기 수 조회 +// app.get('/community/:artistId/favoriteQuant', async (req, res) => { +// const artistId = req.params.artistId; +// const sql = `SELECT COUNT(*) AS favoriteQuant +// FROM Favorites +// WHERE artistId = ?; `; +// con.query(sql,[artistId], (err, result, fields)=>{ +// if(err) throw err; +// const r = { +// ArtistFavoriteQuant: result[0] +// }; +// res.status(200).send(r); +// //console.log("아티스트페이지", result); +// }) +// }); + //아티스트 즐겨찾기 해제 app.delete('/community/:artistId/notFavorite/:userId', async(req,res)=>{ @@ -247,6 +284,7 @@ app.delete('/community/:artistId/notFavorite/:userId', async(req,res)=>{ console.log(result); }) }); + //아티스트 내가 가진 컬렉션 조회 app.get('/community/:userId/collectionQuant', async (req, res) => { const userId = req.params.artistId; From 54cf0ee18f98a1024ad6ed08650cbf7e0ac72eae Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 16 Nov 2023 17:18:36 +0900 Subject: [PATCH 31/66] MOD --- db.js | 55 ++++++++++++++++++++++++----------------- main.js | 77 +++++++++++++++++++++++++++++---------------------------- 2 files changed, 72 insertions(+), 60 deletions(-) diff --git a/db.js b/db.js index 1f44f77..daa5669 100644 --- a/db.js +++ b/db.js @@ -519,14 +519,14 @@ const pc1 = PhotoCard.build({ groupName: '뉴진스(New Jeans)', userId:1 }) -// const pc2 = PhotoCard.build({ -// memberName: '하니', -// version: 'A', -// photocard: 'ff', -// albumName: 'GET UP(The 2nd EP)', -// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', -// groupName: '뉴진스(New Jeans)' -// }) +const pc2 = PhotoCard.build({ + memberName: '민지', + version: 'A', + photocard: 'ff', + albumName: '', + enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', + groupName: '뉴진스(New Jeans)' +}) // const pc3 = PhotoCard.build({ // memberName: '지민', // version: 'A', @@ -541,11 +541,11 @@ const pol1 = Polaroid.build({ polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', saveDateTime: '2023-11-12 00:00:01' }) -// const pol2 = Polaroid.build({ -// polaroidId:2, -// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', -// saveDateTime: '2023-11-12 00:00:22' -// }) +const pol2 = Polaroid.build({ + polaroidId:2, + polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', + saveDateTime: '2023-11-12 00:00:22' +}) // const pol3 = Polaroid.build({ // polaroidId:3, // polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', @@ -561,14 +561,14 @@ const post1 = Post.build({ polaroidId: 1 }) -// const post2 = Post.build({ -// postId:2, -// post:'', -// postDateTime: '2023-11-23 00:00:22' , -// userId: 1, +const post2 = Post.build({ + postId:2, + post:'', + postDateTime: '2023-11-23 00:00:22' , + userId: 2, -// PolaroidPolaroidId: 2 -// }) + PolaroidPolaroidId: 2 +}) // const post3 = Post.build({ // postId:3, @@ -590,6 +590,16 @@ const userTemp = User.build( biography: '자기소개' }) +const userTemp2 = User.build( + { + // userId: 1, + email: 'user2@naver.com', + nickname: 'user2', + password: '2222', + avatar: 'https://ohnpol.s3.ap-northeast-2.amazonaws.com/users/avatar.png', + biography: 'user2입니다' +}) + //-------favorite---------- const fav1 = Favorite.build( @@ -613,15 +623,16 @@ const like1 = Like.build({ // await newJeans.save(); // await userTemp.save(); +//await userTemp2.save(); // await fav1.save(); // await pc1.save(); -// // await pc2.save(); +//await pc2.save(); // // await pc3.save(); // await pol1.save(); -// // await pol2.save(); +// await pol2.save(); // // await pol3.save(); // await post1.save(); // await post2.save(); diff --git a/main.js b/main.js index a803fa3..488f05e 100644 --- a/main.js +++ b/main.js @@ -286,18 +286,19 @@ app.delete('/community/:artistId/notFavorite/:userId', async(req,res)=>{ }); //아티스트 내가 가진 컬렉션 조회 -app.get('/community/:userId/collectionQuant', async (req, res) => { - const userId = req.params.artistId; - const sql = `SELECT COUNT(*) - FROM UserCollections - WHERE userId = ?; `; - con.query(sql,[userId], (err, result, fields)=>{ +app.get('/community/:artistId/:userId/collectionQuant', async (req, res) => { + const userId = req.params.userId; + const artistId = req.params.artistId; + const sql = `SELECT COUNT(*) AS collectionQuant + FROM UserCollections uc + INNER JOIN collections c ON uc.albumName = c.albumName + WHERE uc.userId = ? AND c.artistId = ?; `; + con.query(sql,[userId, artistId], (err, result, fields)=>{ if(err) throw err; - const r = { - collectionQuantThatIHave: result[0] - }; - res.status(200).send(r); - //console.log("아티스트페이지", result); + // const r = { + // collectionQuantThatIHave: result[0] + // }; + res.status(200).send(result[0]); }) }); @@ -522,33 +523,15 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ const userId = req.params.userId; const artistId = req.params.artistId; - const sql = `SELECT p.postId, pl.polaroid, u.userId, u.nickname, - pc.enterComp, pc.groupName, pc.memberName, pc.albumName, - COUNT(l.likeQuant) AS likeCount -FROM Posts p -INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId -INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName -INNER JOIN users u ON u.userId = p.userId -INNER JOIN artists a ON pc.groupName = a.groupName -LEFT JOIN Likes l ON p.postId = l.postId -WHERE p.userId = ? AND a.artistId = ? -GROUP BY p.postId, pl.polaroid, u.userId, u.nickname, - pc.enterComp, pc.groupName, pc.memberName, pc.albumName - -UNION - -SELECT p.postId, pl.polaroid, u.userId, u.nickname, - pc.enterComp, pc.groupName, pc.memberName, pc.albumName, - COUNT(l.likeQuant) AS likeCount -FROM Posts p -INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId -INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName -INNER JOIN users u ON u.userId = p.userId -INNER JOIN artists a ON pc.groupName = a.groupName -RIGHT JOIN Likes l ON p.postId = l.postId -WHERE p.userId = ? AND a.artistId = ? -GROUP BY p.postId, pl.polaroid, u.userId, u.nickname, - pc.enterComp, pc.groupName, pc.memberName, pc.albumName;`; + const sql = `SELECT DISTINCT p.postId, p.postDateTime, pl.polaroid, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + u.nickname, u.userId + FROM Posts p + INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId + INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName + INNER JOIN artists a ON a.groupName = pc.groupName + INNER JOIN users u ON p.userId = u.userId + WHERE p.userId = ? AND a.artistId=?;`; con.query(sql, [userId, artistId], (err, result, fields)=>{ if(err) throw err; const r = { @@ -559,6 +542,24 @@ GROUP BY p.postId, pl.polaroid, u.userId, u.nickname, }); }); +//아티스트 별 게시 도안 좋아요 개수 +app.get('/mypage/:userId/myPost/:artistId/:postId/like', async(req, res)=>{ + const userId = req.params.userId; + const artistId = req.params.artistId; + const postId = req.params.postId; + const sql = `SELECT COUNT(*) AS LikeQuant + + FROM Likes + WHERE postId = ?;`; + con.query(sql, [postId], (err, result, fields)=>{ + if(err) throw err; + // const r = { + // postOfArtistList: result + // } + res.status(200).send(result[0]); + }); +}); + //포스트 삭제하기 app.delete('/mypage/:userId/myPost/delete/:postId', async (req, res)=>{ const postId = req.params.postId; From b246dcb0109a123ad7783371e3fc090aebd03218 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 16 Nov 2023 17:35:20 +0900 Subject: [PATCH 32/66] MOD --- main.js | 123 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 69 insertions(+), 54 deletions(-) diff --git a/main.js b/main.js index 488f05e..7aeb6ed 100644 --- a/main.js +++ b/main.js @@ -195,63 +195,63 @@ app.get('/artistpage/allArtist', async (req, res) => { // 아티스트 프로필 조회 -const artistProfile = (artistId) => { - return new Promise((resolve, reject) => { - con.query( - `SELECT - artists.groupName, - artists.photo, - artists.enterComp, - artists.collectionQuant - FROM artists - WHERE artists.artistId = ? - ;`, [artistId], (err, result) => { - if (err) { - reject(err); - } else { - resolve(result[0]); - } - } - ); - }); -}; - -// 아티스트 즐겨찾기 수 조회 -const artistFavoriteQuant = (artistId) => { - return new Promise((resolve, reject) => { - con.query( - `SELECT COUNT(*) AS favoriteQuant - FROM Favorites - WHERE artistId = ?; `, [artistId], (err, result) => { - if (err) { - reject(err); - } else { - resolve(result[0]); - } - } - ); - }); -}; +// const artistProfile = (artistId) => { +// return new Promise((resolve, reject) => { +// con.query( +// `SELECT +// artists.groupName, +// artists.photo, +// artists.enterComp, +// artists.collectionQuant +// FROM artists +// WHERE artists.artistId = ? +// ;`, [artistId], (err, result) => { +// if (err) { +// reject(err); +// } else { +// resolve(result[0]); +// } +// } +// ); +// }); +// }; + +// // 아티스트 즐겨찾기 수 조회 +// const artistFavoriteQuant = (artistId) => { +// return new Promise((resolve, reject) => { +// con.query( +// `SELECT COUNT(*) AS favoriteQuant +// FROM Favorites +// WHERE artistId = ?; `, [artistId], (err, result) => { +// if (err) { +// reject(err); +// } else { +// resolve(result[0]); +// } +// } +// ); +// }); +// }; -app.get('/community/:artistId/artistProfile', async (req, res) => { - const artistId = req.params.artistId; +// app.get('/community/:artistId/artistProfile', async (req, res) => { +// const artistId = req.params.artistId; - try { - const profile = await artistProfile(artistId); - const favoriteQuant = await artistFavoriteQuant(artistId); - const result = {...profile, ...favoriteQuant}; +// try { +// const profile = await artistProfile(artistId); +// const favoriteQuant = await artistFavoriteQuant(artistId); +// const result = {...profile, ...favoriteQuant}; - const r = { - artistProfile: result - }; +// const r = { +// artistProfile: result +// }; - res.status(200).send(r); - console.log('r', r); - } catch (error) { - console.error('에러:', error); - res.status(500).send('내부 서버 오류'); - } -}); +// res.status(200).send(r); +// console.log('r', r); +// } catch (error) { +// console.error('에러:', error); +// res.status(500).send('내부 서버 오류'); +// } +// }); // //아티스트 즐겨찾기 수 조회 // app.get('/community/:artistId/favoriteQuant', async (req, res) => { @@ -548,7 +548,6 @@ app.get('/mypage/:userId/myPost/:artistId/:postId/like', async(req, res)=>{ const artistId = req.params.artistId; const postId = req.params.postId; const sql = `SELECT COUNT(*) AS LikeQuant - FROM Likes WHERE postId = ?;`; con.query(sql, [postId], (err, result, fields)=>{ @@ -609,6 +608,22 @@ app.get('/mypage/:userId/myCollection/:artistId/active', async (req, res)=>{ }) }); +//비활성화 컬렉션 정보 조회 +app.get('/mypage/:userId/myCollection/:artistId/notActive', async(req, res)=>{ + const userId = req.params.userId; + const artistId = req.params.artistId; +}); + +//선택한 컬렉션 정보 조회 +app.get('/mypage/:userId/myCollection/:artistId/:collectionId', async (req, res)=>{ + const userId = req.params.userId; + const artistId = req.params.artistId; + const collectionId = req.params.collectionId; + const sql = `SELECT ;`; + +}); + + app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); From e9315c8d513414f3d474d3e7324bea025b8275b7 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 16 Nov 2023 17:45:29 +0900 Subject: [PATCH 33/66] MOD --- main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 7aeb6ed..8433c53 100644 --- a/main.js +++ b/main.js @@ -503,12 +503,12 @@ app.get('/mypage/:userId/myProfile', async(req, res)=>{ //아티스트 탭 조회(포스트 유무 기준) app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ const userId = req.params.userId; - const sql = `SELECT pc.groupName, a.artistId + const sql = `SELECT DISTINCT pc.groupName, a.artistId FROM Posts p INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName INNER JOIN artists a ON a.groupName = pc.groupName - WHERE p.userId = ? + WHERE p.userId = ?; `; con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; From dd4bbea948007b167bef6d844a4bb6fadb2c061d Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 16 Nov 2023 17:51:13 +0900 Subject: [PATCH 34/66] MOD --- main.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/main.js b/main.js index 8433c53..1a58574 100644 --- a/main.js +++ b/main.js @@ -268,7 +268,40 @@ app.get('/artistpage/allArtist', async (req, res) => { // //console.log("아티스트페이지", result); // }) // }); +app.get('/community/:artistId/artistProfile', async (req, res) => { + const artistId = req.params.artistId; + const sql = `SELECT + artists.groupName, + artists.photo, + artists.enterComp, + artists.collectionQuant + FROM artists + WHERE artists.artistId = ? `; + con.query(sql,[artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + ArtistProfile: result[0] + }; + res.status(200).send(r); + //console.log("아티스트페이지", result); + }) +}); +//아티스트 즐겨찾기 수 조회 +app.get('/community/:artistId/favoriteQuant', async (req, res) => { + const artistId = req.params.artistId; + const sql = `SELECT COUNT(*) + FROM Favorites + WHERE artistId = ?; `; + con.query(sql,[artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + ArtistFavoriteQuant: result[0] + }; + + res.status(200).send(r); + }); +}); //아티스트 즐겨찾기 해제 app.delete('/community/:artistId/notFavorite/:userId', async(req,res)=>{ From 8d044cf8426a9f7dd24ff60de17cc09b8212a71e Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 16 Nov 2023 18:11:08 +0900 Subject: [PATCH 35/66] MOD --- main.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/main.js b/main.js index 1a58574..349c2d2 100644 --- a/main.js +++ b/main.js @@ -192,8 +192,6 @@ app.get('/artistpage/allArtist', async (req, res) => { }); }); - - // 아티스트 프로필 조회 // const artistProfile = (artistId) => { // return new Promise((resolve, reject) => { @@ -268,6 +266,7 @@ app.get('/artistpage/allArtist', async (req, res) => { // //console.log("아티스트페이지", result); // }) // }); +// 아티스트 프로필 조회 app.get('/community/:artistId/artistProfile', async (req, res) => { const artistId = req.params.artistId; const sql = `SELECT @@ -290,16 +289,16 @@ app.get('/community/:artistId/artistProfile', async (req, res) => { //아티스트 즐겨찾기 수 조회 app.get('/community/:artistId/favoriteQuant', async (req, res) => { const artistId = req.params.artistId; - const sql = `SELECT COUNT(*) + const sql = `SELECT COUNT(*) AS favoriteQuant FROM Favorites WHERE artistId = ?; `; con.query(sql,[artistId], (err, result, fields)=>{ if(err) throw err; - const r = { - ArtistFavoriteQuant: result[0] - }; + // const r = { + // ArtistFavoriteQuant: result[0] + // }; - res.status(200).send(r); + res.status(200).send(result[0]); }); }); @@ -656,7 +655,10 @@ app.get('/mypage/:userId/myCollection/:artistId/:collectionId', async (req, res) }); +// 포스트 좋아요 누르기 +app.get('/post/:userId/:postId/updateLike', async(req, res)=>{ +}); app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); From 5a2b9d793a02369ff5a77cd80bfe00f28012f6de Mon Sep 17 00:00:00 2001 From: urimJ Date: Fri, 17 Nov 2023 03:31:38 +0900 Subject: [PATCH 36/66] MOD --- main.js | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/main.js b/main.js index 349c2d2..32526ee 100644 --- a/main.js +++ b/main.js @@ -20,6 +20,7 @@ const corsOptions = { credentials: true, }; app.use(cors(corsOptions)); +app.use(express.json()); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs)) @@ -391,7 +392,7 @@ app.get('/community/:artistId/members', async (req, res) => { app.get('/community/:memberName/membersPost', async (req, res) => { const memberName = req.params.memberName; const sql = `SELECT - p.postId, + DISTINCT p.postId, pl.polaroid, p.userId, pc.enterComp, @@ -432,7 +433,7 @@ app.get('/community/:memberName/memberPost/:postId/like', async(req, res)=>{ //아티스트 전체 도안 조회 app.get('/community/:artistId/allPost', async (req, res) => { const artistId = req.params.artistId; - const sql = `SELECT + const sql = `SELECT DISTINCT a.artistId, p.postId, pl.polaroid, @@ -656,8 +657,33 @@ app.get('/mypage/:userId/myCollection/:artistId/:collectionId', async (req, res) }); // 포스트 좋아요 누르기 -app.get('/post/:userId/:postId/updateLike', async(req, res)=>{ - +app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ + try { + const userId = req.params.userId; + const postId = req.params.postId; + + // Use prepared statement to prevent SQL injection + const sql = 'INSERT INTO Likes (likeQuant, userId, postId) VALUES (1, ?, ?)'; + con.query(sql, [userId, postId], (err, result, fields) => { + if (err) { + // Handle SQL error + console.error('SQL error:', err); + res.status(500).send('Internal Server Error'); + return; + } + + // Send a meaningful response to the client + res.status(201).send({ + success: true, + message: 'Like added successfully', + data: result, + }); + }); + } catch (error) { + // Handle other errors + console.error('Error:', error); + res.status(500).send('Internal Server Error'); + } }); app.listen(port, ()=>{ From a4c1df2552582d395b09ddfaacf94cfb90260c9a Mon Sep 17 00:00:00 2001 From: urimJ Date: Sat, 18 Nov 2023 02:22:28 +0900 Subject: [PATCH 37/66] =?UTF-8?q?DB=20UserPhotocard=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=20photocard=EC=BB=AC=EB=9F=BC=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=99=B8=EB=9E=98=ED=82=A4=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 6 +++- main.js | 96 ++++++++++++++++++++++++++------------------------------- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/db.js b/db.js index daa5669..12f2739 100644 --- a/db.js +++ b/db.js @@ -345,7 +345,11 @@ User.belongsToMany(PhotoCard, { }); PhotoCard.belongsToMany(User, { through: 'UserPhotoCard', - foreignKey: 'photoCardId', + foreignKey: 'memberName', +}); +PhotoCard.belongsToMany(User, { + through: 'UserPhotoCard', + foreignKey: 'photocard', }); await sequelize.sync(); diff --git a/main.js b/main.js index 32526ee..64b37ea 100644 --- a/main.js +++ b/main.js @@ -52,60 +52,39 @@ app.get('/mainpage/:userId/favArtist', async (req, res) => { //hot10 app.get('/mainpage/:userId/hot10', async (req, res) => { - const hotPostsQuery = `SELECT postId, COUNT(likeQuant) AS likeCount + const sql = `SELECT postId, COUNT(likeQuant) AS likeCount FROM Likes GROUP BY postId ORDER BY likeCount DESC LIMIT 10;`; - - try { - const hotPosts = await new Promise((resolve, reject) => { - con.query(hotPostsQuery, (err, result, fields) => { - if (err) reject(err); - resolve(result); - console.log('1: ', result); - }); - }); - - const getPostDetails = async (postId) => { - const postDetailsQuery = `SELECT - pc.photocard, - pc.enterComp, - pc.groupName, - pc.memberName, - pc.albumName, - l.postId, - FROM Likes l - INNER JOIN Posts p ON l.postId = p.postId - INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId - INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName - WHERE l.postId = ?;`; - - return new Promise((resolve, reject) => { - con.query(postDetailsQuery, [postId], (err, result, fields) => { - if (err) reject(err); - resolve(result); - console.log('2: ', result); - }); - }); - }; - - const finalResult = []; - - for (let i = 0; i < hotPosts.length; i++) { - const postDetails = await getPostDetails(hotPosts[i].postId); - finalResult.push(postDetails); + con.query(sql, (err, result, fields)=>{ + if(err) throw err; + const r = { + hot10List: result } - - console.log(finalResult); - res.status(200).send(finalResult); - console.log('3: ', finalResult); - } catch (error) { - console.error(error); - res.status(500).send("Internal Server Error"); - } + res.status(200).send(r); + }) }); +app.get('/mainpage/:userId/hot10/:postId/like', async(req, res)=>{ + const postId = req.params.postId; + const sql = `SELECT DISTINCT l.postId, l.likeQuant, pl.polaroid, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + p.userId, u.nickname + FROM Likes l + INNER JOIN Posts p ON l.postId = p.postId + INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId + INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName + INNER JOIN users u ON u.userId = p.userId + WHERE l.postId = ?;`; + con.query(sql, [postId], (err, result, fields)=>{ + if(err) throw err; + const r = { + hot10LikeList : result + } + res.status(200).send(r); + }) +}) //실시간도안 app.get('/mainpage/:userId/now5', async (req, res) => { @@ -412,6 +391,7 @@ app.get('/community/:memberName/membersPost', async (req, res) => { }; res.status(200).send(r); }) + console.log(req.params); }); // 아티스트 멤버 별 도안 좋아요 수 조회 @@ -627,11 +607,11 @@ app.get('/mypage/:userId/myCollection/artistTab', async (req, res)=>{ app.get('/mypage/:userId/myCollection/:artistId/active', async (req, res)=>{ const userId = req.params.userId; const artistId = req.params.artistId; - const sql = `SELECT albumJacket, albumName, activeDateTime, photoCardQuant + const sql = `SELECT c.albumJacket, c.albumName, c.activeDateTime, c.photoCardQuant FROM collections c INNER JOIN UserCollections uc ON uc.albumName = c.albumName - INNER JOIN users a ON u.userId = uc.userId - WHERE userId = ? AND artistId = ?;`; + INNER JOIN users u ON u.userId = uc.userId + WHERE uc.userId = ? AND c.artistId = ?;`; con.query(sql, [userId, artistId], (err, result, fields)=>{ if(err) throw err; const r = { @@ -641,10 +621,20 @@ app.get('/mypage/:userId/myCollection/:artistId/active', async (req, res)=>{ }) }); -//비활성화 컬렉션 정보 조회 -app.get('/mypage/:userId/myCollection/:artistId/notActive', async(req, res)=>{ - const userId = req.params.userId; +//전체 컬렉션 정보 조회 +app.get('/mypage/:userId/myCollection/:artistId/allCollection', async(req, res)=>{ + //const userId = req.params.userId; const artistId = req.params.artistId; + const sql = `SELECT DISTINCT c.albumJacket, c.albumName + FROM collections c + WHERE c.artistId = ?;`; + con.query(sql, [artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + activeCollectionList: result + } + res.status(200).send(r); + }) }); //선택한 컬렉션 정보 조회 From d939249f19552e7ab2ab840756a5b98b9f107f88 Mon Sep 17 00:00:00 2001 From: urimJ Date: Sat, 18 Nov 2023 02:29:11 +0900 Subject: [PATCH 38/66] =?UTF-8?q?DB=20UserPhorocard=20photocardQuant?= =?UTF-8?q?=EB=A1=9C=20=EC=98=AC=EB=B0=94=EB=A5=B4=EA=B2=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db.js b/db.js index 12f2739..5c29b36 100644 --- a/db.js +++ b/db.js @@ -327,7 +327,7 @@ class UserPhotoCard extends Model { } UserPhotoCard.init( { - collectionQuant: { + photocardQuant: { type: DataTypes.INTEGER, // autoIncrement: true, } From b94a6f9703b28a1bfd7b8e46a53b727372307f8a Mon Sep 17 00:00:00 2001 From: urimJ Date: Sat, 18 Nov 2023 02:46:18 +0900 Subject: [PATCH 39/66] =?UTF-8?q?API=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=82=B4=20=EB=8F=84=EC=95=88,=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=A0=9C=EC=99=B8=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index 64b37ea..5ac40bc 100644 --- a/main.js +++ b/main.js @@ -631,21 +631,51 @@ app.get('/mypage/:userId/myCollection/:artistId/allCollection', async(req, res)= con.query(sql, [artistId], (err, result, fields)=>{ if(err) throw err; const r = { - activeCollectionList: result + allCollectionList: result } res.status(200).send(r); }) }); -//선택한 컬렉션 정보 조회 -app.get('/mypage/:userId/myCollection/:artistId/:collectionId', async (req, res)=>{ +//선택한 컬렉션 전체 포토카드 정보 조회 +app.get('/mypage/:userId/myCollection/:artistId/:collectionId/allPhotocard', async (req, res)=>{ const userId = req.params.userId; - const artistId = req.params.artistId; - const collectionId = req.params.collectionId; - const sql = `SELECT ;`; + //const artistId = req.params.artistId; + const albumName = req.params.albumName; + const sql = `SELECT pc.photocard, pc.version, pc.memberName, upc.photocardQuant + FROM UserCollections uc + INNER JOIN collections c ON uc.albumName = c.albumName + INNER JOIN photoCards pc ON pc.albumName = uc.albumName + INNER JOIN UserPhotoCards upc ON uc.userId = upc.userId + WHERE uc.userId =? AND uc.albumName=?;`; + con.query(sql, [userId, albumName], (err, result, fields)=>{ + if(err) throw err; + const r = { + collectionPhotocardList: result + } + res.status(200).send(r); + }) }); +//선택한 컬렉션 활성화된 포토카드 정보 조회 +app.get('/mypage/:userId/myCollection/:artistId/:collectionId/activePhotocard', async (req, res)=>{ + const userId = req.params.userId; + //const artistId = req.params.artistId; + //const albumName = req.params.albumName; + const sql = `SELECT upc.photocard, pc.version, pc.memberName + FROM UserPhotoCards upc + INNER JOIN photoCards pc ON pc.photocard = upc.photocard + WHERE upc.userId =?;`; + con.query(sql, [userId], (err, result, fields)=>{ + if(err) throw err; + const r = { + ActivePhotocardList: result + } + res.status(200).send(r); + }) +}); + // 포스트 좋아요 누르기 app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ try { From 5fcf000b34c961e655950a84f038f3d526fe3d97 Mon Sep 17 00:00:00 2001 From: urimJ Date: Sun, 19 Nov 2023 00:16:37 +0900 Subject: [PATCH 40/66] MOD --- controller/polaroids.js | 39 ++++++++++++++++++++++++++++++++++++++ main.js | 11 ++++++++++- s3.js => modules/multer.js | 7 ++----- routes/polaroids.js | 12 ++++++++++++ 4 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 controller/polaroids.js rename s3.js => modules/multer.js (70%) create mode 100644 routes/polaroids.js diff --git a/controller/polaroids.js b/controller/polaroids.js new file mode 100644 index 0000000..2ffbd82 --- /dev/null +++ b/controller/polaroids.js @@ -0,0 +1,39 @@ +import multer from "multer"; +import upload from "../modules/multer"; + +const util = { + success: (status, message, data)=>{ + return { + status: status, + success: true, + message: message, + data: data + } + }, + fail: (status, message)=>{ + return{ + status: status, + success: false, + message: message + } + } +} + +export const uploadImage = async (req, res) => { + console.log(req.file); + const image = req.file.location; + if (image === undefined) { + return res.status(400).send(util.fail(400, "이미지가 존재하지 않습니다.")); + } + res.status(200).send(util.success(200, "요청 성공", image)); +}; + +// export const uploadImages = async (req, res) => { +// const image = req.files; +// const path = image.map(img => img.location); +// if (image === undefined) { +// return res.status(400).send(util.fail(400, "이미지가 존재하지 않습니다.")); +// } +// res.status(200).send(util.success(200, "요청 성공", path)); +// }; + diff --git a/main.js b/main.js index 5ac40bc..3b5a936 100644 --- a/main.js +++ b/main.js @@ -3,6 +3,7 @@ import express from 'express'; import cors from 'cors'; import { swaggerUi, specs } from './modules/swagger.js'; import con from './mysql.js'; +import upload from './modules/multer.js' // import { Artist, // Favorite, // Collection, @@ -44,7 +45,7 @@ app.get('/mainpage/:userId/favArtist', async (req, res) => { con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; const r = { - favArtist: result // 여기에서 result는 변수명입니다. 원하는 결과 데이터로 대체되어야 합니다. + favArtistList: result // 여기에서 result는 변수명입니다. 원하는 결과 데이터로 대체되어야 합니다. }; res.status(200).send(r); }) @@ -706,6 +707,14 @@ app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ } }); +//polaroid 저장 +// app.post('/edit/save/:userId/:polaroidId', uploadImage, async(req, res)=>{ +// res.status(200).send({ +// message: "OK", +// fileInfo: req.file +// }) +// }); + app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); }) diff --git a/s3.js b/modules/multer.js similarity index 70% rename from s3.js rename to modules/multer.js index 52d237d..9efaa11 100644 --- a/s3.js +++ b/modules/multer.js @@ -1,8 +1,6 @@ import multer from 'multer'; import multerS3 from 'multer-s3' import aws from 'aws-sdk'; -import pkg from 'multer'; -const { upload:multerUpload } = 'multer'; import { config } from "dotenv"; config(); @@ -19,11 +17,10 @@ let upload = multer({ contentType: multerS3.AUTO_CONTENT_TYPE, acl: 'public_read', key: (req, file, cb) =>{ - cb(null, `${Date.now()}_${file.originalname}`); + cb(null, `polaroid/polaroid_${Date.now()}_${file.originalname}`); }, }), }); -//upload = multerUpload(upload); -export { upload }; \ No newline at end of file +export default upload; \ No newline at end of file diff --git a/routes/polaroids.js b/routes/polaroids.js new file mode 100644 index 0000000..2b50351 --- /dev/null +++ b/routes/polaroids.js @@ -0,0 +1,12 @@ + +import express from 'express'; +const router = express.Router(); +import upload from '../modules/multer.js'; +import PolaroidController from '../controller/polaroids.js'; + +router.post('/edit/save', upload, PolaroidController.uploadImage); + +export default router; + + + From b9c236c2a2741f87dec856a8c07dddc79996460b Mon Sep 17 00:00:00 2001 From: urimJ Date: Sun, 19 Nov 2023 00:19:42 +0900 Subject: [PATCH 41/66] MOD --- routes/polaroids.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/polaroids.js b/routes/polaroids.js index 2b50351..32a988d 100644 --- a/routes/polaroids.js +++ b/routes/polaroids.js @@ -4,7 +4,7 @@ const router = express.Router(); import upload from '../modules/multer.js'; import PolaroidController from '../controller/polaroids.js'; -router.post('/edit/save', upload, PolaroidController.uploadImage); +router.post('/edit/save', upload.single('image'), PolaroidController.uploadImage); export default router; From 2ddf8bfba38297e0a2965de35fb92fa28100fe5f Mon Sep 17 00:00:00 2001 From: urimJ Date: Sun, 19 Nov 2023 00:33:08 +0900 Subject: [PATCH 42/66] MOD --- controller/polaroids.js | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/controller/polaroids.js b/controller/polaroids.js index 2ffbd82..518903b 100644 --- a/controller/polaroids.js +++ b/controller/polaroids.js @@ -21,6 +21,7 @@ const util = { export const uploadImage = async (req, res) => { console.log(req.file); + console.log('s3 이미지 경로 :', req.file.location); const image = req.file.location; if (image === undefined) { return res.status(400).send(util.fail(400, "이미지가 존재하지 않습니다.")); diff --git a/package-lock.json b/package-lock.json index 82381b7..11b4274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "aws-sdk": "^2.1488.0", + "aws-sdk": "^2.1499.0", "cors": "^2.8.5", "cross-env": "^7.0.3", "dotenv": "^16.3.1", @@ -2355,9 +2355,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1488.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1488.0.tgz", - "integrity": "sha512-rRsOrIyqb/11T9VT65WSkTGC4yjI9z9IWKrwaZBhsqYJmqD2tj02CT9e1J6VNHqQbd+/rbKTddSKOWLjyjLXBQ==", + "version": "2.1499.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1499.0.tgz", + "integrity": "sha512-kh89lcXx7lP83uVjzRPkOueRoM8gQlep86W9+l3qCTHSLiVJuc0MiPmqCLMPlOAZil+35roFkwWIP2FJ1WcdXg==", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", diff --git a/package.json b/package.json index 68dbefe..ed0f773 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "author": "장유림", "license": "ISC", "dependencies": { - "aws-sdk": "^2.1488.0", + "aws-sdk": "^2.1499.0", "cors": "^2.8.5", "cross-env": "^7.0.3", "dotenv": "^16.3.1", From 1d8c0d2a225b24ab6ecc818ba3972c69309fc741 Mon Sep 17 00:00:00 2001 From: urimJ Date: Sun, 19 Nov 2023 00:34:43 +0900 Subject: [PATCH 43/66] MOD --- routes/polaroids.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/polaroids.js b/routes/polaroids.js index 32a988d..af3381f 100644 --- a/routes/polaroids.js +++ b/routes/polaroids.js @@ -4,7 +4,7 @@ const router = express.Router(); import upload from '../modules/multer.js'; import PolaroidController from '../controller/polaroids.js'; -router.post('/edit/save', upload.single('image'), PolaroidController.uploadImage); +router.post('/polaroid', upload.single('image'), PolaroidController.uploadImage); export default router; From 8732b4d4f135c6c364ee75297a44c933f1ce3c6d Mon Sep 17 00:00:00 2001 From: urimJ Date: Sun, 19 Nov 2023 05:07:15 +0900 Subject: [PATCH 44/66] MOD --- controller/polaroids.js | 40 - db.js | 3 +- main.js | 67 +- modules/multer.js | 26 - modules/swagger.js | 22 - package-lock.json | 1745 ++++++++++++++------------------------- package.json | 3 +- routes/mainpage.js | 66 -- routes/polaroids.js | 12 - swagger/mainpage.yaml | 28 - 10 files changed, 670 insertions(+), 1342 deletions(-) delete mode 100644 controller/polaroids.js delete mode 100644 modules/multer.js delete mode 100644 modules/swagger.js delete mode 100644 routes/mainpage.js delete mode 100644 routes/polaroids.js delete mode 100644 swagger/mainpage.yaml diff --git a/controller/polaroids.js b/controller/polaroids.js deleted file mode 100644 index 518903b..0000000 --- a/controller/polaroids.js +++ /dev/null @@ -1,40 +0,0 @@ -import multer from "multer"; -import upload from "../modules/multer"; - -const util = { - success: (status, message, data)=>{ - return { - status: status, - success: true, - message: message, - data: data - } - }, - fail: (status, message)=>{ - return{ - status: status, - success: false, - message: message - } - } -} - -export const uploadImage = async (req, res) => { - console.log(req.file); - console.log('s3 이미지 경로 :', req.file.location); - const image = req.file.location; - if (image === undefined) { - return res.status(400).send(util.fail(400, "이미지가 존재하지 않습니다.")); - } - res.status(200).send(util.success(200, "요청 성공", image)); -}; - -// export const uploadImages = async (req, res) => { -// const image = req.files; -// const path = image.map(img => img.location); -// if (image === undefined) { -// return res.status(400).send(util.fail(400, "이미지가 존재하지 않습니다.")); -// } -// res.status(200).send(util.success(200, "요청 성공", path)); -// }; - diff --git a/db.js b/db.js index 5c29b36..361d37e 100644 --- a/db.js +++ b/db.js @@ -130,6 +130,7 @@ Polaroid.init( polaroidId: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement:true }, polaroid: DataTypes.STRING, saveDateTime: DataTypes.DATE, @@ -268,7 +269,7 @@ Collection.hasMany(User,{ // 포토카드: 도안 = 일대일 Polaroid.belongsTo(PhotoCard, { - foreignKey: 'photocardMemberName' + foreignKey: 'photocard' } ); // 도안:포스트 = 일대일 diff --git a/main.js b/main.js index 3b5a936..99cee57 100644 --- a/main.js +++ b/main.js @@ -1,9 +1,29 @@ import bodyParser from 'body-parser'; import express from 'express'; import cors from 'cors'; -import { swaggerUi, specs } from './modules/swagger.js'; +//import { swaggerUi, specs } from './modules/swagger.js'; import con from './mysql.js'; -import upload from './modules/multer.js' +import multer from 'multer'; +import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; +import crypto from 'crypto'; +import dotenv from 'dotenv'; +dotenv.config(); + +const randomImgName = (bytes=32)=> crypto.randomBytes(bytes).toString('hex'); + +const bucketName = process.env.BUCKET_NAME; +const region = process.env.S3_REGION; +const accessKey = process.env.S3_KEYID; +const secretAccessKey = process.env.S3_PRIVATEKEY; + +const s3 = new S3Client({ + credentials:{ + accessKeyId: accessKey, + secretAccessKey: secretAccessKey + }, + region: region +}); + // import { Artist, // Favorite, // Collection, @@ -15,6 +35,12 @@ import upload from './modules/multer.js' const app = express(); const port = 3000; + +const storage = multer.memoryStorage(); +const upload = multer({ storage: storage}); + + + app.use(bodyParser.json()); const corsOptions = { origin: "http://localhost:3000", @@ -22,7 +48,7 @@ const corsOptions = { }; app.use(cors(corsOptions)); app.use(express.json()); -app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs)) +//app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs)) const getRandomInt = (max) => { @@ -708,12 +734,35 @@ app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ }); //polaroid 저장 -// app.post('/edit/save/:userId/:polaroidId', uploadImage, async(req, res)=>{ -// res.status(200).send({ -// message: "OK", -// fileInfo: req.file -// }) -// }); +app.post('/edit/save/:userId/:photocard', upload.single('image'), async(req, res)=>{ + console.log("req.body", req.body); + console.log("req.file", req.file); + + //req.file.buffer + + const imgName = randomImgName(); + const params = { + Bucket: bucketName, + Key: imgName, + Body: req.file.buffer, + ACL: 'public-read', + ContentType: req.file.mimetype + } + + const command = new PutObjectCommand(params); + await s3.send(command); + + const userId = req.params.userId; + const photocard = req.params.photocard.slice(8,); + const sql = `INSERT into Polaroids + VALUE (${imgName}, ${now()}, ?, ?) ` + con.query(sql, [userId, photocard], (err, result, fields)=>{ + if(err) throw err; + res.status(201).send(result); + }) + +}); + app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); diff --git a/modules/multer.js b/modules/multer.js deleted file mode 100644 index 9efaa11..0000000 --- a/modules/multer.js +++ /dev/null @@ -1,26 +0,0 @@ -import multer from 'multer'; -import multerS3 from 'multer-s3' -import aws from 'aws-sdk'; -import { config } from "dotenv"; -config(); - -const s3 = new aws.S3({ - accessKeyId: process.env.S3_KEYID, - secretAccessKey: process.env.S3_PRIVATE_KEY, - region: process.env.S3_REGION, -}) - -let upload = multer({ - storage:multerS3({ - s3:s3, - bucket: process.env.BUCKET_NAME, - contentType: multerS3.AUTO_CONTENT_TYPE, - acl: 'public_read', - key: (req, file, cb) =>{ - cb(null, `polaroid/polaroid_${Date.now()}_${file.originalname}`); - }, - }), -}); - - -export default upload; \ No newline at end of file diff --git a/modules/swagger.js b/modules/swagger.js deleted file mode 100644 index e1cba6e..0000000 --- a/modules/swagger.js +++ /dev/null @@ -1,22 +0,0 @@ -import swaggerUi from 'swagger-ui-express' -import swaggereJsdoc from 'swagger-jsdoc' - -const options = { - swaggerDefinition: { - info: { - title: 'Ohnpol', - version: '1.0.0', - description: 'API with express', - }, - host: 'localhost:3000', - basePath: '/' - }, - apis: ['./routes/*.js', './swagger/*'] -}; - -const specs = swaggereJsdoc(options); - -export { - swaggerUi, - specs -}; diff --git a/package-lock.json b/package-lock.json index 11b4274..0b21130 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,12 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "aws-sdk": "^2.1499.0", + "@aws-sdk/client-s3": "^3.454.0", "cors": "^2.8.5", "cross-env": "^7.0.3", "dotenv": "^16.3.1", "express": "^4.18.2", "multer": "^1.4.5-lts.1", - "multer-s3": "^3.0.1", "mysql": "^2.18.1", "mysql2": "^3.6.2", "nodemon": "^3.0.1", @@ -75,7 +74,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "peer": true, "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -85,14 +83,12 @@ "node_modules/@aws-crypto/crc32/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/crc32c": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "peer": true, "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -102,14 +98,12 @@ "node_modules/@aws-crypto/crc32c/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/ie11-detection": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "peer": true, "dependencies": { "tslib": "^1.11.1" } @@ -117,14 +111,12 @@ "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha1-browser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "peer": true, "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/supports-web-crypto": "^3.0.0", @@ -138,14 +130,12 @@ "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-browser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "peer": true, "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/sha256-js": "^3.0.0", @@ -160,14 +150,12 @@ "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "peer": true, "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -177,14 +165,12 @@ "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "peer": true, "dependencies": { "tslib": "^1.11.1" } @@ -192,14 +178,12 @@ "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/util": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "peer": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -209,70 +193,68 @@ "node_modules/@aws-crypto/util/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-s3": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.441.0.tgz", - "integrity": "sha512-tJUhHk4Nvakw/q3IVI2oDFCu48DzuPCMu2G3n42JPyvmY0RvmtRjduduoG1lYIGgRKJu81/MFr9i8CGYNK+/5A==", - "peer": true, + "version": "3.454.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.454.0.tgz", + "integrity": "sha512-vBx4iB1c4mEz+twMnl6angC1/IpnmXaT8L6Kl9uNiurFsb6N4tCyrJ24kECdsOSTM7ePXvE1fKst8zAh6MW5ZA==", "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.441.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-bucket-endpoint": "3.433.0", - "@aws-sdk/middleware-expect-continue": "3.433.0", - "@aws-sdk/middleware-flexible-checksums": "3.433.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-location-constraint": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-s3": "3.440.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-ssec": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/signature-v4-multi-region": "3.437.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", + "@aws-sdk/client-sts": "3.454.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/middleware-bucket-endpoint": "3.451.0", + "@aws-sdk/middleware-expect-continue": "3.451.0", + "@aws-sdk/middleware-flexible-checksums": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-location-constraint": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-sdk-s3": "3.451.0", + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/middleware-ssec": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/signature-v4-multi-region": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", "@aws-sdk/xml-builder": "3.310.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/eventstream-serde-browser": "^2.0.12", - "@smithy/eventstream-serde-config-resolver": "^2.0.12", - "@smithy/eventstream-serde-node": "^2.0.12", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-blob-browser": "^2.0.12", - "@smithy/hash-node": "^2.0.12", - "@smithy/hash-stream-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/md5-js": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/eventstream-serde-browser": "^2.0.13", + "@smithy/eventstream-serde-config-resolver": "^2.0.13", + "@smithy/eventstream-serde-node": "^2.0.13", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-blob-browser": "^2.0.14", + "@smithy/hash-node": "^2.0.15", + "@smithy/hash-stream-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/md5-js": "^2.0.15", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-stream": "^2.0.17", - "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.12", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-stream": "^2.0.20", + "@smithy/util-utf8": "^2.0.2", + "@smithy/util-waiter": "^2.0.13", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -283,50 +265,48 @@ "node_modules/@aws-sdk/client-s3/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/client-sso": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.441.0.tgz", - "integrity": "sha512-gndGymu4cEIN7WWhQ67RO0JMda09EGBlay2L8IKCHBK/65Y34FHUX1tCNbO2qezEzsi6BPW5o2n53Rd9QqpHUw==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", + "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -336,53 +316,51 @@ "node_modules/@aws-sdk/client-sso/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/client-sts": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.441.0.tgz", - "integrity": "sha512-GL0Cw2v7XL1cn0T+Sk5VHLlgBJoUdMsysXsHa1mFdk0l6XHMAAnwXVXiNnjmoDSPrG0psz7dL2AKzPVRXbIUjA==", - "peer": true, + "version": "3.454.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.454.0.tgz", + "integrity": "sha512-0fDvr8WeB6IYO8BUCzcivWmahgGl/zDbaYfakzGnt4mrl5ztYaXE875WI6b7+oFcKMRvN+KLvwu5TtyFuNY+GQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.441.0", - "@aws-sdk/credential-provider-node": "3.441.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-sdk-sts": "3.433.0", - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-sdk-sts": "3.451.0", + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -393,30 +371,33 @@ "node_modules/@aws-sdk/client-sts/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/core": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.441.0.tgz", - "integrity": "sha512-gV0eQwR0VnSPUYAbgDkbBtfXbSpZgl/K6UB13DP1IFFjQYbF/BxYwvcQe4jHoPOBifSgjEbl8MfOOeIyI7k9vg==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.451.0.tgz", + "integrity": "sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==", "dependencies": { - "@smithy/smithy-client": "^2.1.12" + "@smithy/smithy-client": "^2.1.15", + "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/core/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz", - "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", + "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -426,24 +407,22 @@ "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.441.0.tgz", - "integrity": "sha512-SQipQYxYqDUuSOfIhDmaTdwPTcndGQotGZXWJl56mMWqAhU8MkwjK+oMf3VgRt/umJC0QwUCF5HUHIj7gSB1JA==", - "peer": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.441.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", + "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -453,25 +432,23 @@ "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.441.0.tgz", - "integrity": "sha512-WB9p37yHq6fGJt6Vll29ijHbkh9VDbPM/n5ns73bTAgFD7R0ht5kPmdmHGQA6m3RKjcHLPbymQ3lXykkMwWf/Q==", - "peer": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.433.0", - "@aws-sdk/credential-provider-ini": "3.441.0", - "@aws-sdk/credential-provider-process": "3.433.0", - "@aws-sdk/credential-provider-sso": "3.441.0", - "@aws-sdk/credential-provider-web-identity": "3.433.0", - "@aws-sdk/types": "3.433.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", + "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-ini": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -481,19 +458,17 @@ "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz", - "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", + "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -503,21 +478,19 @@ "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.441.0.tgz", - "integrity": "sha512-pTg16G+62mWCE8yGKuQnEBqPdpG5g71remf2jUqXaI1c7GCzbnkQDV9eD4DaAGOvzIs0wo9zAQnS2kVDPFlCYA==", - "peer": true, - "dependencies": { - "@aws-sdk/client-sso": "3.441.0", - "@aws-sdk/token-providers": "3.438.0", - "@aws-sdk/types": "3.433.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", + "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", + "dependencies": { + "@aws-sdk/client-sso": "3.451.0", + "@aws-sdk/token-providers": "3.451.0", + "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -527,18 +500,16 @@ "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz", - "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", + "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -546,47 +517,20 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true - }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.441.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.441.0.tgz", - "integrity": "sha512-Olj/kVIhJo9Cvw06dzn0uQ8M29L7Vu8tSj4MHCewH0goJ0GGIclOf83uVofMZO94zG7X/bv6+4CtNBJIhlokQw==", - "dependencies": { - "@smithy/abort-controller": "^2.0.1", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/smithy-client": "^2.1.12", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.433.0.tgz", - "integrity": "sha512-Lk1xIu2tWTRa1zDw5hCF1RrpWQYSodUhrS/q3oKz8IAoFqEy+lNaD5jx+fycuZb5EkE4IzWysT+8wVkd0mAnOg==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.451.0.tgz", + "integrity": "sha512-KWyZ1JGnYz2QbHuJtYTP1BVnMOfVopR8rP8dTinVb/JR5HfAYz4imICJlJUbOYRjN7wpA3PrRI8dNRjrSBjWJg==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.451.0", "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "@smithy/util-config-provider": "^2.0.0", "tslib": "^2.5.0" }, @@ -597,18 +541,16 @@ "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.433.0.tgz", - "integrity": "sha512-Uq2rPIsjz0CR2sulM/HyYr5WiqiefrSRLdwUZuA7opxFSfE808w5DBWSprHxbH3rbDSQR4nFiOiVYIH8Eth7nA==", - "peer": true, - "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.451.0.tgz", + "integrity": "sha512-vwG8o2Uk6biLDlOZnqXemsO4dS2HvrprUdxyouwu6hlzLFskg8nL122butn19JqXJKgcVLuSSLzT+xwqBWy2Rg==", + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -618,22 +560,20 @@ "node_modules/@aws-sdk/middleware-expect-continue/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.433.0.tgz", - "integrity": "sha512-Ptssx373+I7EzFUWjp/i/YiNFt6I6sDuRHz6DOUR9nmmRTlHHqmdcBXlJL2d9wwFxoBRCN8/PXGsTc/DJ4c95Q==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.451.0.tgz", + "integrity": "sha512-eOkpcC2zgAvqs1w7Yp5nsk9LBIj6qLU5kaZuZEBOiFbNKIrTnPo6dQuhgvDcKHD6Y5W/cUjSBiFMs/ROb5aoug==", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.451.0", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -643,18 +583,16 @@ "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz", - "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==", - "peer": true, - "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", + "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -664,17 +602,15 @@ "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.433.0.tgz", - "integrity": "sha512-2YD860TGntwZifIUbxm+lFnNJJhByR/RB/+fV1I8oGKg+XX2rZU+94pRfHXRywoZKlCA0L+LGDA1I56jxrB9sw==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.451.0.tgz", + "integrity": "sha512-R4U2G7mybP0BMiQBJWTcB47g49F4PSXTiCsvMDp5WOEhpWvGQuO1ZIhTxCl5s5lgTSne063Os8W6KSdK2yG2TQ==", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -684,17 +620,15 @@ "node_modules/@aws-sdk/middleware-location-constraint/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz", - "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", + "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -704,18 +638,16 @@ "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz", - "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==", - "peer": true, - "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", + "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -725,20 +657,18 @@ "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.440.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.440.0.tgz", - "integrity": "sha512-DVTSr+82Z8jR9xTwDN3YHzxX7qvi0n96V92OfxvSRDq2BldCEx/KEL1orUZjw97SAXhINOlUWjRR7j4HpwWQtQ==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.451.0.tgz", + "integrity": "sha512-XF4Cw8HrYUwGLKOqKtWs6ss1WXoxvQUcgGLACGSqn9a0p51446NiS5671x7qJUsfBuygdKlIKcOc8pPr9a+5Ow==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.451.0", "@aws-sdk/util-arn-parser": "3.310.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -748,18 +678,16 @@ "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz", - "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==", - "peer": true, - "dependencies": { - "@aws-sdk/middleware-signing": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", + "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -769,21 +697,19 @@ "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz", - "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", + "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", "dependencies": { - "@aws-sdk/types": "3.433.0", + "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", + "@smithy/protocol-http": "^3.0.9", "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.4.0", - "@smithy/util-middleware": "^2.0.5", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -793,17 +719,15 @@ "node_modules/@aws-sdk/middleware-signing/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.433.0.tgz", - "integrity": "sha512-2AMaPx0kYfCiekxoL7aqFqSSoA9du+yI4zefpQNLr+1cZOerYiDxdsZ4mbqStR1CVFaX6U6hrYokXzjInsvETw==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.451.0.tgz", + "integrity": "sha512-hDkeBUiRsvuDbvsPha0/uJHE680WDzjAOoE6ZnLBoWsw7ry+Bw1ULMj0sCmpBVrQ7Gpivi/6zbezhClVmt3ITw==", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -813,19 +737,17 @@ "node_modules/@aws-sdk/middleware-ssec/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz", - "integrity": "sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==", - "peer": true, - "dependencies": { - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", + "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -835,19 +757,17 @@ "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz", - "integrity": "sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz", + "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -857,19 +777,17 @@ "node_modules/@aws-sdk/region-config-resolver/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.437.0.tgz", - "integrity": "sha512-MmrqudssOs87JgVg7HGVdvJws/t4kcOrJJd+975ki+DPeSoyK2U4zBDfDkJ+n0tFuZBs3sLwLh0QXE7BV28rRA==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.451.0.tgz", + "integrity": "sha512-qQKY7/txeNUTLyRL3WxUWEwaZ5sf76EIZgu9kLaR96cAYSxwQi/qQB3ijbfD6u7sJIA8aROMxeYK0VmRsQg0CA==", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/protocol-http": "^3.0.8", + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -879,51 +797,49 @@ "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/token-providers": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz", - "integrity": "sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", + "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.433.0", - "@aws-sdk/middleware-logger": "3.433.0", - "@aws-sdk/middleware-recursion-detection": "3.433.0", - "@aws-sdk/middleware-user-agent": "3.438.0", - "@aws-sdk/region-config-resolver": "3.433.0", - "@aws-sdk/types": "3.433.0", - "@aws-sdk/util-endpoints": "3.438.0", - "@aws-sdk/util-user-agent-browser": "3.433.0", - "@aws-sdk/util-user-agent-node": "3.437.0", - "@smithy/config-resolver": "^2.0.16", - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/hash-node": "^2.0.12", - "@smithy/invalid-dependency": "^2.0.12", - "@smithy/middleware-content-length": "^2.0.14", - "@smithy/middleware-endpoint": "^2.1.3", - "@smithy/middleware-retry": "^2.0.18", - "@smithy/middleware-serde": "^2.0.12", - "@smithy/middleware-stack": "^2.0.6", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/node-http-handler": "^2.1.8", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.8", + "@smithy/protocol-http": "^3.0.9", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-base64": "^2.0.0", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.16", - "@smithy/util-defaults-mode-node": "^2.0.21", - "@smithy/util-endpoints": "^1.0.2", - "@smithy/util-retry": "^2.0.5", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -933,16 +849,14 @@ "node_modules/@aws-sdk/token-providers/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/types": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz", - "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", + "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -952,14 +866,12 @@ "node_modules/@aws-sdk/types/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/util-arn-parser": { "version": "3.310.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", - "peer": true, "dependencies": { "tslib": "^2.5.0" }, @@ -970,17 +882,15 @@ "node_modules/@aws-sdk/util-arn-parser/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.438.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz", - "integrity": "sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", + "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/util-endpoints": "^1.0.2", + "@aws-sdk/types": "3.451.0", + "@smithy/util-endpoints": "^1.0.4", "tslib": "^2.5.0" }, "engines": { @@ -990,14 +900,12 @@ "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.310.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", - "peer": true, "dependencies": { "tslib": "^2.5.0" }, @@ -1008,17 +916,15 @@ "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.433.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz", - "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==", - "peer": true, + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", + "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/types": "^2.4.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } @@ -1026,18 +932,16 @@ "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.437.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz", - "integrity": "sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==", - "peer": true, - "dependencies": { - "@aws-sdk/types": "3.433.0", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", + "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1055,14 +959,12 @@ "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "peer": true, "dependencies": { "tslib": "^2.3.1" } @@ -1070,14 +972,12 @@ "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@aws-sdk/xml-builder": { "version": "3.310.0", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", - "peer": true, "dependencies": { "tslib": "^2.5.0" }, @@ -1088,8 +988,7 @@ "node_modules/@aws-sdk/xml-builder/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@jsdevtools/ono": { "version": "7.1.3", @@ -1268,11 +1167,11 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.12.tgz", - "integrity": "sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1288,43 +1187,38 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", - "peer": true, "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", - "peer": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", + "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", "dependencies": { - "@smithy/util-base64": "^2.0.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/chunked-blob-reader-native/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/chunked-blob-reader/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/config-resolver": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.16.tgz", - "integrity": "sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==", - "peer": true, + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -1334,19 +1228,17 @@ "node_modules/@smithy/config-resolver/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz", - "integrity": "sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==", - "peer": true, - "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", "tslib": "^2.5.0" }, "engines": { @@ -1356,17 +1248,15 @@ "node_modules/@smithy/credential-provider-imds/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.12.tgz", - "integrity": "sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==", - "peer": true, + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.13.tgz", + "integrity": "sha512-CExbelIYp+DxAHG8RIs0l9QL7ElqhG4ym9BNoSpkPa4ptBQfzJdep3LbOSVJIE2VUdBAeObdeL6EDB3Jo85n3g==", "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } @@ -1374,17 +1264,15 @@ "node_modules/@smithy/eventstream-codec/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.12.tgz", - "integrity": "sha512-0pi8QlU/pwutNshoeJcbKR1p7Ie5STd8UFAMX5xhSoSJjNlxIv/OsHbF023jscMRN2Prrqd6ToGgdCnsZVQjvg==", - "peer": true, + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.13.tgz", + "integrity": "sha512-OJ/2g/VxkzA+mYZxV102oX3CsiE+igTSmqq/ir3oEVG2kSIdRC00ryttj/lmL14W06ExNi0ysmfLxQkL8XrAZQ==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1394,16 +1282,14 @@ "node_modules/@smithy/eventstream-serde-browser/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.12.tgz", - "integrity": "sha512-I0XfwQkIX3gAnbrU5rLMkBSjTM9DHttdbLwf12CXmj7SSI5dT87PxtKLRrZGanaCMbdf2yCep+MW5/4M7IbvQA==", - "peer": true, + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.13.tgz", + "integrity": "sha512-2BI1CbnYuEvAYoWSeWJtPNygbIKiWeSLxCmDLnyM6wQV32Of7VptiQlaFXPxXp4zqn/rs3ocZ/T29rxE4s4Gsg==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1413,17 +1299,15 @@ "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.12.tgz", - "integrity": "sha512-vf1vMHGOkG3uqN9x1zKOhnvW/XgvhJXWqjV6zZiT2FMjlEayugQ1mzpSqr7uf89+BzjTzuZKERmOsEAmewLbxw==", - "peer": true, + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.13.tgz", + "integrity": "sha512-7NbFwPafb924elFxCBDvm48jy/DeSrpFbFQN0uN2ThuY5HrEeubikS0t7WMva4Z4EnRoivpbuT0scb9vUIJKoA==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1433,17 +1317,15 @@ "node_modules/@smithy/eventstream-serde-node/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.12.tgz", - "integrity": "sha512-xZ3ZNpCxIND+q+UCy7y1n1/5VQEYicgSTNCcPqsKawX+Vd+6OcFX7gUHMyPzL8cZr+GdmJuxNleqHlH4giK2tw==", - "peer": true, + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.13.tgz", + "integrity": "sha512-j0yFd5UfftM+ia9dxLRbheJDCkCZBHpcEzCsPO8BxVOTbdcX/auVJCv6ov/yvpCKsf4Hv3mOqi0Is1YogM2g3Q==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1453,18 +1335,17 @@ "node_modules/@smithy/eventstream-serde-universal/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz", - "integrity": "sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==", - "dependencies": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, @@ -1474,32 +1355,29 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/hash-blob-browser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.12.tgz", - "integrity": "sha512-riLnV16f27yyePX8UF0deRHAeccUK8SrOxyTykSTrnVkgS3DsjNapZtTbd8OGNKEbI60Ncdb5GwN3rHZudXvog==", - "peer": true, + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.14.tgz", + "integrity": "sha512-yWdghyPJIEqLYsaE7YVgd3YhM7jN4Pv6eJQvTomnMsz5K2qRBlpjUx3T9fKlElp1qdeQ7DNc3sAat4i9CUBO7Q==", "dependencies": { "@smithy/chunked-blob-reader": "^2.0.0", - "@smithy/chunked-blob-reader-native": "^2.0.0", - "@smithy/types": "^2.4.0", + "@smithy/chunked-blob-reader-native": "^2.0.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-blob-browser/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/hash-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.12.tgz", - "integrity": "sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==", - "peer": true, + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1509,17 +1387,15 @@ "node_modules/@smithy/hash-node/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/hash-stream-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.12.tgz", - "integrity": "sha512-x/DrSynPKrW0k00q7aZ/vy531a3mRw79mOajHp+cIF0TrA1SqEMFoy/B8X0XtoAtlJWt/vvgeDNqt/KAeaAqMw==", - "peer": true, + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.15.tgz", + "integrity": "sha512-ZZ6kC/pHt5Dc2goXIIyC8uA7A4GUMSzdCynAabnZ3CSSaV6ctP8mlvVkqjPph0O3XzHlx/80gdLrNqi1GDPUsA==", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1529,24 +1405,21 @@ "node_modules/@smithy/hash-stream-node/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz", - "integrity": "sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==", - "peer": true, + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/invalid-dependency/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/is-array-buffer": { "version": "2.0.0", @@ -1565,30 +1438,27 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/md5-js": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.12.tgz", - "integrity": "sha512-OgDt+Xnrw+W5z3MSl5KZZzebqmXrYl9UdbCiBYnnjErmNywwSjV6QB/Oic3/7hnsPniSU81n7Rvlhz2kH4EREQ==", - "peer": true, + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.15.tgz", + "integrity": "sha512-pAZaokib56XvhU0t/R9vAcr3L3bMhIakhF25X7EMSQ7LAURiLfce/tgON8I3x/dIbnZUyeRi8f2cx2azu6ATew==", "dependencies": { - "@smithy/types": "^2.4.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, "node_modules/@smithy/md5-js/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz", - "integrity": "sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==", - "peer": true, + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", "dependencies": { - "@smithy/protocol-http": "^3.0.8", - "@smithy/types": "^2.4.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1598,20 +1468,19 @@ "node_modules/@smithy/middleware-content-length/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz", - "integrity": "sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.0.12", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", - "@smithy/url-parser": "^2.0.12", - "@smithy/util-middleware": "^2.0.5", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -1624,17 +1493,16 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz", - "integrity": "sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==", - "peer": true, - "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/protocol-http": "^3.0.8", - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", - "@smithy/util-middleware": "^2.0.5", - "@smithy/util-retry": "^2.0.5", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1645,15 +1513,14 @@ "node_modules/@smithy/middleware-retry/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz", - "integrity": "sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1666,11 +1533,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz", - "integrity": "sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1683,13 +1550,13 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz", - "integrity": "sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", "dependencies": { - "@smithy/property-provider": "^2.0.13", - "@smithy/shared-ini-file-loader": "^2.2.2", - "@smithy/types": "^2.4.0", + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1702,14 +1569,14 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz", - "integrity": "sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==", - "dependencies": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/protocol-http": "^3.0.8", - "@smithy/querystring-builder": "^2.0.12", - "@smithy/types": "^2.4.0", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1722,11 +1589,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/property-provider": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.13.tgz", - "integrity": "sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1739,11 +1606,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/protocol-http": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.8.tgz", - "integrity": "sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1756,11 +1623,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz", - "integrity": "sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -1774,11 +1641,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz", - "integrity": "sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1791,23 +1658,22 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz", - "integrity": "sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==", - "peer": true, + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", "dependencies": { - "@smithy/types": "^2.4.0" + "@smithy/types": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz", - "integrity": "sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -1820,18 +1686,17 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/signature-v4": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.12.tgz", - "integrity": "sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw==", - "peer": true, + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.15.tgz", + "integrity": "sha512-SRTEJSEhQYVlBKIIdZ9SZpqW+KFqxqcNnEcBX+8xkDdWx+DItme9VcCDkdN32yTIrICC+irUufnUdV7mmHPjoA==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.12", + "@smithy/eventstream-codec": "^2.0.13", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.5", + "@smithy/util-middleware": "^2.0.6", "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1841,17 +1706,16 @@ "node_modules/@smithy/signature-v4/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/smithy-client": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.12.tgz", - "integrity": "sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", "dependencies": { - "@smithy/middleware-stack": "^2.0.6", - "@smithy/types": "^2.4.0", - "@smithy/util-stream": "^2.0.17", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", "tslib": "^2.5.0" }, "engines": { @@ -1864,9 +1728,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz", - "integrity": "sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", "dependencies": { "tslib": "^2.5.0" }, @@ -1880,12 +1744,12 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/url-parser": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.12.tgz", - "integrity": "sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", "dependencies": { - "@smithy/querystring-parser": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -1895,9 +1759,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -1915,7 +1779,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", - "peer": true, "dependencies": { "tslib": "^2.5.0" } @@ -1923,14 +1786,12 @@ "node_modules/@smithy/util-body-length-browser/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-body-length-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", - "peer": true, "dependencies": { "tslib": "^2.5.0" }, @@ -1941,8 +1802,7 @@ "node_modules/@smithy/util-body-length-node/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-buffer-from": { "version": "2.0.0", @@ -1965,7 +1825,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", - "peer": true, "dependencies": { "tslib": "^2.5.0" }, @@ -1976,18 +1835,16 @@ "node_modules/@smithy/util-config-provider/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz", - "integrity": "sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==", - "peer": true, - "dependencies": { - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -1998,21 +1855,19 @@ "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz", - "integrity": "sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==", - "peer": true, - "dependencies": { - "@smithy/config-resolver": "^2.0.16", - "@smithy/credential-provider-imds": "^2.0.18", - "@smithy/node-config-provider": "^2.1.3", - "@smithy/property-provider": "^2.0.13", - "@smithy/smithy-client": "^2.1.12", - "@smithy/types": "^2.4.0", + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -2022,17 +1877,15 @@ "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-endpoints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz", - "integrity": "sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==", - "peer": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.4.tgz", + "integrity": "sha512-FPry8j1xye5yzrdnf4xKUXVnkQErxdN7bUIaqC0OFoGsv2NfD9b2UUMuZSSt+pr9a8XWAqj0HoyVNUfPiZ/PvQ==", "dependencies": { - "@smithy/node-config-provider": "^2.1.3", - "@smithy/types": "^2.4.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -2042,8 +1895,7 @@ "node_modules/@smithy/util-endpoints/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-hex-encoding": { "version": "2.0.0", @@ -2062,11 +1914,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-middleware": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.5.tgz", - "integrity": "sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", "dependencies": { - "@smithy/types": "^2.4.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -2079,13 +1931,12 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-retry": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.5.tgz", - "integrity": "sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==", - "peer": true, + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", "dependencies": { - "@smithy/service-error-classification": "^2.0.5", - "@smithy/types": "^2.4.0", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -2095,21 +1946,20 @@ "node_modules/@smithy/util-retry/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-stream": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.17.tgz", - "integrity": "sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.2.4", - "@smithy/node-http-handler": "^2.1.8", - "@smithy/types": "^2.4.0", - "@smithy/util-base64": "^2.0.0", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -2138,9 +1988,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -2155,13 +2005,12 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@smithy/util-waiter": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.12.tgz", - "integrity": "sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA==", - "peer": true, + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", "dependencies": { - "@smithy/abort-controller": "^2.0.12", - "@smithy/types": "^2.4.0", + "@smithy/abort-controller": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -2171,8 +2020,7 @@ "node_modules/@smithy/util-waiter/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "peer": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", @@ -2343,73 +2191,6 @@ "semver": "bin/semver" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sdk": { - "version": "2.1499.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1499.0.tgz", - "integrity": "sha512-kh89lcXx7lP83uVjzRPkOueRoM8gQlep86W9+l3qCTHSLiVJuc0MiPmqCLMPlOAZil+35roFkwWIP2FJ1WcdXg==", - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-sdk/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/aws-sdk/node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/aws-sdk/node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/aws-sdk/node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -2423,25 +2204,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/basic-ftp": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", @@ -2532,8 +2294,7 @@ "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "peer": true + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -2555,15 +2316,6 @@ "node": ">=8" } }, - "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3039,14 +2791,6 @@ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==" }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -3139,7 +2883,6 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "peer": true, "dependencies": { "strnum": "^1.0.5" }, @@ -3152,14 +2895,6 @@ "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==" }, - "node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3220,14 +2955,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3416,20 +3143,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -3441,11 +3154,6 @@ "node": ">= 0.4" } }, - "node_modules/html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -3496,25 +3204,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -3560,21 +3249,6 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3586,17 +3260,6 @@ "node": ">=8" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -3616,20 +3279,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3654,20 +3303,6 @@ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3678,14 +3313,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/js-git": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz", @@ -3902,23 +3529,6 @@ "node": ">= 6.0.0" } }, - "node_modules/multer-s3": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/multer-s3/-/multer-s3-3.0.1.tgz", - "integrity": "sha512-BFwSO80a5EW4GJRBdUuSHblz2jhVSAze33ZbnGpcfEicoT0iRolx4kWR+AJV07THFRCQ78g+kelKFdjkCCaXeQ==", - "dependencies": { - "@aws-sdk/lib-storage": "^3.46.0", - "file-type": "^3.3.0", - "html-comment-regex": "^1.1.2", - "run-parallel": "^1.1.6" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" - } - }, "node_modules/multer/node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -4500,11 +4110,6 @@ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -4519,34 +4124,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4650,28 +4227,6 @@ "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/run-series": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", @@ -5010,28 +4565,6 @@ "node": ">= 0.8" } }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -5051,8 +4584,7 @@ "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "peer": true + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "node_modules/supports-color": { "version": "7.2.0", @@ -5255,27 +4787,6 @@ "node": ">= 0.8" } }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5349,24 +4860,6 @@ "node": ">= 8" } }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -5400,26 +4893,6 @@ } } }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index ed0f773..c5172e4 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,12 @@ "author": "장유림", "license": "ISC", "dependencies": { - "aws-sdk": "^2.1499.0", + "@aws-sdk/client-s3": "^3.454.0", "cors": "^2.8.5", "cross-env": "^7.0.3", "dotenv": "^16.3.1", "express": "^4.18.2", "multer": "^1.4.5-lts.1", - "multer-s3": "^3.0.1", "mysql": "^2.18.1", "mysql2": "^3.6.2", "nodemon": "^3.0.1", diff --git a/routes/mainpage.js b/routes/mainpage.js deleted file mode 100644 index ebec5c0..0000000 --- a/routes/mainpage.js +++ /dev/null @@ -1,66 +0,0 @@ - -/** - * - * @swagger - * paths: - * /mainpage/:nickname: - * get: - * summary: 즐겨찾는 아티스트 조회 - * tags: [mainpage] - * parameters: - * - name: nickname - * in: query - * schema: - * type: string - * responses: - * 200: - * description: 닉네임 조회 성공 - * schema: - * properties: - * userId: - * type: integer - * artistId: - * type: integer - * photo: - * type: string - * groupName: - * type: string - * 401: - * description: 닉네임 조회 실패 - * schema: - * properties: - * message: - * type: string - * - * - * @swagger - * paths: - * /mainpage: - * get: - * summary: 폴꾸 hot10 - * tags: [mainpage] - * - * responses: - * 200: - * description: 정상처리 - * schema: - * properties: - * userId: - * type: string - * artistId: - * type: string - * photo: - * type: string - * groupName: - * type: string, - * - * 401: - * description: 에러처리 - * schema: - * properties: - * message: - * type: string - * - * - * - */ \ No newline at end of file diff --git a/routes/polaroids.js b/routes/polaroids.js deleted file mode 100644 index af3381f..0000000 --- a/routes/polaroids.js +++ /dev/null @@ -1,12 +0,0 @@ - -import express from 'express'; -const router = express.Router(); -import upload from '../modules/multer.js'; -import PolaroidController from '../controller/polaroids.js'; - -router.post('/polaroid', upload.single('image'), PolaroidController.uploadImage); - -export default router; - - - diff --git a/swagger/mainpage.yaml b/swagger/mainpage.yaml deleted file mode 100644 index 8c20782..0000000 --- a/swagger/mainpage.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# mainpage API - -# favoriteArtist API -# components: -# parameters: -# schemas: -# favArtist: -# properties: -# userId: -# type: integer -# artistId: -# type: initeger -# photo: -# type: string -# groupName: -# type: string -# #example -# examples: -# favArtistExample: -# value: -# { -# "userId": 1, -# "artistId": 1, -# "photo":"(이미지 URL)", -# "groupName": "방탄소년단", -# } - - \ No newline at end of file From 164f35ab15ac900a8f0473a19b7885364445daa9 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 20 Nov 2023 01:39:08 +0900 Subject: [PATCH 45/66] =?UTF-8?q?DB=20polaroids=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=97=B4=20=EB=B3=80=EA=B2=BD=20/=20API=20edit/sav?= =?UTF-8?q?e=20=EB=8F=84=EC=95=88=20S3=EC=97=90=20=EC=A0=80=EC=9E=A5,=20ur?= =?UTF-8?q?l=20DB=EC=97=90=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 114 ++++++++++++++++++++++++++------------------------------ main.js | 69 +++++++++++++++++++++++++++++++--- 2 files changed, 115 insertions(+), 68 deletions(-) diff --git a/db.js b/db.js index 361d37e..792e41a 100644 --- a/db.js +++ b/db.js @@ -74,18 +74,14 @@ class PhotoCard extends Model { } PhotoCard.init( { - memberName: { - type: DataTypes.STRING, + photocardId:{ + type:DataTypes.INTEGER, primaryKey: true, + autoIncrement: true }, - version: { - type: DataTypes.STRING, - }, - photocard: - { - type: DataTypes.STRING, - primaryKey: true, - }, + memberName: DataTypes.STRING, + version: DataTypes.STRING, + photocard: DataTypes.STRING, albumName: DataTypes.STRING, enterComp: DataTypes.STRING, groupName: DataTypes.STRING @@ -130,17 +126,11 @@ Polaroid.init( polaroidId: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement:true + autoIncrement:true, + allowNull: true }, polaroid: DataTypes.STRING, saveDateTime: DataTypes.DATE, - // photocardId: { - // type: DataTypes.INTEGER, - // references: { - // model: PhotoCard, // Polaroid 모델을 참조 - // key: 'photocardId' // Polaroid 모델의 기본 키를 참조 - // } - // } } , { @@ -269,7 +259,7 @@ Collection.hasMany(User,{ // 포토카드: 도안 = 일대일 Polaroid.belongsTo(PhotoCard, { - foreignKey: 'photocard' + foreignKey: 'photocardId' } ); // 도안:포스트 = 일대일 @@ -346,11 +336,11 @@ User.belongsToMany(PhotoCard, { }); PhotoCard.belongsToMany(User, { through: 'UserPhotoCard', - foreignKey: 'memberName', + foreignKey: 'photocardId', }); PhotoCard.belongsToMany(User, { through: 'UserPhotoCard', - foreignKey: 'photocard', + foreignKey: 'photocardId', }); await sequelize.sync(); @@ -515,23 +505,23 @@ const newJeans = Artist.build( // ------collection------- // ------Photocard----------- -const pc1 = PhotoCard.build({ - memberName: '민지', - version: 'A', - photocard: 'fff', - albumName: "", - enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', - groupName: '뉴진스(New Jeans)', - userId:1 -}) -const pc2 = PhotoCard.build({ - memberName: '민지', - version: 'A', - photocard: 'ff', - albumName: '', - enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', - groupName: '뉴진스(New Jeans)' -}) +// const pc1 = PhotoCard.build({ +// memberName: '민지', +// version: 'A', +// photocard: 'fff', +// albumName: "", +// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', +// groupName: '뉴진스(New Jeans)', +// userId:1 +// }) +// const pc2 = PhotoCard.build({ +// memberName: '민지', +// version: 'A', +// photocard: 'ff', +// albumName: '', +// enterComp: '어도어 엔터테인먼트(ADOR Entertainment)', +// groupName: '뉴진스(New Jeans)' +// }) // const pc3 = PhotoCard.build({ // memberName: '지민', // version: 'A', @@ -541,39 +531,39 @@ const pc2 = PhotoCard.build({ // groupName: '방탄소년단(BTS)' // }) // ------Polaroid----------- -const pol1 = Polaroid.build({ - polaroidId:1, - polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', - saveDateTime: '2023-11-12 00:00:01' -}) -const pol2 = Polaroid.build({ - polaroidId:2, - polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', - saveDateTime: '2023-11-12 00:00:22' -}) +// const pol1 = Polaroid.build({ +// polaroidId:1, +// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_1.png', +// saveDateTime: '2023-11-12 00:00:01' +// }) +// const pol2 = Polaroid.build({ +// polaroidId:2, +// polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOP_2.png', +// saveDateTime: '2023-11-12 00:00:22' +// }) // const pol3 = Polaroid.build({ // polaroidId:3, // polaroid:'https://ohnpol.s3.ap-northeast-2.amazonaws.com/polaroid/YOPdd.png', // saveDateTime: '2023-11-12 00:00:33' // }) // ------Post----------- -const post1 = Post.build({ - postId:1, - post:'', - postDateTime: '2023-11-23 00:00:01' , - userId: 1, +// const post1 = Post.build({ +// postId:1, +// post:'', +// postDateTime: '2023-11-23 00:00:01' , +// userId: 1, - polaroidId: 1 -}) +// polaroidId: 1 +// }) -const post2 = Post.build({ - postId:2, - post:'', - postDateTime: '2023-11-23 00:00:22' , - userId: 2, +// const post2 = Post.build({ +// postId:2, +// post:'', +// postDateTime: '2023-11-23 00:00:22' , +// userId: 2, - PolaroidPolaroidId: 2 -}) +// PolaroidPolaroidId: 2 +// }) // const post3 = Post.build({ // postId:3, diff --git a/main.js b/main.js index 99cee57..943ee41 100644 --- a/main.js +++ b/main.js @@ -16,6 +16,10 @@ const region = process.env.S3_REGION; const accessKey = process.env.S3_KEYID; const secretAccessKey = process.env.S3_PRIVATEKEY; +console.log('Region:', region); +console.log('Access Key:', accessKey); +console.log('Secret Access Key:', secretAccessKey); + const s3 = new S3Client({ credentials:{ accessKeyId: accessKey, @@ -733,8 +737,39 @@ app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ } }); +//아티스트 즐겨찾기 누르기 +app.post('/community/:artistId/updateFavorite/:userId', async(req, res)=>{ + try { + const userId = req.params.userId; + const artistId = req.params.artistId; + + // Use prepared statement to prevent SQL injection + const sql = 'INSERT INTO Favorites (favoriteQuant, userId, artistId) VALUES (1, ?, ?)'; + con.query(sql, [userId, artistId], (err, result, fields) => { + if (err) { + // Handle SQL error + console.error('SQL error:', err); + res.status(500).send('Internal Server Error'); + return; + } + + // Send a meaningful response to the client + res.status(201).send({ + success: true, + message: 'Favorite added successfully', + data: result, + }); + }); + } catch (error) { + // Handle other errors + console.error('Error:', error); + res.status(500).send('Internal Server Error'); + } +}) + + //polaroid 저장 -app.post('/edit/save/:userId/:photocard', upload.single('image'), async(req, res)=>{ +app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, res)=>{ console.log("req.body", req.body); console.log("req.file", req.file); @@ -743,22 +778,44 @@ app.post('/edit/save/:userId/:photocard', upload.single('image'), async(req, res const imgName = randomImgName(); const params = { Bucket: bucketName, - Key: imgName, + Key: `polaroid/${imgName}`, Body: req.file.buffer, ACL: 'public-read', ContentType: req.file.mimetype + } const command = new PutObjectCommand(params); await s3.send(command); + console.log(command); + + //const userId = req.params.userId; + //const photocard = req.params.photocard.slice(8,); + let today = new Date(); + + let year = today.getFullYear(); // 년도 + let month = today.getMonth() + 1; // 월 + let date = today.getDate(); // 날짜 + let nowdate = `${year}-${month}-${date}`; + + let hours = today.getHours(); // 시 + let minutes = today.getMinutes(); // 분 + let seconds = today.getSeconds(); // 초 + + let time = `${hours}:${minutes}:${seconds}`; + let dateTime = `${nowdate} ${time}`; + console.log(dateTime); + + const image = `https://${process.env.BUCKET_NAME}.s3.${process.env.S3_REGION}.amazonaws.com/polaroid/${imgName}`; const userId = req.params.userId; - const photocard = req.params.photocard.slice(8,); - const sql = `INSERT into Polaroids - VALUE (${imgName}, ${now()}, ?, ?) ` - con.query(sql, [userId, photocard], (err, result, fields)=>{ + const photocardId = req.params.photocardId; + const sql = `INSERT into Polaroids( polaroid, saveDateTime, userUserId, photocardId) + VALUES ( ?, ?, ?, ?) ` + con.query(sql, [image, dateTime, userId, photocardId ], (err, result, fields)=>{ if(err) throw err; res.status(201).send(result); + console.log(result); }) }); From fabdd8a21bce43f35b5a81270632caf57068d93c Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 20 Nov 2023 14:31:49 +0900 Subject: [PATCH 46/66] =?UTF-8?q?API=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/main.js b/main.js index 943ee41..34234db 100644 --- a/main.js +++ b/main.js @@ -97,6 +97,7 @@ app.get('/mainpage/:userId/hot10', async (req, res) => { }) }); +//hot10 좋아요 app.get('/mainpage/:userId/hot10/:postId/like', async(req, res)=>{ const postId = req.params.postId; const sql = `SELECT DISTINCT l.postId, l.likeQuant, pl.polaroid, @@ -319,7 +320,7 @@ app.delete('/community/:artistId/notFavorite/:userId', async(req,res)=>{ const userId = req.params.userId; const sql = `DELETE FROM Likes - WHERE (artistId=? AND userID=?); + WHERE (artistId=? AND userId=?); ` con.query(sql, [artistId, userId], (err, result, fields)=>{ if(err) throw err; @@ -345,27 +346,7 @@ app.get('/community/:artistId/:userId/collectionQuant', async (req, res) => { }) }); -//아티스트 멤버별 이름 및 사진 조회 -// app.get('/community/:artistId/members', async (req, res) => { -// const artistId = req.params.artistId; -// const sql = `SELECT -// memberNum, -// memberPhoto -// FROM artists -// WHERE artistId = ?; `; -// con.query(sql,1, (err, result, fields)=>{ -// if(err) throw err; -// for(let i=0; i { const artistId = req.params.artistId; //const artistId = 1; @@ -737,6 +718,23 @@ app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ } }); +//포스트 좋아요 클릭 해제하기 +app.delete('/post/notLike/:userId/:postId', async(req, res)=>{ + const postId = req.params.artistId; + const userId = req.params.userId; + const sql = `DELETE + FROM Likes + WHERE (postId=? AND userId=?); + ` + con.query(sql, [postId, userId], (err, result, fields)=>{ + if(err) throw err; + const msg = "삭제 완료" + result.message = msg + res.status(200).send(result); + console.log(result); + }) +}); + //아티스트 즐겨찾기 누르기 app.post('/community/:artistId/updateFavorite/:userId', async(req, res)=>{ try { @@ -767,8 +765,8 @@ app.post('/community/:artistId/updateFavorite/:userId', async(req, res)=>{ } }) - -//polaroid 저장 +//edit +//polaroid 도안 저장 app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, res)=>{ console.log("req.body", req.body); console.log("req.file", req.file); From 674261e38b89e42ae1f3210fbb129ea152ff05ea Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 20 Nov 2023 16:19:08 +0900 Subject: [PATCH 47/66] MOD --- main.js | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 119 insertions(+), 11 deletions(-) diff --git a/main.js b/main.js index 34234db..c394e83 100644 --- a/main.js +++ b/main.js @@ -550,10 +550,10 @@ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ const artistId = req.params.artistId; const sql = `SELECT DISTINCT p.postId, p.postDateTime, pl.polaroid, pc.enterComp, pc.groupName, pc.memberName, pc.albumName, - u.nickname, u.userId + u.userId, u.nickname FROM Posts p INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId - INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName + INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId INNER JOIN artists a ON a.groupName = pc.groupName INNER JOIN users u ON p.userId = u.userId WHERE p.userId = ? AND a.artistId=?;`; @@ -650,11 +650,11 @@ app.get('/mypage/:userId/myCollection/:artistId/allCollection', async(req, res)= }); //선택한 컬렉션 전체 포토카드 정보 조회 -app.get('/mypage/:userId/myCollection/:artistId/:collectionId/allPhotocard', async (req, res)=>{ +app.get('/mypage/:userId/myCollection/:albumName/allPhotocard', async (req, res)=>{ const userId = req.params.userId; //const artistId = req.params.artistId; const albumName = req.params.albumName; - const sql = `SELECT pc.photocard, pc.version, pc.memberName, upc.photocardQuant + const sql = `SELECT pc.photocardId, pc.photocard, pc.version, pc.memberName FROM UserCollections uc INNER JOIN collections c ON uc.albumName = c.albumName INNER JOIN photoCards pc ON pc.albumName = uc.albumName @@ -671,15 +671,15 @@ app.get('/mypage/:userId/myCollection/:artistId/:collectionId/allPhotocard', asy }); //선택한 컬렉션 활성화된 포토카드 정보 조회 -app.get('/mypage/:userId/myCollection/:artistId/:collectionId/activePhotocard', async (req, res)=>{ +app.get('/mypage/:userId/myCollection/:albumName/activePhotocard', async (req, res)=>{ const userId = req.params.userId; //const artistId = req.params.artistId; - //const albumName = req.params.albumName; - const sql = `SELECT upc.photocard, pc.version, pc.memberName + const albumName = req.params.albumName; + const sql = `SELECT upc.photocardId, pc.photocard, pc.version, pc.memberName FROM UserPhotoCards upc - INNER JOIN photoCards pc ON pc.photocard = upc.photocard - WHERE upc.userId =?;`; - con.query(sql, [userId], (err, result, fields)=>{ + INNER JOIN photoCards pc ON pc.photocardId = upc.photocardId + WHERE upc.userId =? AND pc.albumName=?;`; + con.query(sql, [userId, albumName], (err, result, fields)=>{ if(err) throw err; const r = { ActivePhotocardList: result @@ -688,6 +688,114 @@ app.get('/mypage/:userId/myCollection/:artistId/:collectionId/activePhotocard', }) }); +//아티스트 탭 정보 조회(도안이 하나라도 있는 경우) +app.get('/mypage/:userId/myPolaroid/artistTab', async(req, res)=>{ + const userId = req.params.userId; + const sql = `SELECT a.artistId, a.groupName FROM artists a + INNER JOIN photoCards pc ON pc.enterComp = a.enterComp + INNER JOIN Polaroids pl ON pl.photocardId = pc.photocardId + WHERE pl.userUserId = ?`; + con.query(sql, [userId], (err, result, fields)=>{ + if(err) throw err; + const r = { + postArtistTabList: result + } + res.status(200).send(r); + }) +}); + +//아티스트 별 활성화한 컬렉션 조회 +app.get('/mypage/:userId/myPolaroid/:artistId/collection', async(req, res)=>{ + const userId = req.params.userId; + const artistId = req.params.artistId; + const sql = `SELECT c.albumJacket, c.albumName + FROM collections c + INNER JOIN UserCollections uc ON uc.albumName = c.albumName + INNER JOIN users u ON u.userId = uc.userId + WHERE uc.userId = ? AND c.artistId = ?;`; + con.query(sql, [userId, artistId], (err, result, fields)=>{ + if(err) throw err; + const r = { + collectionsList:result + } + res.status(200).send(r); + }) +}); + +// 컬렉션 별 도안 개수 조회 +app.get('/mypage/:userId/myPolaroid/:albumName/polaroidQuant', async(req, res)=>{ + const userId = req.params.userId; + const albumName = req.params.albumName; + const sql = `SELECT COUNT(*) AS polaroidQuant + FROM Polaroids pl + INNER JOIN photoCards pc ON pc.photocardId = pl.photocardId + WHERE pl.userUserId = ? AND pc.albumName = ?`; + con.query(sql, [userId, albumName], (err, result, fields)=>{ + if(err) throw err; + res.status(200).send(result[0]); + }) +}) + +//내 도안 보기 +app.get('/mypage/:userId/myPolaroid/:albumName/polaroids', async(req, res)=>{ + const userId = req.params.userId; + const albumName = req.params.albumName; + const sql = `SELECT polaroidId, polaroid, saveDateTime + FROM Polaroids pl + INNER JOIN photoCards pc ON pc.photocardId = pl.photocardId + WHERE pl.userUserId = ? AND pc.albumName = ?`; + con.query(sql, [userId, albumName], (err, result, fields)=>{ + if(err) throw err; + const r = { + myPolariodList: result + } + res.status(200).send(r); + }) +}); + +//내 도안 삭제하기 +app.delete('/mypage/:userId/myPolaroid/:albumName/delete/:polaroidId', async(req, res)=>{ + const userId = req.params.userId; + const albumName = req.params.albumName; + const polaroidId = req.params.polaroidId; + const sql = ``; +}) + +// 좋아요한 포스트 모아보기 +app.get('/mypage/:userId/myLike', async(req, res)=>{ + const userId = req.params.userId; + const sql = `SELECT DISTINCT p.postId, p.postDateTime, pl.polaroid, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + u.userId, u.nickname + FROM Posts p + INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId + INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId + INNER JOIN artists a ON a.groupName = pc.groupName + INNER JOIN users u ON p.userId = u.userId + INNER JOIN Likes l ON p.postId = l.postId + WHERE l.userId = ?;`; + con.query(sql, [userId], (err, result, fields)=>{ + if(err) throw err; + const r = { + likedPostList: result + } + res.status(200).send(r); + }) +}) + +// 좋아요한 포스트 좋아요 개수 조회 +app.get('/mypage/:userId/:postId/likeQuant', async(req, res)=>{ + //const userId = req.params.userId; + const postId = req.params.postId; + const sql = `SELECT COUNT(*) AS postLikeQuant + FROM Likes + WHERE postId = ?`; + con.query(sql, [postId], (err, result, fields)=>{ + if(err) throw err; + res.status(200).send(result[0]); + }) +}) + // 포스트 좋아요 누르기 app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ try { @@ -729,7 +837,7 @@ app.delete('/post/notLike/:userId/:postId', async(req, res)=>{ con.query(sql, [postId, userId], (err, result, fields)=>{ if(err) throw err; const msg = "삭제 완료" - result.message = msg + result.message = msg; res.status(200).send(result); console.log(result); }) From 90da040c3e19ec149a3639d676d3debb7dbefdb1 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 20 Nov 2023 17:02:25 +0900 Subject: [PATCH 48/66] =?UTF-8?q?API=20=ED=99=9C=EC=84=B1=ED=99=94=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=A0=9C=EC=99=B8=20=EB=AA=A8=EB=91=90=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 7 +++- main.js | 113 +++++++++++++++++++++++++++++++++++++------------------- 2 files changed, 82 insertions(+), 38 deletions(-) diff --git a/db.js b/db.js index 792e41a..e91a5fa 100644 --- a/db.js +++ b/db.js @@ -149,6 +149,8 @@ Post.init( postId: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, + allowNull: true }, postDateTime: DataTypes.DATE, @@ -639,7 +641,10 @@ const like1 = Like.build({ // await sequelize.drop(); // console.log('All tables dropped!'); -// await Collection.truncate(); +// await +// await Like.truncate(); +// await Post.truncate(); +// await Polaroid.truncate(); // await Artist.truncate(); diff --git a/main.js b/main.js index c394e83..a0db3a4 100644 --- a/main.js +++ b/main.js @@ -7,6 +7,7 @@ import multer from 'multer'; import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import crypto from 'crypto'; import dotenv from 'dotenv'; +import { join } from 'path'; dotenv.config(); const randomImgName = (bytes=32)=> crypto.randomBytes(bytes).toString('hex'); @@ -468,43 +469,74 @@ app.get('/community/:artistId/allPost/:postId/like', async(req, res)=>{ }); -//도안 게시 - 컬렉션 선택 -app.get('/community/:userId/uploadPost/collection', async (req, res) => { - const artistId = req.params.artistId; - const sql = `SELECT - memberNum, - memberPhoto - FROM artists - WHERE artistId = ?; `; - con.query(sql,[artistId], (err, result, fields)=>{ - if(err) throw err; - const r = { - memberNumandPhoto: result - }; - res.status(200).send(r); - //console.log("아티스트페이지", result); - }) -}); +// //도안 게시 - 컬렉션 선택 +// app.get('/community/:userId/uploadPost/collection', async (req, res) => { +// const artistId = req.params.artistId; +// const sql = `SELECT +// memberNum, +// memberPhoto +// FROM artists +// WHERE artistId = ?; `; +// con.query(sql,[artistId], (err, result, fields)=>{ +// if(err) throw err; +// const r = { +// memberNumandPhoto: result +// }; +// res.status(200).send(r); +// //console.log("아티스트페이지", result); +// }) +// }); -//도안 게시 - 도안 선택 -app.get('/community/:artistId/uploadPost/post', async (req, res) => { - const artistId = req.params.artistId; - const sql = `SELECT - memberNum, - memberPhoto - FROM artists - WHERE artistId = ?; `; - con.query(sql,[artistId], (err, result, fields)=>{ +// //도안 게시 - 도안 선택 +// app.get('/community/:artistId/uploadPost/post', async (req, res) => { +// const artistId = req.params.artistId; +// const sql = `SELECT +// memberNum, +// memberPhoto +// FROM artists +// WHERE artistId = ?; `; +// con.query(sql,[artistId], (err, result, fields)=>{ +// if(err) throw err; +// const r = { +// memberNumandPhoto: result +// }; +// res.status(200).send(r); +// //console.log("아티스트페이지", result); +// }) +// }); + +// 도안 게시(포스팅) +app.post('/community/:userId/uploadPost/:polaroidId/upload', async(req, res)=>{ + + let today = new Date(); + + let year = today.getFullYear(); // 년도 + let month = today.getMonth() + 1; // 월 + let date = today.getDate(); // 날짜 + + let nowdate = `${year}-${month}-${date}`; + + let hours = today.getHours(); // 시 + let minutes = today.getMinutes(); // 분 + let seconds = today.getSeconds(); // 초 + + let time = `${hours}:${minutes}:${seconds}`; + let dateTime = `${nowdate} ${time}`; + + //const image = `https://${process.env.BUCKET_NAME}.s3.${process.env.S3_REGION}.amazonaws.com/polaroid/${imgName}`; + const userId = req.params.userId; + const polaroidId = req.params.polaroidId; + const sql = `INSERT into Posts( postId, postDateTime, userId, polaroidId) + VALUES ( NULL, ?, ?, ?) ` + con.query(sql, [ dateTime, userId, polaroidId ], (err, result, fields)=>{ if(err) throw err; - const r = { - memberNumandPhoto: result - }; - res.status(200).send(r); - //console.log("아티스트페이지", result); + const msg = "포스팅 완료" + result.message = msg; + res.status(201).send(result); + console.log(result); }) }); - //mypage //프로필 정보 조회 app.get('/mypage/:userId/myProfile', async(req, res)=>{ @@ -754,11 +786,18 @@ app.get('/mypage/:userId/myPolaroid/:albumName/polaroids', async(req, res)=>{ }); //내 도안 삭제하기 -app.delete('/mypage/:userId/myPolaroid/:albumName/delete/:polaroidId', async(req, res)=>{ +app.delete('/mypage/:userId/myPolaroid/delete/:polaroidId', async(req, res)=>{ const userId = req.params.userId; - const albumName = req.params.albumName; + //const albumName = req.params.albumName; const polaroidId = req.params.polaroidId; - const sql = ``; + const sql = `DELETE FROM Polaroids WHERE polaroidId = ?;`; + con.query(sql, [polaroidId],(err, result, fields)=>{ + if(err) throw err; + const msg = "삭제 완료" + result.message = msg; + res.status(200).send(result); + console.log(result); + } ) }) // 좋아요한 포스트 모아보기 @@ -916,8 +955,8 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r const image = `https://${process.env.BUCKET_NAME}.s3.${process.env.S3_REGION}.amazonaws.com/polaroid/${imgName}`; const userId = req.params.userId; const photocardId = req.params.photocardId; - const sql = `INSERT into Polaroids( polaroid, saveDateTime, userUserId, photocardId) - VALUES ( ?, ?, ?, ?) ` + const sql = `INSERT into Polaroids( polaroidId, polaroid, saveDateTime, userUserId, photocardId) + VALUES ( NULL, ?, ?, ?, ?) ` con.query(sql, [image, dateTime, userId, photocardId ], (err, result, fields)=>{ if(err) throw err; res.status(201).send(result); From ac2c0bd976723161441c631192af192c3f59a4c2 Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 20 Nov 2023 19:30:15 +0900 Subject: [PATCH 49/66] MOD --- main.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index a0db3a4..4a6fce8 100644 --- a/main.js +++ b/main.js @@ -924,7 +924,8 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r const params = { Bucket: bucketName, Key: `polaroid/${imgName}`, - Body: req.file.buffer, + //Body: req.file.buffer, + Body: req.file, ACL: 'public-read', ContentType: req.file.mimetype From 72343541fd5d8601bdbe93f3d9f950c5e61400ff Mon Sep 17 00:00:00 2001 From: urimJ Date: Mon, 20 Nov 2023 20:27:26 +0900 Subject: [PATCH 50/66] MOD --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index 4a6fce8..7a13288 100644 --- a/main.js +++ b/main.js @@ -925,7 +925,7 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r Bucket: bucketName, Key: `polaroid/${imgName}`, //Body: req.file.buffer, - Body: req.file, + Body: req.file.buffer, ACL: 'public-read', ContentType: req.file.mimetype From dee7e3dc8c9ef8accbe4e1ebc49fe65a1c475624 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 21 Nov 2023 01:15:33 +0900 Subject: [PATCH 51/66] =?UTF-8?q?API=20hot10,=20hot10like=20=EC=98=AC?= =?UTF-8?q?=EB=B0=94=EB=A5=B4=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/main.js b/main.js index 7a13288..c3fb366 100644 --- a/main.js +++ b/main.js @@ -84,11 +84,18 @@ app.get('/mainpage/:userId/favArtist', async (req, res) => { //hot10 app.get('/mainpage/:userId/hot10', async (req, res) => { - const sql = `SELECT postId, COUNT(likeQuant) AS likeCount - FROM Likes - GROUP BY postId - ORDER BY likeCount DESC - LIMIT 10;`; + const sql = `SELECT l.postId, COUNT(*) AS thisisnothing, + pl.polaroid, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + p.userId, u.nickname + FROM Likes l + INNER JOIN Posts p ON p.postId = l.postId + INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId + INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId + INNER JOIN users u ON l.userId = u.userId + GROUP BY l.postId + ORDER BY thisisnothing DESC + LIMIT 10;`; con.query(sql, (err, result, fields)=>{ if(err) throw err; const r = { @@ -101,15 +108,10 @@ app.get('/mainpage/:userId/hot10', async (req, res) => { //hot10 좋아요 app.get('/mainpage/:userId/hot10/:postId/like', async(req, res)=>{ const postId = req.params.postId; - const sql = `SELECT DISTINCT l.postId, l.likeQuant, pl.polaroid, - pc.enterComp, pc.groupName, pc.memberName, pc.albumName, - p.userId, u.nickname - FROM Likes l - INNER JOIN Posts p ON l.postId = p.postId - INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId - INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName - INNER JOIN users u ON u.userId = p.userId - WHERE l.postId = ?;`; + const sql = `SELECT postId, COUNT(*) AS likeQuant + FROM Likes + WHERE postId = ? + GROUP BY postId;`; con.query(sql, [postId], (err, result, fields)=>{ if(err) throw err; const r = { @@ -928,26 +930,23 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r Body: req.file.buffer, ACL: 'public-read', ContentType: req.file.mimetype - } const command = new PutObjectCommand(params); await s3.send(command); console.log(command); - //const userId = req.params.userId; - //const photocard = req.params.photocard.slice(8,); let today = new Date(); - let year = today.getFullYear(); // 년도 - let month = today.getMonth() + 1; // 월 - let date = today.getDate(); // 날짜 + let year = today.getFullYear(); + let month = today.getMonth() + 1; + let date = today.getDate(); let nowdate = `${year}-${month}-${date}`; - let hours = today.getHours(); // 시 - let minutes = today.getMinutes(); // 분 - let seconds = today.getSeconds(); // 초 + let hours = today.getHours(); + let minutes = today.getMinutes(); + let seconds = today.getSeconds(); let time = `${hours}:${minutes}:${seconds}`; let dateTime = `${nowdate} ${time}`; From 65154bdba26efa610d99121205bf7ee3664b537e Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 21 Nov 2023 01:45:31 +0900 Subject: [PATCH 52/66] =?UTF-8?q?API=20=EB=8F=84=EC=95=88=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.js b/main.js index c3fb366..4ed6416 100644 --- a/main.js +++ b/main.js @@ -959,6 +959,8 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r VALUES ( NULL, ?, ?, ?, ?) ` con.query(sql, [image, dateTime, userId, photocardId ], (err, result, fields)=>{ if(err) throw err; + const msg = "도안 저장 완료" + result.message = msg; res.status(201).send(result); console.log(result); }) From 283d89edf1341eec44ae2053c2704cc8fb06b627 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 21 Nov 2023 02:22:14 +0900 Subject: [PATCH 53/66] =?UTF-8?q?=EC=9E=84=EC=8B=9CAPI:=20=EB=9E=9C?= =?UTF-8?q?=EB=8D=A4=20=ED=8F=AC=ED=86=A0=EC=B9=B4=EB=93=9C=20=EB=B6=80?= =?UTF-8?q?=EC=97=AC=20API=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index 4ed6416..3431292 100644 --- a/main.js +++ b/main.js @@ -967,10 +967,51 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r }); +//컬렉션 활성화 +app.post('/mypage/:userId/myCollection/:albumName/collectionActivation', async(req, res)=>{ + const userId = req.params.userId; + const albumName = req.params.albumName; + const code = req.body.code; + + const sql = `INSERT INTO UserCollections + VALUES (1, ?, ?)`; + con.query( sql, [userId, albumName], (err, result, fields)=>{ + if(err) throw err; + const msg = "컬렉션 활성화됨" + result.message = msg; + res.status(201).send(result); + console.log(result); + }) +}); + +//포토카드 랜덤 부여(활성화 임시 버전) +app.post('/mypage/:userId/myCollection/:albumName/cardActivationRandomly', async(req, res)=>{ + const userId = req.params.userId; + const albumName = req.params.albumName; + const sql = `SELECT photocardId + FROM photoCards + WHERE albumName = ?` + con.query(sql, [albumName], (err, result, fields)=>{ + if(err) throw err; + console.log(result); + const randomIndex = getRandomInt(result.length); + const randomCard = parseInt(result[randomIndex-1].photocardId); + const sql2 = `INSERT UserPhotoCards + VALUES (1, ?, ?)`; + con.query(sql2, [userId, randomCard], (err, result, fields)=>{ + if(err) throw err; + + const msg = "랜덤 포토카드 부여" + result.message = msg; + res.status(201).send(result); + console.log(result); + }) + }) +}); app.listen(port, ()=>{ console.log(`Example app listening on ${port}`); -}) +}); // 데이터베이스 연결 종료 // 이는 종료가 필요한 경우에 사용되어야 합니다. From e371439195e50473a5084f8245e0bb6c60c556d8 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 21 Nov 2023 15:47:52 +0900 Subject: [PATCH 54/66] =?UTF-8?q?DB:=20=ED=8F=AC=ED=86=A0=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EC=9D=BC=EB=8C=80=EB=8B=A4=20=EA=B4=80=EA=B3=84=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/db.js b/db.js index e91a5fa..0d15b32 100644 --- a/db.js +++ b/db.js @@ -243,13 +243,7 @@ Artist.belongsToMany(User, { }); await sequelize.sync(); -// 포토카드 -User.hasMany(PhotoCard, { - foreignKey: 'userId' -}); -PhotoCard.belongsTo(User,{ - foreignKey:'userId' -}) + // 컬렉션 User.hasMany(Collection, { foreignKey: 'userId' From 98f5a9d89b9e06b344316d2f98adc746ba566e8f Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 21 Nov 2023 15:56:33 +0900 Subject: [PATCH 55/66] =?UTF-8?q?DB:=20polaroidBackup=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 27 ++++++++++++++++++++++++++- main.js | 9 +++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/db.js b/db.js index 0d15b32..576d22a 100644 --- a/db.js +++ b/db.js @@ -130,7 +130,7 @@ Polaroid.init( allowNull: true }, polaroid: DataTypes.STRING, - saveDateTime: DataTypes.DATE, + saveDateTime: DataTypes.DATE } , { @@ -141,6 +141,31 @@ Polaroid.init( ); await sequelize.sync(); +// 도안백업 +class PolaroidBackup extends Model { +} +PolaroidBackup.init( + { + polaroidId: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement:true, + allowNull: true + }, + polaroid: DataTypes.STRING, + saveDateTime: DataTypes.DATE, + userId: DataTypes.INTEGER, + photocardId: DataTypes.INTEGER + } + , + { + sequelize, + modelName: "polaroidBackup", + timestamps: false + } +); +await sequelize.sync(); + //포스트 class Post extends Model { } diff --git a/main.js b/main.js index 3431292..54722a1 100644 --- a/main.js +++ b/main.js @@ -964,6 +964,15 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r res.status(201).send(result); console.log(result); }) + const sql2 = `INSERT into PolaroidBackups ( polaroidId, polaroid, saveDateTime, userUserId, photocardId) + VALUES ( NULL, ?, ?, ?, ?) ` + con.query(sql2, [image, dateTime, userId, photocardId ], (err, result, fields)=>{ + if(err) throw err; + const msg = "백업 도안 저장 완료" + result.message = msg; + res.status(201).send(result); + console.log(result); + }) }); From ca8d38465b31f4842bdec6d7c885f9236ffe1825 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 21 Nov 2023 16:20:53 +0900 Subject: [PATCH 56/66] =?UTF-8?q?API:=20=EB=82=B4=20=EB=8F=84=EC=95=88=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20API=20=EB=B0=B1=EC=97=85=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=EC=97=90=EC=84=9C=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=B0=8F=20=EC=82=AD=EC=A0=9C=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 77 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/main.js b/main.js index 54722a1..ee6a171 100644 --- a/main.js +++ b/main.js @@ -760,10 +760,10 @@ app.get('/mypage/:userId/myPolaroid/:artistId/collection', async(req, res)=>{ app.get('/mypage/:userId/myPolaroid/:albumName/polaroidQuant', async(req, res)=>{ const userId = req.params.userId; const albumName = req.params.albumName; - const sql = `SELECT COUNT(*) AS polaroidQuant - FROM Polaroids pl - INNER JOIN photoCards pc ON pc.photocardId = pl.photocardId - WHERE pl.userUserId = ? AND pc.albumName = ?`; + const sql = `SELECT COUNT(*) AS polaroidBackupQuant + FROM polaroidBackups plb + INNER JOIN photoCards pc ON pc.photocardId = plb.photocardId + WHERE plb.userId = ? AND pc.albumName = ?`; con.query(sql, [userId, albumName], (err, result, fields)=>{ if(err) throw err; res.status(200).send(result[0]); @@ -775,13 +775,13 @@ app.get('/mypage/:userId/myPolaroid/:albumName/polaroids', async(req, res)=>{ const userId = req.params.userId; const albumName = req.params.albumName; const sql = `SELECT polaroidId, polaroid, saveDateTime - FROM Polaroids pl - INNER JOIN photoCards pc ON pc.photocardId = pl.photocardId - WHERE pl.userUserId = ? AND pc.albumName = ?`; + FROM polaroidBackups plb + INNER JOIN photoCards pc ON pc.photocardId = plb.photocardId + WHERE plb.userId = ? AND pc.albumName = ?`; con.query(sql, [userId, albumName], (err, result, fields)=>{ if(err) throw err; const r = { - myPolariodList: result + myPolariodBackupList: result } res.status(200).send(r); }) @@ -792,10 +792,10 @@ app.delete('/mypage/:userId/myPolaroid/delete/:polaroidId', async(req, res)=>{ const userId = req.params.userId; //const albumName = req.params.albumName; const polaroidId = req.params.polaroidId; - const sql = `DELETE FROM Polaroids WHERE polaroidId = ?;`; + const sql = `DELETE FROM polaroidBackups WHERE polaroidId = ?;`; con.query(sql, [polaroidId],(err, result, fields)=>{ if(err) throw err; - const msg = "삭제 완료" + const msg = "백업 도안 삭제 완료" result.message = msg; res.status(200).send(result); console.log(result); @@ -956,26 +956,47 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r const userId = req.params.userId; const photocardId = req.params.photocardId; const sql = `INSERT into Polaroids( polaroidId, polaroid, saveDateTime, userUserId, photocardId) - VALUES ( NULL, ?, ?, ?, ?) ` - con.query(sql, [image, dateTime, userId, photocardId ], (err, result, fields)=>{ - if(err) throw err; - const msg = "도안 저장 완료" - result.message = msg; - res.status(201).send(result); - console.log(result); - }) - const sql2 = `INSERT into PolaroidBackups ( polaroidId, polaroid, saveDateTime, userUserId, photocardId) - VALUES ( NULL, ?, ?, ?, ?) ` - con.query(sql2, [image, dateTime, userId, photocardId ], (err, result, fields)=>{ - if(err) throw err; - const msg = "백업 도안 저장 완료" - result.message = msg; - res.status(201).send(result); - console.log(result); - }) - + VALUES ( NULL, ?, ?, ?, ?)`; + + const sql2 = `INSERT into polaroidBackups ( polaroidId, polaroid, saveDateTime, userId, photocardId) + VALUES ( NULL, ?, ?, ?, ?)`; + + con.query(sql, [image, dateTime, userId, photocardId], (err, result1, fields) => { + if (err) { + throw err; + } + + const msg = "도안 저장 완료"; + + // 첫 번째 쿼리 결과를 처리하거나 필요에 따라 조정 + + console.log(result1); + + con.query(sql2, [image, dateTime, userId, photocardId], (err, result2, fields) => { + if (err) { + throw err; + } + + const backupMsg = "백업 도안 저장 완료"; + + // 두 번째 쿼리 결과를 처리하거나 필요에 따라 조정 + + console.log(result2); + + // 결합된 응답을 보냄 + const response = { + originalResult: result1, + backupResult: result2, + message: `${msg} / ${backupMsg}`, + }; + + res.status(201).send(response); + console.log(response); + }); + }); }); + //컬렉션 활성화 app.post('/mypage/:userId/myCollection/:albumName/collectionActivation', async(req, res)=>{ const userId = req.params.userId; From 4aa802e68b7dbd1a8f1b397c304e1877a852b911 Mon Sep 17 00:00:00 2001 From: urimJ Date: Tue, 21 Nov 2023 21:52:22 +0900 Subject: [PATCH 57/66] =?UTF-8?q?MOD:=20API=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/main.js b/main.js index ee6a171..d97fd30 100644 --- a/main.js +++ b/main.js @@ -1,13 +1,11 @@ import bodyParser from 'body-parser'; import express from 'express'; import cors from 'cors'; -//import { swaggerUi, specs } from './modules/swagger.js'; import con from './mysql.js'; import multer from 'multer'; import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import crypto from 'crypto'; import dotenv from 'dotenv'; -import { join } from 'path'; dotenv.config(); const randomImgName = (bytes=32)=> crypto.randomBytes(bytes).toString('hex'); @@ -281,6 +279,7 @@ app.get('/artistpage/allArtist', async (req, res) => { // //console.log("아티스트페이지", result); // }) // }); + // 아티스트 프로필 조회 app.get('/community/:artistId/artistProfile', async (req, res) => { const artistId = req.params.artistId; @@ -397,7 +396,7 @@ app.get('/community/:memberName/membersPost', async (req, res) => { FROM Posts p INNER JOIN users u ON p.userId = u.userId INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId - INNER JOIN photoCards pc ON pc.memberName = pl.photocardMemberName + INNER JOIN photoCards pc ON pc.photocardId = pl.photocardId WHERE pc.memberName = ?; `; con.query(sql,[memberName], (err, result, fields)=>{ if(err) throw err; @@ -440,7 +439,7 @@ app.get('/community/:artistId/allPost', async (req, res) => { u.nickname FROM artists a INNER JOIN photoCards pc ON pc.enterComp = a.enterComp - INNER JOIN Polaroids pl ON pc.memberName = pl.photocardMemberName + INNER JOIN Polaroids pl ON pc.photocardId = pl.photocardId INNER JOIN Posts p ON p.polaroidId = pl.polaroidId INNER JOIN users u ON p.userId = u.userId WHERE artistId = ?; ` @@ -470,7 +469,6 @@ app.get('/community/:artistId/allPost/:postId/like', async(req, res)=>{ }) }); - // //도안 게시 - 컬렉션 선택 // app.get('/community/:userId/uploadPost/collection', async (req, res) => { // const artistId = req.params.artistId; @@ -565,7 +563,7 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ const sql = `SELECT DISTINCT pc.groupName, a.artistId FROM Posts p INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId - INNER JOIN photoCards pc ON pl.photocardMemberName = pc.memberName + INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId INNER JOIN artists a ON a.groupName = pc.groupName WHERE p.userId = ?; `; @@ -996,7 +994,6 @@ app.post('/edit/save/:userId/:photocardId', upload.single('image'), async(req, r }); }); - //컬렉션 활성화 app.post('/mypage/:userId/myCollection/:albumName/collectionActivation', async(req, res)=>{ const userId = req.params.userId; From 186d5c81e5d133bd1f9dd54f4a80c49a78624b1a Mon Sep 17 00:00:00 2001 From: urimJ Date: Wed, 22 Nov 2023 12:14:20 +0900 Subject: [PATCH 58/66] =?UTF-8?q?API:=20hot10=20API=20=EC=A2=8B=EC=95=84?= =?UTF-8?q?=EC=9A=94=20=EA=B0=9C=EC=88=98=EC=88=98=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 86 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 31 deletions(-) diff --git a/main.js b/main.js index d97fd30..78cdb0b 100644 --- a/main.js +++ b/main.js @@ -81,44 +81,68 @@ app.get('/mainpage/:userId/favArtist', async (req, res) => { }); //hot10 -app.get('/mainpage/:userId/hot10', async (req, res) => { - const sql = `SELECT l.postId, COUNT(*) AS thisisnothing, - pl.polaroid, - pc.enterComp, pc.groupName, pc.memberName, pc.albumName, - p.userId, u.nickname - FROM Likes l - INNER JOIN Posts p ON p.postId = l.postId - INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId - INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId - INNER JOIN users u ON l.userId = u.userId - GROUP BY l.postId - ORDER BY thisisnothing DESC - LIMIT 10;`; - con.query(sql, (err, result, fields)=>{ - if(err) throw err; - const r = { - hot10List: result - } - res.status(200).send(r); - }) -}); +// app.get('/mainpage/:userId/hot10', async (req, res) => { +// const sql = `SELECT l.postId, COUNT(*) AS thisisnothing, +// pl.polaroid, +// pc.enterComp, pc.groupName, pc.memberName, pc.albumName, +// p.userId, u.nickname +// FROM Likes l +// INNER JOIN Posts p ON p.postId = l.postId +// INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId +// INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId +// INNER JOIN users u ON l.userId = u.userId +// GROUP BY l.postId +// ORDER BY thisisnothing DESC +// LIMIT 10;`; +// con.query(sql, (err, result, fields)=>{ +// if(err) throw err; +// const r = { +// hot10List: result +// } +// res.status(200).send(r); +// }) +// }); -//hot10 좋아요 -app.get('/mainpage/:userId/hot10/:postId/like', async(req, res)=>{ - const postId = req.params.postId; - const sql = `SELECT postId, COUNT(*) AS likeQuant - FROM Likes - WHERE postId = ? - GROUP BY postId;`; - con.query(sql, [postId], (err, result, fields)=>{ +// //hot10 좋아요 +// app.get('/mainpage/:userId/hot10/:postId/like', async(req, res)=>{ +// const postId = req.params.postId; +// const sql = `SELECT postId, COUNT(*) AS likeQuant +// FROM Likes +// WHERE postId = ? +// GROUP BY postId;`; +// con.query(sql, [postId], (err, result, fields)=>{ +// if(err) throw err; +// const r = { +// hot10LikeList : result +// } +// res.status(200).send(r); +// }) +// }) + +//좋아요 합친 버전 +app.get('/mainpage/:userId/hot10', async(req, res)=>{ + const sql = `SELECT l.postId, COUNT(*) AS likeQuant, + pl.polaroid, + pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + p.userId, u.nickname + FROM Likes l + INNER JOIN Posts p ON p.postId = l.postId + INNER JOIN Polaroids pl ON pl.polaroidId = p.polaroidId + INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId + INNER JOIN users u ON p.userId = u.userId + GROUP BY l.postId + ORDER BY likeQuant DESC + LIMIT 10;`; + con.query(sql, (err, result, fields)=>{ if(err) throw err; - const r = { - hot10LikeList : result + const r={ + hot10List:result } res.status(200).send(r); }) }) + //실시간도안 app.get('/mainpage/:userId/now5', async (req, res) => { From cbc028fc848350699157f405af740dc2f6b408e5 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 01:51:10 +0900 Subject: [PATCH 59/66] =?UTF-8?q?DB:=20Like,=20Favorite=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=20auto-increment=20ID=20=EB=B6=80=EC=97=AC?= =?UTF-8?q?=20=20=20=20API:=20=EC=A2=8B=EC=95=84=EC=9A=94=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 12 ++-- main.js | 216 +++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 165 insertions(+), 63 deletions(-) diff --git a/db.js b/db.js index 576d22a..63d4bec 100644 --- a/db.js +++ b/db.js @@ -215,9 +215,10 @@ class Like extends Model { } Like.init( { - likeQuant: { + likeId: { type: DataTypes.INTEGER, - //autoIncrement: true, + autoIncrement: true, + primaryKey: true, } } , @@ -227,7 +228,7 @@ Like.init( timestamps: false } ); - +await sequelize.sync(); User.belongsToMany(Post, { through: 'Like', foreignKey: 'userId', @@ -244,9 +245,10 @@ class Favorite extends Model { } Favorite.init( { - favoriteQuant: { + favoriteId: { type: DataTypes.INTEGER, - //autoIncrement: true, + autoIncrement: true, + primaryKey: true, } } , diff --git a/main.js b/main.js index 78cdb0b..2992596 100644 --- a/main.js +++ b/main.js @@ -406,75 +406,141 @@ app.get('/community/:artistId/members', async (req, res) => { }); //아티스트 멤버별 도안 조회 -app.get('/community/:memberName/membersPost', async (req, res) => { +app.get('/community/:memberName/memberPost', async (req, res) => { const memberName = req.params.memberName; const sql = `SELECT - DISTINCT p.postId, + p.postId, pl.polaroid, - p.userId, pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + p.userId, u.nickname FROM Posts p INNER JOIN users u ON p.userId = u.userId INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId INNER JOIN photoCards pc ON pc.photocardId = pl.photocardId - WHERE pc.memberName = ?; `; - con.query(sql,[memberName], (err, result, fields)=>{ - if(err) throw err; - const r = { - memberPostList: result - }; - res.status(200).send(r); - }) - console.log(req.params); -}); + WHERE pc.memberName = ? + ORDER BY p.postId DESC + ; `; + con.query(sql, [memberName], async (err, result, fields) => { + if (err) throw err; + + const finalResult = []; -// 아티스트 멤버 별 도안 좋아요 수 조회 -app.get('/community/:memberName/memberPost/:postId/like', async(req, res)=>{ - const memberName = req.params.memberName; - const postId = req.params.postId; - const sql = `SELECT postId, COUNT(*) AS likeQuant - FROM Likes - WHERE postId = ?;`; - con.query( sql, [postId], (err, result, fields)=>{ - if(err) throw err; + for (let i = 0; i < result.length; i++) { + const postId = result[i].postId; + + const sql2 = `SELECT l.postId, COUNT(*) AS likeQuant + FROM Likes l + WHERE l.postId = ? + GROUP BY l.postId + ORDER BY l.postId DESC`; + + const likeQuantResult = await new Promise((resolve, reject) => { + con.query(sql2, [postId], (err, result, fields) => { + if (err) reject(err); + resolve(result.length > 0 ? result[0].likeQuant : 0); + // if (result.length > 0) { + // resolve(result[0].likeQuant); + // } else { + // resolve(0); + // } + //만약 결과가 있고, likeQuant 속성이 있다면 해당 값을 사용하고, 그렇지 않으면 기본값으로 0을 사용한다 + }); + }); + + const r = { + ...result[i], + likeQuant: likeQuantResult + }; + + finalResult.push(r); + } const r = { - postLikeQuantList: result + memberPostList:finalResult } + res.status(200).send(r); - }) + }); }); +// // 아티스트 멤버 별 도안 좋아요 수 조회 +// app.get('/community/:memberName/memberPost/:postId/like', async(req, res)=>{ +// const memberName = req.params.memberName; +// const postId = req.params.postId; +// const sql = `SELECT postId, COUNT(*) AS likeQuant +// FROM Likes +// WHERE postId = ?;`; +// con.query( sql, [postId], (err, result, fields)=>{ +// if(err) throw err; +// const r = { +// postLikeQuantList: result +// } +// res.status(200).send(r); +// }) +// }); + //아티스트 전체 도안 조회 app.get('/community/:artistId/allPost', async (req, res) => { const artistId = req.params.artistId; - const sql = `SELECT DISTINCT - a.artistId, + const sql = `SELECT p.postId, pl.polaroid, - p.userId, pc.enterComp, pc.groupName, pc.memberName, pc.albumName, + p.userId, u.nickname - FROM artists a - INNER JOIN photoCards pc ON pc.enterComp = a.enterComp - INNER JOIN Polaroids pl ON pc.photocardId = pl.photocardId - INNER JOIN Posts p ON p.polaroidId = pl.polaroidId + FROM Posts p INNER JOIN users u ON p.userId = u.userId - WHERE artistId = ?; ` - con.query(sql,[artistId], (err, result, fields)=>{ - if(err) throw err; + INNER JOIN Polaroids pl ON p.polaroidId = pl.polaroidId + INNER JOIN photoCards pc ON pc.photocardId = pl.photocardId + INNER JOIN artists a ON pc.enterComp = a.enterComp + WHERE a.artistId = ? + ORDER BY p.postId DESC; ` + con.query(sql, [artistId], async (err, result, fields) => { + if (err) throw err; + + const finalResult = []; + + for (let i = 0; i < result.length; i++) { + const postId = result[i].postId; + + const sql2 = `SELECT l.postId, COUNT(*) AS likeQuant + FROM Likes l + WHERE l.postId = ? + GROUP BY l.postId + ORDER BY l.postId DESC`; + + const likeQuantResult = await new Promise((resolve, reject) => { + con.query(sql2, [postId], (err, result, fields) => { + if (err) reject(err); + resolve(result.length > 0 ? result[0].likeQuant : 0); + // if (result.length > 0) { + // resolve(result[0].likeQuant); + // } else { + // resolve(0); + // } + //만약 결과가 있고, likeQuant 속성이 있다면 해당 값을 사용하고, 그렇지 않으면 기본값으로 0을 사용한다 + }); + }); + + const r = { + ...result[i], + likeQuant: likeQuantResult + }; + + finalResult.push(r); + } const r = { - allPostList: result - }; + allPostList:finalResult + } + res.status(200).send(r); - console.log("아티스트 전체 도안", result); - }) + }); }); // 아티스트 전체 도안 좋아요 수 조회 @@ -836,28 +902,62 @@ app.get('/mypage/:userId/myLike', async(req, res)=>{ INNER JOIN artists a ON a.groupName = pc.groupName INNER JOIN users u ON p.userId = u.userId INNER JOIN Likes l ON p.postId = l.postId - WHERE l.userId = ?;`; - con.query(sql, [userId], (err, result, fields)=>{ - if(err) throw err; + WHERE l.userId = ? + ORDER BY l.likeId DESC;`; + con.query(sql, [userId], async (err, result, fields) => { + if (err) throw err; + + const finalResult = []; + + for (let i = 0; i < result.length; i++) { + const postId = result[i].postId; + + const sql2 = `SELECT l.postId, COUNT(*) AS likeQuant + FROM Likes l + WHERE l.postId = ? + GROUP BY l.postId + `; + + const likeQuantResult = await new Promise((resolve, reject) => { + con.query(sql2, [postId], (err, result, fields) => { + if (err) reject(err); + resolve(result.length > 0 ? result[0].likeQuant : 0); + // if (result.length > 0) { + // resolve(result[0].likeQuant); + // } else { + // resolve(0); + // } + //만약 결과가 있고, likeQuant 속성이 있다면 해당 값을 사용하고, 그렇지 않으면 기본값으로 0을 사용한다 + }); + }); + + const r = { + ...result[i], + likeQuant: likeQuantResult + }; + + finalResult.push(r); + } const r = { - likedPostList: result + myLikeList:finalResult } + res.status(200).send(r); - }) -}) + }); +}); -// 좋아요한 포스트 좋아요 개수 조회 -app.get('/mypage/:userId/:postId/likeQuant', async(req, res)=>{ - //const userId = req.params.userId; - const postId = req.params.postId; - const sql = `SELECT COUNT(*) AS postLikeQuant - FROM Likes - WHERE postId = ?`; - con.query(sql, [postId], (err, result, fields)=>{ - if(err) throw err; - res.status(200).send(result[0]); - }) -}) +// // 좋아요한 포스트 좋아요 개수 조회 +// app.get('/mypage/:userId/:postId/likeQuant', async(req, res)=>{ +// //const userId = req.params.userId; +// const postId = req.params.postId; +// const sql = `SELECT COUNT(*) AS postLikeQuant +// FROM Likes +// WHERE postId = ?`; +// con.query(sql, [postId], (err, result, fields)=>{ +// if(err) throw err; +// res.status(200).send(result[0]); +// }) +// }) // 포스트 좋아요 누르기 app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ @@ -866,7 +966,7 @@ app.post('/post/:userId/:postId/updateLike', async(req, res)=>{ const postId = req.params.postId; // Use prepared statement to prevent SQL injection - const sql = 'INSERT INTO Likes (likeQuant, userId, postId) VALUES (1, ?, ?)'; + const sql = 'INSERT INTO Likes (userId, postId) VALUES ( ?, ?)'; con.query(sql, [userId, postId], (err, result, fields) => { if (err) { // Handle SQL error @@ -913,7 +1013,7 @@ app.post('/community/:artistId/updateFavorite/:userId', async(req, res)=>{ const artistId = req.params.artistId; // Use prepared statement to prevent SQL injection - const sql = 'INSERT INTO Favorites (favoriteQuant, userId, artistId) VALUES (1, ?, ?)'; + const sql = 'INSERT INTO Favorites (userId, artistId) VALUES (?, ?)'; con.query(sql, [userId, artistId], (err, result, fields) => { if (err) { // Handle SQL error From f8700aa1bc061012ccd52c4c7a2321086aac522d Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 01:56:14 +0900 Subject: [PATCH 60/66] =?UTF-8?q?API:=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=ED=95=A9=EC=B9=9C=20=EB=B2=84=EC=A0=84=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=AA=A8=EB=91=90=20=EB=B3=80=EA=B2=BD=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/main.js b/main.js index 2992596..4511bb2 100644 --- a/main.js +++ b/main.js @@ -119,7 +119,7 @@ app.get('/mainpage/:userId/favArtist', async (req, res) => { // }) // }) -//좋아요 합친 버전 +//hot 10 좋아요 합친 버전 app.get('/mainpage/:userId/hot10', async(req, res)=>{ const sql = `SELECT l.postId, COUNT(*) AS likeQuant, pl.polaroid, @@ -678,17 +678,48 @@ app.get('/mypage/:userId/myPost/:artistId/post', async (req, res)=>{ INNER JOIN photoCards pc ON pl.photocardId = pc.photocardId INNER JOIN artists a ON a.groupName = pc.groupName INNER JOIN users u ON p.userId = u.userId - WHERE p.userId = ? AND a.artistId=?;`; - con.query(sql, [userId, artistId], (err, result, fields)=>{ - if(err) throw err; + WHERE p.userId = ? AND a.artistId=? + ORDER BY p.postId DESC;`; + con.query(sql, [userId, artistId], async (err, result, fields) => { + if (err) throw err; + + const finalResult = []; + + for (let i = 0; i < result.length; i++) { + const postId = result[i].postId; + + const sql2 = `SELECT l.postId, COUNT(*) AS likeQuant + FROM Likes l + WHERE l.postId = ? + GROUP BY l.postId;`; + + const likeQuantResult = await new Promise((resolve, reject) => { + con.query(sql2, [postId], (err, result, fields) => { + if (err) reject(err); + resolve(result.length > 0 ? result[0].likeQuant : 0); + // if (result.length > 0) { + // resolve(result[0].likeQuant); + // } else { + // resolve(0); + // } + //만약 결과가 있고, likeQuant 속성이 있다면 해당 값을 사용하고, 그렇지 않으면 기본값으로 0을 사용한다 + }); + }); + + const r = { + ...result[i], + likeQuant: likeQuantResult + }; + + finalResult.push(r); + } const r = { - postOfArtistList: result + myPostList:finalResult } + res.status(200).send(r); - console.log(r); }); }); - //아티스트 별 게시 도안 좋아요 개수 app.get('/mypage/:userId/myPost/:artistId/:postId/like', async(req, res)=>{ const userId = req.params.userId; From d244ac890726a66d0ba3c2a924d8b0fd5e923191 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 17:39:11 +0900 Subject: [PATCH 61/66] =?UTF-8?q?API:=20=EC=95=84=ED=8B=B0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=ED=83=AD=20=EC=9D=B4=EB=A6=84=20=EA=B4=84=ED=98=B8?= =?UTF-8?q?=20=EB=B6=80=EB=B6=84=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.js | 17 ++++---- main.js | 67 ++++++++++++++++++++++++----- package-lock.json | 107 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 + 4 files changed, 175 insertions(+), 18 deletions(-) diff --git a/db.js b/db.js index 63d4bec..443a741 100644 --- a/db.js +++ b/db.js @@ -28,6 +28,7 @@ User.init( primaryKey: true, autoIncrement: true, }, + id: DataTypes.STRING, email: DataTypes.STRING, nickname: DataTypes.STRING, password: DataTypes.STRING, @@ -376,14 +377,14 @@ await sequelize.sync(); // Artist.sync(); // //------------------EXPORT--------------------- -// // export { Artist, -// // Collection, -// // Favorite, -// // Like, -// // PhotoCard, -// // Polaroid, -// // Post, -// // User} +export { Artist, + Collection, + Favorite, + Like, + PhotoCard, + Polaroid, + Post, + User} diff --git a/main.js b/main.js index 4511bb2..7e35e6c 100644 --- a/main.js +++ b/main.js @@ -7,6 +7,18 @@ import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import crypto from 'crypto'; import dotenv from 'dotenv'; dotenv.config(); +import { Strategy as JwtStrategy } from 'passport-jwt'; +import { ExtractJwt as ExtracJwt } from 'passport-jwt'; +//import { User } from 'db.js'; +import { DataTypes, Model, Sequelize } from 'sequelize'; +// import { Artist, +// Favorite, +// Collection, +// Like, +// PhotoCard, +// Polaroid, +// Post, +// User } from './db.js'; const randomImgName = (bytes=32)=> crypto.randomBytes(bytes).toString('hex'); @@ -27,22 +39,34 @@ const s3 = new S3Client({ region: region }); -// import { Artist, -// Favorite, -// Collection, -// Like, -// PhotoCard, -// Polaroid, -// Post, -// User } from './db.js'; - const app = express(); const port = 3000; const storage = multer.memoryStorage(); const upload = multer({ storage: storage}); +//로그인 관련 +const options = { + jwtFromRequest: ExtracJwt.fromAuthHeaderAsBearerToken(), + secretOrkey: 'secret', + algorithms: ['RS256'] +} +// const strategy = new JwtStrategy(options, (payload, done)=>{ +// User.findOne({where: {id: payload.sub}}) +// .then((user)=>{ +// if(user){ +// return done(null, user); +// }else{ +// return done(null, false); +// } +// }) +// .catch(err => done(err, null)); +// }); + +// module.exports = (passport)=>{ +// passport.use(strategy); +// } app.use(bodyParser.json()); const corsOptions = { @@ -53,7 +77,6 @@ app.use(cors(corsOptions)); app.use(express.json()); //app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs)) - const getRandomInt = (max) => { return Math.floor(Math.random() * max); } @@ -62,6 +85,20 @@ app.get('/', async(req, res)=>{ res.send('Hello World!'); }) +//회원 +app.get('/protected', async(req, res, next)=>{ + +}); + +app.post('/login', async(req, res, next)=>{ + +}); + +app.post('/register', async(req, res, next)=>{ + +}); + + //mainpage //즐겨찾는 아티스트 app.get('/mainpage/:userId/favArtist', async (req, res) => { @@ -657,8 +694,12 @@ app.get('/mypage/:userId/myPost/artistTab', async(req, res)=>{ INNER JOIN artists a ON a.groupName = pc.groupName WHERE p.userId = ?; `; + con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; + result.forEach(item => { + item.groupName = item.groupName.replace(/\([^)]*\)/, '').trim(); + }); const r = { postArtistList: result } @@ -760,6 +801,9 @@ app.get('/mypage/:userId/myCollection/artistTab', async (req, res)=>{ WHERE userId = ?;`; con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; + result.forEach(item => { + item.groupName = item.groupName.replace(/\([^)]*\)/, '').trim(); + }); const r = { collectionArtistList: result } @@ -850,6 +894,9 @@ app.get('/mypage/:userId/myPolaroid/artistTab', async(req, res)=>{ WHERE pl.userUserId = ?`; con.query(sql, [userId], (err, result, fields)=>{ if(err) throw err; + result.forEach(item => { + item.groupName = item.groupName.replace(/\([^)]*\)/, '').trim(); + }); const r = { postArtistTabList: result } diff --git a/package-lock.json b/package-lock.json index 0b21130..0cb58cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,10 +14,12 @@ "cross-env": "^7.0.3", "dotenv": "^16.3.1", "express": "^4.18.2", + "jsonwebtoken": "^9.0.2", "multer": "^1.4.5-lts.1", "mysql": "^2.18.1", "mysql2": "^3.6.2", "nodemon": "^3.0.1", + "passport-jwt": "^4.0.1", "pm2": "^5.3.0", "sequelize": "^6.33.0" }, @@ -2316,6 +2318,11 @@ "node": ">=8" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2682,6 +2689,14 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3350,6 +3365,46 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/lazy": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", @@ -3369,18 +3424,53 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "dev": true }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "node_modules/lodash.mergewith": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "node_modules/log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -3834,6 +3924,23 @@ "node": ">= 0.8" } }, + "node_modules/passport-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "dependencies": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", diff --git a/package.json b/package.json index c5172e4..b3bdef2 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,12 @@ "cross-env": "^7.0.3", "dotenv": "^16.3.1", "express": "^4.18.2", + "jsonwebtoken": "^9.0.2", "multer": "^1.4.5-lts.1", "mysql": "^2.18.1", "mysql2": "^3.6.2", "nodemon": "^3.0.1", + "passport-jwt": "^4.0.1", "pm2": "^5.3.0", "sequelize": "^6.33.0" }, From cb3fc6cbbda5a468b2727ded09c3ac3eecd5acb9 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 17:49:24 +0900 Subject: [PATCH 62/66] MOD --- main.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/main.js b/main.js index 7e35e6c..c312319 100644 --- a/main.js +++ b/main.js @@ -7,10 +7,10 @@ import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import crypto from 'crypto'; import dotenv from 'dotenv'; dotenv.config(); -import { Strategy as JwtStrategy } from 'passport-jwt'; -import { ExtractJwt as ExtracJwt } from 'passport-jwt'; -//import { User } from 'db.js'; -import { DataTypes, Model, Sequelize } from 'sequelize'; +// import { Strategy as JwtStrategy } from 'passport-jwt'; +// import { ExtractJwt as ExtracJwt } from 'passport-jwt'; +// //import { User } from 'db.js'; +// import { DataTypes, Model, Sequelize } from 'sequelize'; // import { Artist, // Favorite, // Collection, @@ -45,12 +45,12 @@ const port = 3000; const storage = multer.memoryStorage(); const upload = multer({ storage: storage}); -//로그인 관련 -const options = { - jwtFromRequest: ExtracJwt.fromAuthHeaderAsBearerToken(), - secretOrkey: 'secret', - algorithms: ['RS256'] -} +// //로그인 관련 +// const options = { +// jwtFromRequest: ExtracJwt.fromAuthHeaderAsBearerToken(), +// secretOrkey: 'secret', +// algorithms: ['RS256'] +// } // const strategy = new JwtStrategy(options, (payload, done)=>{ // User.findOne({where: {id: payload.sub}}) @@ -85,18 +85,18 @@ app.get('/', async(req, res)=>{ res.send('Hello World!'); }) -//회원 -app.get('/protected', async(req, res, next)=>{ +// 회원 +// app.get('/protected', async(req, res, next)=>{ -}); +// }); -app.post('/login', async(req, res, next)=>{ +// app.post('/login', async(req, res, next)=>{ -}); +// }); -app.post('/register', async(req, res, next)=>{ +// app.post('/register', async(req, res, next)=>{ -}); +// }); //mainpage From 1ddd12296cd8b3587883bee439795a5eac27b874 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 18:05:10 +0900 Subject: [PATCH 63/66] =?UTF-8?q?API:=20=EB=8F=84=EC=95=88=EC=95=84?= =?UTF-8?q?=ED=8B=B0=EC=8A=A4=ED=8A=B8=ED=83=AD=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index c312319..b351b44 100644 --- a/main.js +++ b/main.js @@ -7,10 +7,9 @@ import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import crypto from 'crypto'; import dotenv from 'dotenv'; dotenv.config(); -// import { Strategy as JwtStrategy } from 'passport-jwt'; -// import { ExtractJwt as ExtracJwt } from 'passport-jwt'; -// //import { User } from 'db.js'; -// import { DataTypes, Model, Sequelize } from 'sequelize'; +import { Strategy as JwtStrategy } from 'passport-jwt'; +import { ExtractJwt as ExtracJwt } from 'passport-jwt'; +import { DataTypes, Model, Sequelize } from 'sequelize'; // import { Artist, // Favorite, // Collection, @@ -888,7 +887,7 @@ app.get('/mypage/:userId/myCollection/:albumName/activePhotocard', async (req, r //아티스트 탭 정보 조회(도안이 하나라도 있는 경우) app.get('/mypage/:userId/myPolaroid/artistTab', async(req, res)=>{ const userId = req.params.userId; - const sql = `SELECT a.artistId, a.groupName FROM artists a + const sql = `SELECT DISTINCT a.artistId, a.groupName FROM artists a INNER JOIN photoCards pc ON pc.enterComp = a.enterComp INNER JOIN Polaroids pl ON pl.photocardId = pc.photocardId WHERE pl.userUserId = ?`; @@ -898,7 +897,7 @@ app.get('/mypage/:userId/myPolaroid/artistTab', async(req, res)=>{ item.groupName = item.groupName.replace(/\([^)]*\)/, '').trim(); }); const r = { - postArtistTabList: result + polaroidArtistTabList: result } res.status(200).send(r); }) From a0b8789714b4bcd0c2644d840ebd8af87757437f Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 18:11:26 +0900 Subject: [PATCH 64/66] =?UTF-8?q?MOD=20=EC=A3=BC=EC=84=9D=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/main.js b/main.js index b351b44..765aa48 100644 --- a/main.js +++ b/main.js @@ -7,9 +7,9 @@ import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import crypto from 'crypto'; import dotenv from 'dotenv'; dotenv.config(); -import { Strategy as JwtStrategy } from 'passport-jwt'; -import { ExtractJwt as ExtracJwt } from 'passport-jwt'; -import { DataTypes, Model, Sequelize } from 'sequelize'; +// import { Strategy as JwtStrategy } from 'passport-jwt'; +// import { ExtractJwt as ExtracJwt } from 'passport-jwt'; +// import { DataTypes, Model, Sequelize } from 'sequelize'; // import { Artist, // Favorite, // Collection, @@ -74,7 +74,6 @@ const corsOptions = { }; app.use(cors(corsOptions)); app.use(express.json()); -//app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs)) const getRandomInt = (max) => { return Math.floor(Math.random() * max); From df0b2d5131039e92466af03533bce2612cae721b Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 20:18:08 +0900 Subject: [PATCH 65/66] =?UTF-8?q?CI/CD=20=EC=8B=A4=20=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yaml | 14 ++++++++++++++ main.js | 1 + 2 files changed, 15 insertions(+) create mode 100644 .github/workflows/main.yaml diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 0000000..152f17b --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,14 @@ +name: "온폴 CI/CD 실습" + +on: + push: + branches: + - feat/api + tag: + - release.* + +jobs: + Job1: + runs-on: ubuntu-latest + steps: + -run: echo "내용...${{ github.repository }}" \ No newline at end of file diff --git a/main.js b/main.js index 765aa48..91d9cd0 100644 --- a/main.js +++ b/main.js @@ -7,6 +7,7 @@ import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import crypto from 'crypto'; import dotenv from 'dotenv'; dotenv.config(); + // import { Strategy as JwtStrategy } from 'passport-jwt'; // import { ExtractJwt as ExtracJwt } from 'passport-jwt'; // import { DataTypes, Model, Sequelize } from 'sequelize'; From 8ee1e947aa3e7e6607402cad72c971d24ae71f71 Mon Sep 17 00:00:00 2001 From: urimJ Date: Thu, 23 Nov 2023 20:23:58 +0900 Subject: [PATCH 66/66] =?UTF-8?q?CI/CD=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 152f17b..ae1910f 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -4,11 +4,12 @@ on: push: branches: - feat/api - tag: + tags: - release.* jobs: Job1: runs-on: ubuntu-latest steps: - -run: echo "내용...${{ github.repository }}" \ No newline at end of file + -run: echo "내용...${{ github.repository }}" + -uses: actions/setup-node@v4 \ No newline at end of file