Skip to content

Commit

Permalink
Merge pull request #5 from RE-FIT/es6
Browse files Browse the repository at this point in the history
[refactor]: ES6 모듈 적용
  • Loading branch information
Gseungmin authored Sep 29, 2023
2 parents e55f301 + ddee72a commit e469f14
Show file tree
Hide file tree
Showing 12 changed files with 552 additions and 485 deletions.
89 changes: 44 additions & 45 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CD

on:
push:
branches: [ "master" ]
branches: ["master"]

permissions:
contents: read
Expand All @@ -12,54 +12,53 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v3

- name: Clear .env file
run: echo "" > .env
- name: Clear .env file
run: echo "" > .env

- name: Set .env file
run: |
echo "PORT=${{ secrets.PORT }}" >> .env
echo "OAUTH_URL=${{ secrets.OAUTH_URL }}" >> .env
echo "MONGO_DB=${{ secrets.MONGO_DB }}" >> .env
echo "FIREBASE_TYPE=${{ secrets.FIREBASE_TYPE }}" >> .env
echo "FIREBASE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}" >> .env
echo "FIREBASE_PRIVATE_KEY_ID=${{ secrets.FIREBASE_PRIVATE_KEY_ID }}" >> .env
echo "FIREBASE_PRIVATE_KEY=${{ secrets.FIREBASE_PRIVATE_KEY }}" >> .env
echo "FIREBASE_CLIENT_EMAIL=${{ secrets.FIREBASE_CLIENT_EMAIL }}" >> .env
echo "FIREBASE_CLIENT_ID=${{ secrets.FIREBASE_CLIENT_ID }}" >> .env
echo "FIREBASE_AUTH_URI=${{ secrets.FIREBASE_AUTH_URI }}" >> .env
echo "FIREBASE_TOKEN_URI=${{ secrets.FIREBASE_TOKEN_URI }}" >> .env
echo "FIREBASE_AUTH_PROVIDER_X509_CERT_URL=${{ secrets.FIREBASE_AUTH_PROVIDER_X509_CERT_URL }}" >> .env
echo "FIREBASE_CLIENT_X509_CERT_URL=${{ secrets.FIREBASE_CLIENT_X509_CERT_URL }}" >> .env
echo "FIREBASE_UNIVERSE_DOMAIN=${{ secrets.FIREBASE_UNIVERSE_DOMAIN }}" >> .env
- name: Set .env file
run: |
echo "PORT=${{ secrets.PORT }}" >> .env
echo "OAUTH_URL=${{ secrets.OAUTH_URL }}" >> .env
echo "MONGO_DB=${{ secrets.MONGO_DB }}" >> .env
echo "FIREBASE_TYPE=${{ secrets.FIREBASE_TYPE }}" >> .env
echo "FIREBASE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}" >> .env
echo "FIREBASE_PRIVATE_KEY_ID=${{ secrets.FIREBASE_PRIVATE_KEY_ID }}" >> .env
echo "FIREBASE_PRIVATE_KEY=${{ secrets.FIREBASE_PRIVATE_KEY }}" >> .env
echo "FIREBASE_CLIENT_EMAIL=${{ secrets.FIREBASE_CLIENT_EMAIL }}" >> .env
echo "FIREBASE_CLIENT_ID=${{ secrets.FIREBASE_CLIENT_ID }}" >> .env
echo "FIREBASE_AUTH_URI=${{ secrets.FIREBASE_AUTH_URI }}" >> .env
echo "FIREBASE_TOKEN_URI=${{ secrets.FIREBASE_TOKEN_URI }}" >> .env
echo "FIREBASE_AUTH_PROVIDER_X509_CERT_URL=${{ secrets.FIREBASE_AUTH_PROVIDER_X509_CERT_URL }}" >> .env
echo "FIREBASE_CLIENT_X509_CERT_URL=${{ secrets.FIREBASE_CLIENT_X509_CERT_URL }}" >> .env
echo "FIREBASE_UNIVERSE_DOMAIN=${{ secrets.FIREBASE_UNIVERSE_DOMAIN }}" >> .env
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 18.16.0
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 18.16.0

- name: Install Dependencies
run: npm ci
- name: Install Dependencies
run: npm ci

- name: Build App
run: npm run build
- name: Build App
run: npm run build

- name: Docker Build and Push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t ${{ secrets.DOCKER_REPO }}/refit-node .
docker push ${{ secrets.DOCKER_REPO }}/refit-node
- name: Deploy
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ubuntu
key: ${{ secrets.KEY }}
script: |
sudo docker rm -f $(docker ps -qa)
sudo docker pull ${{ secrets.DOCKER_REPO }}/refit-node
docker-compose up -d
docker image prune -f
- name: Docker Build and Push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t ${{ secrets.DOCKER_REPO }}/refit-node .
docker push ${{ secrets.DOCKER_REPO }}/refit-node
- name: Deploy
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ubuntu
key: ${{ secrets.KEY }}
script: |
sudo docker rm -f $(docker ps -qa)
sudo docker pull ${{ secrets.DOCKER_REPO }}/refit-node
docker-compose up -d
docker image prune -f
35 changes: 19 additions & 16 deletions db.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
const mongoose = require('mongoose');
require('dotenv').config()
import mongoose from "mongoose";
import dotenv from "dotenv";

const connectDB = async () => {
try {

await mongoose.connect(process.env.MONGO_DB, {useNewUrlParser: true, useUnifiedTopology: true});
dotenv.config();

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("Connected to MongoDB!");
});
const connectDB = async () => {
try {
await mongoose.connect(process.env.MONGO_DB, {
useNewUrlParser: true,
useUnifiedTopology: true,
});

} catch (error) {
console.error('Could not connect to MongoDB!', error);
process.exit(1);
}
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function () {
console.log("Connected to MongoDB!");
});
} catch (error) {
console.error("Could not connect to MongoDB!", error);
process.exit(1);
}
};

module.exports = connectDB;
export default connectDB;
32 changes: 17 additions & 15 deletions firebaseConfig.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
require('dotenv').config();
import dotenv from "dotenv";

dotenv.config();

const firebaseConfig = {
type: process.env.FIREBASE_TYPE,
project_id: process.env.FIREBASE_PROJECT_ID,
private_key_id: process.env.FIREBASE_PRIVATE_KEY_ID,
private_key: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'),
client_email: process.env.FIREBASE_CLIENT_EMAIL,
client_id: process.env.FIREBASE_CLIENT_ID,
auth_uri: process.env.FIREBASE_AUTH_URI,
token_uri: process.env.FIREBASE_TOKEN_URI,
auth_provider_x509_cert_url: process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL,
client_x509_cert_url: process.env.FIREBASE_CLIENT_X509_CERT_URL,
universe_domain: process.env.FIREBASE_UNIVERSE_DOMAIN
};
module.exports = firebaseConfig;
type: process.env.FIREBASE_TYPE,
project_id: process.env.FIREBASE_PROJECT_ID,
private_key_id: process.env.FIREBASE_PRIVATE_KEY_ID,
private_key: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, "\n"),
client_email: process.env.FIREBASE_CLIENT_EMAIL,
client_id: process.env.FIREBASE_CLIENT_ID,
auth_uri: process.env.FIREBASE_AUTH_URI,
token_uri: process.env.FIREBASE_TOKEN_URI,
auth_provider_x509_cert_url: process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL,
client_x509_cert_url: process.env.FIREBASE_CLIENT_X509_CERT_URL,
universe_domain: process.env.FIREBASE_UNIVERSE_DOMAIN,
};

export default firebaseConfig;
48 changes: 22 additions & 26 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
const express = require('express'); //RESTful API 기능을 제공
const axios = require('axios'); //Promise를 사용하여 비동기적으로 데이터를 처리
const sockets = require('./socket');
const connectDB = require('./db');
import express from "express";
import sockets from "./socket.js";
import connectDB from "./db.js";
import dotenv from "dotenv";
import http from "http";
import * as socketIo from "socket.io";

//환경 변수를 .env 파일에서 로드하여 Node.js 애플리케이션에서 사용할 수 있게 해주는 라이브러리
require('dotenv').config()
import finAllRoom from "./routes/finAllRoom.js";
import createRoom from "./routes/createRoom.js";
import findRoom from "./routes/findRoom.js";
import leaveRoom from "./routes/leaveRoom.js";
import checkRoom from "./routes/checkRoom.js";

dotenv.config();

const app = express();
const port = process.env.PORT;
Expand All @@ -14,27 +21,16 @@ app.use(express.urlencoded({ extended: true }));

connectDB();

// Socket IO 패키지 추가
const http = require('http');
const socketIo = require('socket.io');

// 기존의 'app.listen' 대신에 다음 코드를 사용합니다.
const server = http.createServer(app);
const io = socketIo(server);
sockets(io)

const finAllRoom = require('./routes/finAllRoom');
const createRoom = require('./routes/createRoom');
const findRoom = require('./routes/findRoom');
const leaveRoom = require('./routes/leaveRoom');
const checkRoom = require('./routes/checkRoom');
const io = new socketIo.Server(server);
sockets(io);

app.use('/chat/room/all', finAllRoom);
app.use('/chat/room/create', createRoom);
app.use('/chat/room', findRoom);
app.use('/chat/room', leaveRoom);
app.use('/chat/room', checkRoom);
app.use("/chat/room/all", finAllRoom);
app.use("/chat/room/create", createRoom);
app.use("/chat/room", findRoom);
app.use("/chat/room", leaveRoom);
app.use("/chat/room", checkRoom);

server.listen(port, () => {
console.log(`App listening at http://localhost:${port}`)
});
console.log(`App listening at http://localhost:${port}`);
});
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js",
Expand Down
80 changes: 42 additions & 38 deletions routes/checkRoom.js
Original file line number Diff line number Diff line change
@@ -1,46 +1,50 @@
const express = require('express');
const axios = require('axios');
const { chat, chatroom } = require('../schemas');
import express from "express";
import axios from "axios";
import { chat, chatroom } from "../schemas.js";

const router = express.Router();

const resource_url = process.env.OAUTH_URL;
const resource_url = process.env.OAUTH_URL;

//메시지가 존재하는지 체크하는 메서드
router.get('/:roomId/check/message', async (req, res) => {
router.get("/:roomId/check/message", async (req, res) => {
const token = req.headers.authorization; // 헤더에서 액세스 토큰 추출
const roomId = req.params.roomId; // route parameter로부터 roomId를 추출

const token = req.headers.authorization; // 헤더에서 액세스 토큰 추출
const roomId = req.params.roomId; // route parameter로부터 roomId를 추출

//엑세스 토큰이 존재하지 않을 경우
if (!token) {
res.status(400).json({ message: "JWT Token이 존재하지 않습니다.", code: 10100 });
return;
}

//리소스에 접급
try {
const response = await axios.get(resource_url, {
headers: {
'Authorization': `${token}`
}
});
} catch (error) {
res.status(400).json({ message: "유효하지 않은 JWT Token 입니다.", code: 10101 });
}
//엑세스 토큰이 존재하지 않을 경우
if (!token) {
res
.status(400)
.json({ message: "JWT Token이 존재하지 않습니다.", code: 10100 });
return;
}

//리소스에 접급
try {
const response = await axios.get(resource_url, {
headers: {
Authorization: `${token}`,
},
});
} catch (error) {
res
.status(400)
.json({ message: "유효하지 않은 JWT Token 입니다.", code: 10101 });
}

try {
const chatCount = await chat.exists({ roomId: roomId });

try {
const chatCount = await chat.exists({ roomId: roomId });

if(chatCount === 0) {
await chatroom.deleteOne({ roomId: roomId });
res.json({ message: "채팅방이 삭제되었습니다.", code: 200 });
} else {
res.json({ message: "채팅방에 메시지가 존재합니다.", code: 70002 });
}
} catch (error) {
res.status(500).json({ message: "서버 내부 오류가 발생하였습니다.", code: 50002 });
if (chatCount === 0) {
await chatroom.deleteOne({ roomId: roomId });
res.json({ message: "채팅방이 삭제되었습니다.", code: 200 });
} else {
res.json({ message: "채팅방에 메시지가 존재합니다.", code: 70002 });
}
});
} catch (error) {
res
.status(500)
.json({ message: "서버 내부 오류가 발생하였습니다.", code: 50002 });
}
});

module.exports = router;
export default router;
Loading

0 comments on commit e469f14

Please sign in to comment.