---
# System prepended metadata

title: 펀딩 기능

---

### 펀딩 기능
- 사용자는 상품를 신청할 수 있다.
    - 신청 시 카테고리를 설정 해야한다.
    - 메이커 유형을 선택해야 한다. (개인, 법인 사업자, 개인 사업자)
    - 옵션 관련 서류 제출을 해야한다.
        - 옵션은 설정한 카테고리와 일치해야 한다.
    - 목표 금액을 설정해야 한다. 
    - 상품 제목을 설정해야한다. 
    - 대표 이미지를 설정해야한다. 
    - 상품 종료일을 설정해야한다. 
    - 검색용 태그를 설정해야한다. 
    - 상품 요약을 작성해야한다.
    - 상품 스토리를 작성해야한다. (사진, 영상)
    - 옵션을 설계 해야한다. (후원 금액에 따른 보상)
        - 제한 수량을 설정할 수 있다.
        - 가격을 설정해야 한다.
        - 발송 시작일을 설정해야한다. ex) 상품 종료일+5영업일째
        - 세부옵션등을 설정할 수 있다. (사이즈, 색상)
        - 배송비를 설정해야한다.
    - 메이커의 정보를 입력해야한다.
        - 문의 이메일
        - 문의 전화번호
    - 대표자의 정보를 입력해야한다.
        - 대표자 이메일
        - 대표자 정보
    - 정산 정보를 입력해야한다.
        - 은행
        - 계좌번호
        - 예금주
        - 세금 계산서 발행 이메일


- 사용자는 펀딩목록에서 펀딩 정보를 확인 할 수 있다.
    - 카테고리 별로 상품을 확인할 수 잇다.
    - 펀딩 모금액을 확인할 수 있다.
    - 목표 금액을 퍼센트로 확인할 수 있다.
    - 대표 이미지를 확인할 수 있다.
    - 남은 기간을 확인 할 수 있다.
    - 인기순, 최신순, 모집금액순, 마감임박 순으로 정렬하여 확인할 수 있다.

- 사용자는 상품에 대한 좋아요를 누를 수 있다.
    - 좋아요를 누른 상품은 목록으로 확인이 가능하다.

- 사용자는 펀딩을 진행할 수 있다.
    - 옵션을 선택해야한다.
        - 수량을 선택할 수 있다.
        - 선택 시 재고를 확인 할 수 있다.
        - 다중 선택이 가능하다.
    - 결제예약을 진행해야 한다.
        - 수량을 확인 할 수 있다
        - 배송비를 확인 할 수 있다.
        - 결제 예약 금액을 확인 할 수 있다. (포인트, 쿠폰할인 금액, 배송비)
        - 서포터 정보를 입력해야 한다.
            - 아이디, 이메일을 입력해야한다.
            - 휴대폰 인증을 진행해야한다.
        - 배송지를 입력해야한다.
            - 배송지 정보를 검색하여 찾을 수 있다.
        - 배송 요청 사항을 선택적으로 입력할 수 있다.
        - 결제 정보를 입력해야 한다. (카드번호, 유효기간, 카드 번호, 생년월일)
    - 펀딩이 완료 된 프로젝트는 목록에서 확인할 수 있다.
        - 결제 예약, 결제 완료, 결제 취소, 결제 실패, 프로젝트 실패로 분리하여 확인할 수 있다.
    - 사용자는 펀딩 취소를 할 수 있다.
        - 펀딩 기간 내에 결제를 취소할 수 있다.


### 게시판
- 사용자는 글을 확인할 수 있다.
    - 로그인을 하지 않아도 된다.
    - 작성일, 제목, 내용, 작성자를 확인할 수 있다.
    - 사용자는 댓글을 확인할 수 있다.
- 사용자는 글을 쓸 수 작성 할 수 있다.
    - 사용자는 이미지를 첨부 할 수 있다.

- 사용자는 댓글을 작성 할 수 있다.

- 공지사항 (홍보 게시판)
    
    양식 - 제목, 내용, 홍보 이미지 첨부
    활동 공지 게시글은 참여 지원서를 작성할 수 있는 버튼 사용 - 폼 연결
    
    (+ 환경사이트 이름을 따로 추가 → 환경사이트마다 검색이 가능하게?)
    
    - 환경 사이트의 봉사 활동 예정 안내
        ex ) 서해바다 쓰레기 줍기 활동 안내
    - 북극곰을 후원하는 새로운 굿즈 안내
- 뉴스
    - 네이버 환경 뉴스 크롤링
        - 몇시간 마다 크롤링을 할지 정하기
        - 어떤 형식으로 보여줄 것인지 정하기
- 커뮤니티 (자유 게시판)
    
    양식 - 제목, 내용, 이미지 첨부
    
    - 본인의 환경 봉사활동 자랑 및 후기
    - 굿즈 구매 후기 등등
- 정보
    - 환경 사이트 링크로 넘어갈 수 있게 사이트 로고 이미지를 띄워놓는 느낌

### 채팅

- 채팅방 생성 (제목)
    - 1 : 1
    - 그룹
- 채팅방 목록
    - 오픈채팅 (그룹)
    - 1 : 1
- 채팅방 접속
- 채팅 보내기
- 채팅 받기
- 채팅 나가기

### 회원

- 회원가입
    
    양식 - 이메일(id), 비밀번호, 닉네임, (+ 전화번호, 주소)
    
    - 이메일 인증
    - 자체 로그인
    - 카카오 / 네이버 연동 회원가입
- 로그인
    
    양식 - 이메일, 비밀번호 (카카오, 네이버, 구글)
    
    - 자체 로그인
    - 카카오 / 네이버 연동 로그인
    - 아이디 찾기
    - 비밀번호 재설정
- 회원 정보
    - 회원 정보 수정
    - 회원 탈퇴
- 로그아웃
- 마이 페이지 → 아래 글에 새로운 댓글이나 수정이 있다면 알림
    - 좋아요 누른 글
    - 좋아요 누른 펀딩
    - 작성한 글
    - 작성한 댓글
- 사용자 등급
    - 일반 사용자
        - 일반 사용자는 펀딩, 정보, 자유 게시판에 글 작성 권한 있음
        - 펀딩, 정보게시판에는 관리자가 수락 전까지는 글이 보이지 않음
    - 관리자 
        - 관리자는 펀딩, 정보 게시판에 대한 수락 / 거절 권한 있음
        - 관리자가 수락 할 때 -> 펀딩, 정보게시판에 글이 보임
        - 관리자는 프로젝트를 심사할 수 있다.
            - 관리자는 심사 결과를 신청자에게 전달해야한다.
        - 관리자는 펀딩, 댓글에 대한 수정을 할 수 있다.
        - 관리자는 공지를 작성 할 수 있다.
        - 관리자는 뉴스 정보를 작성할 수 있다.
        - 관리자는 게시글 수정, 삭제를 할 수 있다.


-------------------------------------------------------------------
오창민

BaseEntity
    @create
    create

    @update
    update

Member
    Long id
    String email
    String username
    String nickname
    String phone
    String provider
    Enum role
    
    List<ChatRoomAppend>
    List<Maker>
    List<Funding>
    List<PostComment>
    List<ProjectComment>
    List<ProjectLike>
    List<PostLike>
    
Maker
    Stirng name
    FileImage profileImage 
    String email
    String phone
    FileImage submitFile
    
    Member
    List<Project>
    
Individual : Maker
    FileImage IDImage
    
Business : Maker
    String 사업자 등록 번호 (10자리)
    String 상호 또는 법인명
    FileImage 사업자 등록증
    
CorpBusiness : Business
    FileImage 법인 인감 증명서
    
--------------------------------------------------------------
김소영

Project
    String title
    String summary
    String story
    int targetAmount
    Period fundingDate
    FileImage repImage
    
    Maker
    List<Tag> searchTags
    List<Reward>
    List<FileImage>
    List<ProjectComment>
    List<ProjectLike>
    
Tag
    String name
    
    Project

Reward
    int price
    String title
    String description
    ~~int stock~~
    int initStock
    String expectedSendDate
    int deliveryFee
    
    Project
    List<Option>

Option
    Long id
    Reward reward
    String name
    
    List<OptionValue> values 
    
OptionValue
    Long id
    String value;
    
    Option
    
SkuValue
    Long id
    
    Option
    
    OptionValue
    
    int initStock

<주문>
RewardSku
    Long id
    int stock
    
    Reward
    List<SkuValue> skuValues

FundingReward
    int optionCount
    int totalPrice
    
    RewardSku
    Funding
    
Funding
    Member
    Enum status
    
    List<FundingReward> 

Delivery
    Enum status
    Address
    
    Funding
    
Address (값)
    String detail 서울시 평화로 20번지
    String zipcode 우편번호
    
-------------------------------------------------------------------
신은화

Board
    Long id
    String title // 카테고리
    String summary // 카테고리 설명
    
    List<Post>


Post
    Long id
    String title
    String text
    int views
    
    List<FileImage> images
    List<PostLike>
    List<PostComment>
    Member
    Board
    
    
Activity
    String title
    String content
    String organization
    String place
    Period applicateDate; // 등록기간
    Period activityDate; // 활동기간
    int maxMember; // 모집인원
    Enum status // 수락 거절 여부
    
    List<ActivityFileImage> images
    List<Member> members // 신청하면 add


Period (값)
    LocalDateTime start;
    LocalDateTime end;

-------------------------------------------------------------
박서현

FileImage (값) -> common
    String originalName
    String storedName

ActivityFileImage
    Activity
    FileImage

PostFileImage
    Post
    FileImage

ProjectFileImage
    Project
    FileImage
    


PostLike
    Long id
    
    Member
    Post
    
ProjectLike
    Long id
    
    Member
    Product

PostComment
    Long id
    String content
    
    Member
    Post
    
ProjectComment
    Long id
    String content
    
    Member
    Project
    
-----------------------------------------------------------
서재혁

ChatRoom
    Long id
    String roomName
    String description
    int memberCount
    
    List<ChatRoomAppend>
    
ChatRoomAppend
    Long id
    
    ChatRoom
    Member
    List<ChatMessage>

ChatMessage
    Long id
    String nickname
    String message
    
    ChatRoomAppend
    
------------------------------------
뉴스 엔티티 구현 vs Post로 이용

-----------------------------------------------

config
    
exception
    
web
    api
    ComtrollerAdvice
    Member
        DTO
        Controller

domain
    common
        
    Member
        repo
        service
        entity
    Post
        repo
        service
        entity

- 얻을 수 있는 것 : domain이 웹 계층에 의존 관계가 없도록 구현가능. web계층 교체가능
- default 접근제어자로 직접 패키지 접근을 막을 수 있다.


Post
    controller
    service
    repo
    entity
Item
    controller
    service
    repo
    entity
Member
    controller
    service
    repo
    entity
        MemberEntity
        Maker

- 도메인 간(패키지 간)에 의존 관계 생각하지 않고 구현 가능하긴 함 -> 하지만 이렇게 패키지 구조를 해서 얻을 수 있는 이점이 없음

- 실력 상 도메인간(패키지간)의 의존관계 없애면서 구현하기 힘듬



![](https://hackmd.io/_uploads/r10ReCY33.png)
