아래 이미지는 회원가입 시 예외 응답 폼입니다.(예를 들어, validation에 회원가입 할 때, email, password 조건이 충족 되지 않으면, validation에 두 줄로 나옵니다.) 모든 예외 응답 형태는 아래와 같습니다.

스크린샷 2023-09-05 오후 8.38.23.png

인증 여부 Function Method End Point Request Response exception
회원가입 POST /api/members/signup {
email: string;
password: string;
phone_number: string;
username: string;
nickname: string;
role : role
address : {
                  front_address : String,
                  detailed_address : String } 

area_range: string[ ]; }; | 201 | email: @미포함 시 password : 8자 미만일 시 phoneNumber : 11자가 아닐 시 username : 2글자 미만일 시 nickname : 2글자 미만일 시
role : null일 시 Address : blank일 시 area_range : null일 시 400에러

| | | 로그인 | POST | /api/auth/login | { email: string; password: string; }; | json으로 accessToken 쿠키로 refreshToken 200 | email이 없는 이메일일 때 - 404 등록된 email의 password가 일치하지 않을 때

조회할 카테고리가 없을 시 - 404 | | Need | 상품 수정 | PUT | /api/items/{itemId} | <formData> { categoryTitle: string; itemName: string; itemDetail: string; itemPrice: number; images: List<MultipartFile>; } <formData> | { id: number; }; | 토큰이 유효하지 않을 시 (없거나, 틀리거,만료시) - 401 에러

작성자와 수정하는 사람의 회원이 일치하지 않은경우

작성자와 수정하는 사람의 회원이 일치하지 않은경우

작성자와 삭제하는 사람의 회원이 일치하지 않은경우

작성자와 수정하는 사람의 회원이 일치하지 않은경우

작성자와 삭제하는 사람의 회원이 일치하지 않은경우

// 회원가입
type signup_req = {
   username: string;
   nickname: string;
   email: string;
   password: string;
   phone_number: string;
   role : role(string으로 "USER", "ADMIN" 이렇게 주시면 됩니다.)
   address : {
                 front_address : string,
                 detailed_address : string 
							}
	 area_range: string[];
};

type signup_res = null;

// 로그인
type login_req = {
   email: string;
   password: string;
};

// accessToken은 string, refreshToken은 setCookie로 쿠키 자동 저장
type login_res = JWT

// 로그아웃
// why POST?
type logout_req = header = accessToken, cookie = refreshToken

type logout_res = null;

// 회원정보 수정
type modify_profile_req = {
   username?: string;
   nickname?: string;
   phone_number?: string;
   regidence?: string;
	 area_range?: string[];
};

// status로 성공, 실패 확인
type modify_profile_res = null;

// 비밀번호 수정
type modify_pw_req = {
   current_password: string;
	 change_password: string;
	 confirmed_password: string;
};

// status로 성공, 실패 확인
type modify_pw_res = null;

// 회원 단건 조회(상대방)
type profile_req = null;

type profile_res = {
   member_id: number;
   username: string;
   nickname: string;
   phone_number: string;
   regidence: string;
	 area_range: string[];
};

// 회원 단건 조회(본인)
type mypage_req = null;

type mypage_res = {
   member_id: number;
   username: string;
   nickname: string;
   phone_number: string;
   regidence: string;
	 area_range: string[];
};

// 회원 전체 조회
// GET 요청
type profile_req = null;

type profile_res = [
   {
		  member_id: number;
      username: string;
      nickname: string;
      phone_number: string;
      regidence: string;
		  area_range: string[];
   }
];

// 회원탈퇴
type member_withdrawal_req = {
   password: string;
};

type member_withdrawal_res = null;

// 상품 등록
type itme_registration_req = {
   <formData>
			{
			   categoryTitle: string;
			   itemName: string;
			   itemDetail: string;
			   itemPrice: number;
			   images: List<MultipartFile>;
			} 
	</formData>
};

type itme_registration_res = {
   id: number;
};

// 상품 수정
type itme_modify_req = {
   <formData>
			{
			  categoryTitle: string;
			  itemName: string;
			  itemDetail: string;
			  itemPrice: number;
			  images: List<MultipartFile>;
			  item_status?: string; [SELLING, RESERVED, SOLD]   
			} 
	</formData>
};

type itme_modify_res = {
   id: number;
};

//상품 상태, 구매자 수정
type item_statusmodify_req = {
      itemId : number;
      itemStatus : String;
      buyerId : number;
}

type item_statusmodify_Res = null

// 상품 단건 조회
type item_req = null;

type item_res = {
   id: number;
   memberId: number;
   itemCategoryId: number;
   itemName: string;
   itemDetail: string;
   itemPrice: number;
   itemStatus: string;
   buyerId: number;
   itemImagesUrl: URL[ ];
   viewCount: number;
   created_at: timestamp;
   updated_at?: timestamp;
};

// 상품 전체 조회
type itmes_req = {
	 page: number;            defaultValue=1
   size: number;            defaultValue=1
   Authorization: string;   required=false
   search: string;          required=false
   orderBy: string;         defaultValue=id
   directrion: string;      defaultValue=DESC
}

type itmes_res = [
   totalPages: number;
   content: {
		   id: number;
		   memberId: number;
		   itemCategoryId: number;
		   itemName: string;
		   itemDetail: string;
		   itemPrice: number;
		   itemStatus: string;
		   buyerId: number;
		   itemImagesUrl: URL[ ];
		   viewCount: number;
		   created_at: timestamp;
		   updated_at?: timestamp;
	}
];

// 상품 댓글 작성 POST
type create_itme_comment_req = {
   content: string;
}

type create_itme_comment_res = {
   id: number;
}

// 상품 댓글 조회 GET
type read_itme_comment_req = {
	 page: number;            defaultValue=1
   size: number;            defaultValue=1
   orderBy: string;         defaultValue=id
   directrion: string;      defaultValue=DESC
}

type read_itme_comment_res = [
   totalPages: number;
   content: 
		{
	    id: number;
	    itemId: number;
			memberId: number;
			content: string;
      created_at: timestamp;
      updated_at?: timestamp;
 }
];

// 상품 댓글 수정 PUT
type update_itme_comment_req = {
   content: string;
}

type update_itme_comment_res = {
	 id: number;
}

// 상품 댓글 삭제 DELETE
// status로 성공, 실패 확인
type delete_itme_comment_req = null

type delete_itme_comment_res = null

// 상품 카테고리 생성
// 관리자만 가능
type create_item_category_req = {
   title: string;
}

type create_item_category_res = {
   id: number;
}

// 카테고리별 상품 조회
// 한 번에 받을 상품 갯수 제한 필요
type read_items_in_category_req = {
	 page: number;            defaultValue=1
   size: number;            defaultValue=1
   orderBy: string;         defaultValue=id
   directrion: string;      defaultValue=DESC
}

type read_items_in_category_res = [
   totalPages: number;
   content: 
		{
		   id: number;
		   memberId: number;
		   itemCategoryId: number;
       itemName: string;
		   itemDetail: string;
		   itemPrice: number;
		   itemStatus: string;
		   itemImagesUrl: URL[ ];
		   viewCount: number;
		   created_at: timestamp;
		   updated_at?: timestamp;
		 }
];

// 카테고리 목록 조회
type read_item_categories_req = null

type read_item_categories_res = [
   {
      id: number;
      title: string;
      item_ids: List<Long>;
      created_at: timestamp;
      updated_at?: timestamp;
   }
]

// 카테고리 수정
// 이미 해당 카테고리로 설정된 상품들 처리 방법?
// status로 실패, 성공 확인
type update_item_category_req = {
   title: string;
}

type update_item_category_res = null

// 카테고리 삭제
// 이미 해당 카테고리로 설정된 상품들 처리 방법?
// status로 실패, 성공 확인
type delete_item_category_req = null

type delete_item_category_res = null

// 글 작성
type create_post_req = {
  <formData>
  {
   postCategoryTitle: string;
   title: string;
   content: string;
   images: List<MultipartFile>;
  } 
   </formData>
}

type create_post_res = {
   id: number;
}

// 글 단건 조회
type read_post_req = null

type read_post_res = {
   
   id: number;
   memberId: number;
   postCategoryId: number;
   postImageUrl: URL[];
   title: string;
   content: string;
   viewCount: number;
   createdAt: timestamp;
   updatedAt: timestamp;

}

// 글 전체 조회
type read_posts_req = {

   page: number;           defaultValue=1
   size: number;             defaultValue=1
   orderBy: string;          defaultValue=id
   directrion: string; defaultValue=DESC

}

type read_posts_res = [
   totalPages: number;
   content: 
  {
       id: number;
       memberId: number;
       postCategoryId: number;
       postImageUrl: URL[];
       title: string;
       content: string;
       viewCount: number;
       createdAt: timestamp;
       updatedAt: timestamp;
}
];

// 글 수정
type update_post_req = {
   <formData>
   {
   postCategoryTitle: string;
   title: string;
   content: string;
   images: List<MultipartFile>;
   } 
   </formData>
}

type update_post_res = {
	id: number;
}

// 글 삭제
// status로 성공, 실패 확인
type delete_posts_req = null

type delete_posts_res = null

// 글 검색
// GET으로 검색 안됨, 확인 필요!

// 글 댓글 작성
type create_post_comment_req = {
   content: string;
}

type create_post_comment_res = {
   id: number;
}

// 글 댓글 조회
type read_post_comment_req = {
   page: number;           defaultValue=1
   size: number;             defaultValue=1
   orderBy: string;          defaultValue=id
   directrion: string; defaultValue=DESC
}

type read_post_comment_res = [
   totalPages: number;
   content: 
{
  id: number;
	postId: number;
	memberId: number;
  nickname: string;
	content: string;
  created_at: timestamp;
  updated_at?: timestamp;
 }];

// 글 댓글 수정
type update_post_comment_req = {
   content: string;
}

type update_post_comment_res = {
	 id: number;
}

// 글 댓글 삭제
// status로 성공, 실패 확인
type update_post_comment_req = null

type update_post_comment_res = null

// 게시판 생성
// 관리자 권한 필요
type create_post_category_req = {
   title: string;
}

type create_post_category_res = {
   id: number;
}

// 게시판별 글 조회
type read_posts_category_req = {
   page: number;           defaultValue=1
   size: number;             defaultValue=1
   orderBy: string;          defaultValue=id
   directrion: string; defaultValue=DESC
}

type read_posts_category_res = [
   totalPages: number;
   content: 
  {
       id: number;
       memberId: number;
       postCategoryId: number;
       postImageUrl: URL[];
       title: string;
       content: string;
       viewCount: number;
       createdAt: timestamp;
       updatedAt: timestamp;
}
];

// 게시판 목록 조회
type read_post_categories_req = null

type read_post_categories_res = [
   {
      id: number;
      title: string;
      post_ids: List<Long>;
      created_at: timestamp;
      updated_at: timestamp;
   }
]

// 게시판 수정
// 관리자 권한 필요
// ----신중하게(의미가 바뀌지 않게)----
type update_post_category_req = {
   title: string;
}

type update_post_category_res = null

// 게시판 삭제
// 관리자 권한 필요
// ----게시판 삭제 시 글들도 삭제----
// status로 성공, 실패 확인
type delete_post_category_req = null

type delete_post_category_res = null

// 채팅방은 WebSocket으로 해야되는데
// 의논 필요