Skip to content

TeamLightrain/veganScan-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VeganScan Backend

VeganScan MVP 백엔드 서버 - 식당 메뉴 채식 등급 분석 서비스

주요 기능

  • 🤖 AI 메뉴 분석: Gemini API를 통한 채식 등급 자동 판정
  • 💾 메뉴 저장: 사용자별 메뉴 보관함 기능
  • 🔐 게스트 인증: 별도 가입 없이 UUID 토큰 기반 세션
  • 📊 DynamoDB 저장: Single-Table Design 기반 데이터 관리

기술 스택

  • Runtime: Node.js
  • Framework: Express.js
  • Database: AWS DynamoDB
  • AI: Google Gemini 1.5 Flash
  • Auth: Cookie-based Guest Token

설치 및 실행

1. 의존성 설치

npm install

2. 환경 변수 설정

.env.example 파일을 복사하여 .env 파일을 생성하고 필요한 값을 입력하세요.

cp .env.example .env

필수 환경 변수:

# Server Configuration
PORT=8000
NODE_ENV=development

# CORS
FRONTEND_URL=http://localhost:3000

# DynamoDB Configuration
AWS_REGION=ap-northeast-2
TABLE_NAME=VeganScanData

# Gemini AI API Configuration
GEMINI_API_KEY=your_gemini_api_key_here

3. Gemini API Key 발급

  1. Google AI Studio에서 API 키 발급
  2. .env 파일의 GEMINI_API_KEY에 입력

4. AWS 설정

AWS CLI를 통해 자격 증명을 설정하거나, 환경 변수로 설정하세요.

aws configure

5. 서버 실행

# 개발 모드 (nodemon)
npm run dev

# 프로덕션 모드
npm start

서버는 기본적으로 http://localhost:8000에서 실행됩니다.

API 엔드포인트

인증 (Auth)

  • POST /v1/auth/guest - 게스트 토큰 발급
  • GET /v1/auth/check - 게스트 세션 확인

분석 (Analysis)

  • POST /v1/analysis - 식당 분석 및 저장

저장 메뉴 (Save Menu)

  • POST /v1/save_menu - 메뉴 저장
  • GET /v1/save_menu - 저장된 메뉴 목록 조회 (식당별 그룹화)
  • GET /v1/menus/:res_id/:menu_name - 메뉴 상세 정보 조회

응답 구조 예시

GET /v1/save_menu

[
  {
    "restaurant": {
      "place_id": "1490005496",
      "name": "보람 공릉 본점",
      "address": "서울특별시 노원구 공릉로43길 18 1층 102호",
      "category": "음식점>일식>일식당"
    },
    "menus": [
      {
        "menu_id": "1",
        "name": "민물장어덮밥",
        "price": "27000",
        "description": "신선한 민물장어를 사용한 덮밥 요리",
        "image_url": "https://example.com/image.jpg",
        "analysis": {
          "vegetarian_type": {
            "category": "Normal",
            "source": "AI",
            "reasoning": "주재료인 민물장어가 포함되어 있어...",
            "ingredients": ["민물장어", "", "", "간장"],
            "blockers": ["민물장어"],
            "modifications_for_stricter": "..."
          }
        }
      }
    ]
  }
]

채식 등급 분류

  • CompleteVegan: 동물성 재료 전혀 없음 (식물성만)
  • Lacto: 유제품 포함, 달걀/고기/생선 불포함
  • Ovo: 달걀 포함, 유제품/고기/생선 불포함
  • Lacto/Ovo: 유제품과 달걀 포함, 고기/생선 불포함
  • Pescatarian: 생선 포함, 고기 불포함
  • Pollotarian: 닭고기 포함, 붉은 고기 불포함
  • Normal: 모든 동물성 재료 포함

분석 출처 (Source)

  • AI: Gemini API를 통한 자동 분석
  • curating: 수동으로 검증된 큐레이팅 데이터

프로젝트 구조

src/
├── app.js                      # Express 앱 설정
├── config/
│   └── dynamo.js              # DynamoDB 클라이언트 설정
├── controllers/
│   ├── analysisController.js  # 분석 컨트롤러
│   ├── authController.js      # 인증 컨트롤러
│   └── storageController.js   # 저장 컨트롤러
├── middlewares/
│   └── authMiddleware.js      # 인증 미들웨어
├── routes/
│   ├── analysisRoutes.js      # 분석 라우트
│   ├── authRoutes.js          # 인증 라우트
│   ├── storageRoutes.js       # 저장 라우트
│   └── index.js               # 라우트 통합
└── services/
    ├── analysisService.js     # AI 분석 서비스
    ├── authService.js         # 인증 서비스
    └── storageService.js      # 저장 서비스

MVP 범위

✅ 포함된 기능

  • 메뉴 분석하기 (AI 기반)
  • 메뉴 저장/조회/삭제
  • 게스트 인증
  • 채식 등급 및 성분 분석
  • 분석 신뢰도 및 출처 라벨링

❌ 제외된 기능

  • 지도 표시 기능 (GET /v1/save_menu/map 제거)
  • 좌표 데이터 처리 (latitude, longitude)
  • 일반 로그인 기능

참고 문서

개발자

VeganScan Backend Team

라이선스

ISC

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors