From 1342729598a4e9812a22a25c4648de63fe5ece83 Mon Sep 17 00:00:00 2001 From: Juyoung Kim Date: Wed, 6 Mar 2024 11:51:18 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Call21st=20=EC=BD=94=EB=93=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=ED=9B=84=EB=B3=B4=20=EA=B2=80=EC=83=89=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next.config.js | 11 + next.config.mjs | 4 - package.json | 10 +- pages/api/candidates/[cid]/index.js | 11 + pages/api/candidates/[cid]/response.js | 15 + pages/api/candidates/[cid]/stats.js | 11 + pages/api/candidates/_search.js | 17 + pages/api/requests.js | 19 + pages/api/responses.js | 57 + pages/api/stats.js | 9 + public/images/logo.svg | 8 + public/images/mask-bg.png | Bin 0 -> 13092 bytes public/images/ogp.png | Bin 0 -> 47251 bytes src/app/page.tsx | 4 +- src/components/Ask/Candidates.css | 64 + src/components/Ask/Candidates.js | 122 ++ src/components/Ask/CandidatesContext.js | 11 + src/components/Ask/FindByName.css | 22 + src/components/Ask/FindByName.js | 27 + src/components/Ask/FindByParty.css | 5 + src/components/Ask/FindByParty.js | 29 + src/components/Ask/FindByRegion.css | 11 + src/components/Ask/FindByRegion.js | 92 + src/components/Ask/index.css | 35 + src/components/Ask/index.js | 201 ++ src/components/Ask/tabstyle.css | 50 + src/components/SearchAndSend.tsx | 10 - src/stores/_db.js | 26 + src/stores/candidates.js | 13 + src/stores/requests.js | 41 + src/stores/responses.js | 47 + src/stores/stats.js | 37 + src/stores/tokens.js | 20 + src/utils/api.js | 13 + src/utils/client.js | 32 + src/utils/search.js | 7 + yarn.lock | 2581 +++++++++++++++++++---- 37 files changed, 3270 insertions(+), 402 deletions(-) create mode 100644 next.config.js delete mode 100644 next.config.mjs create mode 100644 pages/api/candidates/[cid]/index.js create mode 100644 pages/api/candidates/[cid]/response.js create mode 100644 pages/api/candidates/[cid]/stats.js create mode 100644 pages/api/candidates/_search.js create mode 100644 pages/api/requests.js create mode 100644 pages/api/responses.js create mode 100644 pages/api/stats.js create mode 100644 public/images/logo.svg create mode 100644 public/images/mask-bg.png create mode 100644 public/images/ogp.png create mode 100644 src/components/Ask/Candidates.css create mode 100644 src/components/Ask/Candidates.js create mode 100644 src/components/Ask/CandidatesContext.js create mode 100644 src/components/Ask/FindByName.css create mode 100644 src/components/Ask/FindByName.js create mode 100644 src/components/Ask/FindByParty.css create mode 100644 src/components/Ask/FindByParty.js create mode 100644 src/components/Ask/FindByRegion.css create mode 100644 src/components/Ask/FindByRegion.js create mode 100644 src/components/Ask/index.css create mode 100644 src/components/Ask/index.js create mode 100644 src/components/Ask/tabstyle.css delete mode 100644 src/components/SearchAndSend.tsx create mode 100644 src/stores/_db.js create mode 100644 src/stores/candidates.js create mode 100644 src/stores/requests.js create mode 100644 src/stores/responses.js create mode 100644 src/stores/stats.js create mode 100644 src/stores/tokens.js create mode 100644 src/utils/api.js create mode 100644 src/utils/client.js create mode 100644 src/utils/search.js diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..e8728e7 --- /dev/null +++ b/next.config.js @@ -0,0 +1,11 @@ +const path = require('path') + +let config = { + webpack: config => { + config.resolve.modules.push(path.join(__dirname)) + return config + }, + webpack5: false +} + +module.exports = config diff --git a/next.config.mjs b/next.config.mjs deleted file mode 100644 index 4678774..0000000 --- a/next.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = {}; - -export default nextConfig; diff --git a/package.json b/package.json index 31820b7..6067205 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,15 @@ "lint": "next lint" }, "dependencies": { + "firebase-admin": "^12.0.0", + "isomorphic-unfetch": "^4.0.2", "next": "14.1.0", "react": "^18", - "react-dom": "^18" + "react-dom": "^18", + "react-select": "^5.8.0", + "react-spinners": "^0.13.8", + "react-tabs": "^6.0.2", + "unfetch": "^4.2.0" }, "devDependencies": { "@types/node": "^20", @@ -19,6 +25,8 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.1.0", + "stylus": "^0.63.0", + "stylus-loader": "^8.1.0", "typescript": "^5" }, "main": "index.js" diff --git a/pages/api/candidates/[cid]/index.js b/pages/api/candidates/[cid]/index.js new file mode 100644 index 0000000..43bef95 --- /dev/null +++ b/pages/api/candidates/[cid]/index.js @@ -0,0 +1,11 @@ +import { makeResponse } from '@/utils/api' +import candidateStore from '@/stores/candidates' + + +export default async (req, res) => { + const {query: {cid}} = req + + const candidate = await candidateStore.get(cid) + + makeResponse(res, candidate) +} diff --git a/pages/api/candidates/[cid]/response.js b/pages/api/candidates/[cid]/response.js new file mode 100644 index 0000000..f8f3f98 --- /dev/null +++ b/pages/api/candidates/[cid]/response.js @@ -0,0 +1,15 @@ +import responseStore from '@/stores/responses' +import {makeResponse} from '@/utils/api' + + +export default async (req, res) => { + const { + query: {cid}, + } = req + + const choice = await responseStore.get(cid) + + makeResponse(res, { + choice, + }) +} diff --git a/pages/api/candidates/[cid]/stats.js b/pages/api/candidates/[cid]/stats.js new file mode 100644 index 0000000..e4c7059 --- /dev/null +++ b/pages/api/candidates/[cid]/stats.js @@ -0,0 +1,11 @@ +import {makeResponse} from '@/utils/api' +import statsStore from '@/stores/stats' + + +export default async (req, res) => { + const {query: {cid}} = req + + const stats = await statsStore.candidates(cid) + + makeResponse(res, stats) +} diff --git a/pages/api/candidates/_search.js b/pages/api/candidates/_search.js new file mode 100644 index 0000000..564440a --- /dev/null +++ b/pages/api/candidates/_search.js @@ -0,0 +1,17 @@ +import {makeResponse} from '@/utils/api' +import search from '@/utils/search' + + +export default (req, res) => { + const { q } = req.body + + if (q.length < 1) { + res.status(400).json({ + message: `검색은 한글자 이상 입력해야 합니다.` + }) + } + + const results = search(q) + + makeResponse(res, results) +} diff --git a/pages/api/requests.js b/pages/api/requests.js new file mode 100644 index 0000000..e8e011f --- /dev/null +++ b/pages/api/requests.js @@ -0,0 +1,19 @@ +import requestStore from '@/stores/requests' +import {makeResponse} from '@/utils/api' + + +export default async (req, res) => { + const { to, content } = req.body + + makeResponse(res, { + message: '지금은 질문할 수 없습니다' + }) + + // await Promise.all( + // to.map(item => requestStore.create(item, content)) + // ) + // + // makeResponse(res, { + // + // }) +} diff --git a/pages/api/responses.js b/pages/api/responses.js new file mode 100644 index 0000000..8f86d74 --- /dev/null +++ b/pages/api/responses.js @@ -0,0 +1,57 @@ +import tokenStore from '@/stores/tokens' +import responseStore from '@/stores/responses' +import {makeResponse} from '@/utils/api' + + +const listResponses = async (req, res) => { + const responses = await responseStore.list() + + const agreed = [] + const disagreed = [] + + responses.forEach(response => { + if (response.choice === 'yes') { + agreed.push(response) + } else if (response.choice === 'no') { + disagreed.push(response) + } + }) + + makeResponse(res, { + agreed, + disagreed + }) +} + + +const createResponse = async (req, res) => { + const { token, choice } = req.body + + if (!token || !choice) { + res.status(400).json({ + message: '잘못된 요청입니다.' + }) + } + + try { + const candidateId = await tokenStore.inflate(token) + await responseStore.create(candidateId, choice) + + makeResponse(res, { + + }) + } catch (e) { + res.status(400).json({ + message: '잘못된 요청입니다.' + }) + } +} + + +export default async (req, res) => { + if (req.method === 'GET') { + await listResponses(req, res) + } else if (req.method === 'POST') { + await createResponse(req, res) + } +} diff --git a/pages/api/stats.js b/pages/api/stats.js new file mode 100644 index 0000000..23dbb24 --- /dev/null +++ b/pages/api/stats.js @@ -0,0 +1,9 @@ +import {makeResponse} from '@/utils/api' +import statsStore from '@/stores/stats' + + +export default async (req, res) => { + const stats = await statsStore.all() + + makeResponse(res, stats) +} diff --git a/public/images/logo.svg b/public/images/logo.svg new file mode 100644 index 0000000..02cfa1a --- /dev/null +++ b/public/images/logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/images/mask-bg.png b/public/images/mask-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..3734148f8a827ebaa65a886a9eb1ef13408ccf69 GIT binary patch literal 13092 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 literal 0 HcmV?d00001 diff --git a/public/images/ogp.png b/public/images/ogp.png new file mode 100644 index 0000000000000000000000000000000000000000..ea22bcaa9cfc306f3ddd7219f7d6df18bc758f99 GIT binary patch literal 47251 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

국회의원 후보에게 질문하기

- +
diff --git a/src/components/Ask/Candidates.css b/src/components/Ask/Candidates.css new file mode 100644 index 0000000..e4e892b --- /dev/null +++ b/src/components/Ask/Candidates.css @@ -0,0 +1,64 @@ +.candidates { + min-height: 200px; + margin-bottom: 20px; + overflow: auto; +} +.candidates .message { + text-align: center; +} +.candidates table { + padding-top: 24px; +} +.candidates table input[type="checkbox"] { + width: 16px; + height: 16px; + background: #fff; + cursor: pointer; +} +.candidates table td { + position: relative; + padding: 0 4px 0 4px; + white-space: nowrap; + line-height: 32px; +} +.candidates table td.checkbox, +.candidates table td.status { + text-align: center; +} +.candidates table td.agreed { + min-width: 40px; + text-align: center; +} +.candidates table .all { + position: absolute; + top: -32px; + left: 0; +} +.candidates table thead td.count, +.candidates table thead td.sns { + text-align: center; +} +.candidates table tbody tr td.name { + font-weight: bold; +} +.candidates table tbody tr td.agreed { + font-weight: bold; +} +.candidates table tbody tr td.count { + text-align: right; +} +.candidates table tbody tr td.count, +.candidates table tbody tr td.contact, +.candidates table tbody tr td.status { + padding: 0 24px 0 24px; + opacity: 0.9; + font-size: 0.9rem; +} +.candidates table tbody tr td.sns { + display: flex; +} +.candidates table tbody tr td.sns a { + display: flex; + padding: 2px; + opacity: 0.9; +} diff --git a/src/components/Ask/Candidates.js b/src/components/Ask/Candidates.js new file mode 100644 index 0000000..8daab82 --- /dev/null +++ b/src/components/Ask/Candidates.js @@ -0,0 +1,122 @@ +import React from 'react' +import ScaleLoader from 'react-spinners/ScaleLoader' +import CandidatesContext from '@/components/Ask/CandidatesContext' +import client from '@/utils/client' +import './Candidates.css' + + +const IconFacebook = +const IconTwitter = + + +const Candidate = ({candidate}) => { + const { actions } = React.useContext(CandidatesContext) + const [info, setInfo] = React.useState({}) + + React.useEffect(() => { + const fetchAgreed = async () => { + const [{data: info}, {data: response}, {data: stats}] = await Promise.all([ + client().get(`/api/candidates/${candidate.id}`), + client().get(`/api/candidates/${candidate.id}/response`), + client().get(`/api/candidates/${candidate.id}/stats`) + ]) + + info.count = stats.requests + + if (response.choice === 'yes') { + info.agreed = '동의' + } + + if (info.email) { + info.status = '정상' + } else { + info.status = response.choice === 'yes' ? '' : '이메일오류' + } + + setInfo(info) + } + fetchAgreed() + }, []) + + return ( + + + actions.TOGGLE_ITEM(candidate)} + /> + + {candidate.name} + {candidate.party} + {info.count && `${info.count}회`} + {info.agreed} + {info.status} + + {info.facebook && {IconFacebook}} + {info.twitter && {IconTwitter}} + + + ) +} + + +const Candidates = () => { + const STATUSES = CandidatesContext.STATUSES + const { candidates, status, actions } = React.useContext(CandidatesContext) + + if (status === STATUSES.LOADING) { + return ( +
+
+ +
+
+ ) + } + + if (candidates.length < 1) { + return status === STATUSES.LOADED ? +
+

검색결과가 없습니다.

+
: +
+

지역구를 선택하거나 이름을 입력해주세요

+
+ } + + return ( +
+ + + + + + + + + + + + {candidates.map(candidate => ( + + ))} + +
+
전체선택
+
+ candidate.checked)} + onChange={e => actions.TOGGLE_ALL(e.target.checked)} + /> +
+
+ + 질문응답이메일SNS
+
+ ) +} + + +export default Candidates diff --git a/src/components/Ask/CandidatesContext.js b/src/components/Ask/CandidatesContext.js new file mode 100644 index 0000000..10f1a6f --- /dev/null +++ b/src/components/Ask/CandidatesContext.js @@ -0,0 +1,11 @@ +import React from 'react' + +const CandidatesContext = React.createContext({}) + +CandidatesContext.STATUSES = { + WAITING: 'waiting', + LOADING: 'loading', + LOADED: 'loaded' +} + +export default CandidatesContext diff --git a/src/components/Ask/FindByName.css b/src/components/Ask/FindByName.css new file mode 100644 index 0000000..acfc05a --- /dev/null +++ b/src/components/Ask/FindByName.css @@ -0,0 +1,22 @@ +.wrapper { + display: flex; + margin-bottom: 20px; +} +.wrapper input, +.wrapper button { + font-size: 1.1rem; + padding: 6px 10px 6px 10px; +} +.wrapper input { + flex-grow: 1; + margin-right: 8px; + padding: 8px; +} +.wrapper button { + color: #fff; + background: #5a4d46; + cursor: pointer; +} +.wrapper button:disabled { + cursor: initial; +} diff --git a/src/components/Ask/FindByName.js b/src/components/Ask/FindByName.js new file mode 100644 index 0000000..7907c83 --- /dev/null +++ b/src/components/Ask/FindByName.js @@ -0,0 +1,27 @@ +import React from 'react' +import './FindByName.css' + + +const FindByName = ({onSubmit}) => { + const [q, setQ] = React.useState('') + + const handleKeyPress = e => { + if (e.keyCode === 13) { + if (q.length < 1) { + alert('검색은 한글자 이상 입력해야 합니다.') + return + } + onSubmit(q) + } + } + + return ( +
+ setQ(e.target.value)} onKeyDown={handleKeyPress} /> + +
+ ) +} + + +export default FindByName diff --git a/src/components/Ask/FindByParty.css b/src/components/Ask/FindByParty.css new file mode 100644 index 0000000..c55c013 --- /dev/null +++ b/src/components/Ask/FindByParty.css @@ -0,0 +1,5 @@ +.wrapperParty > div { + flex: 1 1 0; + border: 1px solid #5A4D46; + border-radius: 4px; +} \ No newline at end of file diff --git a/src/components/Ask/FindByParty.js b/src/components/Ask/FindByParty.js new file mode 100644 index 0000000..61efd16 --- /dev/null +++ b/src/components/Ask/FindByParty.js @@ -0,0 +1,29 @@ +import React from 'react' +import Select from 'react-select' +import './FindByParty.css' + + +const FindByRegion = ({onSelect}) => { + const [parties, setParties] = React.useState([]) + + React.useEffect(() => { + const fetchParties = async () => { + const response = await fetch('/parties.json') + const data = await response.json() + setParties(data) + } + fetchParties() + }, []) + + return ( +
+ ({value: city.name, label: city.name}))} + onChange={selected => { + setCity(selected) + setRegion(null) + }} + /> +
+
+