From 7c2e15ec8b19d2604bccfd0de3ad3cdacf917210 Mon Sep 17 00:00:00 2001 From: motty Date: Sat, 18 Nov 2023 14:50:14 +0000 Subject: [PATCH] add session with weather code --- src/kb_2315/backend/api/endpoints/session.py | 19 ++++++++++++++----- src/kb_2315/backend/crud/crud_session.py | 6 ++++-- src/kb_2315/backend/weather/api.py | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 src/kb_2315/backend/weather/api.py diff --git a/src/kb_2315/backend/api/endpoints/session.py b/src/kb_2315/backend/api/endpoints/session.py index 8eb213c..98d87b5 100644 --- a/src/kb_2315/backend/api/endpoints/session.py +++ b/src/kb_2315/backend/api/endpoints/session.py @@ -3,7 +3,8 @@ from fastapi import APIRouter from kb_2315 import notify -from kb_2315.backend.crud import crud_session +from kb_2315.backend.crud import crud_session, crud_user +from kb_2315.backend.models import User from kb_2315.backend.schemas import schema_session from kb_2315.config import conf @@ -13,9 +14,17 @@ @router.get("/") def create_session(device_id: int) -> schema_session.create_session: - session_id: UUID = crud_session.add_session(device_id=device_id) - - notify.line.send_message(message=f"乾燥を開始しました\n{conf.host_url}/analyze/?session_id={session_id}\n\n靴を選んでください") - notify.line.shoe_select_carousel(session_id=session_id) + user: User = crud_user.search_user_by()[0] + + session_id: UUID = crud_session.add_session(user=user, device_id=device_id) + + notify.line.send_message( + message=f"乾燥を開始しました\n{conf.host_url}/analyze/?session_id={session_id}\n\n靴を選んでください", + send_to_id=user.line_channel_id, + ) + notify.line.shoe_select_carousel( + session_id=session_id, + send_to_id=user.line_channel_id, + ) return schema_session.create_session(session_id=session_id) diff --git a/src/kb_2315/backend/crud/crud_session.py b/src/kb_2315/backend/crud/crud_session.py index d18c393..0b251bd 100644 --- a/src/kb_2315/backend/crud/crud_session.py +++ b/src/kb_2315/backend/crud/crud_session.py @@ -2,17 +2,19 @@ from sqlalchemy.orm import Query -from kb_2315.backend.models import Session +from kb_2315.backend.models import Session, User +from kb_2315.backend.weather import api as weather_api from .base_crud import base_CRUD class CRUD_Session(base_CRUD): - def add_session(self, device_id: int, shoe_id: int | None = None) -> UUID: + def add_session(self, user: User, device_id: int, shoe_id: int | None = None) -> UUID: with self._Session() as session: new_session = Session() new_session.shoe_id = shoe_id new_session.device_id = device_id + new_session.weather_code = weather_api.get_weather_code(user.ido_longitude, user.keido_latitude) session.add(new_session) session.commit() diff --git a/src/kb_2315/backend/weather/api.py b/src/kb_2315/backend/weather/api.py new file mode 100644 index 0000000..5f64e5b --- /dev/null +++ b/src/kb_2315/backend/weather/api.py @@ -0,0 +1,15 @@ +import requests + + +def get_weather_code(ido_longitude: float, keido_latitude: float) -> int: + url: str = ( + f"https://api.open-meteo.com/v1/forecast?latitude={ido_longitude}&longitude={keido_latitude}" + "&timezone=Asia%2FTokyo&forecast_days¤t=weather_code" + ) + + try: + r = requests.get(url).json() + return r.get("daily").get("weather_code") + except Exception: + # 困ったら曇り + return 2