Skip to content
Closed
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
3 changes: 2 additions & 1 deletion backend/app/api/main.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
from fastapi import APIRouter

from app.api.routes import items, login, private, users, utils
from app.api.routes import items, login, private, users, utils, recruit
from app.core.config import settings

api_router = APIRouter()
api_router.include_router(login.router)
api_router.include_router(users.router)
api_router.include_router(utils.router)
api_router.include_router(items.router)
api_router.include_router(recruit.router)


if settings.ENVIRONMENT == "local":
Expand Down
82 changes: 82 additions & 0 deletions backend/app/api/routes/recruit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import uuid
from typing import Any, List, Optional
from fastapi import APIRouter, Depends

from pydantic import BaseModel

# もとの認証依存をラップする関数(認証スキップ用)
def optional_session_dep(skip_auth: bool = True):
def dependency():
if skip_auth:
return None
return None
return Depends(dependency)

def optional_current_user(skip_auth: bool = True):
def dependency():
if skip_auth:
return None
return None
return Depends(dependency)


router = APIRouter(prefix="/recruits", tags=["recruits"])



# Todo: 以下要変更
# -> model{APIに合わせてkeyを指定}
# -> 各アルゴリズム実装

# ==== 仮のレスポンス用モデル ====
class RecruitSearchResult(BaseModel):
id: uuid.UUID
title: str
company: str
location: str
description: str

class RecruitSearchResponse(BaseModel):
results: List[RecruitSearchResult]

class RecruitFeedback(BaseModel):
recruit_id: uuid.UUID
reason: str # 例: "Not relevant", "Too far", etc.

# ==== APIエンドポイント ====

@router.get("/search", response_model=RecruitSearchResponse)
def fetch_recruits(
# session保持してやりたいならここ変えなきゃいけない
session: Optional[Any] = optional_session_dep(skip_auth=True),
current_user: Optional[Any] = optional_current_user(skip_auth=True),
) -> Any:

"""
フロントエンドのフェッチに反応して求人情報を検索
"""


dummy_data = [
RecruitSearchResult(
id=uuid.uuid4(),
title="Software Engineer",
company="Example Corp",
location="Tokyo",
description="Develop awesome things",
)
for _ in range(30)
]
return RecruitSearchResponse(results=dummy_data)

@router.post("/feedback")
def submit_feedback(
feedback: RecruitFeedback,
session: Optional[Any] = optional_session_dep(skip_auth=True),
current_user: Optional[Any] = optional_current_user(skip_auth=True),
) -> Any:
"""
求人に対するフィードバックを受け取り保存
"""
print(f"Received feedback: {feedback}")
return {"message": "Feedback received"}
Loading
Loading