Skip to content

☕ 카페 정보와 메뉴에 대한 정보가 있는 커뮤니티

Notifications You must be signed in to change notification settings

team-grinder/grinder

Repository files navigation

Cafe Grinder

☕ 카페 정보와 메뉴에 대한 정보가 있는 커뮤니티

카페 정보 제공 소셜네트워크 기반 커뮤니티 웹사이트

img.png

💎Description

  • 국내 1인당 연간 커피 소비량은 405잔(세계 1인당 소비량은 152잔)
  • 브랜드 선호도는 카페의 맛이 대부분의 선택 기준

🤔카페 정보 공유와 함께 소통의 장을 연다면 보다 다양하고 넓은 카페 문화가 형성되지 않을까?

🙄SNS처럼 내 생각을 편하게 이야기하고 평가할 수 있는 공간이 있으면 좋지 않을까?

카페 평가 기능과, 팔로우, 북마크 기능을 활용하여 개인 맞춤 카페 추천을 해주는 SNS 웹사이트입니다.

시연 영상

😀 로그인 회원가입

로그인_회원가입

😁 태그 분석(앨런)

앨런_태그분석

😃댓글 작성, 수정 및 기본 기능

댓글_피드_기본_기능

😋피드 작성, 수정, 삭제

피드_작성_수정_삭제

😊마이페이지

마이페이지

😎카페 관리자 페이지

내카페수정

😗카페정보페이지

카페정보페이지

🤗검색기능 및 관리자 페이지

검색기능_관리자페이지

💫 Team Members

김요한 김중석 유호준 윤인선 이은지 정인우
img.png img.png img.png img.png img.png img.png
- 마이페이지(블랙리스트, 팔로우, 북마크)
- 추천 기능(GPT, 스케줄링)
- 관리자 페이지(회원 관리, 신고 관리, 카페 관리, 판매자 관리) - 로그인 / 회원가입 화면 개발
- 카페 추가 신청 / 피드 작성 외 6 화면 개발
- 카페 정보(피드 조회, 메뉴 조회, 판매자 신청, 북마크) - 로그인/회원가입(회원가입, JWT, 소셜 로그인, 이메일 인증), S3와 CI/CD 환경 구성 - 피드(등록, 수정, 삭제, 좋아요, 태그)
- 댓글(등록 수정 삭제, 대댓글, 좋아요)

💻 Stacks Used

Back-end

Java Spring Spring Boot PostgreSQL AWS
icon
spring logo spring-boot logo img.png
icon

Front-end

Html CSS JavaScript Figma
Html
CSS
icon
jiralogo

Tools

Github Discord Notion Jira
github logo Discord logo Notion logo Notion logo

📄 Project Docs

🎨사용자 요구사항 명세서

✨초안

img.png

🏷회원 관리


  • 회원가입
기능 설명
회원가입 이메일 인증을 통한 회원 가입 (가입 시 이메일로 임의의 번호를 보내 확인한다)
필수 입력 : [이메일], [이름], [닉네임], [비밀번호], [비밀번호 확인], [성별], [연락처], [생년월일]
이메일, 닉네임 중복 확인 아이디 닉네임 [중복 확인] 버튼 클릭 시 확인 할 수 있다.
  • 로그인
기능 설명
계정 로그인 [이메일], [비밀번호]를 입력하여 로그인
소셜 로그인 Oauth2를 사용한 소셜 로그인(google,naver)
비밀번호 찾기 비밀번호 찾기 요청 시 임의의 값으로 비밀번호를 초기화 하고, 해당 값을 이메일로 전송
  • 회원 정보
기능 설명
마이 페이지 로그인 상태에서 [마이페이지] 클릭 시 마이페이지로 이동
회원 정보 변경 마이 페이지에서 [메뉴] 버튼 클릭 시 [회원 정보 수정] 클릭 시 회원 정보 수정 페이지로 이동
변경 가능 : [비밀번호], [닉네임]
작성 글 확인 마이페이지에서 [메뉴] ⇒ [내가 쓴 글 보기] 클릭 시 내가 작성한 글을 확인할 수 있다.
팔로워, 팔로잉 목록 마이페이지에서 [메뉴] ⇒ [팔로워], [팔로잉] 클릭 시 해당 회원을 확인할 수 있다.
차단한 회원 목록 마이페이지에서 [메뉴] ⇒ [차단한 회원] 클릭 시 해당 회원을 확인할 수 있다.
장바구니 목록 마이페이지에서 [메뉴] ⇒ [장바구니] 클릭 시 해당 제품을 확인할 수 있다.

👻비회원


  • 공통
기능 설명
열람 비회원은 카페정보와 댓글을 볼 수 있으나, 피드는 볼 수 없다.

😀회원(공통)


  • 공통
기능 설명
열람 회원은 카페 정보와 댓글과 피드를 모두 볼 수 있다.
  • 신규 장소 등록
기능 설명
신규 장소 등록 신청 회원은 [장소 등록] 버튼 클릭 시 [카페명],[주소],[연락처]을 작성하고, [신청하기] 버튼을 클릭하여 신청할 수 있다.
  • 신고
기능 설명
피드 및 댓글 신고 회원은 피드와 댓글의 우측 하단에 있는 [신고] 버튼을 클릭하여 신고할 수 있다.
  • 인증 회원
기능 설명
인증 회원 특정 팔로잉 수와 리뷰 수, 리뷰 추천 수를 충족하면 자동으로 인증회원으로 분류된다.
  • 차단
기능 설명
회원 차단 피드나 댓글의 회원 사진을 클릭 후 [차단] 버튼을 클릭하면 해당 회원은 차단 목록에 들어가게 된다.
  • 팔로우
기능 설명
팔로우 다른 유저의 프로필에서 [팔로우] 버튼을 클릭하여 팔로우할 수 있다.
언팔로우 팔로우한 유저의 프로필에서 [언팔로우] 버튼을 클릭하여 언팔로우할 수 있다.
  • 판매자 신청
기능 설명
판매자 신청 [사업자등록번호], [사업자명] 을 입력하고 신청할 수 있다.

😎인증 회원


💡 인증 회원은 회원 마크 우측 하단에 특정 마크를 추가하여 인증 회원을 구분할 수 있도록 한다.

🐣판매자


  • 카페 정보
기능 설명
카페 정보 페이지 판매자는 마이페이지에서 [카페 정보] 페이지를 들어갈 수 있다.
카페 정보 수정 판매자는 카페 정보 페이지에서 [수정] 버튼을 클릭하면 수정 페이지로 이동하고 [등록] 버튼을 클릭하여 메뉴를 추가할 수 있다.
필수 정보 : [카페명], [주소], [영업시간], [사진]
선택 정보 : [좌석수]
  • 메뉴 정보
기능 설명
메뉴 정보 페이지 판매자는 마이페이지에서 [메뉴 정보] 페이지를 들어갈 수 있다.
메뉴 추가 판매자는 메뉴 정보 페이지에서 [추가] 버튼을 클릭하면 추가 페이지로 이동하고 [등록] 버튼을 클릭하여 메뉴를 추가할 수 있다.
필수 정보 : [메뉴명], [가격], [용량], [판매유형(상시, 기간한정)]
선택 정보 : [사진], [재료], [산미], [당도]
메뉴 수정 및 삭제 판매자는 메뉴 정보 페이지에서 [수정] 및 [삭제] 버튼을 클릭하여 해당 메뉴를 수정 및 삭제할 수 있다.

💼카페 정보


이커머스 기능은 고려하여 설계하되, 초기 구현에는 추가하지 않기로

  • 카페 조회
기능 설명
카페 목록 카페 목록([카페명],[주소],[연락처],[사진], [평균점수])을 보여줍니다.
카페 검색 카페의 정보를 검색어로 하여 해당하는 카페를 조회(위치, 영업시간, 평점 등)
  • 카페 정보
기능 설명
북마크 카페 정보를 북마크할 수 있다.
카페 상세조회 카페의 상세정보([카페명], [주소], [연락처],[영업시간],[리뷰 목록],[메뉴 목록]) 조회합니다.
  • 북마크
기능 설명
즐겨찾기 카페의 [🏷] 클릭 시 카페 즐겨찾기할 수 있다.
북마크 해제 카페의 [🏷] 클릭 시 카페 즐겨찾기 해제할 수 있다.

📄피드(리뷰 게시판)


  • 리뷰 게시판
기능 설명
게시글 목록 게시글 목록을 팔로잉 게시물 우선 추천과 추천 점수가 높은 피드를 우선으로 보여준다.
  • 피드
기능 설명
피드 보기 회원은 인증 회원과 관련 없이 카페정보와 피드, 댓글을 볼 수 있다.
피드 작성 회원은 [작성] 버튼 클릭 시 피드를 작성할 수 있다.
필수정보: 사진, 리뷰글
선택정보: 시설(화장실이 청결해요,매장이 넓어요,,등등), 분위기(분위기가 좋아요,…등등), 맛(커피가 맛있어요, 디저트가 맛있어요,… 등등) 이 중 최대 3개 고를 수 있다.
피드 수정 회원은 [수정] 버튼 클릭 시 피드를 수정할 수 있다.
피드 삭제 회원은 [삭제] 버튼 클릭 시 피드를 삭제할 수 있다.
  • 댓글
기능 설명
댓글 보기 피드의 [댓글] 클릭 시 피드에 댓글을 확인할 수 있다.
댓글 작성 회원은 [작성] 버튼 클릭 시 댓글을 작성할 수 있다.
댓글 수정 회원은 [수정] 버튼 클릭 시 댓글을 수정할 수 있다.
댓글 삭제 회원은 [삭제] 버튼 클릭 시 댓글을 삭제할 수 있다.
  • 추천
기능 설명
피드 추천 피드의 [♡] 클릭 시 피드를 추천할 수 있다.
피드 추천 해제 피드의 [♥] 클릭 시 피드를 추천 해제할 수 있다.
댓글 추천 댓글의 [♡] 클릭 시 댓글을 추천할 수 있다.
댓글 추천 해제 댓글의 [♥] 클릭 시 댓글을 추천할 해제할 수 있다.

🧙‍♂️분류 및 검색


  • 메인화면 피드
기능 설명
메인화면 피드 생성 팔로우한 회원의 피드 5개와, 추천 점수가 높은 피드를 랜덤으로 출력한다.
  • 검색
기능 설명
카페 검색 [주소], [분위기], [이름] 을 검색하여 카페를 찾을 수 있다.
메뉴 검색 [메뉴명]을 검색하여 카페를 찾을 수 있다.
  • 분류
기능 설명
최근 평점 높은 순 최근 평점이 높은 순으로 정렬하여 피드를 출력한다.
최근 게시물 순 최근 게시물 순으로 정렬하여 피드를 출력한다.

🤖AI 앨런


  • 지점별 카페 요약
기능 설명
카페 리뷰 요약 “[카페명]에 대한 리뷰를 3줄로 요약해줘.”을 요청하여 카페 정보의 리뷰 요약을 해준다.
  • 추천
기능 설명
카페 추천 [인원수], [목적], [위치], [평점]에 따른 추천을 한다.
메뉴 추천 [시그니처 메뉴], [평점]에 따른 추천을 한다.

👩‍💻관리자


  • 공통
기능 설명
관리자 페이지 이동 관리자로 로그인 시 우측 상단에 [관리자 페이지 이동] 버튼을 통해 관리자 페이지로 이동할 수 있다.
  • 카페 정보
기능 설명
카페 정보 추가 관리자 페이지에서 카페 정보([카페명], [주소], [연락처], [영업시간])를 입력 후 [생성] 버튼을 클릭하여 추가할 수 있다.
  • 회원
기능 설명
회원 검색 회원 관리 탭에서 회원 [이메일] 을 입력하면 회원을 검색할 수 있다.
회원 관리 등록된 회원의 [정지] 버튼 클릭 시 회원 테이블의 탈퇴가 true로 변경된다.
단, 탈퇴 된 회원은 [정지 해제] 로 나타난다.
  • 추가 요망 : [일시 정지] 클릭 시 input 박스가 나타나며, 날짜 입력 시 해당 일시 동안 일시 정지된다. (이 후 해당 일자가 지나면 자동으로 해제) | | 인증 회원 관리 | [인증 회원 보기] 클릭 시 인증회원 목록을 확인할 수 있다. |
  • 피드
기능 설명
피드 검색 게시글 관리 탭에서 [게시글]을 입력하면 게시글 목록을 검색할 수 있다.
피드 관리 업로드 된 게시글의 [삭제] 버튼 클릭 시 게시글이 삭제된다.(반드시 삭제 여부를 확인한다)
[숨기기] 버튼 클릭 시 게시글 테이블의 [가시여부]가 false로 변경된다.
  • 신고
기능 설명
신고 검색 [게시글] 또는 [신고자]를 입력하면 해당 목록을 검색할 수 있다.
신고 관리 신고된 게시글의 [승인] 버튼 클릭 시 [게시글 가시 여부]가 false로 변경된다.
  • 신규 장소 등록 목록
기능 설명
신규 장소 등록 검색 회원이 신청한 신규 장소 등록의 대한 정보를 검색할 수 있다.
신규 장소 관리 등록된 정보의 [승인] 버튼 클릭 시 신규 장소 테이블에서 카페 정보 테이블의 정보로 저장한다.
  • 판매자 신청 목록
기능 설명
판매자 신청 검색 회원이 신청한 판매자 인증 신청을 검색할 수 있다.
판매자 신청 관리 등록된 정보의 [승인] 버튼 클릭 시 회원 테이블의 [판매자정보] 칼럼에 [카페 id]를 입력한다.

🔔알림


  • 공통
기능 설명
알림 확인 모든 회원은 [알림] 버튼 클릭 시 알림을 확인할 수 있다.
  • 판매자
기능 설명
알림 전송 판매자는 즐겨찾기한 회원에 한해 [메시지], [URL] 을 전송할 수 있다.

🔎개발 일정

img.png

✨UI(화면) 설계서

Main Page (Member) Main Page (Guest)
img.png img.png
Login Page SignUp Page
img.png img.png
SignUp complete Page Modify-info Page
img.png img.png
Find Password Page Change Password Page
img.png img.png
Feed Write Page Admin Page
img.png img.png
my Page follow Page
img.png img.png
bookmark Page my Cafe List Page
img.png img.png
myCafe Page myCafe menu add Page
img.png img.png
CafeInfo Page CafeInfoMenu Page
img.png img.png
Alan Recommend Page Alan cafe Summary Page
img.png img.png

📂Project Structure

├─ 📁 .github
│  ├─ 📃 pull_request_template.md
│  └─ 📁 workflows
│     ├─ 📃 build.yml
│     └─ 📃 gradle.yml
├─ 📃 .gitignore
├─ 📃 README.md
├─ 📃 appspec.yml
├─ 📃 build.gradle
├─ 📁 gradle
│  └─ 📁 wrapper
│     ├─ 📃 gradle-wrapper.jar
│     └─ 📃 gradle-wrapper.properties
├─ 📃 gradlew
├─ 📃 gradlew.bat
├─ 📁 scripts
│  └─ 📃 deploy.sh
├─ 📃 settings.gradle
└─ 📁 src
   ├─ 📁 main
   │  ├─ 📁 java
   │  │  └─ 📁 com
   │  │     └─ 📁 grinder
   │  │        ├─ 📃 GrinderApplication.java
   │  │        ├─ 📁 config
   │  │        │  ├─ 📃 EmailConfig.java
   │  │        │  ├─ 📃 RedisConfig.java
   │  │        │  ├─ 📃 SchedulingConfig.java
   │  │        │  ├─ 📃 SecurityConfig.java
   │  │        │  └─ 📃 SwaggerConfig.java
   │  │        ├─ 📁 controller
   │  │        │  ├─ 📃 ExControllerAdvice.java
   │  │        │  ├─ 📃 ExRestControllerAdvice.java
   │  │        │  ├─ 📃 FileController.java
   │  │        │  └─ 📃 TestController.java
   │  │        ├─ 📁 domain
   │  │        │  └─ 📁 dto
   │  │        │     ├─ 📃 AlanDTO.java
   │  │        │     └─ 📃 BlacklistDTO.java
   │  │        ├─ 📁 entity
   │  │        │  ├─ 📃 AnalysisTag.java
   │  │        │  └─ 📃 BaseEntity.java
   │  │        └─ 📁 repository
   │  │           ├─ 📃 AnalysisTagRepository.java
   │  │           └─ 📃 BlacklistRepository.java
   │  └─ 📁 resources
   │     ├─ 📃 application-local.properties
   │     ├─ 📃 application-prod.properties
   │     ├─ 📃 application-test.properties
   │     └─ ✏ static
   │        ├─ ✏ css
   │        │  └─ ✏ MyMenuCard.css
   │        ├─ ✏ img
   │        │  └─ ✏ Alan.png
   │        └─ ✏ js
   │           └─ ✏ addMemberForm.js
   └─ 📁 test
      └─ 📁 java
         └─ 📁 com
            └─ 📁 grinder
               └─ 📃 GrinderApplicationTests.java

🔐ERD Structure

img.png

🎈API 명세서

📁 Member

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
updateMember PUT /api/member/update 회원 정보 수정
updateMemberRole PUT /admin/api/member/{memberId}/role 회원 역할 수정
recoverMember PUT /admin/api/member/{memberId}/recovery 회원 복구
addMember POST /api/member/signup 회원 가입
sendMessage POST /api/member/email/verification-requests 이메일 인증 요청
resetPassword PATCH /api/member/email/password 비밀번호 재설정
checkNickname GET /api/member/nickname/check 닉네임 중복 확인
verificationEmail GET /api/member/email/verifications 이메일 인증
checkEmail GET /api/member/email/check 이메일 중복 확인
searchMemberByNicknameAndRole GET /admin/api/member/search 닉네임과 역할로 회원 검색
deleteMember DELETE /admin/api/member/{memberId} 회원 삭제

📁 Feed

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
updateFeed PUT /feed/{feed_id} 피드 수정
deleteFeed DELETE /feed/{feed_id} 피드 삭제
addFeed POST /feed/newfeed 새 피드 추가
findFeedForAdmin GET /admin/feed/{feed_id} 관리자용 피드 조회

📁 Comment

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
updateComment PUT /comment/{feed_id}/{comment_id} 댓글 수정
deleteComment DELETE /comment/{feed_id}/{comment_id} 댓글 삭제
addComment POST /comment/{feed_id}/newcomment 새 댓글 추가
findCommentForAdmin GET /admin/comment/{comment_id} 관리자용 댓글 조회

📁 Analysis Tag

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
saveAlanTag POST /saveAlanTag Alan 태그 저장

📁 Heart

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
addHeart POST /heart 좋아요 추가
deleteHeart DELETE /heart 좋아요 삭제

📁 Seller Info

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
saveSellerInfo POST /admin/api/seller_info/{applyId} 판매자 정보 저장
deleteSellerInfo DELETE /api/seller_info/{seller_info_id} 판매자 정보 삭제

📁 Seller Apply

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
saveSellerApply POST /api/seller_apply/{cafeId} 판매자 신청 저장
findAllSellerApplies GET /admin/api/seller_apply 모든 판매자 신청 조회
deleteSellerApply DELETE /admin/api/seller_apply/{applyId} 판매자 신청 삭제

📁 Opening Hours

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
saveOpeningHours POST /api/saveOpeningHours/{cafe_id} 영업 시간 저장

📁 Menu

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
saveMyCafeMenu POST /api/menu 카페 메뉴 저장
deleteMyCafeMenu DELETE /api/myMenu/{menu_id} 카페 메뉴 삭제

📁 Image

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
saveAndDeleteImage POST /api/image 이미지 저장 및 삭제
deleteImage DELETE /api/image 이미지 삭제
deleteCafeImage DELETE /api/image/{cafeId} 카페 이미지 삭제

📁 Follow

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
addFollow POST /api/follow/{email} 팔로우 추가
deleteFollow DELETE /api/follow/{email} 팔로우 삭제
findAllFollowingSlice GET /api/following 팔로잉 목록 조회
findAllFollowerSlice GET /api/follower 팔로워 목록 조회

📁 File

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
uploadImageList POST /api/file/upload/{contentType}/{contentId} 이미지 목록 업로드
downloadFile GET /api/file/download 파일 다운로드

📁 Cafe

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
addCafe POST /api/cafe/admin/{registerId} 카페 추가
searchCafes GET /api/cafe/search-cafe 카페 검색
searchCafeByAdmin GET /admin/api/cafe 관리자용 카페 검색

📁 Cafe Summary

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
findCafeSummary GET /api/cafe_summary/{cafeId} 카페 요약 정보 조회

📁 Cafe Register

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
addCafeRegister POST /api/cafe_register/newcafe 신규 카페 등록 작성
findAllCafeRegisters GET /admin/api/cafe_register 모든 카페 등록 정보 조회
denyCafeRegister DELETE /admin/api/cafe_register/{registerId} 카페 등록 거부

📁 Bookmark

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
isBookmarked GET /api/bookmark/{cafeId} 북마크 여부 확인
addBookmark POST /api/bookmark/{cafeId} 북마크 추가
deleteBookmark DELETE /api/bookmark/{cafeId} 북마크 삭제
findAllBookmarksSlice GET /api/bookmark 북마크 목록 조회

📁 Blacklist

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
findAllBlacklist GET /api/blacklist 블랙리스트 조회
addBlacklist POST /api/blacklist 블랙리스트 추가
deleteBlacklist DELETE /api/blacklist/{id} 블랙리스트 삭제

📁 Report

🏷NAME ⚙METHOD 📎URL 📖DESCRIPTION
searchReportByContentAndType GET /admin/api/report/search 내용과 타입으로 신고 검색
deleteReport DELETE /admin/api/report/{reportId} 신고 삭제
deleteContent DELETE /admin/api/report/{reportId}/accepted 신고된 내용 삭제

🏭System Structure

img.png

🛠Coding Convention

Java Convention

자바 컨벤션

Other Convention

기타 컨벤션

About

☕ 카페 정보와 메뉴에 대한 정보가 있는 커뮤니티

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published