Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions app/crud/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,14 @@ def get_regions_by_depth(redis: Redis, depth: int):
result = fetch_hgetall(redis, hkey)
return result

def get_region_by_name(redis: Redis, name: str):
"""주어진 이름에 해당하는 동네 목록을 반환하는 함수"""
regions = get_regions(redis, include_depth=False)
for region in regions:
if region["name"] == name:
return region
return None

def get_region_by_source_id(db: Session, source_id: int):
"""주어진 source_id와 depth에 해당하는 동네 목록을 반환하는 함수"""
return db.query(Region).filter(Region.source_id == source_id, Region.deleted_at.is_(None)).first()
Expand Down Expand Up @@ -124,13 +132,13 @@ def sync_high_schools_to_redis(db: Session, redis: Redis):
redis.hset(HIGH_SCHOOLS_ALL_KEY, mapping=mapping)
return len(mapping)

def get_high_schools(redis: Redis):
def get_high_schools(redis: Redis, sort: bool = True):
"""고등학교 인프라 목록을 Redis에서 조회하여 반환하는 함수"""
return fetch_hgetall(redis, HIGH_SCHOOLS_ALL_KEY, sort=False)
return fetch_hgetall(redis, HIGH_SCHOOLS_ALL_KEY, sort=sort)

def get_high_school_map(redis: Redis, sort: bool = True, **extra_dict):
def get_high_school_map(redis: Redis, sort: bool = True):
"""고등학교 인프라 목록을 Redis에서 조회하여 반환하는 함수"""
result = get_high_schools(redis)
result = get_high_schools(redis, sort=sort)
school_map = {s["id"]: s for s in result}
return school_map

Expand Down
19 changes: 1 addition & 18 deletions app/dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@
from .core.exception import AppException, RedirectException
from .core.session import get_session
from .database import get_db
from .models import User, SearchLog
from .models import User
from .schemas.auth import UserSession
from .crud.user import get_user_by_cuid
from .crud.service import (
get_recommendations_by_user_id_and_task_id,
get_search_log_by_user_id_and_task_id,
get_search_log_by_user_id,
)
Expand Down Expand Up @@ -48,22 +47,6 @@ def only_self_access(
)
return user

def get_current_recommendation(
task_id: str,
request: Request,
db: Session = Depends(get_db),
user: User = Depends(only_self_access),
):
"""
`task_id` 값으로 시작하는 추천이 현재 세션의 사용자에게 속한 것인지 검증하는 의존성 함수.
- task_id에 해당하는 추천을 조회할 수 없거나 2개 이상 존재하면 404 에러를 발생시킴
- task_id가 full id가 아닐 경우 302 리다이렉션 처리
"""

search_log = get_current_search_log(task_id, request, db, user)
recommendation = search_log.recommendation
return search_log.recommendation

def get_current_search_log(
task_id: str,
request: Request,
Expand Down
12 changes: 4 additions & 8 deletions app/manage/seeds/insert.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,11 @@ def generate_seed_recommendations(
random.shuffle(selected_infra_types)

rec = None
created_at, finished_at = random_range(start_ts, end_ts)
created_at = datetime.fromtimestamp(created_at)
created_at, finished_at = map(datetime.fromtimestamp, random_range(start_ts, end_ts))
updated_at = finished_at + timedelta(minutes=random.randint(100, 1000)) if random.choice([True, [False] * 4]) else None

for user in request_users:
_, rec = generate_recommendation(
rec = generate_recommendation(
db,
background_tasks=None,
task_id=task_id,
Expand All @@ -103,13 +104,8 @@ def generate_seed_recommendations(
).first()
search_log.last_viewed_at = last_viewed_at

failed_at = (created_at + timedelta(minutes=random.randint(1, 3))) if random.choice([True] + [False] * 4) else None
finished_at = datetime.fromtimestamp(finished_at) if not failed_at and random.choice([True, False]) else None
updated_at = finished_at + timedelta(minutes=random.randint(100, 1000)) if finished_at and random.choice([True, [False] * 4]) else None

rec.created_at = created_at
rec.finished_at = finished_at
rec.failed_at = failed_at
rec.updated_at = updated_at

db.commit()
Expand Down
7 changes: 4 additions & 3 deletions app/models/recommendation.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from typing import TYPE_CHECKING
from sqlalchemy import CheckConstraint, Column, DateTime, JSON, String
from sqlalchemy import Column, DateTime, JSON, String, Boolean
from sqlalchemy.dialects.mysql import INTEGER, BIGINT
from sqlalchemy.orm import Mapped, relationship
from sqlalchemy.sql import func
Expand Down Expand Up @@ -39,18 +39,19 @@ class Recommendation(Base):
id = Column(INTEGER(unsigned=True), primary_key=True, index=True)
task_id = Column(String(64), unique=True, nullable=False)
region = Column(String(255))
infrastructure_priorities: list[str] = Column(JSON(none_as_null=True), nullable=False, default={})
infrastructure_priorities: list[str] = Column(JSON(none_as_null=True), nullable=False, default=[])
sale_price_min = Column(BIGINT(unsigned=True))
sale_price_max = Column(BIGINT(unsigned=True))
jeonse_price_min = Column(BIGINT(unsigned=True))
jeonse_price_max = Column(BIGINT(unsigned=True))
top_properties: list[dict] = Column(JSON(none_as_null=True), nullable=True, default={})
top_properties: list[dict] = Column(JSON(none_as_null=True), nullable=True, default=[])
school_district_types: list[str] = Column(JSON(none_as_null=True), nullable=True, default=[])
high_school_ids: list[int] = Column(JSON(none_as_null=True), nullable=True, default=[])
created_at = Column(DateTime, nullable=False, default=func.now())
finished_at = Column(DateTime)
updated_at = Column(DateTime)
failed_at = Column(DateTime)
in_progress = Column(Boolean, nullable=False, default=True)

users: Mapped[list["SearchLog"]] = relationship("SearchLog", back_populates="recommendation", cascade="all, delete-orphan")

Expand Down
Loading