From 779dc0af93f4910b81cd509f6916ec0d00023222 Mon Sep 17 00:00:00 2001 From: Kangmin An Date: Fri, 30 Jul 2021 17:38:18 +0900 Subject: [PATCH] =?UTF-8?q?Update:=20DB=20=EB=AA=A8=EB=8D=B8=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=20=EC=B6=94=EA=B0=80.=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=B6=94=EA=B0=80=20=EB=B0=98=ED=99=98.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/controllers/dataController.js | 10 +-- server/src/controllers/userController.js | 98 ++++++++++++++++++++---- server/src/db/index.js | 21 +++-- server/src/models/data_processing.js | 41 ++++++++++ server/src/models/emd.js | 2 +- server/src/models/user.js | 10 ++- server/src/models/weather_in.js | 2 +- server/src/models/weather_out.js | 2 +- server/src/views/edit-profile.pug | 5 +- 9 files changed, 158 insertions(+), 33 deletions(-) create mode 100644 server/src/models/data_processing.js diff --git a/server/src/controllers/dataController.js b/server/src/controllers/dataController.js index c818fcd..0d89c85 100644 --- a/server/src/controllers/dataController.js +++ b/server/src/controllers/dataController.js @@ -17,7 +17,7 @@ const handleOutData = async (locCode, date, lat, lng) => { const press = json["main"]["pressure"]; const wind_speed = json["wind"]["speed"]; - await db.Weather_out.create( + await db.Weather_Out.create( { loc_code: Number(locCode), collected_at: date, @@ -34,7 +34,7 @@ const handleOutData = async (locCode, date, lat, lng) => { // 내부 수집기로 부터 들어온 정보 처리 const handleInData = async (email, date, temp, humi, lights) => { - await db.Weather_in.create( + await db.Weather_In.create( { host: email, collected_at: date, @@ -92,12 +92,12 @@ export const getUserWeatherData = (req, res) => { try { /* 사용자 email에 따른 사용자 날씨 데이터 가져오기 */ const decoded = jwt.decode(acs_token); - const result = db.Weather_in.findAll({ + const result = db.Weather_In.findAll({ where: { host: decoded.email }, logging: false, }); - res.json({ msg: resForm.msg.ok, contents: { weather_user: result } }); + res.json({ msg: resForm.msg.ok, contents: { weather_in: result } }); } catch (err) { console.log(err); res.json({ msg: resForm.msg.err, contents: { error: err } }); @@ -111,7 +111,7 @@ export const getOutWeatherData = (req, res) => { } = req; try { // 실외 지역 번호를 통해 날씨 데이터 전송. - const result = db.Weather_out.findAll({ + const result = db.Weather_Out.findAll({ where: { loc_code: loc_code }, logging: false, }); diff --git a/server/src/controllers/userController.js b/server/src/controllers/userController.js index aebfe43..07a6cbb 100644 --- a/server/src/controllers/userController.js +++ b/server/src/controllers/userController.js @@ -150,9 +150,10 @@ export const getConfirm = async (req, res) => { subject: "userInfo", }); - res - .cookie("acs_token", accessT) - .redirect(`${envs.client.host}:${envs.client.port}`); + res.cookie("acs_token", accessT).redirect("/api"); + // .redirect( + // `${envs.client.protocol}://${envs.client.host}:${envs.client.port}` + // ); } catch (err) { res.json({ msg: resForm.msg.err, contents: { error: err } }); } @@ -164,11 +165,56 @@ export const getUserInfo = async (req, res) => { cookies: { acs_token }, } = req; - const decoded = jwt.decode(acs_token); + try { + const decoded = jwt.decode(acs_token); + + const result_user = await db.User.findAll({ + where: { email: decoded.email }, + logging: false, + }); + let user = { + email: result_user[0].email, + nick_name: result_user[0].nick_name, + using_aircon: result_user[0].using_aircon, + created_at: result_user[0].created_at, + loc_code: result_user[0].loc_code, + }; + + if (user.loc_code) { + let loc_name = {}; + + const result_emd = await db.Emd.findAll({ + where: { + code_emd: user.loc_code, + }, + logging: false, + }); - const result = await db.User.findAll({ where: { email: decoded.email } }); + const result_doe = await db.Doe.findAll({ + where: { + code_doe: result_emd[0].code_doe, + }, + logging: false, + }); - res.status(resForm.code.ok).json({ user_info: result }); + const result_sgg = await db.Sgg.findAll({ + where: { + code_sgg: result_emd[0].code_sgg, + }, + logging: false, + }); + + loc_name.doe = result_doe[0].name_doe; + loc_name.sgg = result_sgg[0].name_sgg; + loc_name.emd = result_emd[0].name_emd; + + user.loc_name = loc_name; + } + res.json({ msg: resForm.msg.ok, contents: { user_info: [user] } }); + } catch (err) { + console.log(err); + res.json({ msg: resForm.msg.err, contents: { error: err } }); + } }; // 사용자 정보 수정 요청 처리 @@ -178,14 +224,40 @@ export const postEditProfile = async (req, res) => { body: { nick_name, loc_code, using_aircon }, } = req; - const decoded = jwt.decode(acs_token); + try { + const decoded = jwt.decode(acs_token); - await db.User.update( - { nick_name: nick_name, loc_code: loc_code, using_aircon }, - { where: { email: decoded.email } } - ); + const result_preuser = await db.User.findAll({ + where: { email: decoded.email }, + logging: false, + }); + const user = result_preuser[0]; - const result = await db.User.findAll({ where: { email: decoded.email } }); + let new_nick_name = nick_name ? nick_name : user.nick_name; + let new_loc_code = loc_code ? Number(loc_code) : Number(user.loc_code); + let new_using_aircon = using_aircon + ? using_aircon === "true" + : user.using_aircon; - res.json({ msg: resForm.msg.ok, contents: { user_info: result } }); + await db.User.update( + { + nick_name: new_nick_name, + loc_code: new_loc_code, + using_aircon: new_using_aircon, + }, + { where: { email: decoded.email } } + ); + + const result_after_user = await db.User.findAll({ + where: { email: decoded.email }, + }); + + res.json({ + msg: resForm.msg.ok, + contents: { user_info: result_after_user }, + }); + } catch (err) { + console.log(err); + res.json({ msg: resForm.msg.err, contents: { error: err } }); + } }; diff --git a/server/src/db/index.js b/server/src/db/index.js index 96212af..a8657ea 100644 --- a/server/src/db/index.js +++ b/server/src/db/index.js @@ -4,8 +4,9 @@ import Doe from "../models/doe"; import Sgg from "../models/sgg"; import Emd from "../models/emd"; import User from "../models/user"; -import Weather_in from "../models/weather_in"; -import Weather_out from "../models/weather_out"; +import Weather_In from "../models/weather_in"; +import Weather_Out from "../models/weather_out"; +import Data_Processing from "../models/data_processing"; // DB의 정보를 모두 담고 있는 객체 생성 const db = {}; @@ -37,19 +38,23 @@ Emd.init(sequelize); db.User = User; User.init(sequelize); -db.Weather_in = Weather_in; -Weather_in.init(sequelize); +db.Weather_In = Weather_In; +Weather_In.init(sequelize); -db.Weather_out = Weather_out; -Weather_out.init(sequelize); +db.Weather_Out = Weather_Out; +Weather_Out.init(sequelize); + +db.Data_Processing = Data_Processing; +Data_Processing.init(sequelize); // model들 간에 Association 생성 Doe.associate(db); Sgg.associate(db); Emd.associate(db); User.associate(db); -Weather_in.associate(db); -Weather_out.associate(db); +Weather_In.associate(db); +Weather_Out.associate(db); +Data_Processing.associate(db); // Messages for Data Base. const msg = { diff --git a/server/src/models/data_processing.js b/server/src/models/data_processing.js new file mode 100644 index 0000000..c789502 --- /dev/null +++ b/server/src/models/data_processing.js @@ -0,0 +1,41 @@ +import { DataTypes, Model } from "sequelize"; +import User from "./user"; + +export class Data_Processing extends Model { + static init(sequelize) { + return super.init( + { + host: { + type: DataTypes.STRING(320), + primaryKey: true, + references: { + model: User, + key: "email", + }, + }, + collected_at: { + type: DataTypes.DATE, + primaryKey: true, + defaultValue: Date.now(), + }, + params: { + type: DataTypes.JSON, + }, + }, + { + sequelize, + timestamps: false, + paranoid: false, + } + ); + } + + static associate(db) { + db.Data_Processing.belongsTo(db.User, { + foreignKey: "host", + targetKey: "email", + }); + } +} + +export default Data_Processing; diff --git a/server/src/models/emd.js b/server/src/models/emd.js index 452519e..bbb1ce3 100644 --- a/server/src/models/emd.js +++ b/server/src/models/emd.js @@ -49,7 +49,7 @@ export class Emd extends Model { onDelete: "CASCADE", onUpdate: "CASCADE", }); - db.Emd.hasMany(db.Weather_out, { + db.Emd.hasMany(db.Weather_Out, { foreignKey: "loc_code", sourceKey: "code_emd", onDelete: "CASCADE", diff --git a/server/src/models/user.js b/server/src/models/user.js index 7b3b3ae..22641b3 100644 --- a/server/src/models/user.js +++ b/server/src/models/user.js @@ -47,9 +47,15 @@ export class User extends Model { }); // User 모델을 참조하는 테이블에 대한 외래키 설정. - db.User.hasMany(db.Weather_in, { + db.User.hasMany(db.Weather_In, { foreignKey: "host", - sourveKey: "email", + sourceKey: "email", + onDelete: "CASCADE", + onUpdate: "CASCADE", + }); + db.User.hasMany(db.Data_Processing, { + foreignKey: "host", + sourceKey: "email", onDelete: "CASCADE", onUpdate: "CASCADE", }); diff --git a/server/src/models/weather_in.js b/server/src/models/weather_in.js index d2d43f9..e98f5a9 100644 --- a/server/src/models/weather_in.js +++ b/server/src/models/weather_in.js @@ -40,7 +40,7 @@ export class Weather_In extends Model { static associate(db) { // weather_in 모델이 참조하는 테이블에 대한 외래키 설정. - db.Weather_in.belongsTo(db.User, { + db.Weather_In.belongsTo(db.User, { foreignKey: "host", targetKey: "email", }); diff --git a/server/src/models/weather_out.js b/server/src/models/weather_out.js index 3cbbb0a..3c3d908 100644 --- a/server/src/models/weather_out.js +++ b/server/src/models/weather_out.js @@ -44,7 +44,7 @@ export class Weather_Out extends Model { static associate(db) { // weather_out 모델이 참조하는 테이블에 대한 외래키 설정. - db.Weather_out.belongsTo(db.Emd, { + db.Weather_Out.belongsTo(db.Emd, { foreignKey: "loc_code", targetKey: "code_emd", }); diff --git a/server/src/views/edit-profile.pug b/server/src/views/edit-profile.pug index 9c3aff5..d219132 100644 --- a/server/src/views/edit-profile.pug +++ b/server/src/views/edit-profile.pug @@ -1,6 +1,7 @@ block content .signup-form_container form(action = routes.base + routes.editProfile, method = "post") - input(type="text", name="nick_name", require=true, placeholder="Nick Name") - input(type="number", name="loc_code", require=true, placeholder="Local Code.") + input(type="text", name="nick_name", placeholder="Nick Name") + input(type="text", name="using_aircon", placeholder="Using Aircon? true or false" ) + input(type="number", name="loc_code", placeholder="Local Code.") input(type="submit", value="Submit") \ No newline at end of file -- GitLab