Giter VIP home page Giter VIP logo

matgo's Introduction

로고

맞(맛)집의 고향, 맞고

✨전주 맛집 탐방✨

wiki | API 문서

전주시 음식점 공공데이터를 이용한 맛집 커뮤니티 서비스입니다.

전주시에 사는 회원님들은 커뮤니티 기능을 이용해서 맛집을 공유하고 리뷰를 남길 수 있습니다.

현지인들이 검증한 맛집을 찾아보세요!

서비스 아키텍처

프로젝트 기능 및 설계

  • [회원 기능]

    • 회원가입: 이메일(unique), 비밀번호, 닉네임(unique), 프로필 사진, 지역
      • 이메일 인증 (이메일 인증을 하지 않으면 로그인 불가, 24시간 이내에 인증을 하지 않으면 회원가입 정보 삭제)
      • 비밀번호 암호화
      • 닉네임 중복 확인
      • 프로필 사진은 기본 이미지 제공
      • 회원가입 시, 기본적으로 사용자 권한 부여 (관리자는 별도로 생성)
    • 로그인: 이메일, 비밀번호
      • 로그인 시, JWT 토큰 발급 (Access Token, Refresh Token)
      • Access Token은 30분, Refresh Token은 7일로 설정
      • Refresh Token은 Redis에 저장
    • 로그아웃: Access Token, Refresh Token 둘 다 만료
    • 회원 정보 수정: 비밀번호, 닉네임, 프로필 사진, 주소
      • 비밀번호 변경 시, 이전 비밀번호 확인
    • 비밀번호 찾기: 가입한 이메일로 임시 비밀번호 발급 (DB에 저장된 비밀번호도 임시 비밀번호로 변경)
    • 내 정보 조회: 닉네임, 프로필 사진
      • 작성한 리뷰, 작성한 게시글, 작성한 댓글 조회 가능 (페이징)
    • 회원 탈퇴: 회원 정보 삭제 (sofe delete)
  • [맛집 데이터 관리]

    • OpenAPI에서 데이터를 받아와 RDB(MySQL)에 저장 후, 애플리케이션 레이어에서 MySQL과 Elasticsearch 사이의 실시간 동기화를 수행
      • @Document 어노테이션을 통해 Elasticsearch에 매핑
      • @Entity 어노테이션으로 MySQL 테이블도 매핑
      • 리뷰 별점 데이터가 변경될 때, 해당 식당의 모든 리뷰를 기반으로 별점을 재계산하고 그 결과를 바로 Elasticsearch에 업데이트하여 실시간 동기화를 유지 (별점 순으로 조회하기 위함)
      • 리뷰가 추가/삭제될 때, 해당 식당의 리뷰 개수를 재계산하고 그 결과를 바로 Elasticsearch에 업데이트하여 실시간 동기화를 유지 (리뷰 개수 순으로 조회하기 위함)
      • 주기적인 동기화는 애플리케이션 레이어에서 스케줄링하여 처리
        • MySQL에 저장된 맛집 테이블의 updated_at 컬럼을 기준으로 현재 시간에서 1시간 이내에 변경된 데이터만 Elasticsearch에 동기화
  • [맛집 조회]

    • 전체 맛집 조회 (페이징)
    • 전주의 xx동을 기준으로 맛집 조회 (페이징)
    • 내 주변 맛집 조회 (페이징)
      • 가입 시 입력한 주소를 기준으로 맛집 조회 (xx동)
    • 각 조회 시 별점 순, 리뷰 개수 순으로 정렬 가능
    • 맛집 상세 조회
    • 이름으로 맛집 검색
  • [맛집 등록 요청]

    • 공공데이터에 존재하지 않는 매장이 있다면, 사용자가 직접 맛집 등록 요청 가능
      • 등록 요청 시, 관리자가 확인 후 승인일시 컬럼에 날짜를 기록 (승인 전까지는 조회 불가능)
  • [맛집 리뷰 기능]

    • 리뷰 작성: 별점, 내용, 사진, 재방문 여부
    • 리뷰 삭제: 리뷰 작성자와 관리자만 가능
    • 리뷰 수정: 불가능
    • 리뷰 상세 조회: 모두 가능
    • 매장 별 리뷰 목록 조회 : 모두 가능
      • 별점 순, 최신 순, 좋아요 순으로 정렬 가능
    • 좋아요/싫어요 기능
      • 회원 당 하나의 리뷰에 한번만 가능
  • [커뮤니티]

    • 지역별(xx동)로 게시글 작성 가능
    • [게시글]
      • 글 작성,수정: 제목, 내용, 사진, 지역 (사진은 최대 3장)
      • 글 삭제: 글 작성자만 가능
      • 글 조회: 자신의 지역 글만 조회 가능 (페이징)
        • 비회원은 조회 불가능
      • 좋아요/싫어요 기능
        • 회원 당 하나의 게시글에 한번만 가능
    • [댓글]
      • 댓글 작성,수정,삭제: 댓글 작성자만 가능

추가 구현 예정

  • OAuth 로그인
  • 맛집이나 지역을 구독하여 새로운 리뷰나 정보를 알림으로 받을 수 있는 기능
  • 맛집 예약서비스

ERD

Tech Stack

Back-end

Infra

matgo's People

Contributors

kingseungil avatar

Stargazers

박아연 avatar

Watchers

 avatar

matgo's Issues

[BE] 맛집 등록 요청

📑 작업 사항
사용자가 직접 맛집 등록 요청 가능

To-do

  • 등록 요청
  • 관리자 승인 후 데이터에 추가

🎸 기타사항

[BE] 로그인, 로그아웃

📑 작업 사항
로그인 기능

To-do

  • jwt 설정
  • token 저장 용 redis 설정
  • 로그인 api
  • 로그아웃 api

🎸 기타사항

[BE] 회원 가입

📑 작업 사항
회원 기능 추가

To-do

  • 회원가입
  • 이메일로직 비동기 처리

🎸 기타사항

  • 회원가입 시 이메일 인증 구현 (비동기처리)

[BE] RestDocs 설정

📑 작업 사항
프로젝트 초기 세팅

To-do

  • Restdocs 설정
  • swagger 설정

🎸 기타사항
restdocs + swagger 조합으로 신뢰도와 사용성 ⬆️

[BE] 맛집 조회

📑 작업 사항
맛집 조회 기능

To-do

  • 전체 맛집 조회(페이징)
  • 지역기준으로 맛집 조회(페이징)
  • 내 주변 맛집 조회(페이징) - 가입 시 저장한 region을 기준으로 조회
  • 맛집 상세 조회
  • 각 조회 시 별점 순, 리뷰 개수 순으로 정렬
  • 맛집 검색(이름으로)

🎸 기타사항

[BE] 커뮤니티 게시판 댓글

📑 작업 사항
게시판 댓글 기능

To-do

  • 댓글 작성
  • 댓글 수정
  • 댓글 삭제

🎸 기타사항
기타 사항을 작성해주세요

[BE] 프로젝트 초기 세팅

📑 작업 사항
환경설정(yml), 엔티티매핑 등 프로젝트 초기 세팅

To-do

  • yml 설정
  • 폴더 구조 잡기
  • 엔티티 매핑
  • QueryDSL 설정
  • logback.xml 설정
  • CustomException 설정

🎸 기타사항

  • 엔티티는 우선 양방향매핑, LAZY 적용 (개발 진행하면서 수정예정)

[BE] 리뷰 기능

📑 작업 사항
리뷰 기능 추가

To-do

  • 리뷰 작성
  • 리뷰 삭제
  • 리뷰 조회 (페이징)
  • 리뷰 상세 조회
  • 리뷰 좋아요/싫어요 기능

🎸 기타사항

  • 리뷰 작성 시 es 데이터 동기화 필요 (별점,리뷰 개수)
  • 좋아요/싫어요는 회원 당 하나의 리뷰에 한번만 가능

[BE] S3 설정

📑 작업 사항
이미지 저장을 위해 S3 설정

To-do

  • s3 버킷 생성
  • 어플리케이션 설정

🎸 기타사항

[BE] 내 정보 조회, 회원 탈퇴

📑 작업 사항
내 정보 조회, 회원 탈퇴 기능

To-do

  • 내 정보 조회
  • 회원 탈퇴

🎸 기타사항

  • 내 정보 조회 시 작성한 리뷰,게시글,댓글 조회 가능
  • 회원 탈퇴는 soft delete

[BE] 커뮤니티 게시판

📑 작업 사항
커뮤니티 게시판 기능

To-do

  • 게시글 작성
  • 게시글 수정
  • 게시글 삭제
  • 게시글 조회(페이징)
  • 게시글 좋아요/싫어요

🎸 기타사항

  • 게시글 작성은 자신의 지역에만 가능
  • 게시글 조회는 자신의 지역의 글만 가능

[BE] 맛집 데이터 관리

📑 작업 사항
openAPI에서 데이터 받아와서 mysql과 elasticsearch에 저장

To-do

  • es 매핑
  • 데이터 동기화 작업 스케줄링 (mysql - es)
  • openAPI 데이터 db 저장 (한달에 한번 스케쥴링)
  • openfeign 이용

🎸 기타사항

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.