diff --git a/server/src/controllers/dataController.js b/server/src/controllers/dataController.js index c818fcdc21482bd4b1f1c5702fd7c00ac5d079b7..0d89c857f82c577367d6a69d142e97f7ed742d26 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 aebfe430e71ad0e61a3e7923949792ce52cedfb6..07a6cbbc5702e145399900556d1dfab455bb07af 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 96212af2465d2c7888e0d04735dde40e62461b7a..a8657ea05cf54abd42fe5d67bec31a8aec4a82f3 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 0000000000000000000000000000000000000000..c789502bb1c47e4f39bbd0374bfbfc66081f2bc0 --- /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 452519e661a04c85a2e0012f58706d6852636b99..bbb1ce3b61a37cf68caadecadfc5446857054052 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 7b3b3ae7114af5cd8834593701a888e6f97b00b4..22641b3e42bbd1f434eb2e7f8bc0e1b13d04a030 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 d2d43f96950ab1f736e309d0e655b18fb37d5d6e..e98f5a98f6ba06e3dea712c6fe7e9fed6e7ebca0 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 3cbbb0a8f021ff73ea902284cd83a20060bf5d29..3c3d90821f6a96127c0e873dec39865837d6391d 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 9c3aff5406709ba28172eddf9aad67a9bdbb22a7..d219132db7a6aeb8ea86f59bac10021b7f2a727d 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