dataController.js 2.24 KB
Newer Older
1
import fs from "fs";
2
import fetch from "node-fetch";
3
import { serverMSG, statusCode } from "../serverinfo";
4
import db from "../db/index";
5
6
7
import dotenv from "dotenv";

dotenv.config();
8

9
// 외부 수집기로 부터 들어온 정보 처리
10
const handleOutData = async (locCode, date, lat, lng) => {
11
  // OpenWeatherAPI로 부터 지역의 날씨 정보획득을 위해 지역의 경도와 위도, API Key, 단위 기준 metric 전달
12
  const response = await fetch(
13
    `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lng}&appid=${process.env.OPENWEATHERMAP_API_KEY}&units=metric`
14
15
16
17
18
19
20
21
  );
  const json = await response.json();

  const temp = json["main"]["temp"];
  const humi = json["main"]["humidity"];
  const press = json["main"]["pressure"];
  const wind_speed = json["wind"]["speed"];

22
23
24
25
26
27
28
29
30
31
32
33
34
  await db.Weather_out.create(
    {
      loc_code: Number(locCode),
      collected_at: date,
      temp: temp,
      humi: humi,
      press: press,
      wind_speed: wind_speed,
    },
    {
      logging: false,
    }
  );
35
36
37
};

// 내부 수집기로 부터 들어온 정보 처리
38
39
40
41
42
43
44
45
46
47
48
49
50
const handleInData = async (id, date, temp, humi, lights) => {
  db.Weather_in.create(
    {
      host: id,
      collected_at: date,
      temp: temp,
      humi: humi,
      lights: lights,
    },
    {
      logging: false,
    }
  );
51
52
53
};

// 데이터 수신 처리
54
export const getDataInput = (req, res) => {
55
  try {
56
    if (req.query.type === "OUT") {
57
58
      // 외부 데이터 수집기
      const {
59
        query: { locCode, date, lat, lng },
60
      } = req;
61

62
63
      console.log(locCode, date, lat, lng);
      // handleOutData(locCode, date, lat, lng);
64
65
66
    } else {
      // 내부 데이터 수집기 동작
      const {
67
        query: { id, locCode, date, temp, humi, lights },
68
69
      } = req;

70
      console.log(id, locCode, date, temp, humi, lights);
71
      // handleInData(id, date, temp, humi, lights);
72
73
    }

74
    res.status(statusCode.ok).send(serverMSG.server_ok);
75
76
  } catch (error) {
    console.log(error);
77
    res.status(statusCode.err).send(serverMSG.server_err);
78
  }
KangMin An's avatar
KangMin An committed
79
};
80
81

// 사용자의 데이터 가져오기 및 예측 값 전송
82
export const getUserWeatherData = (req, res) => {
83
84
85
86
87
88
  const {
    params: { id },
  } = req;

  res.status(statusCode.ok).send(serverMSG.server_ok);
};