Skip to content

Imposter-study/TastePT

Repository files navigation

맛P.T

🇰🇷 한국어 | 🇺🇸 English

소개

사기꾼 연구회

프로젝트

게으른 완벽주의자를 위한 레시피 챗봇 👉 맛P.T SA 문서 👉 맛P.T 웹사이트

✨ 주요 기능

👤 회원기능

회원가입, 로그인, 로그아웃, 회원탈퇴
  • 회원가입

    • Endpoint: POST /api/v1/accounts/
    • Request Body:
      {
        "email": "string",
        "password": "string",
        "password_confirm": "string",
        "nickname": "string",
        "role": "string",
        "age": "integer",
        "gender": "string",
        "allergies": ["string"],
        "preferred_cuisine": ["string"],
        "diet": "string"
      }
    • Validation:
      • 비밀번호: 최소 8자 이상
      • 이메일: 유효성 검사
      • 닉네임: 최대 30글자
      • 비밀번호 일치 확인
    • 이메일 인증:
      • 회원가입 시 자동으로 이메일 인증 메일 발송
      • 인증 링크 클릭 시 계정 활성화
      • 인증 URL: GET /api/v1/accounts/verify-email/<token>/
      • 응답:
        • 201: 회원가입 성공 (이메일 인증 대기)
        • 400: 유효성 검사 실패
  • 로그인

    • Endpoint: POST /api/v1/accounts/signin/
    • Request Body:
      {
        "username": "string",
        "password": "string"
      }
    • Response:
      {
        "detail": "로그인 성공",
        "nickname": "string"
      }
    • Status Codes:
      • 200: 로그인 성공
      • 401: 인증 실패
  • 로그아웃

    • Endpoint: POST /api/v1/accounts/signout/
    • Response:
      {
        "detail": "로그아웃 성공"
      }
    • Status Codes:
      • 200: 로그아웃 성공
  • 회원탈퇴

    • Endpoint: DELETE /api/v1/accounts/
    • Request Body:
      {
        "password": "string"
      }
    • Response:
      {
        "message": "회원이 비활성화 되었습니다."
      }
    • Status Codes:
      • 200: 탈퇴 성공
      • 400: 비밀번호 불일치
프로필 조회, 프로필 수정
  • 프로필 조회

    • Endpoint: GET /api/v1/accounts/<nickname>/
    • Response:
      {
        "email": "string",
        "nickname": "string",
        "profile_picture": "string",
        "role": "string",
        "age": "integer",
        "gender": "string",
        "allergies": ["string"],
        "preferred_cuisine": ["string"],
        "diet": "string"
      }
    • Status Codes:
      • 200: 조회 성공
      • 404: 사용자 없음
  • 프로필 수정

    • Endpoint: PUT /api/v1/accounts/
    • Request Body:
      {
        "nickname": "string",
        "profile_picture": "file",
        "age": "integer",
        "gender": "string",
        "allergies": ["string"],
        "preferred_cuisine": ["string"],
        "diet": "string"
      }
    • Response:
      {
        "detail": "프로필이 성공적으로 업데이트되었습니다."
      }
    • Status Codes:
      • 200: 수정 성공
      • 400: 유효성 검사 실패
랜덤 닉네임 생성
  • Endpoint: GET /api/v1/accounts/random_nickname/
  • 응답:
    {
      "nickname": "random_nickname"
    }
  • 기능 설명:
    • 형용사와 명사 조합으로 유니크한 닉네임 생성
    • 자동으로 생성된 닉네임은 즉시 사용 가능
    • 중복 체크 자동 수행
  • Status Codes:
    • 200: 랜덤 닉네임 생성 성공
    • 500: 닉네임 생성 실패
패스워드 변경
  • Endpoint: PUT /api/v1/accounts/password/
  • Request Body:
    {
      "current_password": "string",
      "new_password": "string",
      "new_password_confirm": "string"
    }
  • Validation:
    • 현재 비밀번호 확인
    • 새로운 비밀번호:
      • 최소 8자 이상
      • 대소문자, 숫자, 특수문자 포함
    • 비밀번호 일치 확인
  • Response:
    {
      "detail": "비밀번호가 성공적으로 변경되었습니다."
    }
  • Status Codes:
    • 200: 변경 성공
    • 400: 유효성 검사 실패
소셜로그인
  • 카카오 로그인

    • 인증 URL: GET /api/v1/accounts/social/signin/kakao/
    • Callback: GET /api/v1/accounts/social/callback/kakao
    • Redirect: 프론트엔드 도메인
  • 소셜로그인 공통

    • 인증 흐름:
      1. 소셜 로그인 URL 요청
      2. 소셜 플랫폼 인증
      3. 콜백 URL로 리다이렉트
      4. 사용자 생성/로그인
    • 인증 상태 확인:
      {
        "authenticated": boolean,
        "user": "nickname",
        "profile_img": boolean
      }

🤖 챗봇

채팅방 관리
  • 채팅방 생성

    • Endpoint: POST /api/v1/chatbot/room/
    • Body:
      {
        "name": "string"
      }
    • Response:
      {
        "id": 1,
        "name": "string",
        "created_at": "2025-04-11T04:17:10+00:00"
      }
    • Status Codes:
      • 201: 채팅방이 성공적으로 생성됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
  • 채팅방 이름 변경

    • Endpoint: PUT /api/v1/chatbot/room/{room_id}/
    • Body:
      {
        "name": "string"
      }
    • Response:
      {
        "id": 1,
        "name": "string",
        "created_at": "2025-04-11T04:17:10+00:00"
      }
    • Status Codes:
      • 200: 채팅방 이름이 성공적으로 변경됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 채팅방을 찾을 수 없음
  • 채팅방 삭제

    • Endpoint: DELETE /api/v1/chatbot/room/{room_id}/
    • Response:
      {
        "success": true
      }
    • Status Codes:
      • 200: 채팅방이 성공적으로 삭제됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 채팅방을 찾을 수 없음
레시피 챗봇
  • 레시피 질문
    • Endpoint: POST /api/v1/chatbot/room/{room_id}/message/
    • Body:
      {
        "query": "string"
      }
    • Response:
      {
        "answer": "string"
      }
    • Status Codes:
      • 200: 레시피 추천이 성공적으로 완료됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 404: 채팅방을 찾을 수 없음
      • 500: 레시피 추천 중 오류 발생

📝 커뮤니티

게시글 관리
  • 게시글 목록 조회

    • Endpoint: GET /api/v1/community/
    • Response:
      {
        "count": 1,
        "next": null,
        "previous": null,
        "results": [
          {
            "id": 1,
            "title": "string",
            "content": "string",
            "thumbnail": "string",
            "created_at": "2025-04-11T04:17:10+00:00",
            "updated_at": "2025-04-11T04:17:10+00:00",
            "author": {
              "id": 1,
              "nickname": "string"
            },
            "comments": [
              {
                "id": 1,
                "content": "string",
                "created_at": "2025-04-11T04:17:10+00:00",
                "updated_at": "2025-04-11T04:17:10+00:00",
                "author": {
                  "id": 1,
                  "nickname": "string"
                },
                "reply_comments": []
              }
            ]
          }
        ]
      }
    • Status Codes:
      • 200: 게시글 목록 조회 성공
      • 400: 잘못된 요청 파라미터
  • 게시글 생성

    • Endpoint: POST /api/v1/community/
    • Body:
      {
        "title": "string",
        "content": "string",
        "thumbnail": "string"  // optional
      }
    • Status Codes:
      • 201: 게시글이 성공적으로 생성됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
  • 게시글 수정

    • Endpoint: PUT /api/v1/community/{post_id}/
    • Body:
      {
        "title": "string",
        "content": "string",
        "thumbnail": "string"  // optional
      }
    • Status Codes:
      • 200: 게시글이 성공적으로 수정됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 게시글을 찾을 수 없음
  • 게시글 삭제

    • Endpoint: DELETE /api/v1/community/{post_id}/
    • Status Codes:
      • 204: 게시글이 성공적으로 삭제됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 게시글을 찾을 수 없음
댓글 관리
  • 댓글 작성

    • Endpoint: POST /api/v1/community/{post_id}/comment/
    • Body:
      {
        "content": "string"
      }
    • Status Codes:
      • 201: 댓글이 성공적으로 생성됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 404: 게시글을 찾을 수 없음
  • 댓글 수정

    • Endpoint: PUT /api/v1/community/comment/{comment_id}/
    • Body:
      {
        "content": "string"
      }
    • Status Codes:
      • 200: 댓글이 성공적으로 수정됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 댓글을 찾을 수 없음
  • 댓글 삭제

    • Endpoint: DELETE /api/v1/community/comment/{comment_id}/
    • Status Codes:
      • 204: 댓글이 성공적으로 삭제됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 댓글을 찾을 수 없음
대댓글 관리
  • 대댓글 작성

    • Endpoint: POST /api/v1/community/{post_id}/comment/{comment_id}/reply/
    • Body:
      {
        "content": "string"
      }
    • Status Codes:
      • 201: 대댓글이 성공적으로 생성됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 404: 게시글 또는 댓글을 찾을 수 없음
  • 대댓글 수정

    • Endpoint: PUT /api/v1/community/comment/{reply_id}/
    • Body:
      {
        "content": "string"
      }
    • Status Codes:
      • 200: 대댓글이 성공적으로 수정됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 대댓글을 찾을 수 없음
  • 대댓글 삭제

    • Endpoint: DELETE /api/v1/community/comment/{reply_id}/
    • Status Codes:
      • 204: 대댓글이 성공적으로 삭제됨
      • 401: 인증되지 않은 사용자
      • 403: 권한이 없는 사용자
      • 404: 대댓글을 찾을 수 없음
신고 기능
  • 게시글 신고

    • Endpoint: POST /api/v1/community/{post_id}/report/
    • Body:
      {
        "type": "post"
      }
    • Status Codes:
      • 201: 게시글이 성공적으로 신고됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 403: 이미 신고한 게시글
      • 404: 게시글을 찾을 수 없음
  • 댓글 신고

    • Endpoint: POST /api/v1/community/comment/{comment_id}/report/
    • Body:
      {
        "type": "comment"
      }
    • Status Codes:
      • 201: 댓글이 성공적으로 신고됨
      • 400: 필요한 파라미터가 누락됨
      • 401: 인증되지 않은 사용자
      • 403: 이미 신고한 댓글
      • 404: 댓글을 찾을 수 없음

🚀 설치 및 실행 방법

# 프로젝트 클론
git clone https://github.com/Imposter-study/TastePT

# 의존성 설치
pip install -r requirements.txt

# 데이터베이스 마이그레이션
python manage.py migrate

# 개발 서버 실행
python manage.py runserver

🔧 환경 변수 설정

.env 파일을 생성하고 다음과 같이 설정하세요.

# Django
SECRET_KEY=
DEBUG=True

# Allowed Hosts
ALLOWED_HOSTS=localhost,127.0.0.1

# OpenAI
OPENAI_API_KEY=

# Database
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_HOST=

# Langfuse
LANGFUSE_SECRET_KEY=
LANGFUSE_PUBLIC_KEY=

#Redis
REDIS_HOST=
REDIS_PASSWORD=

# social
KAKAO_CLIENT_ID=
REDIRECT_DOMAIN=

# email
DOMAIN=
EMAIL_HOST_USER=
EMAIL_HOST_PASSWORD=

#FRONT
FRONT_DOMAIN=

🛠 기술 스택

Python Django Docker Nginx Amazon AWS

Git GitHub Daphne Gunicorn Celery Redis

LangChain Django Channels Django Ninja ChromaDB

📁 폴더 구조

📂 프로젝트 루트
├── 📂 accounts
├── 📂 chatbot
├── 📂 community
├── 📂 config
│    ├── 📜 asgi.py
│    ├── 📜 celery.py
│    ├── 📜 settings.py
│    ├── 📜 urls.py
│    └── 📜 wsgi.py
├── 📂 node_server
├── 📜 .env
├── 📜 .gitignore
├── 📜 Dockerfile
├── 📜 docker-compose.yml
├── 📜 manage.py
├── 📜 requirements.txt
├── 📜 README.md

🤝 기여 방법

1.이슈를 확인하고 작업할 항목을 선택하세요.
2.새로운 브랜치를 생성하고 작업을 수행하세요.
3. Pull Request를 생성하여 변경 사항을 공유하세요.

📄 라이선스

This project is licensed under the MIT License - see the LICENSE file for details

📬 문의 및 연락처

프로젝트에 대한 문의사항은 다음으로 연락주세요:

About

스터디 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors