Skip to content

Commit 5064373

Browse files
Merge pull request #248 from KMU-WINK/feat/177-check-item-in-wish
구글 추천 기능에 inWish 필드 추가하기 & 코드 클리닉
2 parents 672ace7 + 5b72879 commit 5064373

16 files changed

+31
-148
lines changed

backend/.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
.env
22
./venv
33
/wmw/
4-
cc.ko.300.bin

backend/app/external_services/areaBasedAPI.py

-17
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,6 @@
77

88

99
AREA_CODE = {
10-
# "서울": 1,
11-
# "인천": 2,
12-
# "대전": 3,
13-
# "대구": 4,
14-
# "광주": 5,
15-
# "부산": 6,
16-
# "울산": 7,
17-
# "세종특별자치시": 8,
18-
# "경기도": 31,
19-
# "강원특별자치도": 32,
20-
# "충청북도": 33,
21-
# "충청남도": 34,
22-
# "경상북도": 35,
23-
# "경상남도": 36,
24-
# "전북특별자치도": 37,
25-
# "전라남도": 38,
26-
# "제주도": 39,
2710
"강릉": [32, 1],
2811
"부산": [6],
2912
"제주": [39],

backend/app/external_services/jobAPI.py

-28
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,6 @@
88
API_KEY = os.getenv("API_KEY")
99

1010
AREA_CODE = {
11-
# "서울": 1,
12-
# "인천": 2,
13-
# "대전": 3,
14-
# "대구": 4,
15-
# "광주": 5,
16-
# "부산": 6,
17-
# "울산": 7,
18-
# "세종특별자치시": 8,
19-
# "경기도": 31,
20-
# "강원특별자치도": 32,
21-
# "충청북도": 33,
22-
# "충청남도": 34,
23-
# "경상북도": 35,
24-
# "경상남도": 36,
25-
# "전북특별자치도": 37,
26-
# "전라남도": 38,
27-
# "제주도": 39,
2811
"강릉": [32, 1],
2912
"부산": [6],
3013
"제주": [39],
@@ -35,17 +18,6 @@
3518
}
3619

3720
AREA_CODE_OPEN = {
38-
# "서울": "R3010",
39-
# "인천": "R3011",
40-
# "대전": "R3012",
41-
# "대구": "R3013",
42-
# "광주": "R3015",
43-
# "울산": "R3016",
44-
# "경기": "R3017",
45-
# "충남": "R3019",
46-
# "충북": "R3020",
47-
# "경북": "R3021",
48-
# "세종": "R3026",
4921
"강릉": "R3018", # 강원도로 전환
5022
"부산": "R3014",
5123
"제주": "R3025",

backend/app/models/Interest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from sqlalchemy import Column, Integer, String
2-
from sqlalchemy.orm import validates, relationship
2+
from sqlalchemy.orm import relationship
33
from ..db.connection import Base
44

55

backend/app/routers/ai.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ def get_interests_by_id(id: str, db: Session = Depends(get_db)):
7575

7676
model_name = "distilbert-base-uncased"
7777
# model_name = "bert-base-multilingual-cased"
78+
7879
# 모델은 프로세스 풀 외부에서 로드
7980
tokenizer = BertTokenizer.from_pretrained(model_name)
8081
model = BertModel.from_pretrained(model_name)
@@ -178,7 +179,5 @@ async def recommend_tourist_spots(request: Request, db: Session = Depends(get_db
178179
if wishs:
179180
for item in result:
180181
item["inWish"] = item["contentid"] in wishs
181-
# for r in result:
182-
# print(r)
183-
print(f"Total time: {int((time.time() - ts) * 1000)}ms")
182+
184183
return result

backend/app/routers/auth.py

-3
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ async def naverAuth(
9292

9393
access_token = _result.get("access_token")
9494

95-
print(_result)
9695
if not access_token:
9796
raise ValueError("Access token not found in response")
9897

@@ -304,9 +303,7 @@ def verify_jwt_token(token: str):
304303

305304
def get_current_user(request: Request, db: Session = Depends(get_db)):
306305
# 쿠키에서 accessToken 가져오기
307-
print(request.cookies)
308306
token = request.cookies.get("accessToken")
309-
print(token)
310307
# 요청에서 Access token이 넘어오지 않았을 때
311308
if token is None:
312309
raise HTTPException(

backend/app/routers/google.py

+23-24
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
from fastapi import Request, APIRouter, Depends, HTTPException
22
import requests, os, random
3-
import xml.etree.ElementTree as ET
4-
import googlemaps
3+
from sqlalchemy.orm import Session
4+
from .auth import get_current_user
5+
from ..db.session import get_db
56
from dotenv import load_dotenv
7+
from ..models.Spot import Spot
8+
from ..models.Stay import Stay
69

710
load_dotenv()
811
API_KEY = os.getenv("API_KEY")
@@ -25,7 +28,6 @@
2528

2629

2730
def get_additional_info(location, query):
28-
print("api", location, query)
2931
url = "http://apis.data.go.kr/B551011/KorService1/searchKeyword1"
3032
params = {
3133
"serviceKey": API_KEY,
@@ -64,11 +66,8 @@ def get_places(query, location, radius):
6466
data = response.json()
6567
return data["results"]
6668
except requests.exceptions.JSONDecodeError as e:
67-
print(f"JSONDecodeError: {e}")
68-
print("Response content:", response.text)
6969
raise e
7070
else:
71-
print(f"Error: {response.status_code}")
7271
raise HTTPException(status_code=400, detail="No data found in get_places")
7372

7473

@@ -78,15 +77,12 @@ def get_lat_lng(location):
7877
response = requests.get(GOOGLE_URL, params=params)
7978
if response.status_code == 200:
8079
data = response.json()
81-
# print("Geocoding API response:", data)
8280
if data["results"]:
8381
location = data["results"][0]["geometry"]["location"]
8482
return location["lat"], location["lng"]
8583
else:
86-
print("No results found for the location.")
8784
raise ValueError("No results found for the location.")
8885
else:
89-
print(f"Error: {response.status_code}")
9086
raise HTTPException(status_code=400, detail="No data found in get_lat_lng")
9187

9288

@@ -120,44 +116,44 @@ def sentence(request: Request):
120116

121117
# 1. 문장 먼저 주기
122118
@router.get("/list")
123-
async def main(request: Request, region_idx: int, keyword_idx: int):
119+
async def main(
120+
request: Request, region_idx: int, keyword_idx: int, db: Session = Depends(get_db)
121+
):
122+
current_user = get_current_user(request, db)
123+
if current_user is None:
124+
raise HTTPException(
125+
status_code=400,
126+
detail=f"user not found. request.header.Authorization: {request.headers.get('Authorization')}",
127+
)
128+
else:
129+
stay_wish = db.query(Stay).filter(Stay.user_id == current_user.id).all()
130+
spot_wish = db.query(Spot).filter(Spot.user_id == current_user.id).all()
131+
wishs = [wish.content_id for wish in stay_wish + spot_wish]
132+
124133
if region_idx < 0 or region_idx >= len(keys):
125134
raise HTTPException(status_code=400, detail="Invalid region index")
126135
if keyword_idx < 0 or keyword_idx >= len(LOCATION_QUERY[keys[region_idx]]):
127136
raise HTTPException(status_code=400, detail="Invalid keyword index")
128137
location = keys[region_idx] # 예: "부산"
129138
query = LOCATION_QUERY[location][keyword_idx] # 예: "부산 관광지"
130-
# print(location, query)
131139
radius = 10000 # 반경 10km
132-
# 도시 이름으로 위도와 경도 가져오기
133-
lat, lng = get_lat_lng(location)
134-
# if lat is None or lng is None:
135-
# print("위도와 경도를 가져올 수 없습니다.")
136-
# return
137-
138-
lat_lng = f"{lat},{lng}"
139140

140141
# 관광지 검색
141142
places = get_places(location + query, location, radius)
142-
# if not places:
143-
# print("관광지 없음")
144-
# return
145143

146144
# 각 관광지의 리뷰 수와 이름 가져오기
147145
places_with_reviews = []
148146
for place in places:
149-
place_id = place["place_id"]
150147
place_name = place["name"]
151148
reviews = place.get("user_ratings_total") # 리뷰 수
152149
if reviews is not None:
153150
places_with_reviews.append((place_name, reviews))
154151

155152
# 리뷰 수로 정렬 (내림차순: 리뷰가 많은 순)
156153
places_with_reviews.sort(key=lambda x: x[1], reverse=True)
157-
# print(places_with_reviews)
158154

159155
tour_result = get_additional_info(location, query)
160-
# print(tour_result)
156+
161157
titles = [item["title"] for item in tour_result]
162158
result = []
163159
# # 결과 출력 및 추가 정보 가져오기 (추가 정보가 없는 경우 제외)
@@ -167,6 +163,9 @@ async def main(request: Request, region_idx: int, keyword_idx: int):
167163
result.append(tour_result[idx])
168164

169165
if len(result):
166+
if wishs:
167+
for item in result:
168+
item["inWish"] = item["contentid"] in wishs
170169
return result
171170
else:
172171
raise HTTPException(status_code=500, detail="No data found in google reccomend")

backend/app/routers/initial.py

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414

1515
# region을 사전에 만들어놓기 위한 코드입니다.
16-
# @router.get("/store_region_to_db", include_in_schema=False) -> docs에서 사라집니다.
1716
@router.get("/store_region_to_db", include_in_schema=False)
1817
def store_region_to_db(db: Session = Depends(get_db)):
1918
regions = ["강릉", "부산", "제주", "경주", "여수", "전주", "춘천"]

backend/app/routers/jobs.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
from ..db.session import get_db
66
from .auth import get_current_user
77

8-
# from ..utils.related_keyword import find_similar_words
9-
108
router = APIRouter(
119
prefix="/jobs",
1210
tags=["jobs"],
@@ -21,11 +19,7 @@ async def read_jobs(
2119
pageNo: int = 1,
2220
db: Session = Depends(get_db),
2321
):
24-
# if len(keyword) > 0:
25-
# print(find_similar_words(keyword))
26-
# 이 (가변 개수) 키워드들을 어떻게 검색으로 적용할지?
27-
# latency를 줄이면서...
28-
# have to connect API
22+
2923
if len(area) == 0 and len(keyword) == 0:
3024
raise HTTPException(
3125
status_code=400, detail="Please provide either area or keyword"

backend/app/routers/spots.py

-4
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@
1313
from ..models.Spot import Spot
1414
from ..models.Stay import Stay
1515

16-
# from datetime import datetime
17-
18-
# formatted_date = datetime.now().strftime("%Y-%m-%d")
19-
2016
router = APIRouter(
2117
prefix="/spots",
2218
tags=["spots"],

backend/app/routers/users.py

+3-25
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,6 @@ def get_works_by_id(id: str, db: Session = Depends(get_db)):
9191
return work_names
9292

9393

94-
# root path
95-
96-
9794
@router.get("")
9895
async def read_users(db: Session = Depends(get_db)):
9996
return db.query(User).all()
@@ -294,7 +291,6 @@ async def update_user_work(user: WorkUpdate, db: Session = Depends(get_db)):
294291
@router.patch("/profile")
295292
async def update_user_profile(request: Request, db: Session = Depends(get_db)):
296293
current_user = get_current_user(request, db)
297-
# current_user = db.query(User).filter(User.id == 1).first() #for test
298294
form = await request.form()
299295
profile: UploadFile = form.get("profile")
300296
if not profile:
@@ -314,25 +310,7 @@ async def update_user_profile(request: Request, db: Session = Depends(get_db)):
314310
return "Profile updated successfully"
315311

316312

317-
# user recommendation
318-
@router.get("/recommend")
319-
async def recommend_user(request: Request, db: Session = Depends(get_db)):
320-
# current_user = get_current_user(request, db)
321-
current_user = db.query(User).filter(User.id == 7).first() # for test
322-
323-
if current_user is None:
324-
raise HTTPException(
325-
status_code=400,
326-
detail=f"user not found. request.header.Authorization: {request.headers.get('Authorization')}",
327-
)
328-
329-
regions = get_regions_by_id(current_user.id, db)
330-
interests = get_interests_by_id(current_user.id, db)
331-
# works = get_works_by_id(current_user.id, db)
332-
return "result"
333-
334-
335-
@router.delete("")
336-
async def delete_user(id: int):
313+
# @router.delete("")
314+
# async def delete_user(id: int):
337315

338-
return "delete_user"
316+
# return "delete_user"

backend/app/routers/wishs.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from fastapi import APIRouter, Depends, HTTPException, Request
22
from sqlalchemy.orm import Session
33
from ..db.session import get_db
4-
from ..models.User import User
54
from ..models.Spot import Spot
65
from ..models.Stay import Stay
76
from ..models.Job import Job

backend/app/schemas/interest.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from pydantic import BaseModel
2-
from typing import List, Optional
32

43

54
class InterestBase(BaseModel):

backend/app/schemas/region.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from pydantic import BaseModel
2-
from typing import List, Optional
32

43

54
class RegionBase(BaseModel):

backend/app/schemas/user.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, Field
1+
from pydantic import BaseModel
22
from typing import List, Optional
33

44

backend/app/utils/related_keyword.py

-30
This file was deleted.

0 commit comments

Comments
 (0)