채팅 기능
4월 11일,
API나 세션 관련해서 발생하는 문제점들을 중점적으로 수정했습니다.
API 코드 변경
기존 코드는 에이전트 구성과 임베딩을 위해 OpenAI를 활용했습니다.
그렇기 때문에 사용자에게 OpenAI의 API 키가 없을 경우,
Claude와 같은 다른 모델을 사용해도 에러가 발생하는 문제가 있었습니다.
그래서 일반 GPT 호출 상수 및 함수와 임베딩 전용 함수를 분리하여 에러가 발생하지 않도록 수정했습니다.
DB 내부의 공통 API

현재, DB 내 사용자 계정이 아닌 관리자 계정으로 API 하나를 생성했습니다.
이 API는 1번 ID로 저장되어서, 모든 사용자를 위해 공통으로 제공됩니다.
해당 API를 활용하여 답변 생성은 불가능하지만 임베딩과 에이전트 활용이 가능해집니다.
def get_embedding_key(db : Session):
api = db.query(ApiKey).filter(ApiKey.user_id == 1).first()
config.EMBEDDING_API = api.api_key
return config.EMBEDDING_API
기타 작업 내용
채팅 관련 기능 외에 4월 11일 작업한 내용들입니다.
비밀번호 변경 함수
비밀번호 암호화 기능의 추가로 인해,
기존 비밀번호 변경 기능이 동작하지 않는 문제가 있었습니다.
def change_password(db : Session, id : int, current_pw : str, new_pw : str):
user = db.query(User).filter(User.id == id).first()
hashed_pw = hash_password(new_pw)
if user.password.startswith("$2b$"):
if verify_password(current_pw, user.password):
user.password = hashed_pw
db.commit()
db.refresh(user)
return "비밀번호가 변경되었습니다!"
else :
return "현재 비밀번호가 잘못되었습니다."
else :
return "관리자 권한으로 생성된 계정입니다."
그렇기 때문에 비밀번호 변경 코드 또한 백엔드에서 새 비밀번호를 받은 후
해시 암호화한 뒤에 검증하는 방식으로 코드를 수정했습니다.
이렇게 했을 때,
새로 저장되는 비밀번호 또한 암호화를 거친 후 저장됩니다.
사용자 삭제
기존에 사용자 삭제 기능이 관리자 화면에서 제대로 작동하지 않는 문제가 발생했습니다.
현재 유저 삭제 기능 관련 함수들 수정했습니다.
엔드포인트
@user_router.post("/DeleteUser", response_model=DeleteUserResponse)
async def projects_list(request: DeleteUserRequest, db: Session = Depends(get_db)):
email = request.email
delete_user(db, email)
return JSONResponse(content={'message': '삭제 완료.'}, status_code=200)
엔드포인트 함수가 일부 수정됐습니다.
비밀번호 찾기
비밀번호 찾기 기능 구현되었습니다.
스키마
class FindPasswordRequest(BaseModel):
newPasswordData : str
email : str
class FindPasswordResponse(BaseModel):
message : str
Email과 신규 비밀번호를 입력으로 받고,
메세지를 반환합니다.
CRUD 함수
def find_password(db : Session, email : str, new_pw : str):
user = db.query(User).filter(User.email == email).first()
hashed_pw = hash_password(new_pw)
if user.password.startswith("$2b$"):
user.password = hashed_pw
db.commit()
db.refresh(user)
return "비밀번호가 변경되었습니다!"
else :
return "관리자 권한으로 생성된 계정입니다."
기존 change_password 함수를 조금 수정해서 새 함수를 만들었습니다.
엔드포인트
@user_router.post("/FindPassword", response_model=FindPasswordResponse)
async def find_password_endpoint(request: FindPasswordRequest, db: Session = Depends(get_db)):
email = request.email
new_pw = request.newPasswordData
messages = find_password(db = db, email=email, new_pw=new_pw)
return JSONResponse(content={'message': messages}, status_code=200)
엔드포인트에서도 기존 ChangePassword와 비슷하게 새로 함수를 만들었습니다.