Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SEB FE 45 함재형 과제 제출합니다 #874

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions my-agora-states-server/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,26 @@ const morgan = require('morgan');
app.use(morgan('tiny'));

// TODO: cors를 적용합니다.

app.use(cors());
// TODO: Express 내장 미들웨어인 express.json()을 적용합니다.

app.use(express.json());

const port = 4000;

const discussionsRouter = require('./router/discussions');
const opentalkRouter = require('./router/opentalk');

// TODO: app.use()를 활용하여 /discussions 경로로 라우팅합니다.

app.use('/discussions', discussionsRouter);
app.use('/opentalk', opentalkRouter);

app.get('/', (req, res) => {
// 서버 상태 확인을 위해 상태 코드 200과 함께 응답을 보냅니다.
res.status(200).send('fe-sprint-my-agora-states-server');
});



const server = app.listen(port, () => {
console.log(`[RUN] My Agora States Server... | http://localhost:${port}`);
});
Expand Down
97 changes: 94 additions & 3 deletions my-agora-states-server/controller/index.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,110 @@
const { agoraStatesDiscussions } = require("../repository/discussions");
const { opentalk } = require("../repository/opentalk")
const discussionsData = agoraStatesDiscussions;
const opentalkData = opentalk;

const discussionsController = {
findAll: (req, res) => {
const discussionsList = agoraStatesDiscussions.map(discussion => {
return {
id: discussion.id,
createdAt: discussion.createdAt,
updatedAt: discussion.updatedAt,
title: discussion.title,
author: discussion.author,
answer: discussion.answer=== null ? null : 'yes',
avatarUrl: discussion.avatarUrl,
};
});
// TODO: 모든 discussions 목록을 응답합니다.
res.send('TODO:')
return res.status(200).json(discussionsList)
},

findById: (req, res) => {
// TODO: 요청으로 들어온 id와 일치하는 discussion을 응답합니다.
res.send('TODO:')
const id = parseInt(req.params.id);
const filteredData = discussionsData.filter(dis=>dis.id===id);
return res.status(200).json(filteredData)
},

create: (req,res)=>{

const now = new Date();

const id = agoraStatesDiscussions.length+5;
const createdAt = now.toISOString();
const updatedAt = now.toISOString();
const title = req.body.title;
const author = req.body.author;
const answer = null
const bodyHTML = req.body.bodyHTML;
const avatarUrl = 'https://avatars.githubusercontent.com/u/79903256?s=64&v=4';

const newDiscussion = {id, createdAt, updatedAt, title, author, answer, bodyHTML, avatarUrl}


agoraStatesDiscussions.unshift(newDiscussion)
return res.status(200).json(newDiscussion);
},

submitAnswer: (req, res) => {
const id = parseInt(req.params.id);
const dataIndex = discussionsData.findIndex(dis => dis.id === id);
let filteredData = {...discussionsData[dataIndex]};
filteredData = {
...filteredData,
answer:{
id : id,
createdAt : new Date().toISOString(),
author : req.body.author,
bodyHTML : req.body.bodyHTML,
avatarUrl : 'https://avatars.githubusercontent.com/u/79903256?s=64&v=4',
}
}

discussionsData.splice(dataIndex, 1, filteredData);
return res.status(200).json(filteredData);
}

};



////////////opentalk 추가

const opentalkController = {

findAll: (req, res) => {
return res.status(200).json(opentalkData);
},

create: (req, res) => {

const now = new Date();

const username = req.body.username
const text = req.body.text
const roomname = req.body.roomname
const id = opentalkData.length + 1
const date = now.toISOString();

if (username && text && roomname) {

let newTalk = { username, text, roomname, id, date }

opentalkData.push(newTalk)

return res.status(200).json(id);
}
else { return res.status(404) }


}

};



module.exports = {
discussionsController,
discussionsController, opentalkController
};
15 changes: 15 additions & 0 deletions my-agora-states-server/repository/opentalk.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');

const window = new JSDOM('').window;
const DOMPurify = createDOMPurify(window);

module.exports.opentalk= [
{
date: "2023-06-06T14:06:13.916Z",
id: 0,
roomname:"새로운",
text:"새로운 채팅방이 생성되었습니다.",
username: "시스템",
}
]
13 changes: 9 additions & 4 deletions my-agora-states-server/router/discussions.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
// TODO: discussions 라우터를 완성합니다.
const { discussionsController } = require('../controller');
const { findAll, findById } = discussionsController;
const { discussionsController} = require('../controller');
const { findAll, findById, create ,submitAnswer} = discussionsController;
const express = require('express');
const router = express.Router();

// TODO: 모든 discussions 목록을 조회하는 라우터를 작성합니다.
// TODO: :id에 맞는 discussion을 조회하는 라우터를 작성합니다.
router.get('/', findAll);

router.get('/:id', findById);

router.post('/', create);

router.patch('/:id', submitAnswer);

// TODO: :id에 맞는 discussion을 조회하는 라우터를 작성합니다.


module.exports = router;
13 changes: 13 additions & 0 deletions my-agora-states-server/router/opentalk.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

const { opentalkController } = require('../controller');
const { findAll, create } = opentalkController;
const express = require('express');
const router = express.Router();


router.get('/', findAll);

router.post('/', create);


module.exports = router;
Loading