JaeHyeok Song

implement of sharing BOJ to kakao

1 +[{"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\index.js":"1","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\App.js":"2","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\serviceWorker.js":"3","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\user.js":"4","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\index.js":"5","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\LoginPage.js":"6","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\RegisterPage.js":"7","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\SettingPage.js":"8","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\HomePage.js":"9","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\createRequestSaga.js":"10","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\api\\auth.js":"11","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\auth.js":"12","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\loading.js":"13","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\profile.js":"14","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\api\\client.js":"15","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\auth\\LoginForm.js":"16","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\auth\\RegisterForm.js":"17","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\common\\HeaderContainer.js":"18","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\home\\HomeContainer.js":"19","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\setting\\SettingContainer.js":"20","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\auth\\AuthTemplate.js":"21","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\api\\profile.js":"22","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\auth\\AuthForm.js":"23","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\home\\HomeForm.js":"24","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\SettingForm.js":"25","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\styles\\palette.js":"26","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Header.js":"27","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Button.js":"28","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\BJIDForm.js":"29","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\SlackForm.js":"30","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\GoalNumForm.js":"31","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\KakaoLogin.js":"32","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Responsive.js":"33","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Categories.js":"34","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\scripts\\getRecommend.js":"35"},{"size":1381,"mtime":1607049804685,"results":"36","hashOfConfig":"37"},{"size":598,"mtime":1607049804646,"results":"38","hashOfConfig":"37"},{"size":5227,"mtime":1607049804713,"results":"39","hashOfConfig":"37"},{"size":1697,"mtime":1607178574200,"results":"40","hashOfConfig":"37"},{"size":464,"mtime":1607049804700,"results":"41","hashOfConfig":"37"},{"size":299,"mtime":1607049804708,"results":"42","hashOfConfig":"37"},{"size":317,"mtime":1607049804710,"results":"43","hashOfConfig":"37"},{"size":348,"mtime":1607049804712,"results":"44","hashOfConfig":"37"},{"size":313,"mtime":1607049804707,"results":"45","hashOfConfig":"37"},{"size":822,"mtime":1607049804693,"results":"46","hashOfConfig":"37"},{"size":502,"mtime":1607179035551,"results":"47","hashOfConfig":"37"},{"size":2300,"mtime":1607049804698,"results":"48","hashOfConfig":"37"},{"size":689,"mtime":1607049804701,"results":"49","hashOfConfig":"37"},{"size":4472,"mtime":1607049804703,"results":"50","hashOfConfig":"37"},{"size":84,"mtime":1607049804690,"results":"51","hashOfConfig":"37"},{"size":1846,"mtime":1607049804674,"results":"52","hashOfConfig":"37"},{"size":2415,"mtime":1607049804675,"results":"53","hashOfConfig":"37"},{"size":475,"mtime":1607049804678,"results":"54","hashOfConfig":"37"},{"size":1144,"mtime":1607049804680,"results":"55","hashOfConfig":"37"},{"size":2526,"mtime":1607049804682,"results":"56","hashOfConfig":"37"},{"size":1047,"mtime":1607049804652,"results":"57","hashOfConfig":"37"},{"size":476,"mtime":1607049804692,"results":"58","hashOfConfig":"37"},{"size":2472,"mtime":1607049804651,"results":"59","hashOfConfig":"37"},{"size":3350,"mtime":1607049804662,"results":"60","hashOfConfig":"37"},{"size":2702,"mtime":1606936169401,"results":"61","hashOfConfig":"37"},{"size":453,"mtime":1607049804695,"results":"62","hashOfConfig":"37"},{"size":1574,"mtime":1607049804658,"results":"63","hashOfConfig":"37"},{"size":1078,"mtime":1607049804655,"results":"64","hashOfConfig":"37"},{"size":1144,"mtime":1607049804665,"results":"65","hashOfConfig":"37"},{"size":994,"mtime":1607049804670,"results":"66","hashOfConfig":"37"},{"size":1043,"mtime":1607049804667,"results":"67","hashOfConfig":"37"},{"size":746,"mtime":1607233016374,"results":"68","hashOfConfig":"37"},{"size":460,"mtime":1607049804660,"results":"69","hashOfConfig":"37"},{"size":1228,"mtime":1607049804656,"results":"70","hashOfConfig":"37"},{"size":966,"mtime":1607239812081,"results":"71","hashOfConfig":"37"},{"filePath":"72","messages":"73","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},"ecom5p",{"filePath":"75","messages":"76","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"77","messages":"78","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"79","messages":"80","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"81","messages":"82","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"87","messages":"88","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"89","messages":"90","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"99","messages":"100","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"101","messages":"102","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"103","messages":"104","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"107","messages":"108","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"109","messages":"110","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"111","messages":"112","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"113","usedDeprecatedRules":"74"},{"filePath":"114","messages":"115","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"116","messages":"117","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"118","messages":"119","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"120","messages":"121","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"122","usedDeprecatedRules":"74"},{"filePath":"123","messages":"124","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"125","messages":"126","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"127","messages":"128","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"129","messages":"130","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"131","messages":"132","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"133","messages":"134","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"135","messages":"136","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"137","messages":"138","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"139","messages":"140","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"141","messages":"142","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"74"},{"filePath":"143","messages":"144","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\index.js",[],["145","146"],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\App.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\serviceWorker.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\user.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\index.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\LoginPage.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\RegisterPage.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\SettingPage.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\pages\\HomePage.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\createRequestSaga.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\api\\auth.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\auth.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\loading.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\modules\\profile.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\api\\client.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\auth\\LoginForm.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\auth\\RegisterForm.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\common\\HeaderContainer.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\home\\HomeContainer.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\containers\\setting\\SettingContainer.js",["147"],"import React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { withRouter } from 'react-router-dom';\r\nimport {\r\n changeField,\r\n setBJID,\r\n getPROFILE,\r\n syncBJID,\r\n initializeProfile,\r\n setSLACK,\r\n setGOALNUM,\r\n} from '../../modules/profile';\r\nimport SettingForm from '../../components/setting/SettingForm';\r\n\r\nconst SettingContainer = ({ history }) => {\r\n const [isLoading, setLoading] = useState(false);\r\n\r\n const dispatch = useDispatch();\r\n const { user, profile, loading } = useSelector(\r\n ({ user, profile, loading }) => ({\r\n user: user.user,\r\n profile: profile,\r\n loading: loading,\r\n }),\r\n );\r\n\r\n const onChange = (e) => {\r\n const { value, name } = e.target;\r\n dispatch(\r\n changeField({\r\n key: name,\r\n value: value,\r\n }),\r\n );\r\n };\r\n\r\n const onSyncBJIDSubmit = (e) => {\r\n e.preventDefault();\r\n let username = profile.username;\r\n dispatch(syncBJID({ username }));\r\n };\r\n\r\n const onGoalNumSubmit = (e) => {\r\n e.preventDefault();\r\n let username = profile.username;\r\n let goalNum = profile.goalNum;\r\n dispatch(setGOALNUM({ username, goalNum }));\r\n };\r\n const onSlackURLSubmit = (e) => {\r\n e.preventDefault();\r\n let username = profile.username;\r\n let slackWebHookURL = profile.slackWebHookURL;\r\n dispatch(setSLACK({ username, slackWebHookURL }));\r\n };\r\n\r\n const onBJIDSubmit = (e) => {\r\n e.preventDefault();\r\n let username = profile.username;\r\n let userBJID = profile.userBJID;\r\n\r\n dispatch(setBJID({ username, userBJID }));\r\n };\r\n\r\n useEffect(() => {\r\n if (!user) {\r\n alert('로그인이 필요합니다 ');\r\n history.push('/login');\r\n } else {\r\n let username = user.username;\r\n dispatch(getPROFILE({ username }));\r\n return () => {\r\n dispatch(initializeProfile());\r\n };\r\n }\r\n }, [dispatch, user, history]);\r\n useEffect(() => {\r\n if (loading['profile/SYNC_BJID'] == true) {\r\n setLoading(true);\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [dispatch, loading]);\r\n\r\n return (\r\n <div>\r\n <SettingForm\r\n type=\"setting\"\r\n onChange={onChange}\r\n onBJIDSubmit={onBJIDSubmit}\r\n onSyncBJIDSubmit={onSyncBJIDSubmit}\r\n onSlackURLSubmit={onSlackURLSubmit}\r\n onGoalNumSubmit={onGoalNumSubmit}\r\n profile={profile}\r\n isLoading={isLoading}\r\n ></SettingForm>\r\n </div>\r\n );\r\n};\r\n\r\nexport default withRouter(SettingContainer);\r\n","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\auth\\AuthTemplate.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\api\\profile.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\auth\\AuthForm.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\home\\HomeForm.js",["148","149","150","151","152","153","154"],"import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport palette from '../../lib/styles/palette';\r\nimport AuthForm from '../auth/AuthForm';\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n background: palette.gray[2],\r\n padding: theme.spacing(8),\r\n },\r\n paper: {\r\n padding: theme.spacing(8),\r\n margin: 'auto',\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n },\r\n}));\r\nconst HomeForm = ({ PSdata, goalNum }) => {\r\n const classes = useStyles();\r\n return PSdata ? (\r\n <div className={classes.root}>\r\n <Grid container spacing={5}>\r\n <Grid item xs={12}>\r\n <Paper className={classes.paper}>\r\n <h1>{PSdata.recommend_data.problem_number}</h1>\r\n <h1>{PSdata.recommend_data.problem_title}</h1>\r\n <a\r\n href={'http://www.boj.kr/' + PSdata.recommend_data.problem_number}\r\n >\r\n 바로가기\r\n </a>\r\n\r\n <h3>오늘의 추천 문제</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Paper className={classes.paper}>\r\n <h1>{PSdata.presentNum + '/' + goalNum}</h1>\r\n <h3>오늘 푼 문제</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Paper className={classes.paper}>\r\n <h1>{PSdata.latestSolve.problem_number}</h1>\r\n <h1>{PSdata.latestSolve.problem_title}</h1>\r\n <h3>마지막으로 푼 문제</h3>\r\n </Paper>\r\n </Grid>\r\n\r\n <Grid item xs={4}>\r\n <Paper className={classes.paper}>\r\n <h1>{PSdata.weekNum}</h1>\r\n <h3>7일</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={4}>\r\n <Paper className={classes.paper}>\r\n <h1>{PSdata.monthNum}</h1>\r\n <h3>30일</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={4}>\r\n <Paper className={classes.paper}>\r\n <h1>{PSdata.totalNum}</h1>\r\n <h3>전체</h3>\r\n </Paper>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n ) : (\r\n <div className={classes.root}>\r\n <Grid container spacing={5}>\r\n <Grid item xs={12}>\r\n <Paper className={classes.paper}>\r\n <h1></h1>\r\n <h3>오늘의 추천 문제</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Paper className={classes.paper}>\r\n <h1></h1>\r\n <h3>오늘</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Paper className={classes.paper}>\r\n <h1></h1>\r\n <h3>마지막 날</h3>\r\n </Paper>\r\n </Grid>\r\n\r\n <Grid item xs={4}>\r\n <Paper className={classes.paper}>\r\n <h1></h1>\r\n <h3>7일</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={4}>\r\n <Paper className={classes.paper}>\r\n <h1></h1>\r\n <h3>30일</h3>\r\n </Paper>\r\n </Grid>\r\n <Grid item xs={4}>\r\n <Paper className={classes.paper}>\r\n <h1></h1>\r\n <h3>전체</h3>\r\n </Paper>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n );\r\n};\r\n\r\nexport default HomeForm;\r\n","C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\SettingForm.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\lib\\styles\\palette.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Header.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Button.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\BJIDForm.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\SlackForm.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\GoalNumForm.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\setting\\KakaoLogin.js",["155","156","157","158"],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Responsive.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\components\\common\\Categories.js",[],"C:\\Users\\SJH\\Desktop\\Document\\2017103998\\2020-2\\OpenSourceSW\\Project\\Jaksimsamil\\jaksimsamil-page\\src\\scripts\\getRecommend.js",[],{"ruleId":"159","replacedBy":"160"},{"ruleId":"161","replacedBy":"162"},{"ruleId":"163","severity":1,"message":"164","line":78,"column":38,"nodeType":"165","messageId":"166","endLine":78,"endColumn":40},{"ruleId":"167","severity":1,"message":"168","line":6,"column":8,"nodeType":"169","messageId":"170","endLine":6,"endColumn":16},{"ruleId":"171","severity":1,"message":"172","line":77,"column":13,"nodeType":"173","endLine":77,"endColumn":17},{"ruleId":"171","severity":1,"message":"172","line":83,"column":13,"nodeType":"173","endLine":83,"endColumn":17},{"ruleId":"171","severity":1,"message":"172","line":89,"column":13,"nodeType":"173","endLine":89,"endColumn":17},{"ruleId":"171","severity":1,"message":"172","line":96,"column":13,"nodeType":"173","endLine":96,"endColumn":17},{"ruleId":"171","severity":1,"message":"172","line":102,"column":13,"nodeType":"173","endLine":102,"endColumn":17},{"ruleId":"171","severity":1,"message":"172","line":108,"column":13,"nodeType":"173","endLine":108,"endColumn":17},{"ruleId":"167","severity":1,"message":"174","line":1,"column":10,"nodeType":"169","messageId":"170","endLine":1,"endColumn":20},{"ruleId":"167","severity":1,"message":"175","line":2,"column":8,"nodeType":"169","messageId":"170","endLine":2,"endColumn":17},{"ruleId":"176","severity":1,"message":"177","line":18,"column":38,"nodeType":"178","messageId":"179","endLine":18,"endColumn":67},{"ruleId":"180","severity":1,"message":"181","line":19,"column":9,"nodeType":"173","endLine":22,"endColumn":11},"no-native-reassign",["182"],"no-negated-in-lhs",["183"],"eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","no-unused-vars","'AuthForm' is defined but never used.","Identifier","unusedVar","jsx-a11y/heading-has-content","Headings must have content and the content must be accessible by a screen reader.","JSXOpeningElement","'makeStyles' is defined but never used.","'TextField' is defined but never used.","no-script-url","Script URL is a form of eval.","Literal","unexpectedScriptURL","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","no-global-assign","no-unsafe-negation"]
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
1 import { makeStyles } from '@material-ui/core/styles'; 1 import { makeStyles } from '@material-ui/core/styles';
2 import TextField from '@material-ui/core/TextField'; 2 import TextField from '@material-ui/core/TextField';
3 import React from 'react'; 3 import React from 'react';
4 -import path from 'path'; 4 +import getRecommend from "../../scripts/getRecommend";
5 -require("dotenv").config({
6 - path : path.join(__dirname,'/jaksimsamil-server/.env')
7 -});
8 -console.log(process.env.KAKAO_JS_KEY);
9 -
10 -const useStyles = makeStyles((theme) => ({
11 - root: {
12 - '& > *': {
13 - margin: theme.spacing(1),
14 - },
15 - },
16 - button: {
17 - margin: theme.spacing(1),
18 - },
19 -}));
20 5
21 const KakaoLoginBtn = () => { 6 const KakaoLoginBtn = () => {
22 - const classes = useStyles(); 7 + const KakaoLogin = function () {
23 - const kakaoLogin = function() {
24 window.Kakao.Auth.login({ 8 window.Kakao.Auth.login({
25 - success:function(auth) { 9 + success: getRecommend,
26 - console.log(auth); 10 + fail: function (err) {
27 - }, 11 + console.log("login failed", err);
28 - fail:function(err) {
29 - console.log(err);
30 } 12 }
31 }) 13 })
32 } 14 }
33 return ( 15 return (
34 <div> 16 <div>
35 - <button onClick={kakaoLogin}>KakaoLogin</button> 17 + <button onClick={KakaoLogin}
18 + a id="custom-login-btn" href="javascript:loginWithKakao()">
19 + <img
20 + src="//k.kakaocdn.net/14/dn/btqCn0WEmI3/nijroPfbpCa4at5EIsjyf0/o.jpg"
21 + width="140"
22 + />
23 + </button>
36 </div> 24 </div>
37 ); 25 );
38 }; 26 };
......
...@@ -9,3 +9,8 @@ export const register = ({ username, password }) => ...@@ -9,3 +9,8 @@ export const register = ({ username, password }) =>
9 export const check = () => client.get('api/auth/check'); 9 export const check = () => client.get('api/auth/check');
10 10
11 export const logout = () => client.post('/api/auth/logout'); 11 export const logout = () => client.post('/api/auth/logout');
12 +
13 +export const kakaotoken = (kakaotoken) =>
14 + client.post('api/auth/kakaotoken', {
15 + kakaotoken: kakaotoken
16 + });
......
1 +function getRecommend(auth) {
2 + console.log("login success", auth);
3 + const host = 'http://localhost:23023';
4 + const url = host+"/api/profile/recommend";
5 + const data = { username: 'test' };
6 + window.fetch(url, {
7 + method: "POST",
8 + body: JSON.stringify(data),
9 + headers: {
10 + 'Content-Type': 'application/json'
11 + }
12 + })
13 + .then(res => {
14 + console.log(res);
15 + return res.json();
16 + })
17 + .then(shareToKakao);
18 +}
19 +
20 +function shareToKakao({problem_number, problem_title, solved_date}) {
21 + console.log('getting ready to share...');
22 + const boj_link = "https://acmicpc.net/problem/" + problem_number.toString();
23 + window.Kakao.Link.sendDefault({
24 + objectType: 'text',
25 + text: `오늘의 추천문제는 ${problem_title}`,
26 + link: {
27 + mobileWebUrl: boj_link,
28 + webUrl: boj_link,
29 + }
30 + });
31 +}
32 +
33 +export {
34 + getRecommend as default
35 +};
...\ No newline at end of file ...\ No newline at end of file
1 const Router = require("koa-router"); 1 const Router = require("koa-router");
2 const auth = new Router(); 2 const auth = new Router();
3 const authCtrl = require("./auth.ctrl"); 3 const authCtrl = require("./auth.ctrl");
4 +const kakaoAuth = require("./kakaoAuth");
5 +
4 auth.post("/login", authCtrl.login); 6 auth.post("/login", authCtrl.login);
5 auth.post("/logout", authCtrl.logout); 7 auth.post("/logout", authCtrl.logout);
6 auth.post("/register", authCtrl.register); 8 auth.post("/register", authCtrl.register);
7 auth.get("/check", authCtrl.check); 9 auth.get("/check", authCtrl.check);
8 10
11 +auth.post("/kakaotoken", kakaoAuth.kakaotoken);
12 +
9 module.exports = auth; 13 module.exports = auth;
......
1 +const request = require('request');
2 +const querystring = require('querystring');
3 +
4 +
5 +exports.kakaotoken = async (ctx) => {
6 + const token = ctx.request.body;
7 +
8 + 'http://kapi.kakao.com/v2/api/talk/memo/default/send'
9 +
10 + console.log(ctx);
11 + console.log("token setted", token);
12 + let template_objectObj = {
13 + object_type: "text",
14 + text: "hi", link: {
15 + web_url: "https://developers.kakao.com",
16 + }
17 + };
18 +
19 + let template_objectStr = JSON.stringify(template_objectObj);
20 + console.log(template_objectStr);
21 + let options = {
22 + url: "http://kapi.kakao.com/v2/api/talk/memo/default/send",
23 + method: "POST",
24 + headers: {
25 + "Authorization": "Bearer ".concat(token),
26 + "Content-Type": "application/x-www-form-urlencoded"
27 + }, form: {
28 + template_object: template_objectStr
29 + }
30 + };
31 + request.post(options, (err, res, body) => {
32 + if (err != null) {
33 + console.log(err);
34 + }
35 + });
36 +};
...\ No newline at end of file ...\ No newline at end of file
...@@ -118,14 +118,16 @@ POST /api/proflie/recommend ...@@ -118,14 +118,16 @@ POST /api/proflie/recommend
118 */ 118 */
119 exports.recommend = async (ctx) => { 119 exports.recommend = async (ctx) => {
120 const { username } = ctx.request.body; 120 const { username } = ctx.request.body;
121 -
122 if (!username) { 121 if (!username) {
122 + console.log('no given username');
123 ctx.status = 401; 123 ctx.status = 401;
124 return; 124 return;
125 } 125 }
126 try { 126 try {
127 + console.log('finding username:', username);
127 const profile = await Profile.findByUsername(username); 128 const profile = await Profile.findByUsername(username);
128 if (!profile) { 129 if (!profile) {
130 + console.log('no profile');
129 ctx.status = 401; 131 ctx.status = 401;
130 return; 132 return;
131 } 133 }
...@@ -137,5 +139,7 @@ exports.recommend = async (ctx) => { ...@@ -137,5 +139,7 @@ exports.recommend = async (ctx) => {
137 //데이터가 비었을 떄 예외처리 필요 139 //데이터가 비었을 떄 예외처리 필요
138 } catch (e) { 140 } catch (e) {
139 ctx.throw(500, e); 141 ctx.throw(500, e);
142 + } finally {
143 + console.log('successfully sent user recommendation')
140 } 144 }
141 }; 145 };
......