Skip to content

Commit

Permalink
Merge pull request #17 from goormthon-Univ/revert-16-feat/dev-mypage
Browse files Browse the repository at this point in the history
Revert "[feat] mypage 완성"
  • Loading branch information
uommou authored Mar 23, 2024
2 parents 67374c8 + 59798a8 commit a101d5c
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 205 deletions.
24 changes: 4 additions & 20 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Node.js CI/CD

on:
push:
branches: [ main, dev, feat/cicd ]
branches: [ main, feat/cicd ]
pull_request:
branches: [ main ]

Expand Down Expand Up @@ -52,30 +52,14 @@ jobs:
uses: docker/build-push-action@v2
with:
push: true
tags: asia-northeast3-docker.pkg.dev/ancient-ivy-416408/groom/${{ github.ref == 'refs/heads/main' && 'decalcomanie' || 'decalcomanie-dev' }}:latest
tags: asia-northeast3-docker.pkg.dev/ancient-ivy-416408/groom/decalcomanie:latest
file: Dockerfile
context: .

- name: Deploy to Cloud Run
uses: google-github-actions/[email protected]
with:
service: ${{ github.ref == 'refs/heads/main' && 'decalcomanie' || 'decalcomanie-dev' }}
image: asia-northeast3-docker.pkg.dev/ancient-ivy-416408/groom/${{ github.ref == 'refs/heads/main' && 'decalcomanie' || 'decalcomanie-dev' }}:latest
service: decalcomanie
image: asia-northeast3-docker.pkg.dev/ancient-ivy-416408/groom/decalcomanie:latest
region: asia-northeast3
credentials: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}

# - name: Build and push Docker image
# uses: docker/build-push-action@v2
# with:
# push: true
# tags: asia-northeast3-docker.pkg.dev/ancient-ivy-416408/groom/decalcomanie:latest
# file: Dockerfile
# context: .

# - name: Deploy to Cloud Run
# uses: google-github-actions/[email protected]
# with:
# service: decalcomanie
# image: asia-northeast3-docker.pkg.dev/ancient-ivy-416408/groom/decalcomanie:latest
# region: asia-northeast3
# credentials: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
54 changes: 14 additions & 40 deletions controller/chatGpt.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ const chatGpiApi = async (req, res) => {
const query_comments = crawlResult.comments.map((comment, index) => `comment ${index + 1}: ${comment}`).join('\n');
// console.log(query_comments);

//const message = prompt + query_comments;
const message = prompt + query_comments;
// 죄종 버전은 원샷 추가하기
const message = prompt + oneShot + query_comments;
//const message = prompt + oneShot + query_comments;

// ChatGPT API에 요청을 보내기 위한 데이터 준비
const data = {
Expand Down Expand Up @@ -81,51 +81,25 @@ const chatGpiApi = async (req, res) => {
feedback: contentOnly
};

const userId = req.id; // 인증 미들웨어에서 추가된 사용자 ID

// 웹툰 생성 또는 찾기
const [createdWebtoon, created] = await models.webtoon.findOrCreate({
where: { webtoon_title: crawlResult.title },
defaults: {
webtoon_title: crawlResult.title,
user_id: userId // 웹툰과 관련된 사용자 ID 추가
}
// 웹툰 생성
const createdWebtoon = await models.webtoon.create({
webtoon_title: crawlResult.title
});

// 생성된 웹툰의 ID 가져오기
const webtoonId = createdWebtoon.id;

// 데이터베이스에 피드백 저장 또는 업데이트
const feedbackExists = await models.feedback.findOne({
where: {
subtitle: crawlResult.subtitle,
webtoon_id: webtoonId
}
// 데이터베이스에 저장
models.feedback.create({
link: url, // 링크
feedback: contentOnly, // 필터링된 댓글
subtitle: crawlResult.subtitle, // 소제목
webtoon_id: webtoonId // 웹툰 ID 추가
});

if (feedbackExists) {
// 동일한 소제목을 가진 피드백이 존재한다면, 업데이트
await models.feedback.update({
link: url, // 링크 업데이트
feedback: contentOnly, // 필터링된 댓글 업데이트
number: crawlResult.number,
comments: query_comments, // 댓글들 업데이트
}, {
where: {
id: feedbackExists.id // 업데이트할 피드백 ID 지정
}
});
} else {
// 존재하지 않는다면, 새로운 피드백 생성
await models.feedback.create({
link: url, // 링크
feedback: contentOnly, // 필터링된 댓글
number: crawlResult.number,
subtitle: crawlResult.subtitle, // 소제목
comments: query_comments, // 댓글들
webtoon_id: webtoonId, // 웹툰 ID 추가
});
}
models.webtoon.create({
webtoon_title: crawlResult.title
});

// 클라이언트에 응답 반환
res.json(gptFeedback);
Expand Down
148 changes: 40 additions & 108 deletions controller/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,120 +40,52 @@ const signupApi = (req, res) => {
});
}

const loginApi = async (req, res) => {
try {
const foundData = await models.user.findOne({
where: {
email: req.body.email
}
});

const loginApi = (req, res) => {
models.user.findOne({
where: {
email: req.body.email
}
})
.then((foundData) => {
if (!foundData) {
return res.status(404).json({ error: "해당 이메일이 없습니다." });
}

const passwordMatch = await bcrypt.compare(req.body.password, foundData.password);

if (passwordMatch) {
const accessToken = jwt.sign({
id: foundData.id,
email: foundData.email,
name: foundData.name,
}, "accesstoken", {
expiresIn: '1d', // 여기에서 토큰 만료 시간을 1일로 설정
issuer: "About Tech",
});

// 액세스 토큰을 응답 본문에 포함시킴
return res.status(200).json({ message: "success login!", accessToken });
} else {
return res.status(401).json({ error: "비밀번호가 일치하지 않습니다." });
}
} catch (error) {
console.error('로그인 중 에러 발생:', error);
return res.status(500).send(error);
}
}

const feedbackListApi = async (req, res) => {
try {
const userId = req.id; // 요청에서 사용자 ID 가져오기

// webtoon TB에서 가져오기
const userWebtoons = await models.webtoon.findAll({
where: {
user_id: userId
},
attributes: ['id', 'webtoon_title'] // 'webtoon_title'을 'title'로 변경, 데이터베이스 스키마에 맞게 조정 필요
});

const feedbacks_array = [];

for (const userWebtoon of userWebtoons) {
const webtoonId = userWebtoon.id;

// feedback TB에서 가져오기
const webtoonFeedbacks = await models.feedback.findAll({
where: {
webtoon_id: webtoonId
},
attributes: ['number', 'subtitle'] // 필요한 속성만 지정
bcrypt.compare(req.body.password, foundData.password, function(err, result) {
if (err) throw err;
if (result) {
console.log("로그인 성공!");
try {
const accessToken = jwt.sign({ // jwt생성
id: foundData.id,
email: foundData.email,
name: foundData.name,
}, "accesstoken", {
expiresIn: '1h',
issuer: "About Tech",
});

res.cookie("accessToken", accessToken, { // 클라이언트에게 쿠키 전달
secure: false, // https면 true
httpOnly: true,
});
return res.status(200).json({ message: "success login!" });
} catch (error) {
console.log(error);
return res.status(500).send(error);
}
} else {
return res.status(401).json({ error: "비밀번호가 일치하지 않습니다." });
}
});

// 각 웹툰의 feedbacks를 조정하여 원하는 형식으로 만들기
const feedbacksFormatted = webtoonFeedbacks.map(feedback => ({
title: userWebtoon.webtoon_title, // 각 feedback에 웹툰 제목 추가
number: feedback.number,
subtitle: feedback.subtitle
}));

feedbacks_array.push(...feedbacksFormatted); // 수정된 feedbacks를 최종 배열에 추가
}

// 최종 결과 객체 생성
const result = {
id: req.id,
name: req.name,
email: req.email,
webtoons: feedbacks_array
};

// JSON 형태로 반환
return res.json(result);
} catch (error) {
console.error("Error fetching user webtoons:", error);
return res.status(500).send("Internal Server Error");
}
})
}

const feedbackSingleApi = async (req, res) => {
const { webtoon_title, feedback_number } = req.body;
try {
const webtoon = await models.webtoon.findOne({
where: { webtoon_title: webtoon_title }
});

if (!webtoon) {
return res.status(404).json({ error: "웹툰을 찾을 수 없습니다." });
}

const feedback = await models.feedback.findOne({
where: {
webtoon_id: webtoon.id,
number: feedback_number
}
});

if (!feedback) {
return res.status(404).json({ error: "해당 회차의 피드백을 찾을 수 없습니다." });
}

res.json({ feedback: feedback.feedback }); // 수정된 응답 방식
} catch (error) {
console.error("피드백 조회 중 오류 발생:", error);
res.status(500).json({ error: "서버 내부 오류가 발생했습니다." });
}
}
// const myPageApi = (req, res) => {
// const userInfo = { name: req.name, email: req.email };
// // 추가로 필터링된 댓글도 포함하기
// return res.json(userInfo);
// }

const testApi = (req, res) => {
const name = req.body.name;
Expand All @@ -166,4 +98,4 @@ const testApi = (req, res) => {
}
}

module.exports = {hiApi, loginApi, signupApi, testApi, feedbackListApi, feedbackSingleApi};
module.exports = {hiApi, loginApi, signupApi, testApi };
36 changes: 23 additions & 13 deletions results.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
{
"title": "99대장",
"number": "016",
"subtitle": "16화",
"title": "경이로운 소문",
"number": "179",
"subtitle": "[시즌3] 43화",
"comments": [
"ㅋㅋㅋㅋㅋㅋㅋ 내 웹툰 역사상 댓글 4개 웹툰은 처음이다",
"1분컷 내용 잘봤습니다~",
"대사 9할이 욕이네...",
"지렷다 Ga!!!!!!!!",
"핫 열번째 댓글",
"....너는 이딱았니....;;;;;",
"나선욱 신격화 쩐다ㅋㅋㅋㅋ",
"캐쉬가 남아서 안볼려다 안볼려다 보는데\n진짜 별 내용 없네요 ㅡㅡ \n진짜 제 손꾸락을 원망합니다 흑흑 \n찐독자분들 화이팅요 전 남은편 마져 보고 \n갑니다",
"님들 님들은 며칠 후나 몇주 뒤 보겠지만 전 아니랍니다 호홓",
"Ga라고 했다고 다 Ga고 댓글도없네 ㅋㅋㅋㅋ"
"진짜 도정우..가족은 건들지마라;;\n양심 뒤진건 아는데 예로부터 가좍이나 친구들을 건드리는 건 각성제라고도 불렸다..\n니 죽을때 조금 더 편히 가려면 적당히 하고 자수해라 호구 자슥아..,",
"적봉이한테 땅 버프 걸면 감지거리 더 늘지 않나?",
"진짜 가족은 건들지 말자^^",
"도정우 이래 건들면 죽여버린다(소문이가)",
"오늘 화를 보니\nHIH가 매우 체계적인 조직으로\n6악인 지부장 위 수뇌도 있을 법함\n 시즌4에서 길게 풀어 주실 듯",
"대륙을 관리하는 6명의 지부장 폼 미쳤다...! \n시즌 넘어간다고 뇌절로 안가고 세계관 확장 \n너무 스무스하네요",
"도정우가 이래 잡으러 움직일텐데, 작품 특성상 비극적인 결말일리는 없지만 뻔한 클리셰도 항상 예측 불가능하게 전개하셔서 이번에도 전혀 예상이 안 되네",
"도정우가 어떻게 이 작면들을 본거죠? 누구 기억을 본거에요? 건물 위에 있어서 못봤었는데",
"정우얀;;이래 건들면 너는 그때 소문이한테 죽는거야..상황파확안 되니..?",
"아 참말로다가 저거 도정우 진짜 쓰레기 저거 지옥가도 모자를 녀석이 이제 이래까지 건드냐 진짜 너 그러면 안돼",
"자가님 \n몇편까지 \n시원하게 백편가시죠\n충전도 만땅했는데",
"가 족같네....",
"나만 썸네일에 있는 눈 회장님이라고 생각함..?\n회장님 각성하는 줄 알았는데…ㅜㅜ",
"정우야 이래 건들면 죽여버린다",
"도정우 이♪♪♬, 이래 죽이러 가나보다. 애들이 빨리 알아차려야돼. 늦으면 안돼~",
"도정우 가족 건들면 소문이가 잡으러 간다",
"가족 건들지 마라",
"와 도정우시키 끝까지... 소문이가 얼마나 더 강해져서 어떤식으로 융으로 보내버릴지 기대된다",
"사람이 각성하는 상황 top 5\n1.가족 건들때\n2.연인 건들때\n3.동생이나 형,언니 등 이 라면 한입만이라 할때\n4.화장실에서 볼일볼때\n5.롤 승급전 할때",
"저런 학폭의 가해자는 절대로 바뀌지 않는다. 판사나부랭이들아 “반성의 여지가 있고, 초범인 점을 감안해…” 이딴 판결은 장발장에게 하고, 도정우나 은진이년 같은 경우는 병으로 간주하여 영구히 격리병동 수준의 감옥으로 보내는 것이 마땅하다."
]
}
Loading

0 comments on commit a101d5c

Please sign in to comment.