diff --git a/.gitignore b/.gitignore index c3724bfc..ea174f8b 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ out/ src/main/resources/application-secret.yml src/test/resources/application-test.yml src/main/resources/logback-spring.xml +*.log \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 74627f45..d6f309b8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,6 +56,7 @@ dependencies { // Database runtimeOnly("com.mysql:mysql-connector-j") implementation("org.springframework.boot:spring-boot-starter-data-redis") + implementation ("com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0") // Jwt implementation("io.jsonwebtoken:jjwt-api:0.11.2") runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.2") @@ -81,6 +82,10 @@ dependencies { implementation("net.sf.ehcache:ehcache:2.10.6") implementation("javax.cache:cache-api:1.1.0") implementation ("com.fasterxml.jackson.core:jackson-databind") +// implementation("com.slack.api:slack-api-client:1.8.1") + if(project.hasProperty("dev") || project.hasProperty("local")) { + implementation("com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0") + } } tasks.withType { diff --git a/src/docs/asciidoc/user.adoc b/src/docs/asciidoc/user.adoc index fe530ada..2da43598 100644 --- a/src/docs/asciidoc/user.adoc +++ b/src/docs/asciidoc/user.adoc @@ -169,6 +169,30 @@ include::{snippets}/update-user/http-request.adoc[] ===== Response include::{snippets}/update-user/http-response.adoc[] +*회원탈퇴 시, 사용되는 enum* + +|=== +|enum 값|Description + +|ROW_USE +|이용빈도 낮음 + +|RE_JOIN +|재가입 + +|INSUFFICIENT_CONTENT +|콘텐츠 및 정보 부족 + +|PERSONAL_PROTECTION +|개인 정보 보호 + +|ETC +|기타 + +|=== + +위의 표에 나와 있는 description을 사용자가 선택하게 됩니다. 그 description을 그대로 복붙해서 요청 body에 넣어주시면 됩니다. + === 13. 유저 탈퇴 ===== Request include::{snippets}/withdrawal/http-request.adoc[] @@ -202,4 +226,31 @@ include::{snippets}/check-email/http-response.adoc[] ===== Request include::{snippets}/userName-check/http-request.adoc[] ===== Response -include::{snippets}/userName-check/http-response.adoc[] \ No newline at end of file +include::{snippets}/userName-check/http-response.adoc[] + +=== 17. 이메일 수정 + +이메일 수정 시, 이메일 인증을 거쳐야 합니다. + +===== Request +include::{snippets}/update-email/http-request.adoc[] +===== Response +include::{snippets}/update-email/http-response.adoc[] + + +=== 18. 전화번호 수정 + +전화번호 수정 시, 전화번호 인증을 거쳐야 합니다. + +===== Request +include::{snippets}/update-phone-num/http-request.adoc[] +include::{snippets}/update-phone-num/request-fields.adoc[] +===== Response +include::{snippets}/update-phone-num/http-response.adoc[] + +=== 19. 비밀번호 확인 + +===== Request +include::{snippets}/password-check/http-request.adoc[] +===== Response +include::{snippets}/password-check/http-response.adoc[] \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/admin/user/controller/AdminUserController.kt b/src/main/kotlin/com/example/jhouse_server/admin/user/controller/AdminUserController.kt index 1eb51ce1..b09d3e0d 100644 --- a/src/main/kotlin/com/example/jhouse_server/admin/user/controller/AdminUserController.kt +++ b/src/main/kotlin/com/example/jhouse_server/admin/user/controller/AdminUserController.kt @@ -148,4 +148,22 @@ class AdminUserController( return "user/withdrawalDetail" } + + @GetMapping("/manage") + fun getUserManage( + @ModelAttribute("searchForm") adminUserSearch: AdminUserWithdrawalSearch, + model: Model, + @PageableDefault(size=10, page=0) pageable: Pageable + ): String { + // 승인 요청된 게시글 목록 데이터 + val result = adminUserService.getUserWithSearchForm(adminUserSearch, pageable) + model.addAttribute("userList", result) + + // 페이징 데이터 + val pageCom = pageable.pageNumber / 5 + model.addAttribute("pageCom", pageCom) + model.addAttribute("filterList", UserSearchFilter.values()) + + return "user/userManager" + } } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/admin/user/dto/AdminUserDto.kt b/src/main/kotlin/com/example/jhouse_server/admin/user/dto/AdminUserDto.kt index e8dbb0ed..0697430e 100644 --- a/src/main/kotlin/com/example/jhouse_server/admin/user/dto/AdminUserDto.kt +++ b/src/main/kotlin/com/example/jhouse_server/admin/user/dto/AdminUserDto.kt @@ -1,5 +1,13 @@ package com.example.jhouse_server.admin.user.dto +import com.example.jhouse_server.domain.user.entity.Age +import com.example.jhouse_server.domain.user.entity.JoinPath +import com.example.jhouse_server.domain.user.entity.Term +import com.example.jhouse_server.domain.user.entity.UserType +import com.querydsl.core.annotations.QueryProjection +import org.springframework.format.annotation.DateTimeFormat +import java.time.LocalDateTime + /** * ============================================================================================ * AdminAgentSearch -- 공인중개사 검색 조건 @@ -54,5 +62,42 @@ enum class AgentSearchFilter(val value: String) { } enum class UserSearchFilter(val value: String){ - NICKNAME("이름") + NICKNAME("닉네임") +} + +data class AdminUserList @QueryProjection constructor( + val id: Long, + val nickName: String, + val email: String, + val userType: UserType, + val phoneNum : String, + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + val createdAt : LocalDateTime, + val age: String, + val joinPath: Set, + val term : Set, +){ + fun getAgeValues() : String{ + return Age.valueOf(age).value ?: "" + } + fun getJoinPathValues(): Set { + return joinPath.map { JoinPath.valueOf(it)?.value }.toSet() as Set + } + + fun getTermValues(): Set { + return term.map { Term.valueOf(it)?.value }.toSet() as Set + } + } + data class AdminUserQueryResult( + val id: Long, + val nickName: String, + val email: String, + val userType: UserType, + val phoneNum : String, + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + val createdAt : LocalDateTime, + val age: String, + ) diff --git a/src/main/kotlin/com/example/jhouse_server/admin/user/service/AdminUserService.kt b/src/main/kotlin/com/example/jhouse_server/admin/user/service/AdminUserService.kt index bb706df1..372f2e15 100644 --- a/src/main/kotlin/com/example/jhouse_server/admin/user/service/AdminUserService.kt +++ b/src/main/kotlin/com/example/jhouse_server/admin/user/service/AdminUserService.kt @@ -2,10 +2,14 @@ package com.example.jhouse_server.admin.user.service import com.example.jhouse_server.admin.user.dto.AdminJoinAgentList +import com.example.jhouse_server.admin.user.dto.AdminUserList +import com.example.jhouse_server.admin.user.dto.AdminUserWithdrawalSearch import com.example.jhouse_server.admin.user.dto.AdminWithdrawalList import com.example.jhouse_server.domain.user.entity.agent.AgentStatus import com.example.jhouse_server.domain.user.repository.AgentRepository import com.example.jhouse_server.domain.user.repository.UserRepository +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional @@ -39,4 +43,11 @@ class AdminUserService( findUsers?.forEach { u -> u.withdrawalUser() } } + fun getUserWithSearchForm( + adminUserSearch: AdminUserWithdrawalSearch, + pageable: Pageable + ): Page { + return userRepository.getUserWithSearchForm(adminUserSearch, pageable) + } + } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/board/controller/BoardController.kt b/src/main/kotlin/com/example/jhouse_server/domain/board/controller/BoardController.kt index c70af3b1..63aae372 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/board/controller/BoardController.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/board/controller/BoardController.kt @@ -3,6 +3,7 @@ package com.example.jhouse_server.domain.board.controller import com.example.jhouse_server.domain.board.* import com.example.jhouse_server.domain.board.dto.BoardMyPageResDto import com.example.jhouse_server.domain.board.dto.BoardResDto +import com.example.jhouse_server.domain.board.dto.CommentMyPageResDto import com.example.jhouse_server.domain.board.service.BoardService import com.example.jhouse_server.domain.user.entity.User import com.example.jhouse_server.global.annotation.Auth @@ -147,7 +148,7 @@ class BoardController( fun getUserCommentAll( @AuthUser user: User, @PageableDefault(size=10, page=0) pageable: Pageable - ): ApplicationResponse> { + ): ApplicationResponse> { return ApplicationResponse.ok(boardService.getUserCommentAll(user, pageable)) } /** diff --git a/src/main/kotlin/com/example/jhouse_server/domain/board/dto/BoardResDto.kt b/src/main/kotlin/com/example/jhouse_server/domain/board/dto/BoardResDto.kt index 1b8eb232..5823e44b 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/board/dto/BoardResDto.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/board/dto/BoardResDto.kt @@ -64,6 +64,14 @@ class BoardResDto() { } } +data class CommentMyPageResDto @QueryProjection constructor( + var commentId: Long, + var boardId: Long , + var title : String, + var commentContent: String +) + + class BoardMyPageResDto() { var boardId: Long = 0 lateinit var title: String @@ -72,6 +80,7 @@ class BoardMyPageResDto() { var imageUrl: String? = null lateinit var category: String lateinit var prefixCategory: String + var commentCnt: Long = 0 constructor(boardId: Long, title: String, @@ -80,6 +89,7 @@ class BoardMyPageResDto() { imageUrl: String?, category: String, prefixCategory: String, + commentCnt: Long ) : this() { this.boardId = boardId this.title = title @@ -88,6 +98,7 @@ class BoardMyPageResDto() { this.imageUrl = imageUrl this.category = category this.prefixCategory = prefixCategory + this.commentCnt = commentCnt } } @@ -99,7 +110,7 @@ class BoardMyPageResDto() { fun toMyPageListDto(board : Board) : BoardMyPageResDto { val oneLineContent = sliceContentWithRegex(board.content) if (board.imageUrls.isEmpty()) { - return BoardMyPageResDto(board.id, board.title, oneLineContent, Timestamp.valueOf(board.createdAt), null, board.category.name, board.prefixCategory.name) + return BoardMyPageResDto(board.id, board.title, oneLineContent, Timestamp.valueOf(board.createdAt), null, board.category.name, board.prefixCategory.name, board.comment.size.toLong()) } - return BoardMyPageResDto(board.id, board.title, oneLineContent, Timestamp.valueOf(board.createdAt), board.imageUrls[0], board.category.name, board.prefixCategory.name) + return BoardMyPageResDto(board.id, board.title, oneLineContent, Timestamp.valueOf(board.createdAt), board.imageUrls[0], board.category.name, board.prefixCategory.name, board.comment.size.toLong()) } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryCustom.kt b/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryCustom.kt index 1e6d61e9..5a8b3bca 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryCustom.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryCustom.kt @@ -5,6 +5,7 @@ import com.example.jhouse_server.domain.board.BoardListDto import com.example.jhouse_server.domain.board.BoardPreviewListDto import com.example.jhouse_server.domain.board.dto.BoardMyPageResDto import com.example.jhouse_server.domain.board.dto.BoardResultDto +import com.example.jhouse_server.domain.board.dto.CommentMyPageResDto import com.example.jhouse_server.domain.board.entity.Board import com.example.jhouse_server.domain.user.entity.User import org.springframework.data.domain.Page @@ -16,6 +17,6 @@ interface BoardRepositoryCustom { fun getBoardAll(boardListDto: BoardListDto, pageable: Pageable): Page fun getBoardPreviewAll(boardPreviewListDto: BoardPreviewListDto): List fun getUserBoardAll(user: User, pageable: Pageable): Page - fun getUserCommentAll(user: User, pageable: Pageable): Page + fun getUserCommentAll(user: User, pageable: Pageable): Page fun getUserLoveAll(user: User, pageable: Pageable): Page } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryImpl.kt b/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryImpl.kt index 403ab87d..fae0e557 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryImpl.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/board/repository/BoardRepositoryImpl.kt @@ -118,12 +118,12 @@ class BoardRepositoryImpl( searchWithKeyword(boardListDto.search) ) .groupBy(board.id) - .orderBy(board.fixed.desc(), searchWithOrder(boardListDto.order)) + .orderBy(board.fixed.desc(), searchWithOrder(boardListDto.order), board.createdAt.desc()) .limit(pageable.pageSize.toLong()) .offset(pageable.offset) .fetch() val countQuery = jpaQueryFactory - .select(board.count()) + .select(board) .from(board) .join(board.boardCode, boardCode) .join(board.user, user) @@ -185,7 +185,7 @@ class BoardRepositoryImpl( board.user.eq(user), board.useYn.eq(true), ) - .orderBy(board.fixed.desc()) + .orderBy(board.createdAt.desc()) .limit(pageable.pageSize.toLong()) .offset(pageable.offset) .fetch() @@ -204,27 +204,33 @@ class BoardRepositoryImpl( * 자신이 작성한 댓글의 게시글 목록 조회 -- 마이페이지 * ============================================================================================= * */ - override fun getUserCommentAll(user: User, pageable: Pageable): Page { + override fun getUserCommentAll(user: User, pageable: Pageable): Page { val result = jpaQueryFactory - .selectFrom(board).distinct() - .join(board.comment, comment).fetchJoin() + .select(QCommentMyPageResDto( + comment.id.`as`("commentId"), + board.id.`as`("boardId"), + board.title, + comment.content + )) + .from(board) + .join(comment).on(comment.board.eq(board)) .where( comment.user.eq(user), board.useYn.eq(true), ) - .orderBy(board.fixed.desc()) + .orderBy(comment.createdAt.desc()) .limit(pageable.pageSize.toLong()) .offset(pageable.offset) .fetch() val countQuery = jpaQueryFactory - .selectFrom(board).distinct() - .join(board.comment, comment) + .selectFrom(board) + .join(comment).on(comment.board.eq(board)) .where( comment.user.eq(user), board.useYn.eq(true), ) - return PageableExecutionUtils.getPage(result, pageable) {countQuery.fetch().size.toLong()}.map { toMyPageListDto(it) } + return PageableExecutionUtils.getPage(result, pageable) {countQuery.fetch().size.toLong()} } /** diff --git a/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardService.kt b/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardService.kt index 1d2689e1..c475c8e4 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardService.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardService.kt @@ -3,6 +3,7 @@ package com.example.jhouse_server.domain.board.service import com.example.jhouse_server.domain.board.* import com.example.jhouse_server.domain.board.dto.BoardMyPageResDto import com.example.jhouse_server.domain.board.dto.BoardResDto +import com.example.jhouse_server.domain.board.dto.CommentMyPageResDto import com.example.jhouse_server.domain.user.entity.User import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable @@ -16,6 +17,6 @@ interface BoardService { fun deleteBoard(boardId: Long, user: User) fun getCategory(name: String): List fun getUserBoardAll(user: User, pageable: Pageable): Page - fun getUserCommentAll(user: User, pageable: Pageable): Page + fun getUserCommentAll(user: User, pageable: Pageable): Page fun getUserLoveAll(user: User, pageable: Pageable): Page } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImpl.kt b/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImpl.kt index afda3f98..e9dcd82b 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImpl.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImpl.kt @@ -3,6 +3,7 @@ package com.example.jhouse_server.domain.board.service import com.example.jhouse_server.domain.board.* import com.example.jhouse_server.domain.board.dto.BoardMyPageResDto import com.example.jhouse_server.domain.board.dto.BoardResDto +import com.example.jhouse_server.domain.board.dto.CommentMyPageResDto import com.example.jhouse_server.domain.board.entity.Board import com.example.jhouse_server.domain.board.entity.BoardCategory import com.example.jhouse_server.domain.board.entity.BoardCode @@ -15,7 +16,6 @@ import com.example.jhouse_server.global.exception.ApplicationException import com.example.jhouse_server.global.exception.ErrorCode import com.example.jhouse_server.global.util.findByIdOrThrow import org.springframework.cache.annotation.CacheEvict -import org.springframework.cache.annotation.Cacheable import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable import org.springframework.stereotype.Service @@ -97,7 +97,7 @@ class BoardServiceImpl( * @param pageable * ============================================================================================= * */ - @Cacheable(key="#boardListDto.toString()+#pageable.pageNumber.toString()", cacheManager = "cacheManager", value = ["board"]) +// @Cacheable(key="#boardListDto.toString()+#pageable.pageNumber.toString()", cacheManager = "cacheManager", value = ["board"]) override fun getBoardAll(boardListDto: BoardListDto, pageable: Pageable): Page { val boardAll = boardRepository.getBoardAll(boardListDto, pageable).map { toListDto(it) } return CustomPageImpl(boardAll.content, boardAll.number, boardAll.size, boardAll.totalElements) @@ -108,7 +108,7 @@ class BoardServiceImpl( * @param boardPreviewListDto * ============================================================================================= * */ - @Cacheable(key="#boardPreviewListDto.toString()", cacheManager = "cacheManager", value= ["board"]) +// @Cacheable(key="#boardPreviewListDto.toString()", cacheManager = "cacheManager", value= ["board"]) override fun getBoardPreviewAll(boardPreviewListDto: BoardPreviewListDto): List { return boardRepository.getBoardPreviewAll(boardPreviewListDto).map { toListDto(it) } } @@ -164,7 +164,7 @@ class BoardServiceImpl( * @param pageable * ============================================================================================= * */ - override fun getUserCommentAll(user: User, pageable: Pageable): Page { + override fun getUserCommentAll(user: User, pageable: Pageable): Page { val boards = boardRepository.getUserCommentAll(user, pageable) return CustomPageImpl(boards.content, boards.number, boards.size, boards.totalElements) } diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/controller/HouseController.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/controller/HouseController.kt index 7f552368..5d8ce1fa 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/controller/HouseController.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/controller/HouseController.kt @@ -1,6 +1,7 @@ package com.example.jhouse_server.domain.house.controller import com.example.jhouse_server.domain.house.dto.* +import com.example.jhouse_server.domain.house.entity.DealState import com.example.jhouse_server.domain.house.service.HouseService import com.example.jhouse_server.domain.user.entity.User import com.example.jhouse_server.global.annotation.Auth @@ -260,8 +261,9 @@ class HouseController( fun getMyHouseAll( @AuthUser user: User, @PageableDefault(size = 10, page = 0) pageable: Pageable, + @RequestParam dealState: DealState?, @RequestParam keyword: String?, ): ApplicationResponse> { - return ApplicationResponse.ok(houseService.getMyHouseAll(user, keyword, pageable)) + return ApplicationResponse.ok(houseService.getMyHouseAll(user, keyword, dealState, pageable)) } } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/dto/HouseReqDto.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/dto/HouseReqDto.kt index a00102b9..f45989b0 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/dto/HouseReqDto.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/dto/HouseReqDto.kt @@ -20,6 +20,7 @@ import javax.validation.constraints.Pattern data class HouseReqDto( var rentalType: RentalType? = null, var city: String?, + var detail: String?, var zipCode: String?, var size: String?, var purpose: String?, @@ -56,6 +57,7 @@ data class HouseListDto( * */ data class HouseAgentListDto( val search: String?, + val dealState: String?, val isCompleted: Boolean? //거래 기능 개발 후 판매상태 조건 추가 ) /** @@ -70,7 +72,7 @@ data class MyHouseResDto( val title: String, val imageUrl: String, val dealState: String, - val dealStateName: String, + val dealStateName: String ) /** @@ -129,6 +131,7 @@ data class HouseResOneDto( val houseId: Long, val rentalType: RentalType, val city: String, + val detail: String?, val zipCode: String, val size: String, val purpose: String, @@ -200,7 +203,7 @@ fun toListDto(house: House) : HouseResDto { fun toDto(house: House, isScraped: Boolean) : HouseResOneDto { val recommendedTag: List = getTagByNameFromHouseTags(house.houseTag.stream().map { it.recommendedTag }.toList()) val recommendedTagName: List = house.houseTag.stream().map { RecommendedTag.getValueByTagName(it.recommendedTag.name) }.toList() - return HouseResOneDto(house.id, house.rentalType, house.address.city, + return HouseResOneDto(house.id, house.rentalType, house.address.city, house.address.detail, house.address.zipCode, house.size, house.purpose, house.floorNum, house.contact, house.createdDate, house.price, house.monthlyPrice, house.agentName, house.title, house.code, house.imageUrls, house.user.nickName, diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Address.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Address.kt index 2c267eb0..6340ff0c 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Address.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Address.kt @@ -8,11 +8,15 @@ class Address( @Column(length = 100) var city: String, // 시도 + @Column(length = 100) + var detail : String?, // 상세주소 + @Column(length = 6) var zipCode: String, // 우편번호 ) { - fun updateEntity(city: String, zipCode: String) : Address { + fun updateEntity(city: String, detail: String?, zipCode: String) : Address { this.city = city + this.detail = detail this.zipCode = zipCode return this } diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/DealStateConverter.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/DealStateConverter.kt index a0e78015..ce6d4586 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/DealStateConverter.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/DealStateConverter.kt @@ -26,4 +26,12 @@ enum class DealState(val value : String) { APPLYING("승인중"), ONGOING("판매중"), COMPLETED("판매완료"), -} \ No newline at end of file + REJECTED("반려") + ; + + companion object { + fun from(dealState: DealState): String { + return dealState.value + } + } + } diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/House.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/House.kt index e7e6d184..637a0080 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/House.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/House.kt @@ -126,6 +126,7 @@ class House( fun reportEntity() { this.reported = true + this.dealState = DealState.REJECTED } fun applyEntity() { diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Report.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Report.kt index d16e6265..853a85b5 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Report.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/entity/Report.kt @@ -11,6 +11,10 @@ class Report( @ManyToOne(fetch = FetchType.LAZY) var house: House, + @JoinColumn(name = "owner_id") + @ManyToOne(fetch = FetchType.LAZY) + var owner: User, + @JoinColumn(name = "reporter_id") @ManyToOne(fetch = FetchType.LAZY) var reporter: User, diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryCustom.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryCustom.kt index 993766c3..a9a62fa3 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryCustom.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryCustom.kt @@ -5,6 +5,7 @@ import com.example.jhouse_server.admin.house.dto.AdminHouseSearch import com.example.jhouse_server.domain.house.dto.HouseAgentListDto import com.example.jhouse_server.domain.house.dto.HouseListDto import com.example.jhouse_server.domain.house.dto.MyHouseResDto +import com.example.jhouse_server.domain.house.entity.DealState import com.example.jhouse_server.domain.house.entity.House import com.example.jhouse_server.domain.user.entity.User import org.springframework.data.domain.Page @@ -21,5 +22,5 @@ interface HouseRepositoryCustom { fun getApplyHouseListWithPaging(adminHouseSearch: AdminHouseSearch, pageable: Pageable) : Page - fun getMyHouseAll(user: User, keyword: String?, pageable: Pageable) : Page + fun getMyHouseAll(user: User, keyword: String?, dealState: DealState?, pageable: Pageable) : Page } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryImpl.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryImpl.kt index 45d8f4d2..45d9dfc3 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryImpl.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/repository/HouseRepositoryImpl.kt @@ -157,12 +157,13 @@ class HouseRepositoryImpl( val result = jpaQueryFactory .selectFrom(house) .leftJoin(house.deal, QDeal.deal) +// .leftJoin(house.reports, QReport.report) .where( searchTitleWithKeyword(houseAgentListDto.search), // 키워드 검색어 house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 + filterWithDealState(houseAgentListDto.dealState) // 판매중 필터링 ) .limit(pageable.pageSize.toLong()) .offset(pageable.offset) @@ -170,39 +171,39 @@ class HouseRepositoryImpl( val cntAllQuery = jpaQueryFactory .selectFrom(house) .leftJoin(house.deal, QDeal.deal) + .leftJoin(house.reports, QReport.report) .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 ).fetch().size.toLong() val cntApplyQuery = jpaQueryFactory .selectFrom(house) .leftJoin(house.deal, QDeal.deal) +// .leftJoin(house.reports, QReport.report) .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 house.dealState.eq(DealState.APPLYING) ).fetch().size.toLong() val cntOngoingQuery = jpaQueryFactory .selectFrom(house) .leftJoin(house.deal, QDeal.deal) +// .leftJoin(house.reports, QReport.report) .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 house.dealState.eq(DealState.ONGOING) ).fetch().size.toLong() val cntCompletedQuery = jpaQueryFactory .selectFrom(house) .leftJoin(house.deal, QDeal.deal) +// .leftJoin(house.reports, QReport.report) .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 house.dealState.eq(DealState.COMPLETED) ).fetch().size.toLong() @@ -254,16 +255,18 @@ class HouseRepositoryImpl( * 거래 상태에 따른 집계 쿼리 추가 * ============================================================================================ */ - override fun getMyHouseAll(user: User, keyword: String?, pageable: Pageable): Page { + override fun getMyHouseAll(user: User, keyword: String?, dealState: DealState?, pageable: Pageable): Page { val result = jpaQueryFactory - .selectFrom(house) + .select(house) + .from(house) .leftJoin(house.deal, QDeal.deal) +// .leftJoin(QReport.report) .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 searchWithKeyword(keyword), // 닉네임 & 제목 + filterWithDealState(dealState?.name) // 판매중 필터링 ) .limit(pageable.pageSize.toLong()) .offset(pageable.offset) @@ -274,7 +277,6 @@ class HouseRepositoryImpl( .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 ).fetch().size.toLong() val cntApplyQuery = jpaQueryFactory @@ -283,7 +285,6 @@ class HouseRepositoryImpl( .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 house.dealState.eq(DealState.APPLYING) ).fetch().size.toLong() @@ -293,7 +294,6 @@ class HouseRepositoryImpl( .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 house.dealState.eq(DealState.ONGOING) ).fetch().size.toLong() @@ -303,7 +303,6 @@ class HouseRepositoryImpl( .where( house.useYn.eq(true), // 삭제 X house.tmpYn.eq(false), // 임시저장 - house.reported.eq(false), // 신고 X house.user.eq(user), // 본인인지 house.dealState.eq(DealState.COMPLETED) ).fetch().size.toLong() @@ -386,8 +385,91 @@ class HouseRepositoryImpl( private fun filterWithCity(city: String?): BooleanExpression? { return if(city == null) null else { - if(city == "수도권") house.address.city.contains("서울").or(house.address.city.contains("인천")).or(house.address.city.contains("경기")) - else house.address.city.contains(city) + when(city) { + "수도권" -> house.address.city.contains("서울") + .or(house.address.city.contains("인천")) + .or(house.address.city.contains("경기")) + .or(house.address.city.contains("부천")) + .or(house.address.city.contains("성남")) + .or(house.address.city.contains("수원")) + .or(house.address.city.contains("용인")) + .or(house.address.city.contains("안양")) + .or(house.address.city.contains("안산")) + .or(house.address.city.contains("평택")) + .or(house.address.city.contains("시흥")) + .or(house.address.city.contains("김포")) + .or(house.address.city.contains("화성")) + .or(house.address.city.contains("광명")) + .or(house.address.city.contains("광주")) + .or(house.address.city.contains("군포")) + .or(house.address.city.contains("이천")) + .or(house.address.city.contains("오산")) + .or(house.address.city.contains("의왕")) + .or(house.address.city.contains("하남")) + .or(house.address.city.contains("여주")) + .or(house.address.city.contains("양평")) + .or(house.address.city.contains("고양")) + .or(house.address.city.contains("의정부")) + .or(house.address.city.contains("동두천")) + .or(house.address.city.contains("구리")) + .or(house.address.city.contains("남양주")) + .or(house.address.city.contains("파주")) + .or(house.address.city.contains("양주")) + .or(house.address.city.contains("포천")) + .or(house.address.city.contains("연천")) + .or(house.address.city.contains("가평")) + "경상" -> house.address.city.contains("대구") + .or(house.address.city.contains("울산")) + .or(house.address.city.contains("부산")) + .or(house.address.city.contains("경남")) + .or(house.address.city.contains("경북")) + .or(house.address.city.contains("창원")) + .or(house.address.city.contains("포항")) + .or(house.address.city.contains("김천")) + .or(house.address.city.contains("구미")) + .or(house.address.city.contains("안동")) + .or(house.address.city.contains("경산")) + .or(house.address.city.contains("의성")) + .or(house.address.city.contains("영천")) + .or(house.address.city.contains("상주")) + .or(house.address.city.contains("문경")) + .or(house.address.city.contains("경주")) + .or(house.address.city.contains("영주")) + .or(house.address.city.contains("영덕")) + .or(house.address.city.contains("청도")) + .or(house.address.city.contains("고령")) + .or(house.address.city.contains("성주")) + .or(house.address.city.contains("칠곡")) + .or(house.address.city.contains("예천")) + .or(house.address.city.contains("봉화")) + .or(house.address.city.contains("울진")) + .or(house.address.city.contains("울릉")) + "전라" -> house.address.city.contains("광주") + .or(house.address.city.contains("전주")) + .or(house.address.city.contains("익산")) + .or(house.address.city.contains("군산")) + .or(house.address.city.contains("순천")) + .or(house.address.city.contains("여수")) + .or(house.address.city.contains("목포")) + .or(house.address.city.contains("광양")) + "충청" -> house.address.city.contains("대전") + .or(house.address.city.contains("세종")) + .or(house.address.city.contains("청주")) + .or(house.address.city.contains("충주")) + .or(house.address.city.contains("제천")) + .or(house.address.city.contains("보은")) + .or(house.address.city.contains("옥천")) + .or(house.address.city.contains("영동")) + .or(house.address.city.contains("진천")) + .or(house.address.city.contains("괴산")) + .or(house.address.city.contains("음성")) + .or(house.address.city.contains("단양")) + .or(house.address.city.contains("증평")) + "제주" -> house.address.city.contains("제주") + .or(house.address.city.contains("서귀포")) + else -> house.address.city.contains(city) + + } } } diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/repository/ReportRepository.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/repository/ReportRepository.kt index 29009a1b..248f6bf2 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/repository/ReportRepository.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/repository/ReportRepository.kt @@ -9,4 +9,6 @@ interface ReportRepository : JpaRepository, ReportRepositoryCustom fun existsByReporterAndHouse(reporter: User, house: House): Boolean + fun findByOwner(owner: User): List + } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseService.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseService.kt index b5f997b3..500cb209 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseService.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseService.kt @@ -1,6 +1,7 @@ package com.example.jhouse_server.domain.house.service import com.example.jhouse_server.domain.house.dto.* +import com.example.jhouse_server.domain.house.entity.DealState import com.example.jhouse_server.domain.user.entity.User import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable @@ -17,6 +18,6 @@ interface HouseService { fun updateStatus(user: User, houseId: Long, dealReqDto: DealReqDto) fun getScrapHouseAll(user: User, filter: String?, pageable: Pageable): Page fun getAgentHouseAll(user: User, houseAgentListDto: HouseAgentListDto, pageable: Pageable): Page - abstract fun getMyHouseAll(user: User, keyword: String?, pageable: Pageable): Page + fun getMyHouseAll(user: User, keyword: String?, dealState: DealState?, pageable: Pageable): Page } diff --git a/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImpl.kt b/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImpl.kt index d21a4d96..cd6bf088 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImpl.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImpl.kt @@ -60,7 +60,7 @@ class HouseServiceImpl( // (2) null 데이터 blank로 변경 val tmpReq = changeNullToBlank(req) // (3) 임시저장 데이터 생성 - val address = Address(tmpReq.city!!, tmpReq.zipCode!!) + val address = Address(tmpReq.city!!, tmpReq.detail!!, tmpReq.zipCode!!) val content = getContent(tmpReq.code!!) val tmp = House(tmpReq.rentalType!!, address, tmpReq.size!!, tmpReq.purpose!!, tmpReq.floorNum!!, tmpReq.contact!!, tmpReq.createdDate!!, tmpReq.price!!, tmpReq.monthlyPrice!!, @@ -76,7 +76,7 @@ class HouseServiceImpl( // (1) 유효성 검사 if (validationReqDto(req)) { // (2) 게시글 생성 - val address = Address(req.city!!, req.zipCode!!) + val address = Address(req.city!!, req.detail!!, req.zipCode!!) val content = getContent(req.code!!) val house = House(req.rentalType!!, address, req.size!!, req.purpose!!, req.floorNum!!, req.contact!!, req.createdDate!!, req.price!!, req.monthlyPrice!!, @@ -127,7 +127,7 @@ class HouseServiceImpl( val house = houseRepository.findByIdOrThrow(houseId) // (2) 권한 체크 ( 작성자 본인이 아닌 경우 ) if (user != house.user) throw ApplicationException(UNAUTHORIZED_EXCEPTION) - house.address.updateEntity(req.city!!, req.zipCode!!) + house.address.updateEntity(req.city!!, req.detail!!, req.zipCode!!) // (3) 연관 테이블 ( 주소 ) 수정 val content = getContent(req.code!!) // (4) 임시저장 -> 등록 && 유효성 검사 @@ -203,7 +203,7 @@ class HouseServiceImpl( // (3) 여러 번 신고 방지 else if (reportRepository.existsByReporterAndHouse(user, house)) throw ApplicationException(DUPLICATE_REPORT) // (4) 신고 정보 생성 - val report = Report(house, user, ReportType.valueOf(reportReqDto.reportType), reportReqDto.reportReason) + val report = Report(house, house.user, user, ReportType.valueOf(reportReqDto.reportType), reportReqDto.reportReason) // (5) 신고 처리 house.reportEntity() // (6) 신고 정보 저장 @@ -317,9 +317,10 @@ class HouseServiceImpl( override fun getMyHouseAll( user: User, keyword: String?, + dealState: DealState?, pageable: Pageable ): Page { - return houseRepository.getMyHouseAll(user, keyword, pageable) + return houseRepository.getMyHouseAll(user, keyword, dealState, pageable) } /** @@ -350,6 +351,7 @@ class HouseServiceImpl( private fun validationReqDto(req: HouseReqDto): Boolean { if (req.rentalType == null) throw ReqValidationException("매매 타입은 필수값입니다. ") if (req.city.isNullOrBlank()) throw ReqValidationException("주소는 필수값입니다.") + if (req.detail.isNullOrEmpty()) throw ReqValidationException("상세주소는 필수값입니다.") if (req.zipCode.isNullOrEmpty()) throw ReqValidationException("우편변호는 필수값입니다.") if (req.size.isNullOrEmpty()) throw ReqValidationException("건물 크기는 필수값입니다.") if (req.purpose.isNullOrEmpty()) throw ReqValidationException("목적/용도는 필수값입니다.") @@ -369,6 +371,7 @@ class HouseServiceImpl( private fun changeNullToBlank(req: HouseReqDto): HouseReqDto { if (req.rentalType == null) req.rentalType = RentalType.SALE if (req.city.isNullOrBlank()) req.city = "" + if(req.detail.isNullOrEmpty()) req.detail = "" if (req.zipCode.isNullOrEmpty()) req.zipCode = "" if (req.size.isNullOrEmpty()) req.size = "" if (req.purpose.isNullOrEmpty()) req.purpose = "" diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/controller/UserController.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/controller/UserController.kt index 8f46d068..c5a80d6e 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/controller/UserController.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/controller/UserController.kt @@ -1,6 +1,6 @@ package com.example.jhouse_server.domain.user.controller -import com.example.jhouse_server.domain.user.* +import com.example.jhouse_server.domain.user.dto.* import com.example.jhouse_server.domain.user.entity.User import com.example.jhouse_server.domain.user.service.UserService import com.example.jhouse_server.global.annotation.Auth @@ -87,9 +87,9 @@ class UserController( @PostMapping("/sign-in") fun signIn( - @Validated @RequestBody userSignInReqDto: UserSignInReqDto, - request: HttpServletRequest, - response: HttpServletResponse + @Validated @RequestBody userSignInReqDto: UserSignInReqDto, + request: HttpServletRequest, + response: HttpServletResponse ): ApplicationResponse { val tokenDto: TokenDto = userService.signIn(userSignInReqDto) setRefreshToken(request, response, COOKIE_EXPIRE) @@ -133,6 +133,37 @@ class UserController( return ApplicationResponse.ok() } + @Auth + @PutMapping("/update/email") + fun updateEmail( + @AuthUser user: User, + @Validated @RequestBody emailReqDto: EmailReqDto + ): ApplicationResponse { + userService.updateEmail(user, emailReqDto.email) + + return ApplicationResponse.ok() + } + + @Auth + @PutMapping("/update/phone") + fun updatePhoneNum( + @AuthUser user: User, + @Validated @RequestBody phoneNumReqDto: PhoneNumReqDto + ): ApplicationResponse { + userService.updatePhoneNum(user, phoneNumReqDto.phoneNum) + + return ApplicationResponse.ok() + } + + @Auth + @PostMapping("/check/password") + fun checkPassword( + @AuthUser user: User, + @Validated @RequestBody password: PasswordReqDto + ): ApplicationResponse { + return ApplicationResponse.ok(userService.checkPassword(user, password)) + } + @Auth @PutMapping("/update/nick-name") fun updateNickName( diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/controller/agent/AgentController.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/controller/agent/AgentController.kt index 9fce50e1..f2a92a2c 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/controller/agent/AgentController.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/controller/agent/AgentController.kt @@ -1,6 +1,6 @@ package com.example.jhouse_server.domain.user.controller.agent -import com.example.jhouse_server.domain.user.AgentSignUpReqDto +import com.example.jhouse_server.domain.user.dto.AgentSignUpReqDto import com.example.jhouse_server.domain.user.service.agent.AgentService import com.example.jhouse_server.global.response.ApplicationResponse import org.springframework.validation.annotation.Validated diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/dto/UserDto.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/dto/UserDto.kt index ecf81cb5..e58fc0a5 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/dto/UserDto.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/dto/UserDto.kt @@ -1,10 +1,12 @@ -package com.example.jhouse_server.domain.user +package com.example.jhouse_server.domain.user.dto +import com.example.jhouse_server.domain.house.entity.Report import com.example.jhouse_server.domain.user.entity.Age import com.example.jhouse_server.domain.user.entity.Authority import com.example.jhouse_server.domain.user.entity.User import com.example.jhouse_server.domain.user.entity.UserType import com.fasterxml.jackson.annotation.JsonProperty +import java.time.LocalDateTime import javax.validation.constraints.Email import javax.validation.constraints.NotNull import javax.validation.constraints.Pattern @@ -121,7 +123,9 @@ data class UserResDto( @JsonProperty("profile_image_url") val profileImageUrl: String, val userType: UserType, - val email : String? + val email : String?, + val suspenseReason : String?, + val reportedAt : LocalDateTime? ) data class WithdrawalUserReqDto( @@ -138,6 +142,7 @@ data class DefaultUser ( val profileImageUrl: String = "https://duaily-content.s3.ap-northeast-2.amazonaws.com/default_profile_image.png" ) -fun toDto(user: User) : UserResDto { - return UserResDto(user.id, user.userName, user.nickName, user.phoneNum, user.authority, user.age, user.profileImageUrl, user.userType, user.email) +fun toDto(user: User, report: Report?) : UserResDto { + val suspenseReason = if(report == null) null else user.reports.last().reportType.value + return UserResDto(user.id, user.userName, user.nickName, user.phoneNum, user.authority, user.age, user.profileImageUrl, user.userType, user.email, suspenseReason, report?.createdAt) } diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/entity/User.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/entity/User.kt index 91f40fe6..2d4e6f3e 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/entity/User.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/entity/User.kt @@ -3,13 +3,14 @@ package com.example.jhouse_server.domain.user.entity import com.example.jhouse_server.domain.board.entity.Board import com.example.jhouse_server.domain.comment.entity.Comment import com.example.jhouse_server.domain.house.entity.House +import com.example.jhouse_server.domain.house.entity.Report import com.example.jhouse_server.domain.notification.entity.Notification import com.example.jhouse_server.domain.record.entity.Record import com.example.jhouse_server.domain.record_comment.entity.RecordComment import com.example.jhouse_server.domain.record_review.entity.RecordReview import com.example.jhouse_server.domain.record_review_apply.entity.RecordReviewApply import com.example.jhouse_server.domain.scrap.entity.Scrap -import com.example.jhouse_server.domain.user.WithdrawalUser +import com.example.jhouse_server.domain.user.dto.WithdrawalUser import com.example.jhouse_server.domain.user.entity.WithdrawalStatus.APPROVE import com.example.jhouse_server.global.entity.BaseEntity import org.springframework.util.StringUtils @@ -79,6 +80,9 @@ class User( @OneToMany(mappedBy = "user") val houses: MutableList = mutableListOf(), + @OneToMany(mappedBy = "owner") + val reports: MutableList = mutableListOf(), + @OneToMany(mappedBy = "user") val records: MutableList = mutableListOf(), @@ -141,4 +145,12 @@ class User( fun updateSuspension(status: Boolean) { this.suspension = status } + + fun updateEmail(email: String) { + this.email = email + } + + fun updatePhoneNum(phoneNum: String) { + this.phoneNum = phoneNum + } } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepository.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepository.kt index 9f57b460..125af4c2 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepository.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepository.kt @@ -1,8 +1,8 @@ package com.example.jhouse_server.domain.user.repository -import com.example.jhouse_server.domain.user.entity.UserType import com.example.jhouse_server.domain.user.entity.Authority import com.example.jhouse_server.domain.user.entity.User +import com.example.jhouse_server.domain.user.entity.UserType import com.example.jhouse_server.domain.user.entity.WithdrawalStatus import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.Query @@ -33,5 +33,4 @@ interface UserRepository: JpaRepository , UserRepositoryCustom{ fun findByNickName(nickName: String): Optional fun findByEmail(email: String) : Optional - } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryCustom.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryCustom.kt index d233343b..0f13a6bb 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryCustom.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryCustom.kt @@ -3,9 +3,9 @@ package com.example.jhouse_server.domain.user.repository import com.example.jhouse_server.admin.anaylsis.dto.AnalysisAgeResponse import com.example.jhouse_server.admin.anaylsis.dto.AnalysisJoinPathResponse import com.example.jhouse_server.admin.user.dto.AdminAgentSearch +import com.example.jhouse_server.admin.user.dto.AdminUserList import com.example.jhouse_server.admin.user.dto.AdminUserWithdrawalSearch import com.example.jhouse_server.domain.user.entity.User -import com.example.jhouse_server.domain.user.entity.UserType import com.example.jhouse_server.domain.user.entity.agent.Agent import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable @@ -21,4 +21,8 @@ interface UserRepositoryCustom { fun getAgentWithdrawalReqResult(adminAgentSearch: AdminAgentSearch, pageable: Pageable): Page fun getUserWithdrawalReqResult(adminUserWithdrawalSearch: AdminUserWithdrawalSearch, pageable: Pageable): Page + fun getUserWithSearchForm( + adminUserSearch: AdminUserWithdrawalSearch, + pageable: Pageable + ): Page } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryImpl.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryImpl.kt index a18a549c..2162f0d2 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryImpl.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/repository/UserRepositoryImpl.kt @@ -3,10 +3,13 @@ package com.example.jhouse_server.domain.user.repository import com.example.jhouse_server.admin.anaylsis.dto.AnalysisAgeResponse import com.example.jhouse_server.admin.anaylsis.dto.AnalysisJoinPathResponse import com.example.jhouse_server.admin.user.dto.AdminAgentSearch +import com.example.jhouse_server.admin.user.dto.AdminUserList import com.example.jhouse_server.admin.user.dto.AdminUserWithdrawalSearch +import com.example.jhouse_server.domain.user.entity.Age import com.example.jhouse_server.domain.user.entity.Authority import com.example.jhouse_server.domain.user.entity.QUser.user import com.example.jhouse_server.domain.user.entity.QUserJoinPath.userJoinPath +import com.example.jhouse_server.domain.user.entity.QUserTerm.userTerm import com.example.jhouse_server.domain.user.entity.User import com.example.jhouse_server.domain.user.entity.UserType.NONE import com.example.jhouse_server.domain.user.entity.WithdrawalStatus.WAIT @@ -17,9 +20,13 @@ import com.example.jhouse_server.domain.user.repository.dto.AdminUserAnalysisAge import com.example.jhouse_server.domain.user.repository.dto.AdminUserAnalysisJoinPathResult import com.example.jhouse_server.domain.user.repository.dto.QAdminUserAnalysisAgeResult import com.example.jhouse_server.domain.user.repository.dto.QAdminUserAnalysisJoinPathResult +import com.querydsl.core.group.GroupBy +import com.querydsl.core.group.GroupBy.groupBy +import com.querydsl.core.types.Projections import com.querydsl.core.types.dsl.BooleanExpression import com.querydsl.jpa.impl.JPAQueryFactory import org.springframework.data.domain.Page +import org.springframework.data.domain.PageImpl import org.springframework.data.domain.Pageable import org.springframework.data.support.PageableExecutionUtils import java.util.stream.Collectors @@ -131,6 +138,71 @@ class UserRepositoryImpl( return PageableExecutionUtils.getPage(result, pageable) {countQuery.fetch().size.toLong()} } + + override fun getUserWithSearchForm( + adminUserSearch: AdminUserWithdrawalSearch, + pageable: Pageable + ): Page { + val result = jpaQueryFactory.selectFrom(user) + .leftJoin(userJoinPath).on(user.id.eq(userJoinPath.user.id)) + .leftJoin(userTerm).on(user.id.eq(userTerm.user.id)) + .where(searchUserFilter(adminUserSearch), user.authority.eq(Authority.USER)) + .offset(pageable.offset) + .limit(pageable.pageSize.toLong()) + .transform(groupBy(user.id).list( Projections.constructor( + AdminUserList::class.java, + user.id, + user.nickName, + user.email, + user.userType, + user.phoneNum, + user.createdAt, + user.age.stringValue(), + GroupBy.set( + userJoinPath.joinPath.stringValue() + ), + GroupBy.set( + userTerm.term.stringValue() + ) + ))) + + val map = mutableMapOf() + // result의 아이템 중 age, joinPath, term enum의 value로 치환하고 싶어. + result.forEach{ + val userId = it.id + val age = Age.valueOf(it.age) + val transformedJoinPath = it.getJoinPathValues().distinct().toSet() ?: it.joinPath + val transformedTerm = it.getTermValues().distinct().toSet() ?: it.term + // map에 userId가 이미 있다면, 해당 userId의 AdminUserList를 가져와서 joinPath, term을 추가하고 다시 map에 넣어줘. + if(map.containsKey(userId)){ + val adminUserList = map[userId] + adminUserList?.joinPath?.plusElement(transformedJoinPath) + adminUserList?.term?.plusElement(transformedTerm) + return@forEach + } + map[userId] = AdminUserList( + it.id, + it.nickName, + it.email, + it.userType, + it.phoneNum, + it.createdAt, + age.value, + transformedJoinPath, + transformedTerm + ) + } + // map의 value만 뽑아서 list로 만들어서 반환해줘. + val transformedResult = map.values.toList() + + val countQuery = jpaQueryFactory + .selectFrom(user) + .leftJoin(userJoinPath).on(user.id.eq(userJoinPath.user.id)) + .leftJoin(userTerm).on(user.id.eq(userTerm.user.id)) + .where(searchUserFilter(adminUserSearch)) + .fetch().size.toLong() + return PageImpl(transformedResult, pageable, countQuery) + } /** * ============================================================================================ * PRIVATE FUNCTION diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserService.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserService.kt index daad2ead..1b76a86e 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserService.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserService.kt @@ -1,6 +1,6 @@ package com.example.jhouse_server.domain.user.service -import com.example.jhouse_server.domain.user.* +import com.example.jhouse_server.domain.user.dto.* import com.example.jhouse_server.domain.user.entity.User import com.example.jhouse_server.global.jwt.TokenDto @@ -32,4 +32,7 @@ interface UserService { fun withdrawal(user: User, withdrawalUserReqDto: WithdrawalUserReqDto) fun sendEmailCode(email: String) fun checkEmailCode(checkEmailReqDto: CheckEmailReqDto): Boolean + fun updateEmail(user: User, email: String) + fun updatePhoneNum(user: User, phoneNum: String) + fun checkPassword(user: User, password: PasswordReqDto): Boolean } \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImpl.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImpl.kt index 5798d00f..b7ec9546 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImpl.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImpl.kt @@ -1,8 +1,9 @@ package com.example.jhouse_server.domain.user.service -import com.example.jhouse_server.domain.user.* +import com.example.jhouse_server.domain.house.repository.ReportRepository +import com.example.jhouse_server.domain.user.dto.* import com.example.jhouse_server.domain.user.entity.* -import com.example.jhouse_server.domain.user.entity.WithdrawalStatus.* +import com.example.jhouse_server.domain.user.entity.WithdrawalStatus.WAIT import com.example.jhouse_server.domain.user.repository.UserRepository import com.example.jhouse_server.domain.user.repository.WithdrawalRepository import com.example.jhouse_server.domain.user.service.common.UserServiceCommonMethod @@ -13,7 +14,6 @@ import com.example.jhouse_server.global.jwt.TokenProvider import com.example.jhouse_server.global.util.EmailUtil import com.example.jhouse_server.global.util.RedisUtil import com.example.jhouse_server.global.util.SmsUtil -import com.example.jhouse_server.global.util.findByIdOrThrow import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import org.springframework.util.StringUtils @@ -29,13 +29,15 @@ class UserServiceImpl ( val smsUtil: SmsUtil, val userServiceCommonMethod: UserServiceCommonMethod, val emailUtil: EmailUtil, + val reportRepository: ReportRepository ): UserService { private val CONFIRM_CODE_EXPIRE_TIME: Long = 60 * 3 //3분 override fun findUserById(userId: Long): UserResDto { - val findUser = userRepository.findByIdOrThrow(userId) - - return toDto(findUser) + // 신고 유저이면, 신고 정보 반환 + val findUser = userRepository.findById(userId).orElseThrow{ApplicationException(NOT_FOUND_EXCEPTION)} + val reported = reportRepository.findByOwner(findUser).lastOrNull() + return toDto(findUser, reported) } override fun checkUserName(userName: String): Boolean { @@ -181,6 +183,24 @@ class UserServiceImpl ( return checkCode(checkEmailReqDto.email, checkEmailReqDto.code) } + @Transactional + override fun updateEmail(user: User, email: String) { + if(userRepository.findByEmail(email).isPresent) throw ApplicationException(EXIST_EMAIL) + user.updateEmail(email) + } + + @Transactional + override fun updatePhoneNum(user: User, phoneNum: String) { + if(userRepository.existsByPhoneNum(phoneNum)) throw ApplicationException(EXIST_PHONE_NUM) + user.updatePhoneNum(phoneNum) + } + + override fun checkPassword(user: User, password: PasswordReqDto): Boolean { + val user = userRepository.findById(user.id) + .orElseThrow{ ApplicationException(DONT_EXIST_USERNAME) } + return user.password == userServiceCommonMethod.encodePassword(password.password) + } + private fun createCode(): String { val random: Random = Random() diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentService.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentService.kt index 73ee9ee8..4a9aac54 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentService.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentService.kt @@ -1,6 +1,6 @@ package com.example.jhouse_server.domain.user.service.agent -import com.example.jhouse_server.domain.user.AgentSignUpReqDto +import com.example.jhouse_server.domain.user.dto.AgentSignUpReqDto import com.example.jhouse_server.domain.user.entity.User interface AgentService { diff --git a/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentServiceImpl.kt b/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentServiceImpl.kt index d8a304f2..a8ad6a0e 100644 --- a/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentServiceImpl.kt +++ b/src/main/kotlin/com/example/jhouse_server/domain/user/service/agent/AgentServiceImpl.kt @@ -1,7 +1,7 @@ package com.example.jhouse_server.domain.user.service.agent -import com.example.jhouse_server.domain.user.AgentSignUpReqDto -import com.example.jhouse_server.domain.user.DefaultUser +import com.example.jhouse_server.domain.user.dto.AgentSignUpReqDto +import com.example.jhouse_server.domain.user.dto.DefaultUser import com.example.jhouse_server.domain.user.entity.* import com.example.jhouse_server.domain.user.entity.agent.Agent import com.example.jhouse_server.domain.user.entity.agent.AgentStatus diff --git a/src/main/kotlin/com/example/jhouse_server/global/config/RequestServletFilter.kt b/src/main/kotlin/com/example/jhouse_server/global/config/RequestServletFilter.kt new file mode 100644 index 00000000..5929ed70 --- /dev/null +++ b/src/main/kotlin/com/example/jhouse_server/global/config/RequestServletFilter.kt @@ -0,0 +1,22 @@ +//package com.example.jhouse_server.global.config +// +//import org.springframework.stereotype.Component +//import javax.servlet.Filter +//import javax.servlet.FilterChain +//import javax.servlet.ServletRequest +//import javax.servlet.ServletResponse +//import javax.servlet.http.HttpServletRequest +// +//@Component +//class RequestServletFilter : Filter { +// override fun doFilter( +// request: ServletRequest, +// response: ServletResponse, +// chain: FilterChain +// ) { +// val wrappedRequest: HttpServletRequest = +// RequestServletWrapper(request as HttpServletRequest) +// +// chain.doFilter(wrappedRequest, response) +// } +//} \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/global/config/RequestServletWrapper.kt b/src/main/kotlin/com/example/jhouse_server/global/config/RequestServletWrapper.kt new file mode 100644 index 00000000..f69ee537 --- /dev/null +++ b/src/main/kotlin/com/example/jhouse_server/global/config/RequestServletWrapper.kt @@ -0,0 +1,64 @@ +//package com.example.jhouse_server.global.config +// +//import java.io.IOException +//import java.io.StringReader +//import java.util.* +//import javax.servlet.ReadListener +//import javax.servlet.ServletInputStream +//import javax.servlet.http.HttpServletRequest +//import javax.servlet.http.HttpServletRequestWrapper +// +// +//class RequestServletWrapper(request: HttpServletRequest) : HttpServletRequestWrapper(request) { +// private var requestData: String? = null +// +// init { +// try { +// val s = request.inputStream?.let { Scanner(it).useDelimiter("\\A") } +// if (s != null) { +// requestData = if (s.hasNext()) s.next() else "" +// } +// } catch (e: IOException) { +// e.printStackTrace() +// } +// } +// +// override fun getInputStream(): ServletInputStream { +// val reader = StringReader(requestData) +// +// return object : ServletInputStream() { +// private var readListener: ReadListener? = null +// +// @Throws(IOException::class) +// override fun read(): Int { +// return reader.read() +// } +// +// override fun setReadListener(listener: ReadListener?) { +// readListener = listener +// try { +// if (!isFinished) { +// readListener?.onDataAvailable() +// } else { +// readListener?.onAllDataRead() +// } +// } catch (io: IOException) { +// io.printStackTrace() +// } +// } +// +// override fun isReady(): Boolean { +// return isFinished +// } +// +// override fun isFinished(): Boolean { +// try { +// return reader.read() < 0 +// } catch (e: IOException) { +// e.printStackTrace() +// } +// return false +// } +// } +// } +//} \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/global/config/WebConfig.kt b/src/main/kotlin/com/example/jhouse_server/global/config/WebConfig.kt index e91647a5..2d76cf73 100644 --- a/src/main/kotlin/com/example/jhouse_server/global/config/WebConfig.kt +++ b/src/main/kotlin/com/example/jhouse_server/global/config/WebConfig.kt @@ -12,11 +12,11 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry import org.springframework.web.servlet.config.annotation.WebMvcConfigurer @Configuration -//@EnableWebMvc class WebConfig ( val authUserResolver: AuthUserResolver, val httpInterceptor: HttpInterceptor, - val smsInterceptor: SmsInterceptor + val smsInterceptor: SmsInterceptor, +// val logInterceptor: LogInterceptor ): WebMvcConfigurer { @@ -31,7 +31,8 @@ class WebConfig ( "https://duaily.net", "https://dev.duaily.net", "https://dev.jmhouse.org", - "https://jmhouse.org" + "https://jmhouse.org", + ) .allowedMethods( HttpMethod.GET.name, @@ -45,6 +46,9 @@ class WebConfig ( } override fun addInterceptors(registry: InterceptorRegistry) { +// registry.addInterceptor(logInterceptor) +// .addPathPatterns("/**") +// .excludePathPatterns("/css/**", "/error") registry.addInterceptor(LoginCheckInterceptor()) .order(1) .addPathPatterns("/**") diff --git a/src/main/kotlin/com/example/jhouse_server/global/exception/GlobalExceptionHandler.kt b/src/main/kotlin/com/example/jhouse_server/global/exception/GlobalExceptionHandler.kt index 7d986b1d..6a77c0a9 100644 --- a/src/main/kotlin/com/example/jhouse_server/global/exception/GlobalExceptionHandler.kt +++ b/src/main/kotlin/com/example/jhouse_server/global/exception/GlobalExceptionHandler.kt @@ -1,6 +1,7 @@ package com.example.jhouse_server.global.exception +import com.example.jhouse_server.global.aop.log.logger import com.example.jhouse_server.global.response.ApplicationResponse import org.springframework.http.ResponseEntity import org.springframework.web.bind.MethodArgumentNotValidException @@ -12,23 +13,27 @@ class GlobalExceptionHandler { @ExceptionHandler(ApplicationException::class) fun applicationException(ex: ApplicationException) : ResponseEntity>{ + logger().info("ApplicationException : ${ex.errorCode.message}") return ResponseEntity.status(ex.errorCode.status).body(ApplicationResponse.error(ex.errorCode)) } @ExceptionHandler(MethodArgumentNotValidException::class) fun validationException(ex: MethodArgumentNotValidException) : ResponseEntity> { + logger().info("MethodArgumentNotValidException : ${ex.bindingResult.allErrors[0].defaultMessage!!}") return ResponseEntity.status(ErrorCode.INVALID_VALUE_EXCEPTION.status) .body(ApplicationResponse.error(ErrorCode.INVALID_VALUE_EXCEPTION, ex.bindingResult.allErrors[0].defaultMessage!!)) } @ExceptionHandler(ReqValidationException::class) fun reqValidationException(ex: ReqValidationException) : ResponseEntity> { + logger().info("ReqValidationException : ${ex.fieldMessage}") return ResponseEntity.status(ErrorCode.INVALID_VALUE_EXCEPTION.status) .body(ApplicationResponse.error(ErrorCode.INVALID_VALUE_EXCEPTION, ex.fieldMessage)) } @ExceptionHandler(RuntimeException::class) fun runtimeException(ex: RuntimeException) : ResponseEntity> { + logger().info("RuntimeException : ${ex.message}") return ResponseEntity.status(ErrorCode.INTERNAL_SERVER_EXCEPTION.status) .body(ApplicationResponse.error(ErrorCode.INTERNAL_SERVER_EXCEPTION)) } diff --git a/src/main/kotlin/com/example/jhouse_server/global/interceptor/LogInterceptor.kt b/src/main/kotlin/com/example/jhouse_server/global/interceptor/LogInterceptor.kt new file mode 100644 index 00000000..4df0db4b --- /dev/null +++ b/src/main/kotlin/com/example/jhouse_server/global/interceptor/LogInterceptor.kt @@ -0,0 +1,60 @@ +//package com.example.jhouse_server.global.interceptor +// +//import com.fasterxml.jackson.databind.ObjectMapper +//import org.slf4j.LoggerFactory +//import org.springframework.stereotype.Component +//import org.springframework.web.servlet.HandlerInterceptor +//import org.springframework.web.servlet.ModelAndView +//import java.util.* +//import javax.servlet.http.HttpServletRequest +//import javax.servlet.http.HttpServletResponse +// +//@Component +//class LogInterceptor : HandlerInterceptor { +// private val LOG_ID = "logId" +// private val logger = LoggerFactory.getLogger(this::class.java) +// override fun preHandle( +// request: HttpServletRequest, +// response: HttpServletResponse, +// handler: Any +// ): Boolean { +// val uuid = UUID.randomUUID().toString(); +// request.setAttribute(LOG_ID, uuid); +// return if (request.method == "POST") { +// val inputMap: Map = ObjectMapper().readValue( +// request.inputStream, +// Map::class.java +// ) as Map +// logger.info("요청 정보: $inputMap") +// logger.info("요청 URL: " + request.requestURL) +// true +// } else { +// logger.info("요청 정보: " + request.queryString) +// logger.info("요청 URL: " + request.requestURL) +// true +// } +// } +// +// override fun postHandle( +// request: HttpServletRequest, +// response: HttpServletResponse, +// handler: Any, +// modelAndView: ModelAndView? +// ) { +// logger.info("postHandle [{}]", modelAndView) +// } +// +// override fun afterCompletion( +// request: HttpServletRequest, +// response: HttpServletResponse, +// handler: Any, +// ex: Exception? +// ) { +// val requestURI = request.requestURI +// val logId = request.getAttribute(LOG_ID) as String +// logger.info("RESPONSE [{}][{}][{}]", logId, requestURI, handler) +// if (ex != null) { +// logger.error("afterCompletion error!!", ex) +// } +// } +//} \ No newline at end of file diff --git a/src/main/kotlin/com/example/jhouse_server/global/resolver/AuthUserResolver.kt b/src/main/kotlin/com/example/jhouse_server/global/resolver/AuthUserResolver.kt index 94e9c52d..12eaf39a 100644 --- a/src/main/kotlin/com/example/jhouse_server/global/resolver/AuthUserResolver.kt +++ b/src/main/kotlin/com/example/jhouse_server/global/resolver/AuthUserResolver.kt @@ -1,13 +1,8 @@ package com.example.jhouse_server.global.resolver import com.example.jhouse_server.domain.user.entity.User -import com.example.jhouse_server.domain.user.entity.UserType -import com.example.jhouse_server.domain.user.entity.agent.Agent -import com.example.jhouse_server.domain.user.entity.agent.AgentStatus import com.example.jhouse_server.domain.user.repository.UserRepository import com.example.jhouse_server.global.annotation.AuthUser -import com.example.jhouse_server.global.exception.ApplicationException -import com.example.jhouse_server.global.exception.ErrorCode.UNAUTHORIZED_EXCEPTION import com.example.jhouse_server.global.jwt.TokenProvider import org.springframework.core.MethodParameter import org.springframework.stereotype.Component @@ -39,14 +34,16 @@ class AuthUserResolver ( tokenProvider.validateToken(jwt, true) val userName: String = tokenProvider.getSubject(jwt) - val user = userRepository.findByUserNameAndSuspension(userName, false).orElseThrow() - - if(tokenProvider.getType(jwt) == UserType.AGENT) { - val agent = user as Agent - if (agent.status == AgentStatus.WAIT) { - throw ApplicationException(UNAUTHORIZED_EXCEPTION) - } - } +// 신고유저도 로그인은 가능하게 하기 +// val user = userRepository.findByUserNameAndSuspension(userName, false).orElseThrow() + val user = userRepository.findByUserName(userName).orElseThrow() + +// if(tokenProvider.getType(jwt) == UserType.AGENT) { +// val agent = user as Agent +// if (agent.status == AgentStatus.WAIT) { +// throw ApplicationException(UNAUTHORIZED_EXCEPTION) +// } +// } return user } diff --git a/src/main/resources/static/docs/board.html b/src/main/resources/static/docs/board.html index 2ca88f22..d97eeab6 100644 --- a/src/main/resources/static/docs/board.html +++ b/src/main/resources/static/docs/board.html @@ -460,7 +460,7 @@
Request
POST /api/v1/boards HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.DtxeWm31AbDn8oct8FMmQSiCfaAsBD2aV3JPKACpzk4k9vd2NAJjm9BNtoQMA4P_8bSBYvXefX_rumFhxitIYA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Accept: application/json
 Content-Length: 316
 Host: localhost:8080
@@ -491,7 +491,7 @@ 

Response

{ "code" : "SUCCESS", "message" : "성공", - "data" : 4455 + "data" : 1387 }
@@ -504,7 +504,7 @@
Request
POST /api/v1/boards HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.DtxeWm31AbDn8oct8FMmQSiCfaAsBD2aV3JPKACpzk4k9vd2NAJjm9BNtoQMA4P_8bSBYvXefX_rumFhxitIYA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Accept: application/json
 Content-Length: 312
 Host: localhost:8080
@@ -534,7 +534,7 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4453 + "data" : 1385 }
@@ -548,7 +548,7 @@
Request
POST /api/v1/boards HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.szg9meiKujFnfpogark3JwYI2-D2xP9sbXNIO6p8kv4sjq7_uUhofKB63H_QRcotXhFr3Wud1NOXS5IstmioAQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MTksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.cUi9Vf_a2MVTGLzyMTM-AD8sJGG8MJisS7QRHrIDyACy7P1CHkvOmfeqUrbYDs2I-PdME2XJRTM2NHpZdc7e2Q
 Accept: application/json
 Content-Length: 317
 Host: localhost:8080
@@ -578,7 +578,7 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4446 + "data" : 1378 }
@@ -623,12 +623,12 @@
Response
"code" : "SUCCESS", "message" : "성공", "data" : [ { - "boardId" : 4443, + "boardId" : 1375, "title" : "짱구는 못말려", "code" : "<body> <div> <h2>짱구는 못말려</h2> </div> <div> <i>철수</i>야 나랑 놀자 </div> </body>", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:27.643+00:00", + "createdAt" : "2023-12-17T04:18:39.576+00:00", "imageUrl" : "img001", "commentCount" : 1, "category" : "TREND", @@ -682,12 +682,12 @@
Response
"message" : "성공", "data" : { "content" : [ { - "boardId" : 4447, + "boardId" : 1379, "title" : "짱구는 못말려", "code" : "<body> <div> <h2>짱구는 못말려</h2> </div> <div> <i>철수</i>야 나랑 놀자 </div> </body>", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:28.090+00:00", + "createdAt" : "2023-12-17T04:18:39.986+00:00", "imageUrl" : "img001", "commentCount" : 1, "category" : "TREND", @@ -698,13 +698,13 @@
Response
"totalElements" : 1, "last" : true, "totalPages" : 1, + "first" : true, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "first" : true, "numberOfElements" : 1, "empty" : false } @@ -719,7 +719,7 @@

6. 게시글 상세 조회

Request
-
GET /api/v1/boards/4448 HTTP/1.1
+
GET /api/v1/boards/1380 HTTP/1.1
 Accept: application/json
 Host: localhost:8080
@@ -740,21 +740,21 @@
Response
"code" : "SUCCESS", "message" : "성공", "data" : { - "boardId" : 4448, + "boardId" : 1380, "title" : "짱구는 못말려", "code" : "<body> <div> <h2>짱구는 못말려</h2> </div> <div> <i>철수</i>야 나랑 놀자 </div> </body>", "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:28.198+00:00", + "createdAt" : "2023-12-17T04:18:40.083+00:00", "imageUrls" : [ "img001" ], "loveCount" : 0, "category" : "TREND", "prefixCategory" : "INTRO", "commentCount" : 1, "comments" : [ { - "commentId" : 94134, + "commentId" : 33728, "nickName" : "테스트유저1", "content" : "댓글이란다.", - "createdAt" : "2023-10-28T03:55:28.201+00:00" + "createdAt" : "2023-12-17T04:18:40.086+00:00" } ] } }
@@ -768,9 +768,9 @@

7. 게시글 수정

Request
-
PUT /api/v1/boards/4449 HTTP/1.1
+
PUT /api/v1/boards/1381 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.DtxeWm31AbDn8oct8FMmQSiCfaAsBD2aV3JPKACpzk4k9vd2NAJjm9BNtoQMA4P_8bSBYvXefX_rumFhxitIYA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Accept: application/json
 Content-Length: 255
 Host: localhost:8080
@@ -800,7 +800,7 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4449 + "data" : 1381 }
@@ -812,8 +812,8 @@

8. 게시글 삭제

Request
-
DELETE /api/v1/boards/4444 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.szg9meiKujFnfpogark3JwYI2-D2xP9sbXNIO6p8kv4sjq7_uUhofKB63H_QRcotXhFr3Wud1NOXS5IstmioAQ
+
DELETE /api/v1/boards/1376 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MTksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.cUi9Vf_a2MVTGLzyMTM-AD8sJGG8MJisS7QRHrIDyACy7P1CHkvOmfeqUrbYDs2I-PdME2XJRTM2NHpZdc7e2Q
 Host: localhost:8080
@@ -885,7 +885,7 @@
Request
GET /api/v1/boards/my?page=0 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.szg9meiKujFnfpogark3JwYI2-D2xP9sbXNIO6p8kv4sjq7_uUhofKB63H_QRcotXhFr3Wud1NOXS5IstmioAQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MTksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.cUi9Vf_a2MVTGLzyMTM-AD8sJGG8MJisS7QRHrIDyACy7P1CHkvOmfeqUrbYDs2I-PdME2XJRTM2NHpZdc7e2Q
 Host: localhost:8080
@@ -899,40 +899,42 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 919 +Content-Length: 967 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "boardId" : 4441, + "boardId" : 1374, "title" : "짱구는 못말려", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", - "createdAt" : "2023-10-28T03:55:26.957+00:00", + "createdAt" : "2023-12-17T04:18:39.160+00:00", "imageUrl" : "img001", "category" : "TREND", - "prefixCategory" : "INTRO" + "prefixCategory" : "INTRO", + "commentCnt" : 0 }, { - "boardId" : 4442, + "boardId" : 1373, "title" : "짱구는 못말려", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", - "createdAt" : "2023-10-28T03:55:27.272+00:00", + "createdAt" : "2023-12-17T04:18:38.917+00:00", "imageUrl" : "img001", "category" : "TREND", - "prefixCategory" : "INTRO" + "prefixCategory" : "INTRO", + "commentCnt" : 1 } ], "size" : 10, "totalElements" : 2, "last" : true, "totalPages" : 1, + "first" : true, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "first" : true, "numberOfElements" : 2, "empty" : false } @@ -948,7 +950,7 @@
Request
GET /api/v1/boards/my/comment?page=0 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.DtxeWm31AbDn8oct8FMmQSiCfaAsBD2aV3JPKACpzk4k9vd2NAJjm9BNtoQMA4P_8bSBYvXefX_rumFhxitIYA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Host: localhost:8080
@@ -962,41 +964,40 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 919 +Content-Length: 776 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "boardId" : 4456, + "commentId" : 33760, + "boardId" : 1389, "title" : "짱구는 못말려", - "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", - "createdAt" : "2023-10-28T03:55:28.735+00:00", - "imageUrl" : "img001", - "category" : "TREND", - "prefixCategory" : "INTRO" + "commentContent" : "댓글이란다." }, { - "boardId" : 4457, + "commentId" : 33759, + "boardId" : 1389, "title" : "짱구는 못말려", - "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", - "createdAt" : "2023-10-28T03:55:28.750+00:00", - "imageUrl" : "img001", - "category" : "TREND", - "prefixCategory" : "INTRO" + "commentContent" : "댓글이란다." + }, { + "commentId" : 33758, + "boardId" : 1388, + "title" : "짱구는 못말려", + "commentContent" : "댓글이란다." } ], "size" : 10, - "totalElements" : 2, + "totalElements" : 3, "last" : true, "totalPages" : 1, + "first" : true, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "first" : true, - "numberOfElements" : 2, + "numberOfElements" : 3, "empty" : false } }
@@ -1011,7 +1012,7 @@
Request
GET /api/v1/boards/my/love?page=0 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.DtxeWm31AbDn8oct8FMmQSiCfaAsBD2aV3JPKACpzk4k9vd2NAJjm9BNtoQMA4P_8bSBYvXefX_rumFhxitIYA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Host: localhost:8080
@@ -1025,40 +1026,42 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 919 +Content-Length: 967 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "boardId" : 4450, + "boardId" : 1382, "title" : "짱구는 못말려", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", - "createdAt" : "2023-10-28T03:55:28.424+00:00", + "createdAt" : "2023-12-17T04:18:40.253+00:00", "imageUrl" : "img001", "category" : "TREND", - "prefixCategory" : "INTRO" + "prefixCategory" : "INTRO", + "commentCnt" : 1 }, { - "boardId" : 4451, + "boardId" : 1383, "title" : "짱구는 못말려", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", - "createdAt" : "2023-10-28T03:55:28.453+00:00", + "createdAt" : "2023-12-17T04:18:40.274+00:00", "imageUrl" : "img001", "category" : "TREND", - "prefixCategory" : "INTRO" + "prefixCategory" : "INTRO", + "commentCnt" : 0 } ], "size" : 10, "totalElements" : 2, "last" : true, "totalPages" : 1, + "first" : true, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "first" : true, "numberOfElements" : 2, "empty" : false } @@ -1073,7 +1076,7 @@
Response
diff --git a/src/main/resources/static/docs/comment.html b/src/main/resources/static/docs/comment.html index 8a8ae1fd..0366c53b 100644 --- a/src/main/resources/static/docs/comment.html +++ b/src/main/resources/static/docs/comment.html @@ -449,7 +449,7 @@

1. 게시글에 대한

Request
-
GET /api/v1/comments/4496 HTTP/1.1
+
GET /api/v1/comments/1428 HTTP/1.1
 Accept: application/json
 Host: localhost:8080
@@ -470,10 +470,10 @@
Response
"code" : "SUCCESS", "message" : "성공", "data" : [ { - "commentId" : 94319, + "commentId" : 33913, "nickName" : "테스트유저1", "content" : "댓글이란다.", - "createdAt" : "2023-10-28T03:55:30.388+00:00" + "createdAt" : "2023-12-17T04:18:44.110+00:00" } ] }
@@ -488,13 +488,13 @@
Request
POST /api/v1/comments HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.AMdFJBj8-HaIYpAugy4TLqTXjynAQ_M-2v9IbWpkSbC6B64-Kk5h-t_A3SL5ytcU_QP2UrWrhOzM7mxao0PL-Q
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.w9x8Bpvc768-FqeyMcx9twq8FVkBcnPD1LoIzOODJi9zuFvmS-qyxLowGQmKD4-y0NhoAEbh2TEBYt0mkbGSoA
 Accept: application/json
 Content-Length: 65
 Host: localhost:8080
 
 {
-  "boardId" : 4498,
+  "boardId" : 1430,
   "content" : "짱구야, 공부 하자."
 }
@@ -514,7 +514,7 @@
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 94334 + "data" : 33928 }
@@ -526,15 +526,15 @@

3. 댓글 수정

Request
-
PUT /api/v1/comments/94325 HTTP/1.1
+
PUT /api/v1/comments/33919 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.AMdFJBj8-HaIYpAugy4TLqTXjynAQ_M-2v9IbWpkSbC6B64-Kk5h-t_A3SL5ytcU_QP2UrWrhOzM7mxao0PL-Q
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.w9x8Bpvc768-FqeyMcx9twq8FVkBcnPD1LoIzOODJi9zuFvmS-qyxLowGQmKD4-y0NhoAEbh2TEBYt0mkbGSoA
 Accept: application/json
 Content-Length: 65
 Host: localhost:8080
 
 {
-  "boardId" : 4497,
+  "boardId" : 1429,
   "content" : "짱구야, 공부 하자."
 }
@@ -554,7 +554,7 @@
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 94325 + "data" : 33919 }
@@ -566,8 +566,8 @@

4. 댓글 삭제

Request
-
DELETE /api/v1/comments/94340 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.AMdFJBj8-HaIYpAugy4TLqTXjynAQ_M-2v9IbWpkSbC6B64-Kk5h-t_A3SL5ytcU_QP2UrWrhOzM7mxao0PL-Q
+
DELETE /api/v1/comments/33934 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.w9x8Bpvc768-FqeyMcx9twq8FVkBcnPD1LoIzOODJi9zuFvmS-qyxLowGQmKD4-y0NhoAEbh2TEBYt0mkbGSoA
 Host: localhost:8080
@@ -597,7 +597,7 @@
Response
diff --git a/src/main/resources/static/docs/error.html b/src/main/resources/static/docs/error.html index dfd77a88..a7f7e740 100644 --- a/src/main/resources/static/docs/error.html +++ b/src/main/resources/static/docs/error.html @@ -499,7 +499,7 @@

Error Code

diff --git a/src/main/resources/static/docs/house.html b/src/main/resources/static/docs/house.html index aa6c1fcf..6dede4c1 100644 --- a/src/main/resources/static/docs/house.html +++ b/src/main/resources/static/docs/house.html @@ -526,20 +526,21 @@
Request
POST /api/v1/houses HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.C7fQ9_7rIo4ndIQ1TYAZD01mO5_spmgUCyyJsV6s0Y5erqu0DxSHgT9e8Goi_ogdYCujgGxM22g8Qf4nmQRydg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oBgNrU_-oBJh1LQ9X3c3Fcl4iIe80sBsBdrAjH9h4dPwgsyzP8-lj_N__bkVNbzCXnK_M12YMV2XD6G3M-12-w
 Accept: application/json
-Content-Length: 731
+Content-Length: 753
 Host: localhost:8080
 
 {
   "rentalType" : "SALE",
   "city" : "서울시 서대문구 남가좌동 거북골로 34",
+  "detail" : "1동 103호",
   "zipCode" : "12345",
   "size" : "120909000",
   "purpose" : "주거용 ( 방3, 화장실 2 )",
   "floorNum" : 2,
   "contact" : "070-1234-5678",
-  "createdDate" : "1990-09-09",
+  "createdDate" : "1990",
   "price" : 12000,
   "monthlyPrice" : 0.0,
   "agentName" : "행복부동산",
@@ -578,6 +579,11 @@ 
Request fields

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

+

detail

+

String

+

상세 주소 예: 1동 1호

+ +

zipCode

String

우편번호 ( string 형식입니다. )

@@ -660,12 +666,12 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 66 +Content-Length: 65 { "code" : "SUCCESS", "message" : "성공", - "data" : 11749 + "data" : 3833 }
@@ -716,20 +722,21 @@
Request
POST /api/v1/houses HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzMsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.BNamqDjNSv4gauERrvvaWVKTDazVeS5eoWcRHFpUA17r2bWCdGsMTSgZtAxF8Gm0cA6KZQBrPZAMgZNF-VLTIQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.KTTH1D4eLliezB6kN-eZlrWou1P-Z-X4_OHMt8O1b50fX56vsrWT0J6Yiz45Zdx57R5PULoPiwQAAUbqLMCP5g
 Accept: application/json
-Content-Length: 26025
+Content-Length: 26047
 Host: localhost:8080
 
 {
   "rentalType" : "SALE",
   "city" : "서울시 서대문구 남가좌동 거북골로 34",
+  "detail" : "1동 103호",
   "zipCode" : "12345",
   "size" : "120909000",
   "purpose" : "주거용 ( 방3, 화장실 2 )",
   "floorNum" : 2,
   "contact" : "070-1234-5678",
-  "createdDate" : "1990-09-09",
+  "createdDate" : "1990",
   "price" : 12000,
   "monthlyPrice" : 0.0,
   "agentName" : "행복부동산",
@@ -769,6 +776,11 @@ 
Request Fields

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

+

detail

+

String

+

상세 주소 예: 1동 1호

+ +

zipCode

String

우편번호 ( string 형식입니다. )

@@ -875,22 +887,23 @@

2. 빈집 게시글 수정하기

Request
-
PUT /api/v1/houses/11726 HTTP/1.1
+
PUT /api/v1/houses/3810 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.q4It52SFY8h70p7Tdwngp5dwSNo5__bdyvj-uXALDn_mgbVIQVy00bGW9_AAWNbCylKOY0V6q_0T9ccXT6jMGw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.1McaufFU-n1xvuc_nXBBGfij9hkQhP7oZV8EQ6g2jX9nwwteXL7IUXzLZSQJ70x8BdY9hTWnaeMlmPSAzwmaDg
 Accept: application/json
-Content-Length: 716
+Content-Length: 738
 Host: localhost:8080
 
 {
   "rentalType" : "JEONSE",
   "city" : "서울시 서대문구 남가좌동 거북골로 90",
+  "detail" : "1동 103호",
   "zipCode" : "12345",
   "size" : "120909000",
   "purpose" : "게스트하우스 ( 방3, 화장실 2 )",
   "floorNum" : 2,
   "contact" : "070-1234-5678",
-  "createdDate" : "1990-09-09",
+  "createdDate" : "1990",
   "price" : 12000,
   "monthlyPrice" : 0.0,
   "agentName" : "부자부동산",
@@ -930,6 +943,11 @@ 
Request Fields

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

+

detail

+

String

+

상세 주소 예: 1동 1호

+ +

zipCode

String

우편번호 ( string 형식입니다. )

@@ -1011,12 +1029,12 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 66 +Content-Length: 65 { "code" : "SUCCESS", "message" : "성공", - "data" : 11726 + "data" : 3810 }
@@ -1031,9 +1049,9 @@

3. 빈집 게시글 삭제하기

Request
-
DELETE /api/v1/houses/11725 HTTP/1.1
+
DELETE /api/v1/houses/3809 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.q4It52SFY8h70p7Tdwngp5dwSNo5__bdyvj-uXALDn_mgbVIQVy00bGW9_AAWNbCylKOY0V6q_0T9ccXT6jMGw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YHIu6aU14PmZpNG13y-8wvYOQzL4-4vSEbPykEowo6aNGnZMW5cGvbqVEJ7zHmCLtf8yEgi9zzOurXqM48z5BQ
 Accept: application/json
 Host: localhost:8080
@@ -1142,111 +1160,111 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 4236 +Content-Length: 4228 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "houseId" : 11806, + "houseId" : 3910, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.378+00:00", + "createdAt" : "2023-12-17T04:18:50.598+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11808, + "houseId" : 3908, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.382+00:00", + "createdAt" : "2023-12-17T04:18:50.594+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11810, + "houseId" : 3906, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.386+00:00", + "createdAt" : "2023-12-17T04:18:50.586+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11812, + "houseId" : 3904, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.390+00:00", + "createdAt" : "2023-12-17T04:18:50.583+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11814, + "houseId" : 3902, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.394+00:00", + "createdAt" : "2023-12-17T04:18:50.579+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11826, + "houseId" : 3900, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.418+00:00", + "createdAt" : "2023-12-17T04:18:50.574+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11824, + "houseId" : 3898, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.414+00:00", + "createdAt" : "2023-12-17T04:18:50.570+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11820, + "houseId" : 3896, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.404+00:00", + "createdAt" : "2023-12-17T04:18:50.565+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -1257,13 +1275,13 @@
Response
"totalElements" : 11, "last" : false, "totalPages" : 2, + "first" : true, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "first" : true, "numberOfElements" : 8, "empty" : false } @@ -1416,7 +1434,7 @@

5. 빈집 게시

Request
-
GET /api/v1/houses/11828 HTTP/1.1
+
GET /api/v1/houses/3912 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
 Host: localhost:8080
@@ -1431,21 +1449,22 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 987 +Content-Length: 1010 { "code" : "SUCCESS", "message" : "성공", "data" : { - "houseId" : 11828, + "houseId" : 3912, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", + "detail" : "1동 103호", "zipCode" : "12345", "size" : "120909000", "purpose" : "주거용 ( 방3, 화장실 2 )", "floorNum" : 2, "contact" : "070-1234-5678", - "createdDate" : "1990-09-09", + "createdDate" : "1990", "price" : 12000, "monthlyPrice" : 0.0, "agentName" : "행복부동산", @@ -1454,7 +1473,7 @@
Response
"imageUrls" : [ "img-001", "img-002", "img-002", "img-002", "img-002" ], "nickName" : "테스트유저1", "userType" : "NONE", - "createdAt" : "2023-10-28T03:55:33.609+00:00", + "createdAt" : "2023-12-17T04:18:50.837+00:00", "isCompleted" : false, "isScraped" : false, "recommendedTag" : [ ], @@ -1506,6 +1525,11 @@
Response Fields

매물 위치

+

data.detail

+

String

+

상세 주소 예: 1동 1호

+ +

data.zipCode

String

우편 주소

@@ -1611,9 +1635,9 @@

6. 빈집 게시글

Request
-
GET /api/v1/houses/user-scrap/11727 HTTP/1.1
+
GET /api/v1/houses/user-scrap/3811 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.C7fQ9_7rIo4ndIQ1TYAZD01mO5_spmgUCyyJsV6s0Y5erqu0DxSHgT9e8Goi_ogdYCujgGxM22g8Qf4nmQRydg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.1McaufFU-n1xvuc_nXBBGfij9hkQhP7oZV8EQ6g2jX9nwwteXL7IUXzLZSQJ70x8BdY9hTWnaeMlmPSAzwmaDg
 Accept: application/json
 Host: localhost:8080
@@ -1627,21 +1651,22 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 986 +Content-Length: 1009 { "code" : "SUCCESS", "message" : "성공", "data" : { - "houseId" : 11727, + "houseId" : 3811, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", + "detail" : "1동 103호", "zipCode" : "12345", "size" : "120909000", "purpose" : "주거용 ( 방3, 화장실 2 )", "floorNum" : 2, "contact" : "070-1234-5678", - "createdDate" : "1990-09-09", + "createdDate" : "1990", "price" : 12000, "monthlyPrice" : 0.0, "agentName" : "행복부동산", @@ -1650,7 +1675,7 @@
Response
"imageUrls" : [ "img-001", "img-002", "img-002", "img-002", "img-002" ], "nickName" : "테스트유저1", "userType" : "NONE", - "createdAt" : "2023-10-28T03:55:32.095+00:00", + "createdAt" : "2023-12-17T04:18:47.842+00:00", "isCompleted" : false, "isScraped" : true, "recommendedTag" : [ ], @@ -1702,6 +1727,11 @@
Response Fields

매물 위치

+

data.detail

+

String

+

상세 주소 예: 1동 1호

+ +

data.zipCode

String

우편 주소

@@ -1810,9 +1840,9 @@

7.빈집 게시글 신고하기

Request
-
PUT /api/v1/houses/report/11750 HTTP/1.1
+
PUT /api/v1/houses/report/3834 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk4NDY3MTMyLCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.UWtTKzU8HEgLCC9edPtK5e-RH_OePz7jrXI4QbI_ijZvUNW4M2gHeGxskwR6bHHNePikBzjzciCtch3VcI5xmQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTI4LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.AbukHjMYA2PW7N0ROiyW1sSHK6kgTuEVM4ipp8PiPzG38gWX_L9hQMTEkIORavvNntrxehM4hWZilPT2upBx1w
 Accept: application/json
 Content-Length: 107
 Host: localhost:8080
@@ -1883,7 +1913,7 @@ 
Request
GET /api/v1/houses/tmp-save?page=0&size=8 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.C7fQ9_7rIo4ndIQ1TYAZD01mO5_spmgUCyyJsV6s0Y5erqu0DxSHgT9e8Goi_ogdYCujgGxM22g8Qf4nmQRydg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.XaNYKscl0HkDReAMewf0sXcz1yN6xJoL5v_w6EuexIuMGQyqHL3Fg8T-pvEyNfa0OOxl-WMDHRon52UaCe0ckA
 Accept: application/json
 Host: localhost:8080
@@ -1897,111 +1927,111 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 4476 +Content-Length: 4468 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "houseId" : 11795, + "houseId" : 3879, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.048+00:00", + "createdAt" : "2023-12-17T04:18:49.918+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11796, + "houseId" : 3880, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.049+00:00", + "createdAt" : "2023-12-17T04:18:49.921+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11797, + "houseId" : 3881, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.052+00:00", + "createdAt" : "2023-12-17T04:18:49.923+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11798, + "houseId" : 3882, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.053+00:00", + "createdAt" : "2023-12-17T04:18:49.925+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11799, + "houseId" : 3883, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.054+00:00", + "createdAt" : "2023-12-17T04:18:49.928+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11800, + "houseId" : 3884, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.055+00:00", + "createdAt" : "2023-12-17T04:18:49.930+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11801, + "houseId" : 3885, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.057+00:00", + "createdAt" : "2023-12-17T04:18:49.932+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11802, + "houseId" : 3886, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:33.058+00:00", + "createdAt" : "2023-12-17T04:18:49.935+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2015,22 +2045,22 @@
Response
"sorted" : false }, "offset" : 0, - "pageSize" : 8, "pageNumber" : 0, - "unpaged" : false, - "paged" : true + "pageSize" : 8, + "paged" : true, + "unpaged" : false }, "last" : false, - "totalPages" : 2, "totalElements" : 11, + "totalPages" : 2, + "first" : true, + "size" : 8, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "size" : 8, - "first" : true, "numberOfElements" : 8, "empty" : false } @@ -2221,7 +2251,7 @@
Request
GET /api/v1/houses/scrap?page=0&filter= HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.q4It52SFY8h70p7Tdwngp5dwSNo5__bdyvj-uXALDn_mgbVIQVy00bGW9_AAWNbCylKOY0V6q_0T9ccXT6jMGw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-C6gDgNel5j3xeL-aWbdb8jGFncZp3bGpasPpqXR1SSYaLxJsq5AkP0-1IqL3vM_rbEzN7Cuvlml2ym58oMieQ
 Host: localhost:8080
@@ -2234,85 +2264,85 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 3504 +Content-Length: 3498 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "houseId" : 11713, + "houseId" : 3797, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:31.337+00:00", + "createdAt" : "2023-12-17T04:18:45.945+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11714, + "houseId" : 3798, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:31.363+00:00", + "createdAt" : "2023-12-17T04:18:45.988+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11715, + "houseId" : 3799, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:31.370+00:00", + "createdAt" : "2023-12-17T04:18:46.002+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11716, + "houseId" : 3800, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:31.378+00:00", + "createdAt" : "2023-12-17T04:18:46.019+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11717, + "houseId" : 3801, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:31.385+00:00", + "createdAt" : "2023-12-17T04:18:46.037+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", "recommendedTag" : [ ], "recommendedTagName" : [ ] }, { - "houseId" : 11718, + "houseId" : 3802, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "price" : 12000, "monthlyPrice" : 0.0, "nickName" : "테스트유저1", - "createdAt" : "2023-10-28T03:55:31.391+00:00", + "createdAt" : "2023-12-17T04:18:46.048+00:00", "isCompleted" : false, "imageUrl" : "img-001", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2326,22 +2356,22 @@
Response
"sorted" : false }, "offset" : 0, - "pageSize" : 10, "pageNumber" : 0, - "unpaged" : false, - "paged" : true + "pageSize" : 10, + "paged" : true, + "unpaged" : false }, "last" : true, - "totalPages" : 1, "totalElements" : 6, + "totalPages" : 1, + "first" : true, + "size" : 10, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "size" : 10, - "first" : true, "numberOfElements" : 6, "empty" : false } @@ -2359,7 +2389,7 @@
Request
GET /api/v1/houses/agent?page=0&search=&isCompleted= HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZ2VudF9qaG91c2VfY29tIiwiZXhwIjoxNjk4NDY3MTMyLCJhdXRoIjoiVVNFUiIsInR5cGUiOiJBR0VOVCJ9.xYFJLwdE-KZa_NWEPAEqx6lZIDX-lKYAhC1EFhSTEY3UVrKp4b8VCvdDhXskT7ZBbDKCv2YrLTnZeVC9RQmyAA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZ2VudF9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTI5LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJBR0VOVCJ9.n3ZFoWnD_0SGnVQ_YK6ZcZVjSj4y3Bg1_qsyQ5bB9JQrrOKQTEchR3WoUgf7DihHL3pa4qjH6E3LsghoUvZIRA
 Accept: application/json
 Host: localhost:8080
@@ -2373,14 +2403,14 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 3673 +Content-Length: 3663 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "houseId" : 11773, + "houseId" : 3857, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2388,7 +2418,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11774, + "houseId" : 3858, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2396,7 +2426,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11775, + "houseId" : 3859, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2404,7 +2434,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11776, + "houseId" : 3860, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2412,7 +2442,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11777, + "houseId" : 3861, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2420,7 +2450,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11778, + "houseId" : 3862, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2428,7 +2458,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11779, + "houseId" : 3863, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2436,7 +2466,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11780, + "houseId" : 3864, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2444,7 +2474,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11781, + "houseId" : 3865, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2452,7 +2482,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11782, + "houseId" : 3866, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2470,13 +2500,13 @@
Response
}, "last" : false, "totalPages" : 3, + "first" : true, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "first" : true, "numberOfElements" : 10, "empty" : false } @@ -2498,9 +2528,9 @@

11. 빈집 매물 상태 변경

Request
-
PUT /api/v1/houses/status/11724 HTTP/1.1
+
PUT /api/v1/houses/status/3808 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.q4It52SFY8h70p7Tdwngp5dwSNo5__bdyvj-uXALDn_mgbVIQVy00bGW9_AAWNbCylKOY0V6q_0T9ccXT6jMGw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YHIu6aU14PmZpNG13y-8wvYOQzL4-4vSEbPykEowo6aNGnZMW5cGvbqVEJ7zHmCLtf8yEgi9zzOurXqM48z5BQ
 Accept: application/json
 Content-Length: 158
 Host: localhost:8080
@@ -2602,9 +2632,9 @@ 

12. 자신

Request
-
GET /api/v1/houses/my?keyword= HTTP/1.1
+
GET /api/v1/houses/my?keyword=&dealState= HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.C7fQ9_7rIo4ndIQ1TYAZD01mO5_spmgUCyyJsV6s0Y5erqu0DxSHgT9e8Goi_ogdYCujgGxM22g8Qf4nmQRydg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oBgNrU_-oBJh1LQ9X3c3Fcl4iIe80sBsBdrAjH9h4dPwgsyzP8-lj_N__bkVNbzCXnK_M12YMV2XD6G3M-12-w
 Accept: application/json
 Host: localhost:8080
@@ -2628,6 +2658,10 @@
Request Fields

keyword

매물명 키워드 검색

+ +

dealState

+

거래상태 필터링 ( 승인중 : APPLYING | 진행중 : ONGOING | 완료 : COMPLETED | 반려 : REJECTED)

+
@@ -2640,14 +2674,14 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 3673 +Content-Length: 3663 { "code" : "SUCCESS", "message" : "성공", "data" : { "content" : [ { - "houseId" : 11751, + "houseId" : 3835, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2655,7 +2689,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11752, + "houseId" : 3836, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2663,7 +2697,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11753, + "houseId" : 3837, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2671,7 +2705,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11754, + "houseId" : 3838, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2679,7 +2713,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11755, + "houseId" : 3839, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2687,7 +2721,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11756, + "houseId" : 3840, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2695,7 +2729,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11757, + "houseId" : 3841, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2703,7 +2737,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11758, + "houseId" : 3842, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2711,7 +2745,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 11759, + "houseId" : 3843, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2719,7 +2753,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 11760, + "houseId" : 3844, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -2737,13 +2771,13 @@
Response
}, "last" : false, "totalPages" : 3, + "first" : true, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "first" : true, "numberOfElements" : 10, "empty" : false } @@ -2887,7 +2921,7 @@
Response Fields
diff --git a/src/main/resources/static/docs/index.html b/src/main/resources/static/docs/index.html index d5a267f0..4a0552a6 100644 --- a/src/main/resources/static/docs/index.html +++ b/src/main/resources/static/docs/index.html @@ -1,1053 +1,1068 @@ - - - - -주말내집 API 명세서 - - - - + + + + + 주말내집 API 명세서 + + + +
-
-
-
-

제작 <5do2chonri@gmail.com>
-최초작성일자 2023-03-23

-
-
-

해당 문서의 저작권은 주말내집을 제작하는 오도리 팀에게 있으며, 무단 배포/변형을 금지합니다.

-
-
-
-
-

User API

-
-
-

UserTerm 테이블에서 사용하는 enum 값입니다. -아래 표를 참고해서 enum 변수명으로 요청 body에 배열 형태로 보내주시면 됩니다.

-
-
-

일반 사용자의 경우, 1번 약관을 필수로 봅니다.

-
-
-

공인중개사의 경우, 1번과 2번 약관을 필수로 봅니다.

-
-
-

필수 약관이 동의로 간주되지 않을 경우, 오류로 간주합니다.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - -
Enum 변수명Description

SERVICE_USED_AGREE

서비스 이용 약관에 대한 동의

PERSONAL_INFO_NOTI

개인정보 수집 이용에 대한 안내

PERSONAL_INFO_USED_AGREE

개인정보 수집 및 이용 동의

MARKETING_ADVERTISEMENT_AGREE

마케팅 활용 및 광고성 정보 수신 동의

-
-

!! 공지 !!

-
-
-

23.09.23 이전까지 User 테이블 내 email 컬렴명으로 사용하던 모든 데이터를 userName(user_name)으로 변경하였습니다. 해당 부분들에 대해 클라이언트 측에서 동일하게 변경 작업을 진행해주셔야 합니다.

-
-
-

API URL, DTO 를 잘 확인해주세요!

-
-
-

1-1. 회원가입

-
-
Request
-
-
+
+
+
+

제작 <5do2chonri@gmail.com>
+ 최초작성일자 2023-03-23

+
+
+

해당 문서의 저작권은 주말내집을 제작하는 오도리 팀에게 있으며, 무단 배포/변형을 금지합니다.

+
+
+
+
+

User API

+
+
+

UserTerm 테이블에서 사용하는 enum 값입니다. + 아래 표를 참고해서 enum 변수명으로 요청 body에 배열 형태로 보내주시면 됩니다.

+
+
+

일반 사용자의 경우, 1번 약관을 필수로 봅니다.

+
+
+

공인중개사의 경우, 1번과 2번 약관을 필수로 봅니다.

+
+
+

필수 약관이 동의로 간주되지 않을 경우, 오류로 간주합니다.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum 변수명Description

SERVICE_USED_AGREE

서비스 이용 약관에 대한 동의

PERSONAL_INFO_NOTI

개인정보 수집 이용에 대한 안내

PERSONAL_INFO_USED_AGREE

개인정보 수집 및 이용 동의

MARKETING_ADVERTISEMENT_AGREE

마케팅 활용 및 광고성 정보 수신 동의

+
+

!! 공지 !!

+
+
+

23.09.23 이전까지 User 테이블 내 email 컬렴명으로 사용하던 모든 데이터를 userName(user_name)으로 변경하였습니다. 해당 부분들에 대해 클라이언트 측에서 동일하게 변경 작업을 진행해주셔야 합니다.

+
+
+

API URL, DTO 를 잘 확인해주세요!

+
+
+

1-1. 회원가입

+
+
Request
+
+
POST /api/v1/users/sign-up HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -1064,13 +1079,13 @@ 
Request
"terms" : [ "PERSONAL_INFO_NOTI", "SERVICE_USED_AGREE" ], "email" : "zzangu@jhouse.com" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1082,13 +1097,13 @@ 
Response - "code" : "SUCCESS", "message" : "성공" }
-
-
-
- + -
-
-

1-2. 공인중개사 회원가입

-
-

공인중개사 등록번호는 숫자로 구성된 14개의 문자열만 유효합니다.

-
-
-

사업자등록번호는 숫자로 구성된 10개의 문자열만 유효합니다.

-
-
-
Request
-
-
+
+
+
+
+
+

1-2. 공인중개사 회원가입

+
+

공인중개사 등록번호는 숫자로 구성된 14개의 문자열만 유효합니다.

+
+
+

사업자등록번호는 숫자로 구성된 10개의 문자열만 유효합니다.

+
+
+
Request
+
+
POST /api/v1/agents/sign-up HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -1171,117 +1186,117 @@ 
Request
"company_email" : "agent@duaily.net", "estate" : "아파트" }
-
-
-
-
-
Request Field
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

userName

String

사용자 로그인 아이디

password

String

비밀번호

nick_name

String

닉네임

phone_num

String

전화번호

age

String

연령대

join_paths

Array

가입 경로

terms

Array

약관 동의 내역 ( enum 변수명으로 보내야 합니다. )

agent_code

String

공인중개사 등록번호

business_code

String

사업자 등록번호

company_name

String

공인중개사 사무소 상호명

agent_name

String

대표자 이름

company_phone_num

String

공인중개사 사무소 대표 전화번호

assistant_name

Null

중개 보조원명

company_address

String

공인중개사 사무소 주소

company_address_detail

String

공인중개사 사무소 상세 주소

company_email

String

공인중개사 이메일

estate

String

주거래 매물

-
-
-
Response
-
-
+
+
+
+
+
Request Field
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

userName

String

사용자 로그인 아이디

password

String

비밀번호

nick_name

String

닉네임

phone_num

String

전화번호

age

String

연령대

join_paths

Array

가입 경로

terms

Array

약관 동의 내역 ( enum 변수명으로 보내야 합니다. )

agent_code

String

공인중개사 등록번호

business_code

String

사업자 등록번호

company_name

String

공인중개사 사무소 상호명

agent_name

String

대표자 이름

company_phone_num

String

공인중개사 사무소 대표 전화번호

assistant_name

Null

중개 보조원명

company_address

String

공인중개사 사무소 주소

company_address_detail

String

공인중개사 사무소 상세 주소

company_email

String

공인중개사 이메일

estate

String

주거래 매물

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1293,16 +1308,16 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-

2. 로그인

-
-
Request
-
-
+
+
+
+
+
+

2. 로그인

+
+
Request
+
+
POST /api/v1/users/sign-in HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -1313,18 +1328,18 @@ 
Request
"userName" : "test_jhouse_com", "password" : "abcdefG123!" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
-Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTk2ODQ1NTF9.4M7JuYxL8CcuuCsqObE6DU1tko2LzbXQQow008S5qv5s6HfF_tJI81HpsRXB4BIus9Ed2tbTaOh45X724sb-Vw; Path=/; Domain=localhost; Max-Age=604800; Expires=Sat, 11 Nov 2023 06:35:51 GMT; Secure; HttpOnly; SameSite=None
+Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3MDMzOTE1NDZ9.MdaRr0y8J1i4dVxyjoHC33FYUpQfOl3xNKUfvcNX0yxX1TNTohqd5cZ1KBguMIiJfQw_sock-Iy-l1ZFEgCacw; Path=/; Domain=localhost; Max-Age=604800; Expires=Sun, 24 Dec 2023 04:19:06 GMT; Secure; HttpOnly; SameSite=None
 Content-Type: application/json;charset=UTF-8
 Content-Length: 299
 
@@ -1332,16 +1347,16 @@ 
Respons "code" : "SUCCESS", "message" : "성공", "data" : { - "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.dLuUkp46eziL0wtw1RAy2LXGZlY-Wo21jOi_pqPAu7hogtm1SM5DmiWTNgBwoajf3boqc_22MnWwiM-pdugy5g" + "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw" } }
-
-
-
- + -
- +
+

3. 토큰 재발급

+
+
Request
+
+
POST /api/v1/users/reissue HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
 Content-Length: 234
 Host: localhost:8080
-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.BQAmkc3pgUSviWkrCRwxQU-JMnMLJJh4g85EWixkouOMYAvqxpO7Y6Lx0mWnhVNIhkdluSxrX08VguB872EOsA
+Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q
 
 {
-  "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.BQAmkc3pgUSviWkrCRwxQU-JMnMLJJh4g85EWixkouOMYAvqxpO7Y6Lx0mWnhVNIhkdluSxrX08VguB872EOsA"
+  "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q"
 }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
-Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTk2ODQ1NTR9.Ne0wWlxCETaEDTDpPiPuAfO0J6EXlOGOuSHKctzTh1MImZn0MOburiTVycZgvZhLfUgGaH_BVwMvESbGwT6qMQ; Path=/; Domain=localhost; Max-Age=604800; Expires=Sat, 11 Nov 2023 06:35:54 GMT; Secure; HttpOnly; SameSite=None
+Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3MDMzOTE1NDh9.RCy8MBDDjxbcx9tsq2FRNTLKcxG4M4dR5cJKxXcgnvwnQs8B81p-fDCRbYHRAakvYFRMegzM3iO_kDro8wreyQ; Path=/; Domain=localhost; Max-Age=604800; Expires=Sun, 24 Dec 2023 04:19:08 GMT; Secure; HttpOnly; SameSite=None
 Content-Type: application/json;charset=UTF-8
 Content-Length: 299
 
@@ -1422,35 +1437,35 @@ 
Respons "code" : "SUCCESS", "message" : "성공", "data" : { - "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.BQAmkc3pgUSviWkrCRwxQU-JMnMLJJh4g85EWixkouOMYAvqxpO7Y6Lx0mWnhVNIhkdluSxrX08VguB872EOsA" + "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q" } }
-
-
-
-
-
-

4. 로그아웃

-
-
Request
-
-
+
+
+
+
+
+

4. 로그아웃

+
+
Request
+
+
POST /api/v1/users/logout HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.dLuUkp46eziL0wtw1RAy2LXGZlY-Wo21jOi_pqPAu7hogtm1SM5DmiWTNgBwoajf3boqc_22MnWwiM-pdugy5g
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
-Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTk2ODQ1NTF9.4M7JuYxL8CcuuCsqObE6DU1tko2LzbXQQow008S5qv5s6HfF_tJI81HpsRXB4BIus9Ed2tbTaOh45X724sb-Vw; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly; SameSite=None
+Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3MDMzOTE1NDZ9.MdaRr0y8J1i4dVxyjoHC33FYUpQfOl3xNKUfvcNX0yxX1TNTohqd5cZ1KBguMIiJfQw_sock-Iy-l1ZFEgCacw; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly; SameSite=None
 Content-Type: application/json;charset=UTF-8
 Content-Length: 48
 
@@ -1458,16 +1473,16 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
- +
+

5. 이메일 중복 검사

+
+
Request
+
+
POST /api/v1/users/check/email HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -1476,15 +1491,15 @@ 
Request
{ "email" : "zzangu@jhouse.com", - "code" : "1033" -}
-
-
-
-
-
Response - Success
-
-
+ "code" : "5175" +}
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1497,16 +1512,16 @@ 
Respons "message" : "성공", "data" : true }
-
-
-
-
- +
+

6. 닉네임 중복 검사

+
+
Request
+
+
POST /api/v1/users/check/nick-name HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -1516,13 +1531,13 @@ 
Request
{ "nick_name" : "testuser" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1535,13 +1550,13 @@ 
Respons "message" : "성공", "data" : true }
-
-
-
- +
+
Response - Fail
+
+
HTTP/1.1 400 Bad Request
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1553,16 +1568,16 @@ 
Response - Fa "code" : "C0002", "message" : "닉네임 형식에 맞지 않습니다." }
-
-
-
-
- +
+

7. 인증문자 전송

+
+
Request
+
+
POST /api/v1/users/send/sms HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -1572,13 +1587,13 @@ 
Request
{ "phone_num" : "01011111111" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1590,13 +1605,13 @@ 
Respons "code" : "SUCCESS", "message" : "성공" }
-
-
-
- + -
- +
+

8. 인증문자 검증

+
+
Request
+
+
POST /api/v1/users/check/sms HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -1641,15 +1656,15 @@ 
Request
{ "phone_num" : "01011111111", - "code" : "9696" -}
-
-
-
-
-
Response - Success
-
-
+ "code" : "9117" +}
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1662,13 +1677,13 @@ 
Respons "message" : "성공", "data" : true }
-
-
-
- + -
- +
+

9. 닉네임 수정

+
+
Request
+
+
PUT /api/v1/users/update/nick-name HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.BQAmkc3pgUSviWkrCRwxQU-JMnMLJJh4g85EWixkouOMYAvqxpO7Y6Lx0mWnhVNIhkdluSxrX08VguB872EOsA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q
 Accept: application/json
 Content-Length: 30
 Host: localhost:8080
@@ -1715,13 +1730,13 @@ 
Request
{ "nick_name" : "testuser" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1733,13 +1748,13 @@ 
Respons "code" : "SUCCESS", "message" : "성공" }
-
-
-
- + -
- +
+

10. 비밀번호 수정

+
+
Request
+
+
PUT /api/v1/users/update/password HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.E8Aazw08ciuj-eGO_cYkIN42NtsyvZG_A83Qg-rG30lyAE48dNNvlt1J85aD2W2yKNBzW8ltcp6LcRvjcjfM7w
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YqD-HADG5qG6BI6LoWMRxqsaLTKFNJ0nrADCFo3lxOoOGDjSqyCrwQV727TBF_wunS3Sk7NroGmGLgQSITaLrA
 Accept: application/json
 Content-Length: 32
 Host: localhost:8080
@@ -1786,13 +1801,13 @@ 
Request
{ "password" : "abcdFGH123!" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1804,13 +1819,13 @@ 
Respons "code" : "SUCCESS", "message" : "성공" }
-
-
-
- + -
-
-

11. 유저 정보 조회

-
-

주말내집에서는 총 3가지 타입으로 사용자를 분류합니다.

-
-
-

Authority는 관리자와 관리자가 아닌 사용자를 구분하는 용도입니다.

-
-
-

UserType은 일반 사용자, 공인중개사, 관리자(프론트/서버)를 구분하는 용도입니다.

-
-
-

UserType은 테크 블로그에서 관리자 내부 구분자로 사용되다가 공인중개사의 추가로 모든 사용자 타입을 구분하는 용도로 사용되고 있습니다.

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
분류AuthorityUserType

일반 사용자

USER

NONE

공인중개사

USER

AGENT

관리자

ADMIN

WEB

관리자2

ADMIN

SERVER

-
-
Request
-
-
+
+
+
+
+
+

11. 유저 정보 조회

+
+

주말내집에서는 총 3가지 타입으로 사용자를 분류합니다.

+
+
+

Authority는 관리자와 관리자가 아닌 사용자를 구분하는 용도입니다.

+
+
+

UserType은 일반 사용자, 공인중개사, 관리자(프론트/서버)를 구분하는 용도입니다.

+
+
+

UserType은 테크 블로그에서 관리자 내부 구분자로 사용되다가 공인중개사의 추가로 모든 사용자 타입을 구분하는 용도로 사용되고 있습니다.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
분류AuthorityUserType

일반 사용자

USER

NONE

공인중개사

USER

AGENT

관리자

ADMIN

WEB

관리자2

ADMIN

SERVER

+
+
Request
+
+
GET /api/v1/users HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTMsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.7Dv1YDsH3OTbhpFhNJA9xqJPx95_kT_kka0QQw5kb0Z04zwqnMkrqTHZ6AJ7R53gb90JPz2vgy71x1eDtAZJHA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oRTGdnI8xxiSS3xQVpfiG6dXLI8L4YRq_FPXAad_1KfejqyHB_FI-Mzo80mFMtYp62AnAcXvt8PjBxKL-vJWqA
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 406
+Content-Length: 459
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
-    "id" : 101802,
+    "id" : 35544,
     "userName" : "test_jhouse_com",
     "nick_name" : "테스트유저1",
     "phone_num" : "01011111111",
@@ -1925,22 +1940,24 @@ 
Response
"age" : "TEN", "profile_image_url" : "https://duaily-content.s3.ap-northeast-2.amazonaws.com/default_profile_image.png", "userType" : "NONE", - "email" : "zzangu@jhouse.com" + "email" : "zzangu@jhouse.com", + "suspenseReason" : null, + "reportedAt" : null } }
-
-
-
-
- +
+

12. 회원정보 수정

+
+
Request
+
+
PUT /api/v1/users HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.dLuUkp46eziL0wtw1RAy2LXGZlY-Wo21jOi_pqPAu7hogtm1SM5DmiWTNgBwoajf3boqc_22MnWwiM-pdugy5g
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw
 Accept: application/json
 Content-Length: 127
 Host: localhost:8080
@@ -1951,13 +1968,13 @@ 
Request
"new_password" : "abcdefg12345!", "phone_num" : "01012345678" }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -1969,19 +1986,59 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-

13. 유저 탈퇴

-
-
Request
-
-
+
+
+
+

회원탈퇴 시, 사용되는 enum

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
enum 값Description

ROW_USE

이용빈도 낮음

RE_JOIN

재가입

INSUFFICIENT_CONTENT

콘텐츠 및 정보 부족

PERSONAL_PROTECTION

개인 정보 보호

ETC

기타

+
+

위의 표에 나와 있는 description을 사용자가 선택하게 됩니다. 그 description을 그대로 복붙해서 요청 body에 넣어주시면 됩니다.

+
+
+
+
+

13. 유저 탈퇴

+
+
Request
+
+
POST /api/v1/users/withdrawal HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NTEsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.dLuUkp46eziL0wtw1RAy2LXGZlY-Wo21jOi_pqPAu7hogtm1SM5DmiWTNgBwoajf3boqc_22MnWwiM-pdugy5g
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ._FWOKK_FLBVwRVgSOINmqoVWEgUSi96GD0TMW1aT23kYyAh_8jR5Vv5w7jgpyQOV-tY1ppFcxVxmdOqhkA9aAA
 Accept: application/json
 Content-Length: 109
 Host: localhost:8080
@@ -1990,13 +2047,13 @@ 
Request
"reason" : [ "이용빈도 낮음", "콘텐츠 및 정보 부족", "기타" ], "content" : "content!" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2008,13 +2065,13 @@ 
Respo "code" : "SUCCESS", "message" : "성공" }
-
-
-
- +
+
Response - Fail
+
+
HTTP/1.1 400 Bad Request
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2026,16 +2083,16 @@ 
Response - Fa "code" : "U0008", "message" : "이미 탈퇴신청 되었습니다." }
-
-
-
-
- +
+

14. 이메일 인증번호 전송

+
+
Request
+
+
POST /api/v1/users/send/email HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -2045,13 +2102,13 @@ 
Request
{ "email" : "zzangu@jhouse.com" }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2063,19 +2120,19 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-

이메일 전송 실패 시, 500 에러코드로 반환됩니다.

-
-
-
-
-

15. 이메일 인증번호 검증

-
-
Request
-
-
+
+
+
+

이메일 전송 실패 시, 500 에러코드로 반환됩니다.

+
+
+
+
+

15. 이메일 인증번호 검증

+
+
Request
+
+
POST /api/v1/users/check/email HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -2084,15 +2141,15 @@ 
Request
{ "email" : "zzangu@jhouse.com", - "code" : "1033" -}
-
-
-
-
-
Response
-
-
+ "code" : "5175" +} +
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2105,24 +2162,24 @@ 
Response
"message" : "성공", "data" : true }
-
-
-
-

이메일 인증코드는 전화번호 인증과 동일하게 3분의 유효시간을 설정해두었습니다. 해당 코드는 레디스에서 관리합니다. -성 -인증 실패 시, 반환되는 데이터는 false 입니다.

-
-
-
-
-

16. 아이디 중복 검사

-
-

아이디는 로그인 시, 사용되는 값입니다.

-
-
-
Request
-
-
+
+
+
+

이메일 인증코드는 전화번호 인증과 동일하게 3분의 유효시간을 설정해두었습니다. 해당 코드는 레디스에서 관리합니다. + 성 + 인증 실패 시, 반환되는 데이터는 false 입니다.

+
+
+
+
+

16. 아이디 중복 검사

+
+

아이디는 로그인 시, 사용되는 값입니다.

+
+
+
Request
+
+
POST /api/v1/users/check/user-name HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
@@ -2132,13 +2189,13 @@ 
Request
{ "userName" : "test_jhouse_com" }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2151,108 +2208,250 @@ 
Response
"message" : "성공", "data" : true }
-
-
-
-
- - -
-

JWT 예외처리

-
-
-
+
+
+
+
+
+

17. 이메일 수정

+
+

이메일 수정 시, 이메일 인증을 거쳐야 합니다.

+
+
+
Request
+
+
+
PUT /api/v1/users/update/email HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw
+Accept: application/json
+Content-Length: 40
+Host: localhost:8080
+
+{
+  "email" : "testToTest@jmhouse.com"
+}
+
+
+
+
+
Response
+
+
+
HTTP/1.1 200 OK
+Vary: Origin
+Vary: Access-Control-Request-Method
+Vary: Access-Control-Request-Headers
+Content-Type: application/json;charset=UTF-8
+Content-Length: 48
+
+{
+  "code" : "SUCCESS",
+  "message" : "성공"
+}
+
+
+
+
+
+

18. 전화번호 수정

+
+

전화번호 수정 시, 전화번호 인증을 거쳐야 합니다.

+
+
+
Request
+
+
+
PUT /api/v1/users/update/phone HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oRTGdnI8xxiSS3xQVpfiG6dXLI8L4YRq_FPXAad_1KfejqyHB_FI-Mzo80mFMtYp62AnAcXvt8PjBxKL-vJWqA
+Accept: application/json
+Content-Length: 33
+Host: localhost:8080
+
+{
+  "phone_num" : "01012344321"
+}
+
+
+ + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

phone_num

String

전화번호

+
+
+
Response
+
+
+
HTTP/1.1 200 OK
+Vary: Origin
+Vary: Access-Control-Request-Method
+Vary: Access-Control-Request-Headers
+Content-Type: application/json;charset=UTF-8
+Content-Length: 48
+
+{
+  "code" : "SUCCESS",
+  "message" : "성공"
+}
+
+
+
+
+
+

19. 비밀번호 확인

+
+
Request
+
+
+
POST /api/v1/users/check/password HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q
+Accept: application/json
+Content-Length: 32
+Host: localhost:8080
+
+{
+  "password" : "abcdefG123!"
+}
+
+
+
+
+
Response
+
+
+
HTTP/1.1 200 OK
+Vary: Origin
+Vary: Access-Control-Request-Method
+Vary: Access-Control-Request-Headers
+Content-Type: application/json;charset=UTF-8
+Content-Length: 65
+
+{
+  "code" : "SUCCESS",
+  "message" : "성공",
+  "data" : true
+}
+
+
+
+
+ + +
+

JWT 예외처리

+
+
+
HTTP/1.1 400 Bad Request
 
 {
   "code" : "J0000",
   "message" : "권한 정보가 없는 토큰입니다."
 }
-
-
-
-
+
+
+
+
HTTP/1.1 400 Bad Request
 
 {
   "code" : "J0001",
   "message" : "잘못된 JWT 서명입니다."
 }
-
-
-
-
+
+
+
+
HTTP/1.1 400 Bad Request
 
 {
   "code" : "J0002",
   "message" : "만료된 JWT 토큰입니다."
 }
-
-
-
-
+
+
+
+
HTTP/1.1 400 Bad Request
 
 {
   "code" : "J0003",
   "message" : "지원되지 않는 JWT 토큰입니다."
 }
-
-
-
-
+
+
+
+
HTTP/1.1 400 Bad Request
 
 {
   "code" : "J0004",
   "message" : "JWT 토큰이 잘못되었습니다."
 }
-
-
-
-
+
+
+
+
HTTP/1.1 400 Bad Request
 
 {
   "code" : "J0005",
   "message" : "토큰 검증 실패"
 }
-
-
-
-
+
+
+
+
HTTP/1.1 400 Bad Request
 
 {
   "code" : "J0006",
   "message" : "JWT 토큰이 잘못되었습니다."
 }
-
-
-
-
-
-

Board API

-
-
-

게시글 작성 시, category 값은 Optional 입니다.

-
-
-

null로 보낼 경우, 서버 측에서 EMPTY 값으로 매핑 시키며 추후 수정 시, EMPTY 값으로 넣어주셔야 합니다.

-
-
-

조회 시, category에 대한 필터링을 원한다면 유의미한 ENUM 값을 넣어주시면 됩니다. 없을 경우, 전체 조회로 간주합니다.

-
- +
+

Board API

+
+
+

게시글 작성 시, category 값은 Optional 입니다.

+
+
+

null로 보낼 경우, 서버 측에서 EMPTY 값으로 매핑 시키며 추후 수정 시, EMPTY 값으로 넣어주셔야 합니다.

+
+
+

조회 시, category에 대한 필터링을 원한다면 유의미한 ENUM 값을 넣어주시면 됩니다. 없을 경우, 전체 조회로 간주합니다.

+
+
+

1. 홍보 게시글 작성하기

+
+
Request
+
+
POST /api/v1/boards HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.NhYoEr5Pa2kGE3T_U1hgmNiU9_FF9408nZzIcRrd6Xh2gpdNnn0GNyKMhMxSOucwOmCSIC3b2tvr282DZX6_uA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Accept: application/json
 Content-Length: 316
 Host: localhost:8080
@@ -2265,14 +2464,14 @@ 
Request
"prefixCategory" : "ADVERTISEMENT", "fixed" : true }
-
-
-
-
-
-

Response

-
-
+
+
+
+
+
+

Response

+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2283,20 +2482,20 @@ 

Response

{ "code" : "SUCCESS", "message" : "성공", - "data" : 4686 -}
-
-
-
-
-

2. 자유 게시글 작성하기

-
-
Request
-
-
+ "data" : 1387 +} +
+
+
+
+

2. 자유 게시글 작성하기

+
+
Request
+
+
POST /api/v1/boards HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GvJfvqroYgdH4mtZ--J2AAnxvq2W3js242RSxnJcILRTkDSIUvYyCcTqk0BTF4MUUYbNPJKRKiYS-cpkXaIGkg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Accept: application/json
 Content-Length: 312
 Host: localhost:8080
@@ -2309,13 +2508,13 @@ 
Request
"prefixCategory" : "DEFAULT", "fixed" : false }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2326,21 +2525,21 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4684 -}
-
-
-
-
-
-

3. 소개 게시글 작성하기

-
-
Request
-
-
+ "data" : 1385 +} +
+
+
+
+
+

3. 소개 게시글 작성하기

+
+
Request
+
+
POST /api/v1/boards HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GvJfvqroYgdH4mtZ--J2AAnxvq2W3js242RSxnJcILRTkDSIUvYyCcTqk0BTF4MUUYbNPJKRKiYS-cpkXaIGkg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MTksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.cUi9Vf_a2MVTGLzyMTM-AD8sJGG8MJisS7QRHrIDyACy7P1CHkvOmfeqUrbYDs2I-PdME2XJRTM2NHpZdc7e2Q
 Accept: application/json
 Content-Length: 317
 Host: localhost:8080
@@ -2353,13 +2552,13 @@ 
Request
"prefixCategory" : "INTRO", "fixed" : false }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2370,40 +2569,40 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4677 -}
-
-
-
-
- - - -
-

category : INTRO 인 경우에만 작성

-
-
Request
-
-
+ "data" : 1378 +} +
+
+
+
+ + + +
+

category : INTRO 인 경우에만 작성

+
+
Request
+
+
GET /api/v1/boards/preview?prefix=INTRO&limit=5 HTTP/1.1
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2415,12 +2614,12 @@ 
Response
"code" : "SUCCESS", "message" : "성공", "data" : [ { - "boardId" : 4674, + "boardId" : 1375, "title" : "짱구는 못말려", "code" : "<body> <div> <h2>짱구는 못말려</h2> </div> <div> <i>철수</i>야 나랑 놀자 </div> </body>", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", "nickName" : "테스트유저1", - "createdAt" : "2023-11-04T06:35:35.181+00:00", + "createdAt" : "2023-12-17T04:18:39.576+00:00", "imageUrl" : "img001", "commentCount" : 1, "category" : "TREND", @@ -2428,40 +2627,40 @@
Response
"fixed" : false } ] }
-
-
-
-
- - -
-

category, search, order(default : RECENT) : 선택값

-
-

prefix 값은 게시판 타입입니다. 소개/자유/홍보

-
-
-

category 값은 말머리 입니다. 없을 경우, 값을 보내지 않으면 말머리에 대한 필터링을 거치지 않고 데이터를 반환합니다.

-
-
-
Request
-
-
+
+
+
+
+ + +
+

category, search, order(default : RECENT) : 선택값

+
+

prefix 값은 게시판 타입입니다. 소개/자유/홍보

+
+
+

category 값은 말머리 입니다. 없을 경우, 값을 보내지 않으면 말머리에 대한 필터링을 거치지 않고 데이터를 반환합니다.

+
+
+
Request
+
+
GET /api/v1/boards?prefix=INTRO HTTP/1.1
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2474,12 +2673,12 @@ 
Response
"message" : "성공", "data" : { "content" : [ { - "boardId" : 4678, + "boardId" : 1379, "title" : "짱구는 못말려", "code" : "<body> <div> <h2>짱구는 못말려</h2> </div> <div> <i>철수</i>야 나랑 놀자 </div> </body>", "oneLineContent" : "짱구는 못말려철수야 나랑 놀자", "nickName" : "테스트유저1", - "createdAt" : "2023-11-04T06:35:35.615+00:00", + "createdAt" : "2023-12-17T04:18:39.986+00:00", "imageUrl" : "img001", "commentCount" : 1, "category" : "TREND", @@ -2501,26 +2700,26 @@
Response
"empty" : false } }
-
-
-
-
-
-

6. 게시글 상세 조회

-
-
Request
-
-
-
GET /api/v1/boards/4679 HTTP/1.1
+            
+
+
+
+
+

6. 게시글 상세 조회

+
+
Request
+
+
+
GET /api/v1/boards/1380 HTTP/1.1
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2532,37 +2731,37 @@ 
Response
"code" : "SUCCESS", "message" : "성공", "data" : { - "boardId" : 4679, + "boardId" : 1380, "title" : "짱구는 못말려", "code" : "<body> <div> <h2>짱구는 못말려</h2> </div> <div> <i>철수</i>야 나랑 놀자 </div> </body>", "nickName" : "테스트유저1", - "createdAt" : "2023-11-04T06:35:35.714+00:00", + "createdAt" : "2023-12-17T04:18:40.083+00:00", "imageUrls" : [ "img001" ], "loveCount" : 0, "category" : "TREND", "prefixCategory" : "INTRO", "commentCount" : 1, "comments" : [ { - "commentId" : 99996, + "commentId" : 33728, "nickName" : "테스트유저1", "content" : "댓글이란다.", - "createdAt" : "2023-11-04T06:35:35.718+00:00" + "createdAt" : "2023-12-17T04:18:40.086+00:00" } ] } }
-
-
-
-
-
-

7. 게시글 수정

-
-
Request
-
-
-
PUT /api/v1/boards/4680 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GvJfvqroYgdH4mtZ--J2AAnxvq2W3js242RSxnJcILRTkDSIUvYyCcTqk0BTF4MUUYbNPJKRKiYS-cpkXaIGkg
+            
+
+
+
+
+

7. 게시글 수정

+
+
Request
+
+
+
PUT /api/v1/boards/1381 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Accept: application/json
 Content-Length: 255
 Host: localhost:8080
@@ -2575,13 +2774,13 @@ 
Request
"prefixCategory" : "INTRO", "fixed" : false }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2592,28 +2791,28 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4680 -}
-
-
-
-
-
-

8. 게시글 삭제

-
-
Request
-
-
-
DELETE /api/v1/boards/4675 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GvJfvqroYgdH4mtZ--J2AAnxvq2W3js242RSxnJcILRTkDSIUvYyCcTqk0BTF4MUUYbNPJKRKiYS-cpkXaIGkg
+  "data" : 1381
+}
+
+
+
+
+
+

8. 게시글 삭제

+
+
Request
+
+
+
DELETE /api/v1/boards/1376 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MTksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.cUi9Vf_a2MVTGLzyMTM-AD8sJGG8MJisS7QRHrIDyACy7P1CHkvOmfeqUrbYDs2I-PdME2XJRTM2NHpZdc7e2Q
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2625,26 +2824,26 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-

9. 말머리 조회

-
-
Request
-
-
+
+
+
+
+
+

9. 말머리 조회

+
+
Request
+
+
GET /api/v1/boards/category?name=DEFAULT HTTP/1.1
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -2666,53 +2865,55 @@ 
Response
"name" : "SHARING" } ] }
-
-
-
-
- +
+

10. 자신이 작성한 게시글 목록 조회

+
+
Request
+
+
GET /api/v1/boards/my?page=0 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.bEWjQX-cPSqVlZBv6eamGKfcZ0cr5WQe09am-Cn2yfGWSeUTnFoeYc5_m6wA7dgZ0YV2V4_ssW7QqIpazv2x7Q
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MTksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.cUi9Vf_a2MVTGLzyMTM-AD8sJGG8MJisS7QRHrIDyACy7P1CHkvOmfeqUrbYDs2I-PdME2XJRTM2NHpZdc7e2Q
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 919
+Content-Length: 967
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "boardId" : 4672,
+      "boardId" : 1374,
       "title" : "짱구는 못말려",
       "oneLineContent" : "짱구는 못말려철수야 나랑 놀자",
-      "createdAt" : "2023-11-04T06:35:34.661+00:00",
+      "createdAt" : "2023-12-17T04:18:39.160+00:00",
       "imageUrl" : "img001",
       "category" : "TREND",
-      "prefixCategory" : "INTRO"
+      "prefixCategory" : "INTRO",
+      "commentCnt" : 0
     }, {
-      "boardId" : 4673,
+      "boardId" : 1373,
       "title" : "짱구는 못말려",
       "oneLineContent" : "짱구는 못말려철수야 나랑 놀자",
-      "createdAt" : "2023-11-04T06:35:34.883+00:00",
+      "createdAt" : "2023-12-17T04:18:38.917+00:00",
       "imageUrl" : "img001",
       "category" : "TREND",
-      "prefixCategory" : "INTRO"
+      "prefixCategory" : "INTRO",
+      "commentCnt" : 1
     } ],
     "size" : 10,
     "totalElements" : 2,
@@ -2729,56 +2930,55 @@ 
Response
"empty" : false } }
-
-
-
-
- +
+

11. 자신이 작성한 댓글의 게시글 목록 조회

+
+
Request
+
+
GET /api/v1/boards/my/comment?page=0 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.NhYoEr5Pa2kGE3T_U1hgmNiU9_FF9408nZzIcRrd6Xh2gpdNnn0GNyKMhMxSOucwOmCSIC3b2tvr282DZX6_uA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 919
+Content-Length: 776
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "boardId" : 4687,
+      "commentId" : 33760,
+      "boardId" : 1389,
+      "title" : "짱구는 못말려",
+      "commentContent" : "댓글이란다."
+    }, {
+      "commentId" : 33759,
+      "boardId" : 1389,
       "title" : "짱구는 못말려",
-      "oneLineContent" : "짱구는 못말려철수야 나랑 놀자",
-      "createdAt" : "2023-11-04T06:35:36.124+00:00",
-      "imageUrl" : "img001",
-      "category" : "TREND",
-      "prefixCategory" : "INTRO"
+      "commentContent" : "댓글이란다."
     }, {
-      "boardId" : 4688,
+      "commentId" : 33758,
+      "boardId" : 1388,
       "title" : "짱구는 못말려",
-      "oneLineContent" : "짱구는 못말려철수야 나랑 놀자",
-      "createdAt" : "2023-11-04T06:35:36.142+00:00",
-      "imageUrl" : "img001",
-      "category" : "TREND",
-      "prefixCategory" : "INTRO"
+      "commentContent" : "댓글이란다."
     } ],
     "size" : 10,
-    "totalElements" : 2,
+    "totalElements" : 3,
     "last" : true,
     "totalPages" : 1,
     "first" : true,
@@ -2788,57 +2988,59 @@ 
Response
"unsorted" : true, "sorted" : false }, - "numberOfElements" : 2, + "numberOfElements" : 3, "empty" : false } }
-
-
-
-
- +
+

12. 자신이 좋아요한 게시글 목록 조회

+
+
Request
+
+
GET /api/v1/boards/my/love?page=0 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GvJfvqroYgdH4mtZ--J2AAnxvq2W3js242RSxnJcILRTkDSIUvYyCcTqk0BTF4MUUYbNPJKRKiYS-cpkXaIGkg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ZuMFHTTspFVatSst53X3vn4fzlhtwvgEtpzzyGPRdN2-SEmbQ48gYFatmEMRi74HcRPLnFM_UBsLSvn85KpA-w
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 919
+Content-Length: 967
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "boardId" : 4681,
+      "boardId" : 1382,
       "title" : "짱구는 못말려",
       "oneLineContent" : "짱구는 못말려철수야 나랑 놀자",
-      "createdAt" : "2023-11-04T06:35:35.877+00:00",
+      "createdAt" : "2023-12-17T04:18:40.253+00:00",
       "imageUrl" : "img001",
       "category" : "TREND",
-      "prefixCategory" : "INTRO"
+      "prefixCategory" : "INTRO",
+      "commentCnt" : 1
     }, {
-      "boardId" : 4682,
+      "boardId" : 1383,
       "title" : "짱구는 못말려",
       "oneLineContent" : "짱구는 못말려철수야 나랑 놀자",
-      "createdAt" : "2023-11-04T06:35:35.896+00:00",
+      "createdAt" : "2023-12-17T04:18:40.274+00:00",
       "imageUrl" : "img001",
       "category" : "TREND",
-      "prefixCategory" : "INTRO"
+      "prefixCategory" : "INTRO",
+      "commentCnt" : 0
     } ],
     "size" : 10,
     "totalElements" : 2,
@@ -2855,148 +3057,148 @@ 
Response
"empty" : false } }
-
-
-
-
-
-
-
-

Comment API

-
-
-

1. 게시글에 대한 댓글 리스트 조회

-
-
Request
-
-
-
GET /api/v1/comments/4727 HTTP/1.1
+            
+
+
+
+
+
+
+

Comment API

+
+
+

1. 게시글에 대한 댓글 리스트 조회

+
+
Request
+
+
+
GET /api/v1/comments/1428 HTTP/1.1
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 219
+Content-Length: 218
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : [ {
-    "commentId" : 100181,
+    "commentId" : 33913,
     "nickName" : "테스트유저1",
     "content" : "댓글이란다.",
-    "createdAt" : "2023-11-04T06:35:37.743+00:00"
+    "createdAt" : "2023-12-17T04:18:44.110+00:00"
   } ]
 }
-
-
-
-
-
-

2. 댓글 작성

-
-
Request
-
-
+
+
+
+
+
+

2. 댓글 작성

+
+
Request
+
+
POST /api/v1/comments HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GUTStTzwfcX0tyDcZP0FVRnW8V2luOE8Q6O2YZxJkflXzy-PS9WfbnncmueoGBzYqac6vZi9oIXR-mJVa-q1NQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.w9x8Bpvc768-FqeyMcx9twq8FVkBcnPD1LoIzOODJi9zuFvmS-qyxLowGQmKD4-y0NhoAEbh2TEBYt0mkbGSoA
 Accept: application/json
 Content-Length: 65
 Host: localhost:8080
 
 {
-  "boardId" : 4729,
+  "boardId" : 1430,
   "content" : "짱구야, 공부 하자."
 }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 100196
-}
-
-
-
-
-
-

3. 댓글 수정

-
-
Request
-
-
-
PUT /api/v1/comments/100187 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GUTStTzwfcX0tyDcZP0FVRnW8V2luOE8Q6O2YZxJkflXzy-PS9WfbnncmueoGBzYqac6vZi9oIXR-mJVa-q1NQ
+  "data" : 33928
+}
+
+
+
+
+
+

3. 댓글 수정

+
+
Request
+
+
+
PUT /api/v1/comments/33919 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.w9x8Bpvc768-FqeyMcx9twq8FVkBcnPD1LoIzOODJi9zuFvmS-qyxLowGQmKD4-y0NhoAEbh2TEBYt0mkbGSoA
 Accept: application/json
 Content-Length: 65
 Host: localhost:8080
 
 {
-  "boardId" : 4728,
+  "boardId" : 1429,
   "content" : "짱구야, 공부 하자."
 }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 100187
-}
-
-
-
-
-
-

4. 댓글 삭제

-
-
Request
-
-
-
DELETE /api/v1/comments/100202 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.GUTStTzwfcX0tyDcZP0FVRnW8V2luOE8Q6O2YZxJkflXzy-PS9WfbnncmueoGBzYqac6vZi9oIXR-mJVa-q1NQ
+  "data" : 33919
+}
+
+
+
+
+
+

4. 댓글 삭제

+
+
Request
+
+
+
DELETE /api/v1/comments/33934 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.w9x8Bpvc768-FqeyMcx9twq8FVkBcnPD1LoIzOODJi9zuFvmS-qyxLowGQmKD4-y0NhoAEbh2TEBYt0mkbGSoA
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -3008,32 +3210,32 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-
-
-

Love API

-
-
-

1. 게시글 좋아요

-
-
Request
-
-
-
PUT /api/v1/loves/4736 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.IGrrpETSTzbDZvy8XdZTDn58LfFXbj4RPfCM9K739nfRsSfSHu6dDKbI9KGWUQ4km6KkoZ9hHtBKd1iEZHu3CA
+            
+
+
+
+
+
+
+

Love API

+
+
+

1. 게시글 좋아요

+
+
Request
+
+
+
PUT /api/v1/loves/1437 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.Caf2_KrUGiVHkdj38kHugAUYkhgGqCb2QNhN_RjlR5K4OrSjySN5PQtoawkMYmbDQuWk2ozFHs-WHQQpGP5ZlQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -3044,29 +3246,29 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4736 -}
-
-
-
-
-
-

2. 게시글 좋아요 취소

-
-
Request
-
-
-
DELETE /api/v1/loves/4739 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.IGrrpETSTzbDZvy8XdZTDn58LfFXbj4RPfCM9K739nfRsSfSHu6dDKbI9KGWUQ4km6KkoZ9hHtBKd1iEZHu3CA
+  "data" : 1437
+}
+
+
+
+
+
+

2. 게시글 좋아요 취소

+
+
Request
+
+
+
DELETE /api/v1/loves/1440 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.Caf2_KrUGiVHkdj38kHugAUYkhgGqCb2QNhN_RjlR5K4OrSjySN5PQtoawkMYmbDQuWk2ozFHs-WHQQpGP5ZlQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -3078,27 +3280,27 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-

3. 유저의 게시글 좋아요 여부 확인

-
-
Request
-
-
-
GET /api/v1/loves/4740 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.IGrrpETSTzbDZvy8XdZTDn58LfFXbj4RPfCM9K739nfRsSfSHu6dDKbI9KGWUQ4km6KkoZ9hHtBKd1iEZHu3CA
+            
+
+
+
+
+

3. 유저의 게시글 좋아요 여부 확인

+
+
Request
+
+
+
GET /api/v1/loves/1441 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.Caf2_KrUGiVHkdj38kHugAUYkhgGqCb2QNhN_RjlR5K4OrSjySN5PQtoawkMYmbDQuWk2ozFHs-WHQQpGP5ZlQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -3111,112 +3313,113 @@ 
Response
"message" : "성공", "data" : false }
-
-
-
-
-
-
-
-

House API

-
-
-

1. 빈집 게시글 작성하기

-
-

빈집 게시글 작성 시, tmpYn 플래그를 통해 임시저장 여부를 판단합니다.

-
-
-

RecommendedTag 값에는 아래 표를 참고해서 Enum 명을 보내주셔야 합니다.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enum 명한글 명

WANT_TO_INTERIOR_FOR_THE_FIRST_TIME

처음부터 인테리어 하고 싶어요.

WANT_TO_READY_HOUSE

어느 정도 준비된 집이 좋아요.

HAVE_CHILDREN

아이와 함께 살아요.

WANT_TO_LOOK_A_GOOD_VIEW

경치가 좋은 집을 원해요.

WANT_TO_FARM

농사 짓기를 원해요.

-
-

(23.09.29 업데이트) ‼️게시글 임시저장/저장에 관해 수정된 사항들입니다. ‼️️

-
-
-
    -
  1. -

    임시저장인 경우

    -
  2. -
-
-
-

유효성 검사를 진행하지 않습니다. null 혹은 blank로 보내는 데이터에 대해 서버 측에서 "" 로 디비에 저장 후, 실제 저장할 때 값을 update 합니다.

-
-
-
    -
  1. -

    저장인 경우

    -
  2. -
-
-
-

유효성 검사를 진행합니다. 만약 필수값이 누락되면, 400 에러코드와 함께 어떤 필드가 누락된 것인지 안내 메세지를 반환합니다.

-
-
-

작성자가 공인중개사/관리자 인 경우, 바로 조회 가능한 상태로 등록합니다.

-
-
-

일반 사용자의 경우, 관리자의 승인이 필요하기에 바로 조회는 안됩니다.

-
-
-

( 여기서 바로 조회는 /{houseId} 로 요청을 보내는 것을 의미합니다. )

-
-
-

게시글 데이터 중, 추천 태그는 필수값이 아닌 것으로 변경하였습니다. null 혹은 [] 빈 리스트로 보내도 상관없습니다.

-
-
-
Request
-
-
+
+
+
+
+
+
+
+

House API

+
+
+

1. 빈집 게시글 작성하기

+
+

빈집 게시글 작성 시, tmpYn 플래그를 통해 임시저장 여부를 판단합니다.

+
+
+

RecommendedTag 값에는 아래 표를 참고해서 Enum 명을 보내주셔야 합니다.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum 명한글 명

WANT_TO_INTERIOR_FOR_THE_FIRST_TIME

처음부터 인테리어 하고 싶어요.

WANT_TO_READY_HOUSE

어느 정도 준비된 집이 좋아요.

HAVE_CHILDREN

아이와 함께 살아요.

WANT_TO_LOOK_A_GOOD_VIEW

경치가 좋은 집을 원해요.

WANT_TO_FARM

농사 짓기를 원해요.

+
+

(23.09.29 업데이트) ‼️게시글 임시저장/저장에 관해 수정된 사항들입니다. ‼️️

+
+
+
    +
  1. +

    임시저장인 경우

    +
  2. +
+
+
+

유효성 검사를 진행하지 않습니다. null 혹은 blank로 보내는 데이터에 대해 서버 측에서 "" 로 디비에 저장 후, 실제 저장할 때 값을 update 합니다.

+
+
+
    +
  1. +

    저장인 경우

    +
  2. +
+
+
+

유효성 검사를 진행합니다. 만약 필수값이 누락되면, 400 에러코드와 함께 어떤 필드가 누락된 것인지 안내 메세지를 반환합니다.

+
+
+

작성자가 공인중개사/관리자 인 경우, 바로 조회 가능한 상태로 등록합니다.

+
+
+

일반 사용자의 경우, 관리자의 승인이 필요하기에 바로 조회는 안됩니다.

+
+
+

( 여기서 바로 조회는 /{houseId} 로 요청을 보내는 것을 의미합니다. )

+
+
+

게시글 데이터 중, 추천 태그는 필수값이 아닌 것으로 변경하였습니다. null 혹은 [] 빈 리스트로 보내도 상관없습니다.

+
+
+
Request
+
+
POST /api/v1/houses HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.htuEhrOK6dDLkuviXjzHo7k8OSbF29drKBM4M7UsGeicMKgl9-HnBj8rqlabJjtoFW9Tc56ejXZHKJKCTdJPaw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oBgNrU_-oBJh1LQ9X3c3Fcl4iIe80sBsBdrAjH9h4dPwgsyzP8-lj_N__bkVNbzCXnK_M12YMV2XD6G3M-12-w
 Accept: application/json
-Content-Length: 731
+Content-Length: 753
 Host: localhost:8080
 
 {
   "rentalType" : "SALE",
   "city" : "서울시 서대문구 남가좌동 거북골로 34",
+  "detail" : "1동 103호",
   "zipCode" : "12345",
   "size" : "120909000",
   "purpose" : "주거용 ( 방3, 화장실 2 )",
   "floorNum" : 2,
   "contact" : "070-1234-5678",
-  "createdDate" : "1990-09-09",
+  "createdDate" : "1990",
   "price" : 12000,
   "monthlyPrice" : 0.0,
   "agentName" : "행복부동산",
@@ -3226,187 +3429,193 @@ 
Request
"tmpYn" : false, "recommendedTag" : [ "WANT_TO_INTERIOR_FOR_THE_FIRST_TIME" ] }
-
-
-
-
Request fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

rentalType

String

매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다.

city

String

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

zipCode

String

우편번호 ( string 형식입니다. )

size

String

집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다.

purpose

String

매물 목적/용도 예: 거주 ( 방3, 화장실 2 )

floorNum

Number

매물이 위치한 층수 ( 단독주택인 경우, null 로 전달 시 서버에서 0으로 세팅 )

contact

String

연락 가능한 연락처를 01000000000 형식으로 작성

createdDate

String

준공연도는 숫자만 입력해주세요. YYYY 형태로 서버에서 관리합니다.

price

Number

매물가격은 만원 단위로 산정해서 작성해주세요. ( 월세의 경우, 보증금을 작성해주세요. )

monthlyPrice

Number

월세 가격은 만원 단위로 산정해서 소수점 포함으로 작성해주세요. Double 형식으로 관리합니다.

agentName

String

공인중개사명을 작성해주세요. ( 없는 경우, 서버에서 null로 관리합니다. )

title

String

빈집 게시글의 제목을 입력해주세요.

code

String

빈집 게시글의 내용을 입력해주세요.

imageUrls

Array

이미지 주소를 string 배열 형식으로 입력해주세요.

tmpYn

Boolean

임시저장 여부를 입력해주세요. (임시저장 : true, 저장: false)

recommendedTag

Array

추천태그를 입력해주세요.( 없는 경우, 빈 문자열 리스트로 보내주세요. )

-
-
-
-
Response
-
-
+
+
+
+
Request fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

rentalType

String

매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다.

city

String

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

detail

String

상세 주소 예: 1동 1호

zipCode

String

우편번호 ( string 형식입니다. )

size

String

집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다.

purpose

String

매물 목적/용도 예: 거주 ( 방3, 화장실 2 )

floorNum

Number

매물이 위치한 층수 ( 단독주택인 경우, null 로 전달 시 서버에서 0으로 세팅 )

contact

String

연락 가능한 연락처를 01000000000 형식으로 작성

createdDate

String

준공연도는 숫자만 입력해주세요. YYYY 형태로 서버에서 관리합니다.

price

Number

매물가격은 만원 단위로 산정해서 작성해주세요. ( 월세의 경우, 보증금을 작성해주세요. )

monthlyPrice

Number

월세 가격은 만원 단위로 산정해서 소수점 포함으로 작성해주세요. Double 형식으로 관리합니다.

agentName

String

공인중개사명을 작성해주세요. ( 없는 경우, 서버에서 null로 관리합니다. )

title

String

빈집 게시글의 제목을 입력해주세요.

code

String

빈집 게시글의 내용을 입력해주세요.

imageUrls

Array

이미지 주소를 string 배열 형식으로 입력해주세요.

tmpYn

Boolean

임시저장 여부를 입력해주세요. (임시저장 : true, 저장: false)

recommendedTag

Array

추천태그를 입력해주세요.( 없는 경우, 빈 문자열 리스트로 보내주세요. )

+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 66
+Content-Length: 65
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 12409
-}
-
-
-
-
-
Response fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data

Number

빈집 게시글 아이디

-
-
-
-

1-2. 빈집 게시글 유효성 검사

-
-

빈집 게시글 작성 시, 게시글의 내용이 10,000자를 넘기는 지 확인하는 유효성 검사에 대한 내용입니다.

-
-
-
Request
-
-
+ "data" : 3833 +} +
+
+
+
+
Response fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data

Number

빈집 게시글 아이디

+
+
+
+

1-2. 빈집 게시글 유효성 검사

+
+

빈집 게시글 작성 시, 게시글의 내용이 10,000자를 넘기는 지 확인하는 유효성 검사에 대한 내용입니다.

+
+
+
Request
+
+
POST /api/v1/houses HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.QEn3RwnIX9m2n7QUavChobjOFedNQComLyxLAE9e5_1W4DVOJlQizgKdxBz7andcT6jNMMMRY4WaQV78LdgZ3w
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.KTTH1D4eLliezB6kN-eZlrWou1P-Z-X4_OHMt8O1b50fX56vsrWT0J6Yiz45Zdx57R5PULoPiwQAAUbqLMCP5g
 Accept: application/json
-Content-Length: 26025
+Content-Length: 26047
 Host: localhost:8080
 
 {
   "rentalType" : "SALE",
   "city" : "서울시 서대문구 남가좌동 거북골로 34",
+  "detail" : "1동 103호",
   "zipCode" : "12345",
   "size" : "120909000",
   "purpose" : "주거용 ( 방3, 화장실 2 )",
   "floorNum" : 2,
   "contact" : "070-1234-5678",
-  "createdDate" : "1990-09-09",
+  "createdDate" : "1990",
   "price" : 12000,
   "monthlyPrice" : 0.0,
   "agentName" : "행복부동산",
@@ -3416,112 +3625,117 @@ 
Request
"tmpYn" : false, "recommendedTag" : [ ] }
-
-
-
-
-
Request Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

rentalType

String

매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다.

city

String

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

zipCode

String

우편번호 ( string 형식입니다. )

size

String

집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다.

purpose

String

매물 목적/용도 예: 거주 ( 방3, 화장실 2 )

floorNum

Number

매물이 위치한 층수 ( 단독주택인 경우, null 로 전달 시 서버에서 0으로 세팅 )

contact

String

연락 가능한 연락처를 01000000000 형식으로 작성

createdDate

String

준공연도는 숫자만 입력해주세요. YYYY 형태로 서버에서 관리합니다.

price

Number

매물가격은 만원 단위로 산정해서 작성해주세요. ( 월세의 경우, 보증금을 작성해주세요. )

monthlyPrice

Number

월세 가격은 만원 단위로 산정해서 소수점 포함으로 작성해주세요. Double 형식으로 관리합니다.

agentName

String

공인중개사명을 작성해주세요. ( 없는 경우, 서버에서 null로 관리합니다. )

title

String

빈집 게시글의 제목을 입력해주세요.

code

String

빈집 게시글의 내용을 입력해주세요.

imageUrls

Array

이미지 주소를 string 배열 형식으로 입력해주세요.

tmpYn

Boolean

임시저장 여부를 입력해주세요. (임시저장 : true, 저장: false)

recommendedTag

Array

추천태그를 입력해주세요.( 없는 경우, 빈 문자열 리스트로 보내주세요. )

-
-
-
Response
-
-
+
+
+
+
+
Request Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

rentalType

String

매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다.

city

String

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

detail

String

상세 주소 예: 1동 1호

zipCode

String

우편번호 ( string 형식입니다. )

size

String

집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다.

purpose

String

매물 목적/용도 예: 거주 ( 방3, 화장실 2 )

floorNum

Number

매물이 위치한 층수 ( 단독주택인 경우, null 로 전달 시 서버에서 0으로 세팅 )

contact

String

연락 가능한 연락처를 01000000000 형식으로 작성

createdDate

String

준공연도는 숫자만 입력해주세요. YYYY 형태로 서버에서 관리합니다.

price

Number

매물가격은 만원 단위로 산정해서 작성해주세요. ( 월세의 경우, 보증금을 작성해주세요. )

monthlyPrice

Number

월세 가격은 만원 단위로 산정해서 소수점 포함으로 작성해주세요. Double 형식으로 관리합니다.

agentName

String

공인중개사명을 작성해주세요. ( 없는 경우, 서버에서 null로 관리합니다. )

title

String

빈집 게시글의 제목을 입력해주세요.

code

String

빈집 게시글의 내용을 입력해주세요.

imageUrls

Array

이미지 주소를 string 배열 형식으로 입력해주세요.

tmpYn

Boolean

임시저장 여부를 입력해주세요. (임시저장 : true, 저장: false)

recommendedTag

Array

추천태그를 입력해주세요.( 없는 경우, 빈 문자열 리스트로 보내주세요. )

+
+
+
Response
+
+
HTTP/1.1 400 Bad Request
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -3533,41 +3747,42 @@ 
Response
"code" : "H0000", "message" : "빈집 게시글의 내용이 10000자를 넘었습니다." }
-
-
-
-
-
-

2. 빈집 게시글 수정하기

-
-

임시저장 상태 혹은 저장 상태의 게시글을 수정할 수 있습니다.

-
-
-

임시저장에서 저장으로 상태 변경을 원하는 경우, tmpYn 값을 false로 변경해주셔야 합니다.

-
-
-

게시글 수정 시, 작성자 본인만 수정 가능합니다.

-
-
-
Request
-
-
-
PUT /api/v1/houses/12386 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YvqRu7nstwwwn_0cEtBoifvakK0-88X9GK-865tJccjrHtuOBbteXbL2TDJiTrqretYmtzYEb7Twhyrc8Jsdxg
+            
+
+
+
+
+

2. 빈집 게시글 수정하기

+
+

임시저장 상태 혹은 저장 상태의 게시글을 수정할 수 있습니다.

+
+
+

임시저장에서 저장으로 상태 변경을 원하는 경우, tmpYn 값을 false로 변경해주셔야 합니다.

+
+
+

게시글 수정 시, 작성자 본인만 수정 가능합니다.

+
+
+
Request
+
+
+
PUT /api/v1/houses/3810 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.1McaufFU-n1xvuc_nXBBGfij9hkQhP7oZV8EQ6g2jX9nwwteXL7IUXzLZSQJ70x8BdY9hTWnaeMlmPSAzwmaDg
 Accept: application/json
-Content-Length: 716
+Content-Length: 738
 Host: localhost:8080
 
 {
   "rentalType" : "JEONSE",
   "city" : "서울시 서대문구 남가좌동 거북골로 90",
+  "detail" : "1동 103호",
   "zipCode" : "12345",
   "size" : "120909000",
   "purpose" : "게스트하우스 ( 방3, 화장실 2 )",
   "floorNum" : 2,
   "contact" : "070-1234-5678",
-  "createdDate" : "1990-09-09",
+  "createdDate" : "1990",
   "price" : 12000,
   "monthlyPrice" : 0.0,
   "agentName" : "부자부동산",
@@ -3577,149 +3792,154 @@ 
Request
"tmpYn" : false, "recommendedTag" : [ ] }
-
-
-
-
-
Request Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

rentalType

String

매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다.

city

String

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

zipCode

String

우편번호 ( string 형식입니다. )

size

String

집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다.

purpose

String

매물 목적/용도 예: 거주 ( 방3, 화장실 2 )

floorNum

Number

매물이 위치한 층수 ( 단독주택인 경우, null 로 전달 시 서버에서 0으로 세팅 )

contact

String

연락 가능한 연락처를 01000000000 형식으로 작성

createdDate

String

준공연도는 숫자만 입력해주세요. YYYY 형태로 서버에서 관리합니다.

price

Number

매물가격은 만원 단위로 산정해서 작성해주세요. ( 월세의 경우, 보증금을 작성해주세요. )

monthlyPrice

Number

월세 가격은 만원 단위로 산정해서 소수점 포함으로 작성해주세요. Double 형식으로 관리합니다.

agentName

String

공인중개사명을 작성해주세요. ( 없는 경우, 서버에서 null로 관리합니다. )

title

String

빈집 게시글의 제목을 입력해주세요.

code

String

빈집 게시글의 내용을 입력해주세요.

imageUrls

Array

이미지 주소를 string 배열 형식으로 입력해주세요.

tmpYn

Boolean

임시저장 여부를 입력해주세요. (임시저장 : true, 저장: false)

recommendedTag

Array

추천태그를 입력해주세요.( 없는 경우, 빈 문자열 리스트로 보내주세요. )

-
-
-
Response
-
-
+
+
+
+
+
Request Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

rentalType

String

매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다.

city

String

주소는 '시도’로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34

detail

String

상세 주소 예: 1동 1호

zipCode

String

우편번호 ( string 형식입니다. )

size

String

집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다.

purpose

String

매물 목적/용도 예: 거주 ( 방3, 화장실 2 )

floorNum

Number

매물이 위치한 층수 ( 단독주택인 경우, null 로 전달 시 서버에서 0으로 세팅 )

contact

String

연락 가능한 연락처를 01000000000 형식으로 작성

createdDate

String

준공연도는 숫자만 입력해주세요. YYYY 형태로 서버에서 관리합니다.

price

Number

매물가격은 만원 단위로 산정해서 작성해주세요. ( 월세의 경우, 보증금을 작성해주세요. )

monthlyPrice

Number

월세 가격은 만원 단위로 산정해서 소수점 포함으로 작성해주세요. Double 형식으로 관리합니다.

agentName

String

공인중개사명을 작성해주세요. ( 없는 경우, 서버에서 null로 관리합니다. )

title

String

빈집 게시글의 제목을 입력해주세요.

code

String

빈집 게시글의 내용을 입력해주세요.

imageUrls

Array

이미지 주소를 string 배열 형식으로 입력해주세요.

tmpYn

Boolean

임시저장 여부를 입력해주세요. (임시저장 : true, 저장: false)

recommendedTag

Array

추천태그를 입력해주세요.( 없는 경우, 빈 문자열 리스트로 보내주세요. )

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 66
+Content-Length: 65
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 12386
-}
-
-
-
-
-
-

3. 빈집 게시글 삭제하기

-
-

삭제 시, 빈집 게시글 아이디를 path-variable로 넘겨주세요.

-
-
-
Request
-
-
-
DELETE /api/v1/houses/12385 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YvqRu7nstwwwn_0cEtBoifvakK0-88X9GK-865tJccjrHtuOBbteXbL2TDJiTrqretYmtzYEb7Twhyrc8Jsdxg
+  "data" : 3810
+}
+
+
+
+
+
+

3. 빈집 게시글 삭제하기

+
+

삭제 시, 빈집 게시글 아이디를 path-variable로 넘겨주세요.

+
+
+
Request
+
+
+
DELETE /api/v1/houses/3809 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YHIu6aU14PmZpNG13y-8wvYOQzL4-4vSEbPykEowo6aNGnZMW5cGvbqVEJ7zHmCLtf8yEgi9zzOurXqM48z5BQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -3731,199 +3951,199 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-

4. 빈집 게시글 목록 조회

-
-

빈집 게시글 목록 조회 시, param에 따라 필터링을 거칩니다. -내부적으로 신고여부, 삭제여부, 일반유저의 게시글 승인여부, 임시저장여부 에 대한 필터링을 거칩니다.

-
-
-

임시저장 상태의 게시글을 조회하고 싶은 경우, 8번 API를 호출해주세요.

-
-
-

한 페이지에 기본 8개를 제공합니다. 개수를 조절하고 싶은 경우 요청 쿼리에 size 를 포함해주세요.

-
-
-

게시글 키워드 검색에 대상은 게시글의 제목과 작성자의 닉네임으로 제한합니다. ( 기능 명세서 참고 )

-
-
-

추가 ( 2023.08.23 )

-
-
-

요청 쿼리 Param에서 모든 값은 선택값입니다. 즉, /api/v1/houses 로 보내도 응답이 돌아갑니다.

-
-
-

dealState는 판매 여부를 의미하며, 판매여부에 상관없이 조회하고 싶다면 null 혹은 blank로 보내면 됩니다. 서버 측에서 enum으로 관리되기에 하단 표에 명시한 고유 값으로 보내야 검색이 수행됩니다.

-
-
-
Request
-
-
+
+
+
+
+
+

4. 빈집 게시글 목록 조회

+
+

빈집 게시글 목록 조회 시, param에 따라 필터링을 거칩니다. + 내부적으로 신고여부, 삭제여부, 일반유저의 게시글 승인여부, 임시저장여부 에 대한 필터링을 거칩니다.

+
+
+

임시저장 상태의 게시글을 조회하고 싶은 경우, 8번 API를 호출해주세요.

+
+
+

한 페이지에 기본 8개를 제공합니다. 개수를 조절하고 싶은 경우 요청 쿼리에 size 를 포함해주세요.

+
+
+

게시글 키워드 검색에 대상은 게시글의 제목과 작성자의 닉네임으로 제한합니다. ( 기능 명세서 참고 )

+
+
+

추가 ( 2023.08.23 )

+
+
+

요청 쿼리 Param에서 모든 값은 선택값입니다. 즉, /api/v1/houses 로 보내도 응답이 돌아갑니다.

+
+
+

dealState는 판매 여부를 의미하며, 판매여부에 상관없이 조회하고 싶다면 null 혹은 blank로 보내면 됩니다. 서버 측에서 enum으로 관리되기에 하단 표에 명시한 고유 값으로 보내야 검색이 수행됩니다.

+
+
+
Request
+
+
GET /api/v1/houses?rentalType=SALE&city=%EC%84%9C%EC%9A%B8&search=&recommendedTag=&dealState=&page=0 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
 Host: localhost:8080
-
-
-
-
Request Fields
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescription

rentalType

매매 타입

city

지역 필터링

recommendedTag

추천 태그명

search

검색어

dealState

판매 여부 ( 진행중 : ONGOING | 완료 : COMPLETED )

page

0부터 시작

-
-
-
Response
-
-
+
+
+
+
Request Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription

rentalType

매매 타입

city

지역 필터링

recommendedTag

추천 태그명

search

검색어

dealState

판매 여부 ( 진행중 : ONGOING | 완료 : COMPLETED )

page

0부터 시작

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 4236
+Content-Length: 4228
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "houseId" : 12478,
+      "houseId" : 3910,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.503+00:00",
+      "createdAt" : "2023-12-17T04:18:50.598+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12480,
+      "houseId" : 3908,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.507+00:00",
+      "createdAt" : "2023-12-17T04:18:50.594+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12482,
+      "houseId" : 3906,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.511+00:00",
+      "createdAt" : "2023-12-17T04:18:50.586+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12484,
+      "houseId" : 3904,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.514+00:00",
+      "createdAt" : "2023-12-17T04:18:50.583+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12486,
+      "houseId" : 3902,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.517+00:00",
+      "createdAt" : "2023-12-17T04:18:50.579+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12466,
+      "houseId" : 3900,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.478+00:00",
+      "createdAt" : "2023-12-17T04:18:50.574+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12468,
+      "houseId" : 3898,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.482+00:00",
+      "createdAt" : "2023-12-17T04:18:50.570+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12470,
+      "houseId" : 3896,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.486+00:00",
+      "createdAt" : "2023-12-17T04:18:50.565+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
@@ -3945,184 +4165,185 @@ 
Response
"empty" : false } }
-
-
-
-
-
Response Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

content[].houseId

Number

빈집 게시글 ID

content[].rentalType

String

매매 타입

content[].city

String

매물 위치

content[].price

Number

매물 가격

content[].monthlyPrice

Number

월세 가격

content[].nickName

String

게시글 작성자

content[].createdAt

String

게시글 작성날짜

content[].isCompleted

Boolean

거래 완료 여부

content[].imageUrl

String

썸네일 이미지 주소

content[].title

String

게시글 제목

content[].recommendedTag

Array

추천 태그명 리스트

content[].recommendedTagName

Array

추천 태그명 한글 리스트

last

Boolean

totalPages

Number

totalElements

Number

size

Number

number

Number

sort.empty

Boolean

sort.unsorted

Boolean

sort.sorted

Boolean

first

Boolean

numberOfElements

Number

empty

Boolean

-
-
-
-
-

5. 빈집 게시글 단일 조회 - 비로그인 상태

-
-

해당 API는 비로그인 상태일 때, 빈집 게시글 상세 조회 API 입니다.

-
-
-
Request
-
-
-
GET /api/v1/houses/12488 HTTP/1.1
+              
+
+
+
+
Response Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

content[].houseId

Number

빈집 게시글 ID

content[].rentalType

String

매매 타입

content[].city

String

매물 위치

content[].price

Number

매물 가격

content[].monthlyPrice

Number

월세 가격

content[].nickName

String

게시글 작성자

content[].createdAt

String

게시글 작성날짜

content[].isCompleted

Boolean

거래 완료 여부

content[].imageUrl

String

썸네일 이미지 주소

content[].title

String

게시글 제목

content[].recommendedTag

Array

추천 태그명 리스트

content[].recommendedTagName

Array

추천 태그명 한글 리스트

last

Boolean

totalPages

Number

totalElements

Number

size

Number

number

Number

sort.empty

Boolean

sort.unsorted

Boolean

sort.sorted

Boolean

first

Boolean

numberOfElements

Number

empty

Boolean

+
+
+
+
+

5. 빈집 게시글 단일 조회 - 비로그인 상태

+
+

해당 API는 비로그인 상태일 때, 빈집 게시글 상세 조회 API 입니다.

+
+
+
Request
+
+
+
GET /api/v1/houses/3912 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
 Host: localhost:8080
-
-
-
-
Response
-
-
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 987
+Content-Length: 1010
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
-    "houseId" : 12488,
+    "houseId" : 3912,
     "rentalType" : "SALE",
     "city" : "서울시 서대문구 남가좌동 거북골로 34",
+    "detail" : "1동 103호",
     "zipCode" : "12345",
     "size" : "120909000",
     "purpose" : "주거용 ( 방3, 화장실 2 )",
     "floorNum" : 2,
     "contact" : "070-1234-5678",
-    "createdDate" : "1990-09-09",
+    "createdDate" : "1990",
     "price" : 12000,
     "monthlyPrice" : 0.0,
     "agentName" : "행복부동산",
@@ -4131,194 +4352,200 @@ 
Response
"imageUrls" : [ "img-001", "img-002", "img-002", "img-002", "img-002" ], "nickName" : "테스트유저1", "userType" : "NONE", - "createdAt" : "2023-11-04T06:35:40.700+00:00", + "createdAt" : "2023-12-17T04:18:50.837+00:00", "isCompleted" : false, "isScraped" : false, "recommendedTag" : [ ], "recommendedTagName" : [ ] } }
-
-
-
-
-
Response Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data.houseId

Number

빈집 게시글 아이디

data.rentalType

String

매물 타입

data.city

String

매물 위치

data.zipCode

String

우편 주소

data.size

String

매물 크기 ( 견적 )

data.purpose

String

매물 목적/용도

data.floorNum

Number

매물 층수

data.contact

String

연락 가능한 연락처

data.createdDate

String

준공연도

data.price

Number

매물 가격

data.monthlyPrice

Number

월세 가격

data.agentName

String

공인중개사명

data.title

String

게시글 제목

data.code

String

게시글 내용

data.imageUrls

Array

게시글 이미지 주소

data.nickName

String

게시글 작성자

data.userType

String

게시글 작성자 타입 ( 일반회원 : NONE, 공인중개사 : AGENT )

data.createdAt

String

게시글 작성일자

data.isCompleted

Boolean

매물 거래 완료 여부

data.isScraped

Boolean

빈집 게시글 스크랩 여부

data.recommendedTag

Array

빈집 게시글 추천 태그명

data.recommendedTagName

Array

빈집 게시글 추천 태그 한글명

-
-
-
-
-

6. 빈집 게시글 단일 조회 - 로그인 상태

-
-
Request
-
-
-
GET /api/v1/houses/user-scrap/12387 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.htuEhrOK6dDLkuviXjzHo7k8OSbF29drKBM4M7UsGeicMKgl9-HnBj8rqlabJjtoFW9Tc56ejXZHKJKCTdJPaw
+              
+
+
+
+
Response Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data.houseId

Number

빈집 게시글 아이디

data.rentalType

String

매물 타입

data.city

String

매물 위치

data.detail

String

상세 주소 예: 1동 1호

data.zipCode

String

우편 주소

data.size

String

매물 크기 ( 견적 )

data.purpose

String

매물 목적/용도

data.floorNum

Number

매물 층수

data.contact

String

연락 가능한 연락처

data.createdDate

String

준공연도

data.price

Number

매물 가격

data.monthlyPrice

Number

월세 가격

data.agentName

String

공인중개사명

data.title

String

게시글 제목

data.code

String

게시글 내용

data.imageUrls

Array

게시글 이미지 주소

data.nickName

String

게시글 작성자

data.userType

String

게시글 작성자 타입 ( 일반회원 : NONE, 공인중개사 : AGENT )

data.createdAt

String

게시글 작성일자

data.isCompleted

Boolean

매물 거래 완료 여부

data.isScraped

Boolean

빈집 게시글 스크랩 여부

data.recommendedTag

Array

빈집 게시글 추천 태그명

data.recommendedTagName

Array

빈집 게시글 추천 태그 한글명

+
+
+
+
+

6. 빈집 게시글 단일 조회 - 로그인 상태

+
+
Request
+
+
+
GET /api/v1/houses/user-scrap/3811 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.1McaufFU-n1xvuc_nXBBGfij9hkQhP7oZV8EQ6g2jX9nwwteXL7IUXzLZSQJ70x8BdY9hTWnaeMlmPSAzwmaDg
 Accept: application/json
 Host: localhost:8080
-
-
-
-
Response
-
-
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 986
+Content-Length: 1009
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
-    "houseId" : 12387,
+    "houseId" : 3811,
     "rentalType" : "SALE",
     "city" : "서울시 서대문구 남가좌동 거북골로 34",
+    "detail" : "1동 103호",
     "zipCode" : "12345",
     "size" : "120909000",
     "purpose" : "주거용 ( 방3, 화장실 2 )",
     "floorNum" : 2,
     "contact" : "070-1234-5678",
-    "createdDate" : "1990-09-09",
+    "createdDate" : "1990",
     "price" : 12000,
     "monthlyPrice" : 0.0,
     "agentName" : "행복부동산",
@@ -4327,169 +4554,174 @@ 
Response
"imageUrls" : [ "img-001", "img-002", "img-002", "img-002", "img-002" ], "nickName" : "테스트유저1", "userType" : "NONE", - "createdAt" : "2023-11-04T06:35:39.240+00:00", + "createdAt" : "2023-12-17T04:18:47.842+00:00", "isCompleted" : false, "isScraped" : true, "recommendedTag" : [ ], "recommendedTagName" : [ ] } }
-
-
-
-
-
Response Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data.houseId

Number

빈집 게시글 아이디

data.rentalType

String

매물 타입

data.city

String

매물 위치

data.zipCode

String

우편 주소

data.size

String

매물 크기 ( 견적 )

data.purpose

String

매물 목적/용도

data.floorNum

Number

매물 층수

data.contact

String

연락 가능한 연락처

data.createdDate

String

준공연도

data.price

Number

매물 가격

data.monthlyPrice

Number

월세 가격

data.agentName

String

공인중개사명

data.title

String

게시글 제목

data.code

String

게시글 내용

data.imageUrls

Array

게시글 이미지 주소

data.nickName

String

게시글 작성자

data.userType

String

게시글 작성자 타입 ( 일반회원 : NONE, 공인중개사 : AGENT )

data.createdAt

String

게시글 작성일자

data.isCompleted

Boolean

매물 거래 완료 여부

data.isScraped

Boolean

빈집 게시글 스크랩 여부 ( 로그인 상태일 때, 상세 조회 시 유저 데이터로부터 스크랩 여부를 판단합니다. )

data.recommendedTag

Array

빈집 게시글 추천 태그명

data.recommendedTagName

Array

빈집 게시글 추천 태그 한글명

-
-
-
-
-

7.빈집 게시글 신고하기

-
-

해당 API는 허위 매물 혹은 잘못된 정보 제공에 대한 게시글 신고 기능을 제공합니다. 단, 본인의 게시글은 신고할 수 없습니다.

-
-
-
Request
-
-
-
PUT /api/v1/houses/report/12410 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk5MDgxNTM5LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.NjlU0f7YwfDA-DzuW-hO1PnC1hyTNmaqx4KgAE6a0N8jjnlXCIcGXl279yIB5kMY5QTRje82oynUcIAot99uzA
+              
+
+
+
+
Response Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data.houseId

Number

빈집 게시글 아이디

data.rentalType

String

매물 타입

data.city

String

매물 위치

data.detail

String

상세 주소 예: 1동 1호

data.zipCode

String

우편 주소

data.size

String

매물 크기 ( 견적 )

data.purpose

String

매물 목적/용도

data.floorNum

Number

매물 층수

data.contact

String

연락 가능한 연락처

data.createdDate

String

준공연도

data.price

Number

매물 가격

data.monthlyPrice

Number

월세 가격

data.agentName

String

공인중개사명

data.title

String

게시글 제목

data.code

String

게시글 내용

data.imageUrls

Array

게시글 이미지 주소

data.nickName

String

게시글 작성자

data.userType

String

게시글 작성자 타입 ( 일반회원 : NONE, 공인중개사 : AGENT )

data.createdAt

String

게시글 작성일자

data.isCompleted

Boolean

매물 거래 완료 여부

data.isScraped

Boolean

빈집 게시글 스크랩 여부 ( 로그인 상태일 때, 상세 조회 시 유저 데이터로부터 스크랩 여부를 판단합니다. )

data.recommendedTag

Array

빈집 게시글 추천 태그명

data.recommendedTagName

Array

빈집 게시글 추천 태그 한글명

+
+
+
+
+

7.빈집 게시글 신고하기

+
+

해당 API는 허위 매물 혹은 잘못된 정보 제공에 대한 게시글 신고 기능을 제공합니다. 단, 본인의 게시글은 신고할 수 없습니다.

+
+
+
Request
+
+
+
PUT /api/v1/houses/report/3834 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTI4LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.AbukHjMYA2PW7N0ROiyW1sSHK6kgTuEVM4ipp8PiPzG38gWX_L9hQMTEkIORavvNntrxehM4hWZilPT2upBx1w
 Accept: application/json
 Content-Length: 107
 Host: localhost:8080
@@ -4498,41 +4730,41 @@ 
Request
"reportType" : "FAKE_SALE", "reportReason" : "허위 매물로 게시글을 작성하였습니다." }
-
-
-
-
Request Fields
- ----- - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

reportReason

String

신고 이유는 필수값입니다. ( 최소 1자이상 최대 100자 이하로 작성해야 합니다. )

reportType

String

신고 분류는 필수값입니다. ( FAKE_SALE : 허위매물, ADVERTISING_BOARD : 스팸게시글/광고 , ETC : 기타 )

-
-
-
Response
-
-
+
+
+
+
Request Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

reportReason

String

신고 이유는 필수값입니다. ( 최소 1자이상 최대 100자 이하로 작성해야 합니다. )

reportType

String

신고 분류는 필수값입니다. ( FAKE_SALE : 허위매물, ADVERTISING_BOARD : 스팸게시글/광고 , ETC : 기타 )

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -4544,141 +4776,141 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-
-

8. 임시저장된 게시글 목록 조회하기

-
-

본인이 작성한 게시글 중 임시저장 상태의 게시글 데이터만 목록으로 반환합니다. 따라서 토큰이 필요합니다!

-
-
-
Request
-
-
+
+
+
+
+
+
+

8. 임시저장된 게시글 목록 조회하기

+
+

본인이 작성한 게시글 중 임시저장 상태의 게시글 데이터만 목록으로 반환합니다. 따라서 토큰이 필요합니다!

+
+
+
Request
+
+
GET /api/v1/houses/tmp-save?page=0&size=8 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDAsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.QEn3RwnIX9m2n7QUavChobjOFedNQComLyxLAE9e5_1W4DVOJlQizgKdxBz7andcT6jNMMMRY4WaQV78LdgZ3w
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.XaNYKscl0HkDReAMewf0sXcz1yN6xJoL5v_w6EuexIuMGQyqHL3Fg8T-pvEyNfa0OOxl-WMDHRon52UaCe0ckA
 Accept: application/json
 Host: localhost:8080
-
-
-
-
Response
-
-
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 4476
+Content-Length: 4468
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "houseId" : 12455,
+      "houseId" : 3879,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.165+00:00",
+      "createdAt" : "2023-12-17T04:18:49.918+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12456,
+      "houseId" : 3880,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.166+00:00",
+      "createdAt" : "2023-12-17T04:18:49.921+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12457,
+      "houseId" : 3881,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.168+00:00",
+      "createdAt" : "2023-12-17T04:18:49.923+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12458,
+      "houseId" : 3882,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.169+00:00",
+      "createdAt" : "2023-12-17T04:18:49.925+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12459,
+      "houseId" : 3883,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.170+00:00",
+      "createdAt" : "2023-12-17T04:18:49.928+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12460,
+      "houseId" : 3884,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.172+00:00",
+      "createdAt" : "2023-12-17T04:18:49.930+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12461,
+      "houseId" : 3885,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.173+00:00",
+      "createdAt" : "2023-12-17T04:18:49.932+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12462,
+      "houseId" : 3886,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:40.174+00:00",
+      "createdAt" : "2023-12-17T04:18:49.935+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
@@ -4692,8 +4924,8 @@ 
Response
"sorted" : false }, "offset" : 0, - "pageSize" : 8, "pageNumber" : 0, + "pageSize" : 8, "paged" : true, "unpaged" : false }, @@ -4712,284 +4944,284 @@
Response
"empty" : false } }
-
-
-
-
-
Response Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

content[].houseId

Number

빈집 게시글 ID

content[].rentalType

String

매매 타입

content[].city

String

매물 위치

content[].price

Number

매물 가격

content[].monthlyPrice

Number

월세 가격

content[].nickName

String

게시글 작성자

content[].createdAt

String

게시글 작성날짜

content[].isCompleted

Boolean

거래 완료 여부

content[].imageUrl

String

썸네일 이미지 주소

content[].title

String

게시글 제목

content[].recommendedTag

Array

추천 태그명 리스트

content[].recommendedTagName

Array

추천 태그명 한글 리스트

pageable.sort.empty

Boolean

pageable.sort.unsorted

Boolean

pageable.sort.sorted

Boolean

pageable.offset

Number

pageable.pageNumber

Number

pageable.pageSize

Number

pageable.unpaged

Boolean

pageable.paged

Boolean

last

Boolean

totalPages

Number

totalElements

Number

size

Number

number

Number

sort.empty

Boolean

sort.unsorted

Boolean

sort.sorted

Boolean

first

Boolean

numberOfElements

Number

empty

Boolean

-
-
-
-
-

9. 스크랩한 게시글 목록 조회하기

-
-
Request
-
-
+
+
+
+
+
Response Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

content[].houseId

Number

빈집 게시글 ID

content[].rentalType

String

매매 타입

content[].city

String

매물 위치

content[].price

Number

매물 가격

content[].monthlyPrice

Number

월세 가격

content[].nickName

String

게시글 작성자

content[].createdAt

String

게시글 작성날짜

content[].isCompleted

Boolean

거래 완료 여부

content[].imageUrl

String

썸네일 이미지 주소

content[].title

String

게시글 제목

content[].recommendedTag

Array

추천 태그명 리스트

content[].recommendedTagName

Array

추천 태그명 한글 리스트

pageable.sort.empty

Boolean

pageable.sort.unsorted

Boolean

pageable.sort.sorted

Boolean

pageable.offset

Number

pageable.pageNumber

Number

pageable.pageSize

Number

pageable.unpaged

Boolean

pageable.paged

Boolean

last

Boolean

totalPages

Number

totalElements

Number

size

Number

number

Number

sort.empty

Boolean

sort.unsorted

Boolean

sort.sorted

Boolean

first

Boolean

numberOfElements

Number

empty

Boolean

+
+
+
+
+

9. 스크랩한 게시글 목록 조회하기

+
+
Request
+
+
GET /api/v1/houses/scrap?page=0&filter= HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YvqRu7nstwwwn_0cEtBoifvakK0-88X9GK-865tJccjrHtuOBbteXbL2TDJiTrqretYmtzYEb7Twhyrc8Jsdxg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-C6gDgNel5j3xeL-aWbdb8jGFncZp3bGpasPpqXR1SSYaLxJsq5AkP0-1IqL3vM_rbEzN7Cuvlml2ym58oMieQ
 Host: localhost:8080
-
-
-
-
Response
-
-
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 3504
+Content-Length: 3498
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "houseId" : 12373,
+      "houseId" : 3797,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:38.549+00:00",
+      "createdAt" : "2023-12-17T04:18:45.945+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12374,
+      "houseId" : 3798,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:38.570+00:00",
+      "createdAt" : "2023-12-17T04:18:45.988+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12375,
+      "houseId" : 3799,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:38.577+00:00",
+      "createdAt" : "2023-12-17T04:18:46.002+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12376,
+      "houseId" : 3800,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:38.583+00:00",
+      "createdAt" : "2023-12-17T04:18:46.019+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12377,
+      "houseId" : 3801,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:38.588+00:00",
+      "createdAt" : "2023-12-17T04:18:46.037+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
       "recommendedTag" : [ ],
       "recommendedTagName" : [ ]
     }, {
-      "houseId" : 12378,
+      "houseId" : 3802,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "price" : 12000,
       "monthlyPrice" : 0.0,
       "nickName" : "테스트유저1",
-      "createdAt" : "2023-11-04T06:35:38.594+00:00",
+      "createdAt" : "2023-12-17T04:18:46.048+00:00",
       "isCompleted" : false,
       "imageUrl" : "img-001",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
@@ -5003,8 +5235,8 @@ 
Response
"sorted" : false }, "offset" : 0, - "pageSize" : 10, "pageNumber" : 0, + "pageSize" : 10, "paged" : true, "unpaged" : false }, @@ -5023,41 +5255,41 @@
Response
"empty" : false } }
-
-
-
-
-
- +
+
+

10. 마이페이지 게시글 목록 조회하기 (공인중개사)

+
+
Request
+
+
GET /api/v1/houses/agent?page=0&search=&isCompleted= HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZ2VudF9qaG91c2VfY29tIiwiZXhwIjoxNjk5MDgxNTM5LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJBR0VOVCJ9.KSxXCEkqJ6jQOtmkJAjUDG55TH6hdoGpvAu3Vd4qQlZyX_8hUx9lWoecBy1aJxE0_IZatt1ZVZUph-smF5ClRQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZ2VudF9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTI5LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJBR0VOVCJ9.n3ZFoWnD_0SGnVQ_YK6ZcZVjSj4y3Bg1_qsyQ5bB9JQrrOKQTEchR3WoUgf7DihHL3pa4qjH6E3LsghoUvZIRA
 Accept: application/json
 Host: localhost:8080
-
-
-
-
Response
-
-
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 3673
+Content-Length: 3663
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "houseId" : 12433,
+      "houseId" : 3857,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
@@ -5065,7 +5297,7 @@ 
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12434, + "houseId" : 3858, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5073,7 +5305,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12435, + "houseId" : 3859, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5081,7 +5313,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12436, + "houseId" : 3860, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5089,7 +5321,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12437, + "houseId" : 3861, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5097,7 +5329,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12438, + "houseId" : 3862, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5105,7 +5337,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12439, + "houseId" : 3863, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5113,7 +5345,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12440, + "houseId" : 3864, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5121,7 +5353,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12441, + "houseId" : 3865, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5129,7 +5361,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12442, + "houseId" : 3866, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5158,26 +5390,26 @@
Response
"empty" : false } }
-
-
-
-
-
-
-

11. 빈집 매물 상태 변경하기

-
-

본인이 작성한 게시글에 한해서만 상태 변경이 가능합니다. 재등록을 서버 측에서 제한하지 않았기에 클라이언트 측에서 재변경이 안되도록 이벤트를 걸어주셔야 합니다.

-
-
-

리뷰 내용은 필수값은 아니지만, 점수는 필수로 입력해야 하며 이는 양의 정수로 1~5까지 표현할 수 있습니다.

-
-
-
Request
-
-
-
PUT /api/v1/houses/status/12384 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YvqRu7nstwwwn_0cEtBoifvakK0-88X9GK-865tJccjrHtuOBbteXbL2TDJiTrqretYmtzYEb7Twhyrc8Jsdxg
+              
+
+
+
+
+
+

11. 빈집 매물 상태 변경하기

+
+

본인이 작성한 게시글에 한해서만 상태 변경이 가능합니다. 재등록을 서버 측에서 제한하지 않았기에 클라이언트 측에서 재변경이 안되도록 이벤트를 걸어주셔야 합니다.

+
+
+

리뷰 내용은 필수값은 아니지만, 점수는 필수로 입력해야 하며 이는 양의 정수로 1~5까지 표현할 수 있습니다.

+
+
+
Request
+
+
+
PUT /api/v1/houses/status/3808 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YHIu6aU14PmZpNG13y-8wvYOQzL4-4vSEbPykEowo6aNGnZMW5cGvbqVEJ7zHmCLtf8yEgi9zzOurXqM48z5BQ
 Accept: application/json
 Content-Length: 158
 Host: localhost:8080
@@ -5190,62 +5422,62 @@ 
Request
"contact" : "010-1111-1111", "dealDate" : "2023-01-01" }
-
-
-
-
-
Request Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

score

Number

만족도 점수는 0 ~ 5까지 정수로 표현해야 합니다. )

review

String

리뷰 내용은 선택값 입니다..

nickName

String

닉네임은 선택값 입니다. 없을 경우 null 혹은 빈 문자열로 보내주세요.

age

String

나이는 선택값 입니다. 10대, 20대, 30대와 같이 string 타입으로 보내주셔야 합니다.

contact

String

구매자 연락처는 필수값 입니다.

dealDate

String

거래 날짜는 필수값 입니다.

-
-
-
Response
-
-
+
+
+
+
+
Request Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

score

Number

만족도 점수는 0 ~ 5까지 정수로 표현해야 합니다. )

review

String

리뷰 내용은 선택값 입니다..

nickName

String

닉네임은 선택값 입니다. 없을 경우 null 혹은 빈 문자열로 보내주세요.

age

String

나이는 선택값 입니다. 10대, 20대, 30대와 같이 string 타입으로 보내주셔야 합니다.

contact

String

구매자 연락처는 필수값 입니다.

dealDate

String

거래 날짜는 필수값 입니다.

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -5257,74 +5489,78 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-

12. 자신이 작성한 빈집 게시글 목록 조회하기

-
-

일반 유저 게시글 생성 시, dealState(판매상태)는 APPLYING(승인중)으로 기본 설정됩니다.

-
-
-

일반 유저의 게시글이 관리자로부터 승인 처리가 되면, 빈집 중개 서비스 페이지에서 노출되며 dealState(판매상태)는 ONGOING(판매중)으로 변경됩니다.

-
-
-

일반 유저가 직접 판매완료로 상태변경하면, dealState(판매상태)는 COMPLETED(판매완료)로 변경됩니다.

-
-
-

해당 플로우를 참고해주시기 바랍니다.

-
-
-
Request
-
-
-
GET /api/v1/houses/my?keyword= HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1MzksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.htuEhrOK6dDLkuviXjzHo7k8OSbF29drKBM4M7UsGeicMKgl9-HnBj8rqlabJjtoFW9Tc56ejXZHKJKCTdJPaw
+            
+
+
+
+
+

12. 자신이 작성한 빈집 게시글 목록 조회하기

+
+

일반 유저 게시글 생성 시, dealState(판매상태)는 APPLYING(승인중)으로 기본 설정됩니다.

+
+
+

일반 유저의 게시글이 관리자로부터 승인 처리가 되면, 빈집 중개 서비스 페이지에서 노출되며 dealState(판매상태)는 ONGOING(판매중)으로 변경됩니다.

+
+
+

일반 유저가 직접 판매완료로 상태변경하면, dealState(판매상태)는 COMPLETED(판매완료)로 변경됩니다.

+
+
+

해당 플로우를 참고해주시기 바랍니다.

+
+
+
Request
+
+
+
GET /api/v1/houses/my?keyword=&dealState= HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MjgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oBgNrU_-oBJh1LQ9X3c3Fcl4iIe80sBsBdrAjH9h4dPwgsyzP8-lj_N__bkVNbzCXnK_M12YMV2XD6G3M-12-w
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Request Fields
- ---- - - - - - - - - - - - - -
ParameterDescription

keyword

매물명 키워드 검색

-
-
-
Response
-
-
+
+
+
+
+
Request Fields
+ + + + + + + + + + + + + + + + + + + + + +
ParameterDescription

keyword

매물명 키워드 검색

dealState

거래상태 필터링 ( 승인중 : APPLYING | 진행중 : ONGOING | 완료 : COMPLETED | 반려 : REJECTED)

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 3673
+Content-Length: 3663
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "content" : [ {
-      "houseId" : 12411,
+      "houseId" : 3835,
       "rentalType" : "SALE",
       "city" : "서울시 서대문구 남가좌동 거북골로 34",
       "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.",
@@ -5332,7 +5568,7 @@ 
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12412, + "houseId" : 3836, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5340,7 +5576,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12413, + "houseId" : 3837, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5348,7 +5584,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12414, + "houseId" : 3838, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5356,7 +5592,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12415, + "houseId" : 3839, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5364,7 +5600,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12416, + "houseId" : 3840, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5372,7 +5608,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12417, + "houseId" : 3841, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5380,7 +5616,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12418, + "houseId" : 3842, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5388,7 +5624,7 @@
Response
"dealState" : "COMPLETED", "dealStateName" : "판매완료" }, { - "houseId" : 12419, + "houseId" : 3843, "rentalType" : "SALE", "city" : "서울시 서대문구 남가좌동 거북골로 34", "title" : "행복부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5396,7 +5632,7 @@
Response
"dealState" : "ONGOING", "dealStateName" : "판매중" }, { - "houseId" : 12420, + "houseId" : 3844, "rentalType" : "JEONSE", "city" : "서울시 서대문구 남가좌동 거북골로 90", "title" : "부자부동산에서 제공하는 서울시 빈집 매물입니다.", @@ -5425,196 +5661,196 @@
Response
"empty" : false } }
-
-
-
-
-
Response Fields
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

content[].houseId

Number

빈집 게시글 ID

content[].rentalType

String

매매 타입

content[].city

String

매물 위치

content[].imageUrl

String

썸네일 이미지 주소

content[].title

String

게시글 제목

content[].dealState

String

매물 거래 상태

content[].dealStateName

String

매물 거래 상태명

count.all

Number

전체 개수 (totalElements와 동일한 값)

count.applying

Number

승인중 게시물 개수

count.ongoing

Number

판매중 게시물 개수

count.completed

Number

판매완료 게시물 개수

last

Boolean

totalPages

Number

totalElements

Number

size

Number

number

Number

sort.empty

Boolean

sort.unsorted

Boolean

sort.sorted

Boolean

first

Boolean

numberOfElements

Number

empty

Boolean

-
-
-
-
-
-

Scrap API

-
-
-

1. 게시글 스크랩

-
-
Request
-
-
-
PUT /api/v1/scraps/12592 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk5MDgxNTUwLCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.kZSK4aFqH08RWp-5hE4_utG_baforAU5dlaE3dPYsp2iALtPz0yB7jgXsTqTVNDjHapPNYsaOFpGpTZbELQzQw
+            
+
+
+
+
Response Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

content[].houseId

Number

빈집 게시글 ID

content[].rentalType

String

매매 타입

content[].city

String

매물 위치

content[].imageUrl

String

썸네일 이미지 주소

content[].title

String

게시글 제목

content[].dealState

String

매물 거래 상태

content[].dealStateName

String

매물 거래 상태명

count.all

Number

전체 개수 (totalElements와 동일한 값)

count.applying

Number

승인중 게시물 개수

count.ongoing

Number

판매중 게시물 개수

count.completed

Number

판매완료 게시물 개수

last

Boolean

totalPages

Number

totalElements

Number

size

Number

number

Number

sort.empty

Boolean

sort.unsorted

Boolean

sort.sorted

Boolean

first

Boolean

numberOfElements

Number

empty

Boolean

+
+
+
+
+
+

Scrap API

+
+
+

1. 게시글 스크랩

+
+
Request
+
+
+
PUT /api/v1/scraps/4016 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTQ1LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.S1IUdcHm3EWwTHqR21MuDSIhkorkHSxyA80_EvE56kHyJLapYcVPTKNzpFmkfD1F7vldzLBUHR91TstPkKeClQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 66
+Content-Length: 65
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 12592
-}
-
-
-
-
-
-

2. 이미 스크랩한 게시글인 경우

-
-
Request
-
-
-
PUT /api/v1/scraps/12590 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk5MDgxNTUwLCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.kZSK4aFqH08RWp-5hE4_utG_baforAU5dlaE3dPYsp2iALtPz0yB7jgXsTqTVNDjHapPNYsaOFpGpTZbELQzQw
+  "data" : 4016
+}
+
+
+
+
+
+

2. 이미 스크랩한 게시글인 경우

+
+
Request
+
+
+
PUT /api/v1/scraps/4014 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTQ1LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.S1IUdcHm3EWwTHqR21MuDSIhkorkHSxyA80_EvE56kHyJLapYcVPTKNzpFmkfD1F7vldzLBUHR91TstPkKeClQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 400 Bad Request
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -5623,31 +5859,31 @@ 
Response
Content-Length: 79 { - "code" : "H0002", - "message" : "이미 스크랩한 게시글입니다." -}
-
-
-
-
-
-

3. 게시글 스크랩 해제

-
-
Request
-
-
-
DELETE /api/v1/scraps/12591 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk5MDgxNTUwLCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.kZSK4aFqH08RWp-5hE4_utG_baforAU5dlaE3dPYsp2iALtPz0yB7jgXsTqTVNDjHapPNYsaOFpGpTZbELQzQw
+  "code" : "H0002",
+  "message" : "이미 스크랩한 게시글입니다."
+}
+
+
+
+
+
+

3. 게시글 스크랩 해제

+
+
Request
+
+
+
DELETE /api/v1/scraps/4015 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTQ1LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.S1IUdcHm3EWwTHqR21MuDSIhkorkHSxyA80_EvE56kHyJLapYcVPTKNzpFmkfD1F7vldzLBUHR91TstPkKeClQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -5659,20 +5895,20 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-
-
-

Error Code

-
-
-

에러 코드에 대해 표로 표현될 수 있게 커스터마이징 작업을 진행 중에 있습니다. ( 파일 import 이슈가 있어 .. 바로 업데이트가 되지 않을 수 있습니다. 🥲)

-
-
-
+
+
+
+
+
+
+
+

Error Code

+
+
+

에러 코드에 대해 표로 표현될 수 있게 커스터마이징 작업을 진행 중에 있습니다. ( 파일 import 이슈가 있어 .. 바로 업데이트가 되지 않을 수 있습니다. 🥲)

+
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -5716,113 +5952,113 @@ 

Error Code

} } }
-
-
-
-
-
-

Notification API

-
-
-
+
+
+
+
+
+

Notification API

+
+
+
알림은 댓글 저장시 자동 저장,
 무한 스크롤 형태로 구현해 요청시 page번호가 아닌 id값을 입력해야함
-
-
-
-

1. 알림 조회

-
-
Request
-
-
+
+
+
+

1. 알림 조회

+
+
Request
+
+
GET /api/v1/notifications?read=false&id= HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ENUzfng67fwxmwEpSzfY4-swHihohVqA4xj2BPbMteYbqJfMwnUYjJzL2N6ow7pK9wHI00m5LeGA4uOzA2_GGw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.gyUC7_g8_7FviwGvG5vx4xv-V4Ygb1-nI5eJQVyCeVKoU1hamJquyFx6wtdUqUpvcSeCkLwbu2SLvaJ4QPKnWQ
 Host: localhost:8080
-
-
-
-
-
Request Params
- ---- - - - - - - - - - - - - - - - - -
ParameterDescription

read

알림 읽음 필터링, null - 전부, false - 읽지 않음, true - 읽음

id

초기요청시 null 입력 후, 이후 요청 부턴 응답의 nextId 기입

-
-
-
Response
-
-
+
+
+
+
+
Request Params
+ + + + + + + + + + + + + + + + + + + + + +
ParameterDescription

read

알림 읽음 필터링, null - 전부, false - 읽지 않음, true - 읽음

id

초기요청시 null 입력 후, 이후 요청 부턴 응답의 nextId 기입

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 2051
+Content-Length: 2045
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
-    "nextId" : 101059,
+    "nextId" : 34791,
     "notifications" : {
       "content" : [ {
         "nick_name" : "테스트유저1",
-        "board_id" : 4746,
+        "board_id" : 1447,
         "board_title" : "짱구는 못말려",
         "status" : false,
         "comment" : "짱구야, 공부 하자.",
         "comment_user" : "테스트유저2",
-        "notification_id" : 101067
+        "notification_id" : 34799
       }, {
         "nick_name" : "테스트유저1",
-        "board_id" : 4746,
+        "board_id" : 1447,
         "board_title" : "짱구는 못말려",
         "status" : false,
         "comment" : "짱구야, 공부 하자.",
         "comment_user" : "테스트유저2",
-        "notification_id" : 101065
+        "notification_id" : 34797
       }, {
         "nick_name" : "테스트유저1",
-        "board_id" : 4746,
+        "board_id" : 1447,
         "board_title" : "짱구는 못말려",
         "status" : false,
         "comment" : "짱구야, 공부 하자.",
         "comment_user" : "테스트유저2",
-        "notification_id" : 101063
+        "notification_id" : 34795
       }, {
         "nick_name" : "테스트유저1",
-        "board_id" : 4746,
+        "board_id" : 1447,
         "board_title" : "짱구는 못말려",
         "status" : false,
         "comment" : "짱구야, 공부 하자.",
         "comment_user" : "테스트유저2",
-        "notification_id" : 101061
+        "notification_id" : 34793
       }, {
         "nick_name" : "테스트유저1",
-        "board_id" : 4746,
+        "board_id" : 1447,
         "board_title" : "짱구는 못말려",
         "status" : false,
         "comment" : "짱구야, 공부 하자.",
         "comment_user" : "테스트유저2",
-        "notification_id" : 101059
+        "notification_id" : 34791
       } ],
       "pageable" : {
         "sort" : {
@@ -5831,8 +6067,8 @@ 
Response
"sorted" : false }, "offset" : 0, - "pageSize" : 5, "pageNumber" : 0, + "pageSize" : 5, "paged" : true, "unpaged" : false }, @@ -5850,231 +6086,231 @@
Response
} } }
-
-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data.nextId

Number

다음 알림 아이디

data.notifications.content[].nick_name

String

닉네임

data.notifications.content[].board_id

Number

게시글 아이디

data.notifications.content[].board_title

String

게시글 제목

data.notifications.content[].status

Boolean

알림 읽음 상태, false - 읽지 않음, true - 읽음

data.notifications.content[].comment

String

댓글 내용

data.notifications.content[].comment_user

String

댓글 작성자 닉네임

data.notifications.content[].notification_id

Number

알림 아이디

data.notifications.pageable.sort.empty

Boolean

data.notifications.pageable.sort.unsorted

Boolean

data.notifications.pageable.sort.sorted

Boolean

data.notifications.pageable.offset

Number

data.notifications.pageable.pageSize

Number

data.notifications.pageable.pageNumber

Number

data.notifications.pageable.paged

Boolean

data.notifications.pageable.unpaged

Boolean

data.notifications.last

Boolean

마지막 페이지 여부

data.notifications.first

Boolean

data.notifications.size

Number

data.notifications.number

Number

data.notifications.sort.empty

Boolean

data.notifications.sort.unsorted

Boolean

data.notifications.sort.sorted

Boolean

data.notifications.numberOfElements

Number

data.notifications.empty

Boolean

-
-
-
-

2. 알림 읽음 처리

-
-
Request
-
-
-
PUT /api/v1/notifications/101015 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ENUzfng67fwxmwEpSzfY4-swHihohVqA4xj2BPbMteYbqJfMwnUYjJzL2N6ow7pK9wHI00m5LeGA4uOzA2_GGw
+            
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathTypeDescription

code

String

결과 코드

message

String

응답 메세지

data.nextId

Number

다음 알림 아이디

data.notifications.content[].nick_name

String

닉네임

data.notifications.content[].board_id

Number

게시글 아이디

data.notifications.content[].board_title

String

게시글 제목

data.notifications.content[].status

Boolean

알림 읽음 상태, false - 읽지 않음, true - 읽음

data.notifications.content[].comment

String

댓글 내용

data.notifications.content[].comment_user

String

댓글 작성자 닉네임

data.notifications.content[].notification_id

Number

알림 아이디

data.notifications.pageable.sort.empty

Boolean

data.notifications.pageable.sort.unsorted

Boolean

data.notifications.pageable.sort.sorted

Boolean

data.notifications.pageable.offset

Number

data.notifications.pageable.pageSize

Number

data.notifications.pageable.pageNumber

Number

data.notifications.pageable.paged

Boolean

data.notifications.pageable.unpaged

Boolean

data.notifications.last

Boolean

마지막 페이지 여부

data.notifications.first

Boolean

data.notifications.size

Number

data.notifications.number

Number

data.notifications.sort.empty

Boolean

data.notifications.sort.unsorted

Boolean

data.notifications.sort.sorted

Boolean

data.notifications.numberOfElements

Number

data.notifications.empty

Boolean

+
+
+
+

2. 알림 읽음 처리

+
+
Request
+
+
+
PUT /api/v1/notifications/34747 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.gyUC7_g8_7FviwGvG5vx4xv-V4Ygb1-nI5eJQVyCeVKoU1hamJquyFx6wtdUqUpvcSeCkLwbu2SLvaJ4QPKnWQ
 Host: localhost:8080
-
-
-
-
-
Path Params
- - ---- - - - - - - - - - - - - -
Table 1. /api/v1/notifications/{id}
ParameterDescription

id

알림 아이디

-
-
-
Response
-
-
+
+
+
+
+
Path Params
+ + + + + + + + + + + + + + + + + + +
Table 1. /api/v1/notifications/{id}
ParameterDescription

id

알림 아이디

+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 101015
-}
-
-
-
-
-
-
-
-

Record API

-
-
-

1. 레코드 저장

-
-
+ "data" : 34747 +} +
+
+
+
+
+
+
+

Record API

+
+
+

1. 레코드 저장

+
+
part
 
 web, server, infra, all
-
-
-
-
+
+
+
+
type - category
 
 odori - culture
@@ -6083,15 +6319,15 @@ 

1. 레 tech - issue tech - new_tech tech - architecture

-
-
-
-
Request
-
-
+
+
+
+
Request
+
+
POST /api/v1/record HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDcsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.LnCjVM2-3VkWXLH-c7R1yVRmuG1s9T2P-zVcRLEJRnNTnrlBoHbysrThqhJaDIuOdF-Q28tMqqpwxWwJoNqbLQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDEsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.KMcwHiEeLk0_efpCmchmZXzWM22-jEIaV_4CvqRyQKvpP7mHNOHyO9CgZnUT7_ZDvx9QTKv0DwdKugiGQtE0MA
 Accept: application/json
 Content-Length: 189
 Host: localhost:8080
@@ -6103,38 +6339,38 @@ 
Request
"category" : "culture", "type" : "odori" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 101355
-}
-
-
-
-
-
-

2. 레코드 수정

-
-
Request
-
-
-
PUT /api/v1/record/101191 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDYsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.-2IUYOu35I9OtQO3WWEh1wqr47Yx_PpR0yC6DJR8JYIfEh83N3v5dbxzMzisGfFYXNVoRoI_CM5UwBjFBYfJZg
+  "data" : 35087
+}
+
+
+
+
+
+

2. 레코드 수정

+
+
Request
+
+
+
PUT /api/v1/record/34923 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.UplXTRoL8Ax07sPp-YSyxEnLGi3p3t53uzdRH20feFFtADKpv1U6ppo7L1mBPh1e1vunHtzXBrVmLPTa_Qb35A
 Accept: application/json
 Content-Length: 62
 Host: localhost:8080
@@ -6143,47 +6379,47 @@ 
Request
"title" : "수정 제목", "content" : "수정 내용" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 101191
-}
-
-
-
-
-
-

3. 레코드 삭제

-
-
Request
-
-
-
DELETE /api/v1/record/101246 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDYsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.-2IUYOu35I9OtQO3WWEh1wqr47Yx_PpR0yC6DJR8JYIfEh83N3v5dbxzMzisGfFYXNVoRoI_CM5UwBjFBYfJZg
+  "data" : 34923
+}
+
+
+
+
+
+

3. 레코드 삭제

+
+
Request
+
+
+
DELETE /api/v1/record/34978 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDAsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.2TS-FD5jT8HJrDUjyEyjwEUuljDrM3GMotiv-59wOYTN1Kw9TSYQM_Vopc1DeNZPNJr98Lxo0Xs3ig--n8mRjQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -6195,70 +6431,70 @@ 
Respo "code" : "SUCCESS", "message" : "성공" }
-
-
-
-
- +
+

4. 핫 레코드 목록 조회

+
+
Request
+
+
GET /api/v1/record/hot HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 331
+Content-Length: 328
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
     "records" : [ {
-      "record_id" : 101287,
-      "title" : "코드 리뷰 문화 도입"
+      "record_id" : 35025,
+      "title" : "인증 인가 직접 구현하기"
     }, {
-      "record_id" : 101290,
+      "record_id" : 35022,
       "title" : "DDOS 대응 회고"
     }, {
-      "record_id" : 101293,
-      "title" : "인증 인가 직접 구현하기"
+      "record_id" : 35019,
+      "title" : "코드 리뷰 문화 도입"
     } ]
   }
 }
-
-
-
-
-
-

5. 레코드 목록 조회

-
-
-
/api/v1/record/{part}/{type}?category=&page=
-
-
-
-
+
+
+
+
+
+

5. 레코드 목록 조회

+
+
+
/api/v1/record/{part}/{type}?category=&page=
+
+
+
+
part
 
 web, server, infra, all
-
-
-
-
+
+
+
+
type - category
 
 odori - culture
@@ -6268,34 +6504,34 @@ 

-
-
page : 레코드 목록 페이지 번호 (0부터 1페이지)
-
-

- -
-

6. 레코드 조회

-
-
-
page : 댓글 목록 페이지 번호 (0부터 1페이지)
-
-
-
-
-
level : 댓글 / 대댓글 / 대대댓글 구분 (1 - 댓글, 2 - 대댓글 ...)
-
-
-
-
Request
-
-
-
GET /api/v1/record/101312?page=0 HTTP/1.1
+            
+
+
+
+
+

6. 레코드 조회

+
+
+
page : 댓글 목록 페이지 번호 (0부터 1페이지)
+
+
+
+
+
level : 댓글 / 대댓글 / 대대댓글 구분 (1 - 댓글, 2 - 대댓글 ...)
+
+
+
+
Request
+
+
+
GET /api/v1/record/35044?page=0 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response - Success
-
-
+
+
+
+ -
- +
+
+

7. 레코드 조회 - 리뷰

+
+
reviews : 리뷰 댓글
 reviews.status : 리뷰 상태 (approve - 승인, reject - 반려, mine - 레코드 작성자)
 reviewers : 리뷰 신청자 (approve - 승인, reject - 반려, wait - 대기)
-
-
-
-
Request
-
-
-
GET /api/v1/record/review/101259 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDYsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.-2IUYOu35I9OtQO3WWEh1wqr47Yx_PpR0yC6DJR8JYIfEh83N3v5dbxzMzisGfFYXNVoRoI_CM5UwBjFBYfJZg
+          
+
+
+
Request
+
+
+
GET /api/v1/record/review/34991 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDAsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.2TS-FD5jT8HJrDUjyEyjwEUuljDrM3GMotiv-59wOYTN1Kw9TSYQM_Vopc1DeNZPNJr98Lxo0Xs3ig--n8mRjQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 986
+Content-Length: 982
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
   "data" : {
-    "record_id" : 101259,
+    "record_id" : 34991,
     "title" : "코드 리뷰 문화 도입",
     "content" : "pr 날린 코드에 대해 팀원들이 리뷰해줍니다.",
     "hits" : 0,
     "part" : "server",
     "nick_name" : "테스트유저2",
-    "create_at" : "11.04.2023",
+    "create_at" : "12.17.2023",
     "reviews" : [ {
-      "review_id" : 101274,
+      "review_id" : 35006,
       "content" : "이 부분 수정해주세요.",
       "status" : "reject",
       "nick_name" : "테스트유저1",
-      "create_at" : "11.04.2023"
+      "create_at" : "12.17.2023"
     }, {
-      "review_id" : 101275,
+      "review_id" : 35007,
       "content" : "수정했습니다.",
       "status" : "mine",
       "nick_name" : "테스트유저2",
-      "create_at" : "11.04.2023"
+      "create_at" : "12.17.2023"
     }, {
-      "review_id" : 101276,
+      "review_id" : 35008,
       "content" : "확인했습니다!",
       "status" : "approve",
       "nick_name" : "테스트유저1",
-      "create_at" : "11.04.2023"
+      "create_at" : "12.17.2023"
     } ],
     "reviewers" : [ {
       "status" : "approve",
@@ -6516,44 +6752,44 @@ 
Respo } ] } }
-
-
-
-
- +
+
+

8. 레코드 목록 조회 - 리뷰 받는 사람

+
+
page : 레코드 목록 페이지 번호 (0부터 1페이지)
 
 status
 wait : 내가 작성한 글 중 대기상태인 글
 approve : 내가 작성한 글 중 승인 처리된 글
 reject : 내가 작성한 글 중 반려 처리된 글
-
-
-
-
Request
-
-
+
+
+
+
Request
+
+
GET /api/v1/record/reviewee?status=wait&page=0 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDYsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.-2IUYOu35I9OtQO3WWEh1wqr47Yx_PpR0yC6DJR8JYIfEh83N3v5dbxzMzisGfFYXNVoRoI_CM5UwBjFBYfJZg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.UplXTRoL8Ax07sPp-YSyxEnLGi3p3t53uzdRH20feFFtADKpv1U6ppo7L1mBPh1e1vunHtzXBrVmLPTa_Qb35A
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+ -
-
- +
+
+

9. 레코드 목록 조회 - 리뷰 하는 사람

+
+
page : 레코드 목록 페이지 번호 (0부터 1페이지)
 
 status
 wait : 내가 아직 리뷰하지 않은 글
 approve : 내가 승인 처리한 글
 reject : 내가 반려 처리한 글
-
-
-
-
Request
-
-
+
+
+
+
Request
+
+
GET /api/v1/record/reviewer?status=approve&page=0 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDYsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.-2IUYOu35I9OtQO3WWEh1wqr47Yx_PpR0yC6DJR8JYIfEh83N3v5dbxzMzisGfFYXNVoRoI_CM5UwBjFBYfJZg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.UplXTRoL8Ax07sPp-YSyxEnLGi3p3t53uzdRH20feFFtADKpv1U6ppo7L1mBPh1e1vunHtzXBrVmLPTa_Qb35A
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response - Success
-
-
+
+
+
+ -
-
-
-
-

Record Category API

-
-
-
+
+
+
+
+
+
+
+

Record Category API

+
+
+
category
 
 culture (오도리 - 팀 내 문화)
@@ -6716,17 +6952,17 @@ 

Recor issue (기술 - 이슈 관리) new_tech (기술 - 신 기술) architecture (기술 - 설계)

-
-
-
-

1. 템플릿 저장

-
-
Request
-
-
+
+
+
+

1. 템플릿 저장

+
+
Request
+
+
POST /api/v1/record_category/template HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDgsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.cGJjsCWv8ZA9eGGwBBaooyM-BeobUePCL-rQX71nQEOhxMTfH0CS2iO7irF7E8aQ6qnfJT7n0Cr0V5ozlyvbwg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDIsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.i8hZZuBycF4RgohQPSoECkZFiAhIsodyEVZCou9OecfaoeeVHg21mvxUrCSj_AALJjHO7v4rQ9D8zOcF5tJ5tQ
 Accept: application/json
 Content-Length: 67
 Host: localhost:8080
@@ -6735,13 +6971,13 @@ 
Request
"template" : "제목 : \n내용 : ", "category" : "culture" }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -6753,28 +6989,28 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-

2. 템플릿 조회

-
-
Request
-
-
+
+
+
+
+
+

2. 템플릿 조회

+
+
Request
+
+
GET /api/v1/record_category/template/culture HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDgsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.cGJjsCWv8ZA9eGGwBBaooyM-BeobUePCL-rQX71nQEOhxMTfH0CS2iO7irF7E8aQ6qnfJT7n0Cr0V5ozlyvbwg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDIsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.i8hZZuBycF4RgohQPSoECkZFiAhIsodyEVZCou9OecfaoeeVHg21mvxUrCSj_AALJjHO7v4rQ9D8zOcF5tJ5tQ
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -6790,70 +7026,70 @@ 
Response
"category" : "culture" } }
-
-
-
-
-
-
-
-

Record Comment API

-
-
-
-
parent_id : 부모 댓글 아이디
-
-
-
-

1. 댓글 저장

-
-
Request
-
-
+
+
+
+
+
+
+
+

Record Comment API

+
+
+
+
parent_id : 부모 댓글 아이디
+
+
+
+

1. 댓글 저장

+
+
Request
+
+
POST /api/v1/record_comment HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.hK4dEm23hXPXWv0PjJUDZfooaZng8HfP5qdRQq6U9n4KfKW2zi58TTpHQM57AMf0OCph6fPv2ie_OwZMNUpFOg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDMsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.exP1b7GFqiVPVQsJ5FiAK1l_i8TDelBBDuy0g598CO9vZWdNRp7z5u9T_Mp43KKWwFrxgKR1cKrGBWCLns36hw
 Accept: application/json
-Content-Length: 82
+Content-Length: 81
 Host: localhost:8080
 
 {
-  "record_id" : 101530,
+  "record_id" : 35262,
   "parent_id" : null,
   "content" : "댓글입니다."
 }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 101532
-}
-
-
-
-
-
-

2. 댓글 수정

-
-
Request
-
-
-
PUT /api/v1/record_comment/101519 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.hK4dEm23hXPXWv0PjJUDZfooaZng8HfP5qdRQq6U9n4KfKW2zi58TTpHQM57AMf0OCph6fPv2ie_OwZMNUpFOg
+  "data" : 35264
+}
+
+
+
+
+
+

2. 댓글 수정

+
+
Request
+
+
+
PUT /api/v1/record_comment/35251 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDMsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.exP1b7GFqiVPVQsJ5FiAK1l_i8TDelBBDuy0g598CO9vZWdNRp7z5u9T_Mp43KKWwFrxgKR1cKrGBWCLns36hw
 Accept: application/json
 Content-Length: 33
 Host: localhost:8080
@@ -6861,47 +7097,47 @@ 
Request
{ "content" : "수정 내용" }
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 101519
-}
-
-
-
-
-
-

3. 댓글 삭제

-
-
Request
-
-
-
DELETE /api/v1/record_comment/101506 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.Pb4KWgizYptJGi3Xi7pn0W1sX0HZB5xK2CX3MPshfY5IBIGIycfq8hcwFg5YxOr9V1GDlhzGnQ4fhjrIgslCaQ
+  "data" : 35251
+}
+
+
+
+
+
+

3. 댓글 삭제

+
+
Request
+
+
+
DELETE /api/v1/record_comment/35238 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.zMLmM3FikAk--BDpfEvxQbVY8EAZZq9SmiG1vJgZgrdcbBIHhmGFcOW-7aAsAsrd650tXQcfsV-SJbpnWZNxfw
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response
-
-
+
+
+
+
+
Response
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -6913,68 +7149,68 @@ 
Response
"code" : "SUCCESS", "message" : "성공" }
-
-
-
-
-
-
-
-

Record Review API

-
-
-
+
+
+
+
+
+
+
+

Record Review API

+
+
+
status
 
 approve (승인)
 reject (반려)
 mine (레코드 작성자가 리뷰를 달 때)
-
-
-
-

1. 리뷰 저장

-
-
Request
-
-
+
+
+
+

1. 리뷰 저장

+
+
Request
+
+
POST /api/v1/record_review HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.SFCLW185Fo8SVmJQMu9hyeMP57eSD_dHjTZorxfaThUQXxtIu56D7meUvLhnqF3eSGr3aawvwwud_dJVsu7FYQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDMsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ._tqaZCAbXOXPtKQJ3Rgd1S8XF-Wrvmq3FXI6iBNLUh_bed3DDDT0uJbdlUr1dBBvAWre-qOoEuwxVcFX_pEaAA
 Accept: application/json
-Content-Length: 95
+Content-Length: 94
 Host: localhost:8080
 
 {
-  "record_id" : 101576,
+  "record_id" : 35308,
   "content" : "좋은 글 감사합니다!",
   "status" : "approve"
 }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 101579
-}
-
-
-
-
-
Response - Fail
-
-
+ "data" : 35311 +} +
+
+
+
+
Response - Fail
+
+
HTTP/1.1 400 Bad Request
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -6986,19 +7222,19 @@ 
Response - Fa "code" : "R0000", "message" : "이미 승인처리된 글입니다." }
-
-
-
-
-
-

2. 리뷰 수정

-
-
Request
-
-
-
PUT /api/v1/record_review/101621 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.SFCLW185Fo8SVmJQMu9hyeMP57eSD_dHjTZorxfaThUQXxtIu56D7meUvLhnqF3eSGr3aawvwwud_dJVsu7FYQ
+            
+
+
+
+
+

2. 리뷰 수정

+
+
Request
+
+
+
PUT /api/v1/record_review/35353 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDQsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.p7ygv8D6kTMoMrS1dZc6uisUZ8hiOSQ6HSZCDIP3zLBPhANItDCsKcX4sUW4Lf-DsJnKn1qROIZXgMCl22Hkqg
 Accept: application/json
 Content-Length: 57
 Host: localhost:8080
@@ -7007,32 +7243,32 @@ 
Request
"content" : "수정 내용", "status" : "approve" }
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
 Vary: Access-Control-Request-Headers
 Content-Type: application/json;charset=UTF-8
-Content-Length: 67
+Content-Length: 66
 
 {
   "code" : "SUCCESS",
   "message" : "성공",
-  "data" : 101621
-}
-
-
-
-
-
Response - Fail
-
-
+ "data" : 35353 +} +
+
+
+
+
Response - Fail
+
+
HTTP/1.1 400 Bad Request
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -7044,28 +7280,28 @@ 
Response - "code" : "R0000", "message" : "이미 승인처리된 글입니다." }
-
-
-
-
-
-

3. 리뷰 삭제

-
-
Request
-
-
-
DELETE /api/v1/record_review/101593 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTkwODE1NDksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.SFCLW185Fo8SVmJQMu9hyeMP57eSD_dHjTZorxfaThUQXxtIu56D7meUvLhnqF3eSGr3aawvwwud_dJVsu7FYQ
+            
+
+
+
+
+

3. 리뷰 삭제

+
+
Request
+
+
+
DELETE /api/v1/record_review/35325 HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDQsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.p7ygv8D6kTMoMrS1dZc6uisUZ8hiOSQ6HSZCDIP3zLBPhANItDCsKcX4sUW4Lf-DsJnKn1qROIZXgMCl22Hkqg
 Accept: application/json
 Host: localhost:8080
-
-
-
-
-
Response - Success
-
-
+
+
+
+
+
Response - Success
+
+
HTTP/1.1 200 OK
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -7077,13 +7313,13 @@ 
Respo "code" : "SUCCESS", "message" : "성공" }
-
-
-
- +
+
Response - Fail
+
+
HTTP/1.1 400 Bad Request
 Vary: Origin
 Vary: Access-Control-Request-Method
@@ -7095,24 +7331,24 @@ 
Response - "code" : "R0000", "message" : "이미 승인처리된 글입니다." }
-
-
-
-
-
-
+
+
+
+ + + \ No newline at end of file diff --git a/src/main/resources/static/docs/jwt.html b/src/main/resources/static/docs/jwt.html index 1c37bcd7..cfd9eb8f 100644 --- a/src/main/resources/static/docs/jwt.html +++ b/src/main/resources/static/docs/jwt.html @@ -519,7 +519,7 @@

JWT 예외처리

diff --git a/src/main/resources/static/docs/love.html b/src/main/resources/static/docs/love.html index 782ff35d..6f142021 100644 --- a/src/main/resources/static/docs/love.html +++ b/src/main/resources/static/docs/love.html @@ -449,8 +449,8 @@

1. 게시글 좋아요

Request
-
PUT /api/v1/loves/4505 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.7riDoQfF0rQWNkjdMZjzd_tzP3-yYCR_FGYjKpv7q_5e2ITyFr2UrhoUlmi5YXIqCIO6EreH_zwVNq_57UtOMw
+
PUT /api/v1/loves/1437 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.Caf2_KrUGiVHkdj38kHugAUYkhgGqCb2QNhN_RjlR5K4OrSjySN5PQtoawkMYmbDQuWk2ozFHs-WHQQpGP5ZlQ
 Accept: application/json
 Host: localhost:8080
@@ -470,7 +470,7 @@
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 4505 + "data" : 1437 }
@@ -482,8 +482,8 @@

2. 게시글 좋아요 취소

Request
-
DELETE /api/v1/loves/4508 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.7riDoQfF0rQWNkjdMZjzd_tzP3-yYCR_FGYjKpv7q_5e2ITyFr2UrhoUlmi5YXIqCIO6EreH_zwVNq_57UtOMw
+
DELETE /api/v1/loves/1440 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.Caf2_KrUGiVHkdj38kHugAUYkhgGqCb2QNhN_RjlR5K4OrSjySN5PQtoawkMYmbDQuWk2ozFHs-WHQQpGP5ZlQ
 Accept: application/json
 Host: localhost:8080
@@ -514,8 +514,8 @@

3. 유저의 게시글

Request
-
GET /api/v1/loves/4509 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.7riDoQfF0rQWNkjdMZjzd_tzP3-yYCR_FGYjKpv7q_5e2ITyFr2UrhoUlmi5YXIqCIO6EreH_zwVNq_57UtOMw
+
GET /api/v1/loves/1441 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.Caf2_KrUGiVHkdj38kHugAUYkhgGqCb2QNhN_RjlR5K4OrSjySN5PQtoawkMYmbDQuWk2ozFHs-WHQQpGP5ZlQ
 Accept: application/json
 Host: localhost:8080
@@ -547,7 +547,7 @@
Response
diff --git a/src/main/resources/static/docs/notification.html b/src/main/resources/static/docs/notification.html index 0eb37408..89db1563 100644 --- a/src/main/resources/static/docs/notification.html +++ b/src/main/resources/static/docs/notification.html @@ -456,7 +456,7 @@
Request
GET /api/v1/notifications?read=false&id= HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.PcBrPD0krxpVfwVvexGCItczgNT3J7pgM4HGEpH4pXZlJOem4IdUOW-p5vt6qtIBo50Tfaw0EGqBfjX6uD3vAg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.gyUC7_g8_7FviwGvG5vx4xv-V4Ygb1-nI5eJQVyCeVKoU1hamJquyFx6wtdUqUpvcSeCkLwbu2SLvaJ4QPKnWQ
 Host: localhost:8080
@@ -501,48 +501,48 @@
Response
"code" : "SUCCESS", "message" : "성공", "data" : { - "nextId" : 95197, + "nextId" : 34791, "notifications" : { "content" : [ { "nick_name" : "테스트유저1", - "board_id" : 4515, + "board_id" : 1447, "board_title" : "짱구는 못말려", "status" : false, "comment" : "짱구야, 공부 하자.", "comment_user" : "테스트유저2", - "notification_id" : 95205 + "notification_id" : 34799 }, { "nick_name" : "테스트유저1", - "board_id" : 4515, + "board_id" : 1447, "board_title" : "짱구는 못말려", "status" : false, "comment" : "짱구야, 공부 하자.", "comment_user" : "테스트유저2", - "notification_id" : 95203 + "notification_id" : 34797 }, { "nick_name" : "테스트유저1", - "board_id" : 4515, + "board_id" : 1447, "board_title" : "짱구는 못말려", "status" : false, "comment" : "짱구야, 공부 하자.", "comment_user" : "테스트유저2", - "notification_id" : 95201 + "notification_id" : 34795 }, { "nick_name" : "테스트유저1", - "board_id" : 4515, + "board_id" : 1447, "board_title" : "짱구는 못말려", "status" : false, "comment" : "짱구야, 공부 하자.", "comment_user" : "테스트유저2", - "notification_id" : 95199 + "notification_id" : 34793 }, { "nick_name" : "테스트유저1", - "board_id" : 4515, + "board_id" : 1447, "board_title" : "짱구는 못말려", "status" : false, "comment" : "짱구야, 공부 하자.", "comment_user" : "테스트유저2", - "notification_id" : 95197 + "notification_id" : 34791 } ], "pageable" : { "sort" : { @@ -551,20 +551,20 @@
Response
"sorted" : false }, "offset" : 0, - "pageSize" : 5, "pageNumber" : 0, - "unpaged" : false, - "paged" : true + "pageSize" : 5, + "paged" : true, + "unpaged" : false }, + "first" : true, + "last" : false, + "size" : 5, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "size" : 5, - "first" : true, - "last" : false, "numberOfElements" : 5, "empty" : false } @@ -731,8 +731,8 @@

2. 알림 읽음 처리

Request
-
PUT /api/v1/notifications/95153 HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.PcBrPD0krxpVfwVvexGCItczgNT3J7pgM4HGEpH4pXZlJOem4IdUOW-p5vt6qtIBo50Tfaw0EGqBfjX6uD3vAg
+
PUT /api/v1/notifications/34747 HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.gyUC7_g8_7FviwGvG5vx4xv-V4Ygb1-nI5eJQVyCeVKoU1hamJquyFx6wtdUqUpvcSeCkLwbu2SLvaJ4QPKnWQ
 Host: localhost:8080
@@ -773,7 +773,7 @@
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 95153 + "data" : 34747 }
@@ -785,7 +785,7 @@
Response
diff --git a/src/main/resources/static/docs/record.html b/src/main/resources/static/docs/record.html index e9858aaa..669b7a66 100644 --- a/src/main/resources/static/docs/record.html +++ b/src/main/resources/static/docs/record.html @@ -470,7 +470,7 @@
Request
POST /api/v1/record HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDAsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.HK1YK91U3utUSjOzkSQ1netOBDQHnp44vVIFqvL8G9L-wcUHTW-J_DS41AFfpoatCQrRGRu14dbQ9KDWM-hJgw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDEsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.KMcwHiEeLk0_efpCmchmZXzWM22-jEIaV_4CvqRyQKvpP7mHNOHyO9CgZnUT7_ZDvx9QTKv0DwdKugiGQtE0MA
 Accept: application/json
 Content-Length: 189
 Host: localhost:8080
@@ -499,7 +499,7 @@ 
Response - Success
{ "code" : "SUCCESS", "message" : "성공", - "data" : 95493 + "data" : 35087 }
@@ -511,9 +511,9 @@

2. 레코드 수정

Request
-
PUT /api/v1/record/95329 HTTP/1.1
+
PUT /api/v1/record/34923 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.s7BuqGVtpZh_r-VkrjiRfWHtlnae-b3SIqs4YyNrQirVIGINPBMh5kySy2o1CFSfETOy_1l4GdC57Bn24CAMAw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.UplXTRoL8Ax07sPp-YSyxEnLGi3p3t53uzdRH20feFFtADKpv1U6ppo7L1mBPh1e1vunHtzXBrVmLPTa_Qb35A
 Accept: application/json
 Content-Length: 62
 Host: localhost:8080
@@ -539,7 +539,7 @@ 
Response - Success
{ "code" : "SUCCESS", "message" : "성공", - "data" : 95329 + "data" : 34923 }
@@ -551,9 +551,9 @@

3. 레코드 삭제

Request
-
DELETE /api/v1/record/95384 HTTP/1.1
+
DELETE /api/v1/record/34978 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.s7BuqGVtpZh_r-VkrjiRfWHtlnae-b3SIqs4YyNrQirVIGINPBMh5kySy2o1CFSfETOy_1l4GdC57Bn24CAMAw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDAsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.2TS-FD5jT8HJrDUjyEyjwEUuljDrM3GMotiv-59wOYTN1Kw9TSYQM_Vopc1DeNZPNJr98Lxo0Xs3ig--n8mRjQ
 Accept: application/json
 Host: localhost:8080
@@ -607,14 +607,14 @@
Response - Success
"message" : "성공", "data" : { "records" : [ { - "record_id" : 95425, - "title" : "코드 리뷰 문화 도입" + "record_id" : 35025, + "title" : "인증 인가 직접 구현하기" }, { - "record_id" : 95428, + "record_id" : 35022, "title" : "DDOS 대응 회고" }, { - "record_id" : 95431, - "title" : "인증 인가 직접 구현하기" + "record_id" : 35019, + "title" : "코드 리뷰 문화 도입" } ] } }
@@ -682,18 +682,18 @@
Response - Success
"data" : { "records" : { "content" : [ { - "record_id" : 95512, + "record_id" : 35109, "title" : "인증 인가 직접 구현하기", "content" : "스프링 시큐리티를 사용하지 않고, 인증 인가를 직접 구현했습니다.", "nick_name" : "테스트유저2", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "part" : "server" }, { - "record_id" : 95515, + "record_id" : 35106, "title" : "인증 인가 직접 구현하기", "content" : "스프링 시큐리티를 사용하지 않고, 인증 인가를 직접 구현했습니다.", "nick_name" : "테스트유저2", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "part" : "server" } ], "pageable" : { @@ -703,22 +703,22 @@
Response - Success
"sorted" : false }, "offset" : 0, - "pageSize" : 4, "pageNumber" : 0, - "unpaged" : false, - "paged" : true + "pageSize" : 4, + "paged" : true, + "unpaged" : false }, "last" : true, - "totalPages" : 1, "totalElements" : 2, + "totalPages" : 1, + "first" : true, + "size" : 4, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "size" : 4, - "first" : true, "numberOfElements" : 2, "empty" : false } @@ -744,7 +744,7 @@

6. 레코드 조회

Request
-
GET /api/v1/record/95450?page=0 HTTP/1.1
+
GET /api/v1/record/35044?page=0 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
 Accept: application/json
 Host: localhost:8080
@@ -766,7 +766,7 @@
Response - Success
"code" : "SUCCESS", "message" : "성공", "data" : { - "record_id" : 95450, + "record_id" : 35044, "title" : "코드 리뷰 문화 도입", "content" : "pr 날린 코드에 대해 팀원들이 리뷰해줍니다.", "hits" : 1, @@ -774,26 +774,26 @@
Response - Success
"type" : "odori", "category" : "culture", "nick_name" : "테스트유저2", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "comments" : { "content" : [ { - "comment_id" : 95465, + "comment_id" : 35059, "level" : 1, "content" : "댓글입니다.", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023" + "create_at" : "12.17.2023" }, { - "comment_id" : 95467, + "comment_id" : 35061, "level" : 2, "content" : "댓글입니다.", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023" + "create_at" : "12.17.2023" }, { - "comment_id" : 95466, + "comment_id" : 35060, "level" : 1, "content" : "댓글입니다.", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023" + "create_at" : "12.17.2023" } ], "pageable" : { "sort" : { @@ -802,22 +802,22 @@
Response - Success
"sorted" : false }, "offset" : 0, - "pageSize" : 10, "pageNumber" : 0, - "unpaged" : false, - "paged" : true + "pageSize" : 10, + "paged" : true, + "unpaged" : false }, "last" : true, - "totalPages" : 1, "totalElements" : 3, + "totalPages" : 1, + "first" : true, + "size" : 10, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "size" : 10, - "first" : true, "numberOfElements" : 3, "empty" : false } @@ -840,9 +840,9 @@

7. 레코드 조회 - 리뷰

Request
-
GET /api/v1/record/review/95397 HTTP/1.1
+
GET /api/v1/record/review/34991 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDAsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.HK1YK91U3utUSjOzkSQ1netOBDQHnp44vVIFqvL8G9L-wcUHTW-J_DS41AFfpoatCQrRGRu14dbQ9KDWM-hJgw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDAsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.2TS-FD5jT8HJrDUjyEyjwEUuljDrM3GMotiv-59wOYTN1Kw9TSYQM_Vopc1DeNZPNJr98Lxo0Xs3ig--n8mRjQ
 Accept: application/json
 Host: localhost:8080
@@ -863,31 +863,31 @@
Response - Success
"code" : "SUCCESS", "message" : "성공", "data" : { - "record_id" : 95397, + "record_id" : 34991, "title" : "코드 리뷰 문화 도입", "content" : "pr 날린 코드에 대해 팀원들이 리뷰해줍니다.", "hits" : 0, "part" : "server", "nick_name" : "테스트유저2", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "reviews" : [ { - "review_id" : 95412, + "review_id" : 35006, "content" : "이 부분 수정해주세요.", "status" : "reject", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023" + "create_at" : "12.17.2023" }, { - "review_id" : 95413, + "review_id" : 35007, "content" : "수정했습니다.", "status" : "mine", "nick_name" : "테스트유저2", - "create_at" : "10.28.2023" + "create_at" : "12.17.2023" }, { - "review_id" : 95414, + "review_id" : 35008, "content" : "확인했습니다!", "status" : "approve", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023" + "create_at" : "12.17.2023" } ], "reviewers" : [ { "status" : "approve", @@ -917,7 +917,7 @@
Request
GET /api/v1/record/reviewee?status=wait&page=0 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.s7BuqGVtpZh_r-VkrjiRfWHtlnae-b3SIqs4YyNrQirVIGINPBMh5kySy2o1CFSfETOy_1l4GdC57Bn24CAMAw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.UplXTRoL8Ax07sPp-YSyxEnLGi3p3t53uzdRH20feFFtADKpv1U6ppo7L1mBPh1e1vunHtzXBrVmLPTa_Qb35A
 Accept: application/json
 Host: localhost:8080
@@ -940,25 +940,25 @@
Response - Success
"data" : { "records" : { "content" : [ { - "record_id" : 95295, - "title" : "코드 리뷰 문화 도입", - "content" : "pr 날린 코드에 대해 팀원들이 리뷰해줍니다.", + "record_id" : 34895, + "title" : "이슈 제목", + "content" : "이슈 내용입니다.", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "part" : "server" }, { - "record_id" : 95298, + "record_id" : 34892, "title" : "DDOS 대응 회고", "content" : "DDOS 공격을 방지하기 위해 Bucket4j 라이브러리를 도입했습니다.", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "part" : "server" }, { - "record_id" : 95301, - "title" : "이슈 제목", - "content" : "이슈 내용입니다.", + "record_id" : 34889, + "title" : "코드 리뷰 문화 도입", + "content" : "pr 날린 코드에 대해 팀원들이 리뷰해줍니다.", "nick_name" : "테스트유저1", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "part" : "server" } ], "pageable" : { @@ -968,22 +968,22 @@
Response - Success
"sorted" : false }, "offset" : 0, - "pageSize" : 3, "pageNumber" : 0, - "unpaged" : false, - "paged" : true + "pageSize" : 3, + "paged" : true, + "unpaged" : false }, "last" : true, - "totalPages" : 1, "totalElements" : 3, + "totalPages" : 1, + "first" : true, + "size" : 3, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "size" : 3, - "first" : true, "numberOfElements" : 3, "empty" : false } @@ -1011,7 +1011,7 @@
Request
GET /api/v1/record/reviewer?status=approve&page=0 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxMzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.s7BuqGVtpZh_r-VkrjiRfWHtlnae-b3SIqs4YyNrQirVIGINPBMh5kySy2o1CFSfETOy_1l4GdC57Bn24CAMAw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1MzksImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.UplXTRoL8Ax07sPp-YSyxEnLGi3p3t53uzdRH20feFFtADKpv1U6ppo7L1mBPh1e1vunHtzXBrVmLPTa_Qb35A
 Accept: application/json
 Host: localhost:8080
@@ -1034,18 +1034,18 @@
Response - Success
"data" : { "records" : { "content" : [ { - "record_id" : 95342, - "title" : "코드 리뷰 문화 도입", - "content" : "pr 날린 코드에 대해 팀원들이 리뷰해줍니다.", + "record_id" : 34939, + "title" : "DDOS 대응 회고", + "content" : "DDOS 공격을 방지하기 위해 Bucket4j 라이브러리를 도입했습니다.", "nick_name" : "테스트유저2", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "part" : "server" }, { - "record_id" : 95345, - "title" : "DDOS 대응 회고", - "content" : "DDOS 공격을 방지하기 위해 Bucket4j 라이브러리를 도입했습니다.", + "record_id" : 34936, + "title" : "코드 리뷰 문화 도입", + "content" : "pr 날린 코드에 대해 팀원들이 리뷰해줍니다.", "nick_name" : "테스트유저2", - "create_at" : "10.28.2023", + "create_at" : "12.17.2023", "part" : "server" } ], "pageable" : { @@ -1055,22 +1055,22 @@
Response - Success
"sorted" : false }, "offset" : 0, - "pageSize" : 3, "pageNumber" : 0, - "unpaged" : false, - "paged" : true + "pageSize" : 3, + "paged" : true, + "unpaged" : false }, "last" : true, - "totalPages" : 1, "totalElements" : 2, + "totalPages" : 1, + "first" : true, + "size" : 3, + "number" : 0, "sort" : { "empty" : true, "unsorted" : true, "sorted" : false }, - "number" : 0, - "size" : 3, - "first" : true, "numberOfElements" : 2, "empty" : false } @@ -1086,7 +1086,7 @@
Response - Success
diff --git a/src/main/resources/static/docs/record_category.html b/src/main/resources/static/docs/record_category.html index e186de65..85192ce4 100644 --- a/src/main/resources/static/docs/record_category.html +++ b/src/main/resources/static/docs/record_category.html @@ -463,7 +463,7 @@
Request
POST /api/v1/record_category/template HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDIsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.XW8AHk8BSIOjYZ2aSYXCvKR2N8waJsKBc0pwWKUdZgqNwhjfj9sdYgZ7t1oso_Q07Bp8JiUCNG71Xh6HdXvstg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDIsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.i8hZZuBycF4RgohQPSoECkZFiAhIsodyEVZCou9OecfaoeeVHg21mvxUrCSj_AALJjHO7v4rQ9D8zOcF5tJ5tQ
 Accept: application/json
 Content-Length: 67
 Host: localhost:8080
@@ -502,7 +502,7 @@ 
Request
GET /api/v1/record_category/template/culture HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDIsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.XW8AHk8BSIOjYZ2aSYXCvKR2N8waJsKBc0pwWKUdZgqNwhjfj9sdYgZ7t1oso_Q07Bp8JiUCNG71Xh6HdXvstg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDIsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.i8hZZuBycF4RgohQPSoECkZFiAhIsodyEVZCou9OecfaoeeVHg21mvxUrCSj_AALJjHO7v4rQ9D8zOcF5tJ5tQ
 Accept: application/json
 Host: localhost:8080
@@ -537,7 +537,7 @@
Response
diff --git a/src/main/resources/static/docs/record_comment.html b/src/main/resources/static/docs/record_comment.html index 98761b09..217087e0 100644 --- a/src/main/resources/static/docs/record_comment.html +++ b/src/main/resources/static/docs/record_comment.html @@ -456,13 +456,13 @@
Request
POST /api/v1/record_comment HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.R8c_R2CL6dBV0bjpmJpAWgBP6lnnXKRD4gyWgRUL6tYnRbNkPC5yM4-I197XuK_oQqQXDox-mxqzoiVagn9lZQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDMsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.exP1b7GFqiVPVQsJ5FiAK1l_i8TDelBBDuy0g598CO9vZWdNRp7z5u9T_Mp43KKWwFrxgKR1cKrGBWCLns36hw
 Accept: application/json
 Content-Length: 81
 Host: localhost:8080
 
 {
-  "record_id" : 95668,
+  "record_id" : 35262,
   "parent_id" : null,
   "content" : "댓글입니다."
 }
@@ -483,7 +483,7 @@
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 95670 + "data" : 35264 }
@@ -495,9 +495,9 @@

2. 댓글 수정

Request
-
PUT /api/v1/record_comment/95657 HTTP/1.1
+
PUT /api/v1/record_comment/35251 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.R8c_R2CL6dBV0bjpmJpAWgBP6lnnXKRD4gyWgRUL6tYnRbNkPC5yM4-I197XuK_oQqQXDox-mxqzoiVagn9lZQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDMsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.exP1b7GFqiVPVQsJ5FiAK1l_i8TDelBBDuy0g598CO9vZWdNRp7z5u9T_Mp43KKWwFrxgKR1cKrGBWCLns36hw
 Accept: application/json
 Content-Length: 33
 Host: localhost:8080
@@ -522,7 +522,7 @@ 
Response
{ "code" : "SUCCESS", "message" : "성공", - "data" : 95657 + "data" : 35251 }
@@ -534,9 +534,9 @@

3. 댓글 삭제

Request
-
DELETE /api/v1/record_comment/95644 HTTP/1.1
+
DELETE /api/v1/record_comment/35238 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.R8c_R2CL6dBV0bjpmJpAWgBP6lnnXKRD4gyWgRUL6tYnRbNkPC5yM4-I197XuK_oQqQXDox-mxqzoiVagn9lZQ
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDIsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.zMLmM3FikAk--BDpfEvxQbVY8EAZZq9SmiG1vJgZgrdcbBIHhmGFcOW-7aAsAsrd650tXQcfsV-SJbpnWZNxfw
 Accept: application/json
 Host: localhost:8080
@@ -567,7 +567,7 @@
Response
diff --git a/src/main/resources/static/docs/record_review.html b/src/main/resources/static/docs/record_review.html index 78c9e2f1..a9895b83 100644 --- a/src/main/resources/static/docs/record_review.html +++ b/src/main/resources/static/docs/record_review.html @@ -460,13 +460,13 @@
Request
POST /api/v1/record_review HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDMsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.LgbB8d_lszyDav4zDqNloOy-STbpHnVeuGKqkTsy3Kr_6Eaf6COSDVn3tq2AAcXrj0vpeoUGPaoQHORMgTBNfg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDMsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ._tqaZCAbXOXPtKQJ3Rgd1S8XF-Wrvmq3FXI6iBNLUh_bed3DDDT0uJbdlUr1dBBvAWre-qOoEuwxVcFX_pEaAA
 Accept: application/json
 Content-Length: 94
 Host: localhost:8080
 
 {
-  "record_id" : 95714,
+  "record_id" : 35308,
   "content" : "좋은 글 감사합니다!",
   "status" : "approve"
 }
@@ -487,7 +487,7 @@
Response - Success
{ "code" : "SUCCESS", "message" : "성공", - "data" : 95717 + "data" : 35311 }
@@ -517,9 +517,9 @@

2. 리뷰 수정

Request
-
PUT /api/v1/record_review/95759 HTTP/1.1
+
PUT /api/v1/record_review/35353 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDMsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.LgbB8d_lszyDav4zDqNloOy-STbpHnVeuGKqkTsy3Kr_6Eaf6COSDVn3tq2AAcXrj0vpeoUGPaoQHORMgTBNfg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDQsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.p7ygv8D6kTMoMrS1dZc6uisUZ8hiOSQ6HSZCDIP3zLBPhANItDCsKcX4sUW4Lf-DsJnKn1qROIZXgMCl22Hkqg
 Accept: application/json
 Content-Length: 57
 Host: localhost:8080
@@ -545,7 +545,7 @@ 
Response - Success
{ "code" : "SUCCESS", "message" : "성공", - "data" : 95759 + "data" : 35353 }
@@ -575,9 +575,9 @@

3. 리뷰 삭제

Request
-
DELETE /api/v1/record_review/95731 HTTP/1.1
+
DELETE /api/v1/record_review/35325 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDMsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.LgbB8d_lszyDav4zDqNloOy-STbpHnVeuGKqkTsy3Kr_6Eaf6COSDVn3tq2AAcXrj0vpeoUGPaoQHORMgTBNfg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDQsImF1dGgiOiJBRE1JTiIsInR5cGUiOiJTRVJWRVIifQ.p7ygv8D6kTMoMrS1dZc6uisUZ8hiOSQ6HSZCDIP3zLBPhANItDCsKcX4sUW4Lf-DsJnKn1qROIZXgMCl22Hkqg
 Accept: application/json
 Host: localhost:8080
@@ -626,7 +626,7 @@
Response - Fail
diff --git a/src/main/resources/static/docs/scrap.html b/src/main/resources/static/docs/scrap.html index edd7a8f5..2daf3c73 100644 --- a/src/main/resources/static/docs/scrap.html +++ b/src/main/resources/static/docs/scrap.html @@ -449,9 +449,9 @@

1. 게시글 스크랩

Request
-
PUT /api/v1/scraps/11932 HTTP/1.1
+
PUT /api/v1/scraps/4016 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk4NDY3MTQ0LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.QRCU2n6nmtMnkKdpaXA76oqXym--qnOymmMZZyElhfcZUKDrgzpnmrO00zH411cGRAMkb2ke5gGbKn0OrTfgxw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTQ1LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.S1IUdcHm3EWwTHqR21MuDSIhkorkHSxyA80_EvE56kHyJLapYcVPTKNzpFmkfD1F7vldzLBUHR91TstPkKeClQ
 Accept: application/json
 Host: localhost:8080
@@ -466,12 +466,12 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 66 +Content-Length: 65 { "code" : "SUCCESS", "message" : "성공", - "data" : 11932 + "data" : 4016 }
@@ -483,9 +483,9 @@

2. 이미 스크랩한 게

Request
-
PUT /api/v1/scraps/11930 HTTP/1.1
+
PUT /api/v1/scraps/4014 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk4NDY3MTQ0LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.QRCU2n6nmtMnkKdpaXA76oqXym--qnOymmMZZyElhfcZUKDrgzpnmrO00zH411cGRAMkb2ke5gGbKn0OrTfgxw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTQ1LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.S1IUdcHm3EWwTHqR21MuDSIhkorkHSxyA80_EvE56kHyJLapYcVPTKNzpFmkfD1F7vldzLBUHR91TstPkKeClQ
 Accept: application/json
 Host: localhost:8080
@@ -516,9 +516,9 @@

3. 게시글 스크랩 해제

Request
-
DELETE /api/v1/scraps/11931 HTTP/1.1
+
DELETE /api/v1/scraps/4015 HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNjk4NDY3MTQ0LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.QRCU2n6nmtMnkKdpaXA76oqXym--qnOymmMZZyElhfcZUKDrgzpnmrO00zH411cGRAMkb2ke5gGbKn0OrTfgxw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0Ml9qaG91c2VfY29tIiwiZXhwIjoxNzAyNzg4NTQ1LCJhdXRoIjoiVVNFUiIsInR5cGUiOiJOT05FIn0.S1IUdcHm3EWwTHqR21MuDSIhkorkHSxyA80_EvE56kHyJLapYcVPTKNzpFmkfD1F7vldzLBUHR91TstPkKeClQ
 Accept: application/json
 Host: localhost:8080
@@ -549,7 +549,7 @@
Response
diff --git a/src/main/resources/static/docs/user.html b/src/main/resources/static/docs/user.html index 899ffbb8..b412fe92 100644 --- a/src/main/resources/static/docs/user.html +++ b/src/main/resources/static/docs/user.html @@ -777,7 +777,7 @@
Response - Success
Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers -Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTkwNzAxNDR9.diZuj-WkztPDPSQKniuLEFyBp5qJyIu3Lh9sPSTRVGfKu4UfN6ljHl7Rd1TnOnEsEP8D2QyyHCv4ahBROnn58A; Path=/; Domain=localhost; Max-Age=604800; Expires=Sat, 4 Nov 2023 03:55:44 GMT; Secure; HttpOnly; SameSite=None +Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3MDMzOTE1NDZ9.MdaRr0y8J1i4dVxyjoHC33FYUpQfOl3xNKUfvcNX0yxX1TNTohqd5cZ1KBguMIiJfQw_sock-Iy-l1ZFEgCacw; Path=/; Domain=localhost; Max-Age=604800; Expires=Sun, 24 Dec 2023 04:19:06 GMT; Secure; HttpOnly; SameSite=None Content-Type: application/json;charset=UTF-8 Content-Length: 299 @@ -785,7 +785,7 @@
Response - Success
"code" : "SUCCESS", "message" : "성공", "data" : { - "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.vIbJcmEwfDWA538bS9J7Xf2qvyDdAc2g9ysqlx3FHmb20JSFo0kiO_to7lX5Nccd27XZlbZeQ3NifZwML7NH9g" + "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw" } }
@@ -851,10 +851,10 @@
Request
Accept: application/json Content-Length: 234 Host: localhost:8080 -Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.OL8mNmFPA6YrMPUi1VrSRRIlnXKFfZKqMN-R63QNXVvPxMavLoWshzFgiiQnDD3MARWA6P2e2nuUsAW5aOR5nA +Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q { - "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.OL8mNmFPA6YrMPUi1VrSRRIlnXKFfZKqMN-R63QNXVvPxMavLoWshzFgiiQnDD3MARWA6P2e2nuUsAW5aOR5nA" + "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q" }
@@ -867,7 +867,7 @@
Response - Success
Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers -Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTkwNzAxNDZ9.hcBhrYcfLNOEwkXafV1Sl8pgJjEYS3hPFPgITt-AKWlNBsEsysidL-pHytZFt1SAvWF8VzLOfC0wtvbTLq15XA; Path=/; Domain=localhost; Max-Age=604800; Expires=Sat, 4 Nov 2023 03:55:46 GMT; Secure; HttpOnly; SameSite=None +Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3MDMzOTE1NDh9.RCy8MBDDjxbcx9tsq2FRNTLKcxG4M4dR5cJKxXcgnvwnQs8B81p-fDCRbYHRAakvYFRMegzM3iO_kDro8wreyQ; Path=/; Domain=localhost; Max-Age=604800; Expires=Sun, 24 Dec 2023 04:19:08 GMT; Secure; HttpOnly; SameSite=None Content-Type: application/json;charset=UTF-8 Content-Length: 299 @@ -875,7 +875,7 @@
Response - Success
"code" : "SUCCESS", "message" : "성공", "data" : { - "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.OL8mNmFPA6YrMPUi1VrSRRIlnXKFfZKqMN-R63QNXVvPxMavLoWshzFgiiQnDD3MARWA6P2e2nuUsAW5aOR5nA" + "access_token" : "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q" } }
@@ -889,7 +889,7 @@
Request
POST /api/v1/users/logout HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.vIbJcmEwfDWA538bS9J7Xf2qvyDdAc2g9ysqlx3FHmb20JSFo0kiO_to7lX5Nccd27XZlbZeQ3NifZwML7NH9g
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw
 Accept: application/json
 Host: localhost:8080
@@ -903,7 +903,7 @@
Response
Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers -Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTkwNzAxNDR9.diZuj-WkztPDPSQKniuLEFyBp5qJyIu3Lh9sPSTRVGfKu4UfN6ljHl7Rd1TnOnEsEP8D2QyyHCv4ahBROnn58A; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly; SameSite=None +Set-Cookie: RefreshToken=eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3MDMzOTE1NDZ9.MdaRr0y8J1i4dVxyjoHC33FYUpQfOl3xNKUfvcNX0yxX1TNTohqd5cZ1KBguMIiJfQw_sock-Iy-l1ZFEgCacw; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly; SameSite=None Content-Type: application/json;charset=UTF-8 Content-Length: 48 @@ -929,7 +929,7 @@
Request
{ "email" : "zzangu@jhouse.com", - "code" : "6259" + "code" : "5175" }
@@ -1094,7 +1094,7 @@
Request
{ "phone_num" : "01011111111", - "code" : "7818" + "code" : "9117" }
@@ -1160,7 +1160,7 @@
Request
PUT /api/v1/users/update/nick-name HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.OL8mNmFPA6YrMPUi1VrSRRIlnXKFfZKqMN-R63QNXVvPxMavLoWshzFgiiQnDD3MARWA6P2e2nuUsAW5aOR5nA
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q
 Accept: application/json
 Content-Length: 30
 Host: localhost:8080
@@ -1231,7 +1231,7 @@ 
Request
PUT /api/v1/users/update/password HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.0KYNOvhojowXzzk2Y_2PqEGu-Y2VK4-JNFeZki_HbiT6GymBItiEPZoTkumpc8H0ujso8A3VbnbsFfhs4MKAfw
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDksImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.YqD-HADG5qG6BI6LoWMRxqsaLTKFNJ0nrADCFo3lxOoOGDjSqyCrwQV727TBF_wunS3Sk7NroGmGLgQSITaLrA
 Accept: application/json
 Content-Length: 32
 Host: localhost:8080
@@ -1349,7 +1349,7 @@ 
Request
GET /api/v1/users HTTP/1.1
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ssDXKuCnQlWtfZitWQN69qYpY_WGmmtihKAIeeihuKqte0SbZO5AyTQTywRLv2imjpfeu3BB-fpfWcPeum5mBg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oRTGdnI8xxiSS3xQVpfiG6dXLI8L4YRq_FPXAad_1KfejqyHB_FI-Mzo80mFMtYp62AnAcXvt8PjBxKL-vJWqA
 Accept: application/json
 Host: localhost:8080
@@ -1364,13 +1364,13 @@
Response
Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json;charset=UTF-8 -Content-Length: 405 +Content-Length: 459 { "code" : "SUCCESS", "message" : "성공", "data" : { - "id" : 95940, + "id" : 35544, "userName" : "test_jhouse_com", "nick_name" : "테스트유저1", "phone_num" : "01011111111", @@ -1378,7 +1378,9 @@
Response
"age" : "TEN", "profile_image_url" : "https://duaily-content.s3.ap-northeast-2.amazonaws.com/default_profile_image.png", "userType" : "NONE", - "email" : "zzangu@jhouse.com" + "email" : "zzangu@jhouse.com", + "suspenseReason" : null, + "reportedAt" : null } }
@@ -1393,7 +1395,7 @@
Request
PUT /api/v1/users HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.ssDXKuCnQlWtfZitWQN69qYpY_WGmmtihKAIeeihuKqte0SbZO5AyTQTywRLv2imjpfeu3BB-fpfWcPeum5mBg
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw
 Accept: application/json
 Content-Length: 127
 Host: localhost:8080
@@ -1424,6 +1426,46 @@ 
Response
}
+
+

회원탈퇴 시, 사용되는 enum

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
enum 값Description

ROW_USE

이용빈도 낮음

RE_JOIN

재가입

INSUFFICIENT_CONTENT

콘텐츠 및 정보 부족

PERSONAL_PROTECTION

개인 정보 보호

ETC

기타

+
+

위의 표에 나와 있는 description을 사용자가 선택하게 됩니다. 그 description을 그대로 복붙해서 요청 body에 넣어주시면 됩니다.

+
@@ -1434,7 +1476,7 @@
Request
POST /api/v1/users/withdrawal HTTP/1.1
 Content-Type: application/json;charset=UTF-8
-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE2OTg0NjcxNDQsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.vIbJcmEwfDWA538bS9J7Xf2qvyDdAc2g9ysqlx3FHmb20JSFo0kiO_to7lX5Nccd27XZlbZeQ3NifZwML7NH9g
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDUsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ._FWOKK_FLBVwRVgSOINmqoVWEgUSi96GD0TMW1aT23kYyAh_8jR5Vv5w7jgpyQOV-tY1ppFcxVxmdOqhkA9aAA
 Accept: application/json
 Content-Length: 109
 Host: localhost:8080
@@ -1537,7 +1579,7 @@ 
Request
{ "email" : "zzangu@jhouse.com", - "code" : "6259" + "code" : "5175" }
@@ -1599,6 +1641,148 @@
Response
Content-Type: application/json;charset=UTF-8 Content-Length: 65 +{ + "code" : "SUCCESS", + "message" : "성공", + "data" : true +}
+ + + + +
+

17. 이메일 수정

+
+

이메일 수정 시, 이메일 인증을 거쳐야 합니다.

+
+
+
Request
+
+
+
PUT /api/v1/users/update/email HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDYsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.-JoVRrtMI8xbRa_4WHQq3PmVtK6ldZuEQH842PqnebYJPeFk6CXpMF-NMyVM41hnSknAC7oYbEncBljRS9c9xw
+Accept: application/json
+Content-Length: 40
+Host: localhost:8080
+
+{
+  "email" : "testToTest@jmhouse.com"
+}
+
+
+
+
+
Response
+
+
+
HTTP/1.1 200 OK
+Vary: Origin
+Vary: Access-Control-Request-Method
+Vary: Access-Control-Request-Headers
+Content-Type: application/json;charset=UTF-8
+Content-Length: 48
+
+{
+  "code" : "SUCCESS",
+  "message" : "성공"
+}
+
+
+
+
+
+

18. 전화번호 수정

+
+

전화번호 수정 시, 전화번호 인증을 거쳐야 합니다.

+
+
+
Request
+
+
+
PUT /api/v1/users/update/phone HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDcsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.oRTGdnI8xxiSS3xQVpfiG6dXLI8L4YRq_FPXAad_1KfejqyHB_FI-Mzo80mFMtYp62AnAcXvt8PjBxKL-vJWqA
+Accept: application/json
+Content-Length: 33
+Host: localhost:8080
+
+{
+  "phone_num" : "01012344321"
+}
+
+
+ +++++ + + + + + + + + + + + + + + +
PathTypeDescription

phone_num

String

전화번호

+
+
+
Response
+
+
+
HTTP/1.1 200 OK
+Vary: Origin
+Vary: Access-Control-Request-Method
+Vary: Access-Control-Request-Headers
+Content-Type: application/json;charset=UTF-8
+Content-Length: 48
+
+{
+  "code" : "SUCCESS",
+  "message" : "성공"
+}
+
+
+
+
+
+

19. 비밀번호 확인

+
+
Request
+
+
+
POST /api/v1/users/check/password HTTP/1.1
+Content-Type: application/json;charset=UTF-8
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0X2pob3VzZV9jb20iLCJleHAiOjE3MDI3ODg1NDgsImF1dGgiOiJVU0VSIiwidHlwZSI6Ik5PTkUifQ.weKVnGm7JP-NOiJHFpwFeGvrXSNDxHx0yaZT6F_sVJv-siYfqldEaShOp5FGb9eC_7MzO7MkfohIGPdHw4kz2Q
+Accept: application/json
+Content-Length: 32
+Host: localhost:8080
+
+{
+  "password" : "abcdefG123!"
+}
+
+
+
+
+
Response
+
+
+
HTTP/1.1 200 OK
+Vary: Origin
+Vary: Access-Control-Request-Method
+Vary: Access-Control-Request-Headers
+Content-Type: application/json;charset=UTF-8
+Content-Length: 65
+
 {
   "code" : "SUCCESS",
   "message" : "성공",
@@ -1614,7 +1798,7 @@ 
Response
diff --git a/src/main/resources/templates/fragments/nav.html b/src/main/resources/templates/fragments/nav.html index 6f0b6f5a..b0f67c19 100644 --- a/src/main/resources/templates/fragments/nav.html +++ b/src/main/resources/templates/fragments/nav.html @@ -37,6 +37,7 @@
  • 가입 승인
  • 공인중개사 탈퇴
  • 일반회원 탈퇴
  • +
  • 가입자 정보 확인
  • diff --git a/src/main/resources/templates/house/houseReview.html b/src/main/resources/templates/house/houseReview.html index b09b52c7..bf5f10cb 100644 --- a/src/main/resources/templates/house/houseReview.html +++ b/src/main/resources/templates/house/houseReview.html @@ -58,29 +58,12 @@ No. - - + 거래 만족도 거래 날짜(팔린 날짜) 구매자 전화번호 구매자 닉네임 - - + 구매자 연령대 거래 후기 빈집 게시글 제목 diff --git a/src/main/resources/templates/user/agentJoin.html b/src/main/resources/templates/user/agentJoin.html index 6c3c094f..ea6cbcf0 100644 --- a/src/main/resources/templates/user/agentJoin.html +++ b/src/main/resources/templates/user/agentJoin.html @@ -51,7 +51,7 @@
    -
    +
    총 게시물 수 : [[${total}]]개   diff --git a/src/main/resources/templates/user/userManager.html b/src/main/resources/templates/user/userManager.html new file mode 100644 index 00000000..69dd2c9c --- /dev/null +++ b/src/main/resources/templates/user/userManager.html @@ -0,0 +1,154 @@ + + + + + + + + + + +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    No.닉네임이메일유저 타입전화번호가입일자연령대가입 경로약관 동의 내역
    + 1 + + 관리자 + + admin@jmhouse.org + + USER + + 010-0000-0000 + + 2024.01.01 + + 20대 + + + + +
    + + + +
    + + + + \ No newline at end of file diff --git a/src/test/kotlin/com/example/jhouse_server/domain/board/controller/BoardControllerTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/board/controller/BoardControllerTest.kt index 7d684752..050096d9 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/board/controller/BoardControllerTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/board/controller/BoardControllerTest.kt @@ -446,7 +446,7 @@ internal class BoardControllerTest @Autowired constructor( ), responseFields( beneathPath("data").withSubsectionId("data"), - *customPageResponseFieldSnippet() + *customPageCommentResponseFieldSnippet() ) ) ) @@ -490,7 +490,25 @@ internal class BoardControllerTest @Autowired constructor( ) ) } - + private fun customPageCommentResponseFieldSnippet(): Array { + return arrayOf( + fieldWithPath("content[].boardId").description("게시글 ID"), + fieldWithPath("content[].title").description("게시글 제목"), + fieldWithPath("content[].commentId").description("댓글 ID"), + fieldWithPath("content[].commentContent").description("댓글내용"), + fieldWithPath("last").description(""), + fieldWithPath("totalPages").description(""), + fieldWithPath("totalElements").description(""), + fieldWithPath("size").description(""), + fieldWithPath("number").description(""), + fieldWithPath("sort.empty").description(""), + fieldWithPath("sort.unsorted").description(""), + fieldWithPath("sort.sorted").description(""), + fieldWithPath("first").description(""), + fieldWithPath("numberOfElements").description(""), + fieldWithPath("empty").description(""), + ) + } private fun customPageResponseFieldSnippet(): Array { return arrayOf( fieldWithPath("content[].boardId").description("게시글 ID"), @@ -500,6 +518,7 @@ internal class BoardControllerTest @Autowired constructor( fieldWithPath("content[].imageUrl").description("이미지 주소 리스트"), fieldWithPath("content[].category").description("말머리"), fieldWithPath("content[].prefixCategory").description("커뮤니티 대분류"), + fieldWithPath("content[].commentCnt").description("댓글 수"), fieldWithPath("last").description(""), fieldWithPath("totalPages").description(""), fieldWithPath("totalElements").description(""), diff --git a/src/test/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImplTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImplTest.kt index aa0488ca..253bf897 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImplTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/board/service/BoardServiceImplTest.kt @@ -5,7 +5,7 @@ import com.example.jhouse_server.domain.board.BoardPreviewListDto import com.example.jhouse_server.domain.board.PrefixCategory import com.example.jhouse_server.domain.board.entity.BoardCategory import com.example.jhouse_server.domain.board.repository.BoardRepository -import com.example.jhouse_server.domain.user.UserSignInReqDto +import com.example.jhouse_server.domain.user.dto.UserSignInReqDto import com.example.jhouse_server.domain.user.repository.UserRepository import com.example.jhouse_server.domain.user.service.UserService import com.example.jhouse_server.global.exception.ApplicationException diff --git a/src/test/kotlin/com/example/jhouse_server/domain/comment/service/CommentServiceImplTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/comment/service/CommentServiceImplTest.kt index 2ca6b71c..3c21f192 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/comment/service/CommentServiceImplTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/comment/service/CommentServiceImplTest.kt @@ -2,7 +2,7 @@ package com.example.jhouse_server.domain.comment.service import com.example.jhouse_server.domain.board.service.BoardService import com.example.jhouse_server.domain.comment.repository.CommentRepository -import com.example.jhouse_server.domain.user.UserSignInReqDto +import com.example.jhouse_server.domain.user.dto.UserSignInReqDto import com.example.jhouse_server.domain.user.repository.UserRepository import com.example.jhouse_server.domain.user.service.UserService import com.example.jhouse_server.global.exception.ApplicationException diff --git a/src/test/kotlin/com/example/jhouse_server/domain/house/controller/HouseControllerTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/house/controller/HouseControllerTest.kt index 0275d0b0..4c12ef98 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/house/controller/HouseControllerTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/house/controller/HouseControllerTest.kt @@ -3,7 +3,7 @@ package com.example.jhouse_server.domain.house.controller import com.example.jhouse_server.domain.house.repository.HouseRepository import com.example.jhouse_server.domain.house.service.HouseService import com.example.jhouse_server.domain.scrap.service.ScrapService -import com.example.jhouse_server.domain.user.UserSignInReqDto +import com.example.jhouse_server.domain.user.dto.UserSignInReqDto import com.example.jhouse_server.domain.user.entity.User import com.example.jhouse_server.domain.user.entity.agent.Agent import com.example.jhouse_server.domain.user.repository.UserRepository @@ -110,6 +110,7 @@ internal class HouseControllerTest @Autowired constructor( requestFields( fieldWithPath("rentalType").description("매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다. "), fieldWithPath("city").description("주소는 '시도'로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34"), + fieldWithPath("detail").description("상세 주소 예: 1동 1호"), fieldWithPath("zipCode").description("우편번호 ( string 형식입니다. )"), fieldWithPath("size").description("집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다."), fieldWithPath("purpose").description("매물 목적/용도 예: 거주 ( 방3, 화장실 2 )"), @@ -164,6 +165,7 @@ internal class HouseControllerTest @Autowired constructor( requestFields( fieldWithPath("rentalType").description("매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다. "), fieldWithPath("city").description("주소는 '시도'로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34"), + fieldWithPath("detail").description("상세 주소 예: 1동 1호"), fieldWithPath("zipCode").description("우편번호 ( string 형식입니다. )"), fieldWithPath("size").description("집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다."), fieldWithPath("purpose").description("매물 목적/용도 예: 거주 ( 방3, 화장실 2 )"), @@ -302,6 +304,7 @@ internal class HouseControllerTest @Autowired constructor( fieldWithPath("data.houseId").description("빈집 게시글 아이디"), fieldWithPath("data.rentalType").description("매물 타입"), fieldWithPath("data.city").description("매물 위치"), + fieldWithPath("data.detail").description("상세 주소 예: 1동 1호"), fieldWithPath("data.zipCode").description("우편 주소"), fieldWithPath("data.size").description("매물 크기 ( 견적 )"), fieldWithPath("data.purpose").description("매물 목적/용도"), @@ -365,6 +368,7 @@ internal class HouseControllerTest @Autowired constructor( fieldWithPath("data.houseId").description("빈집 게시글 아이디"), fieldWithPath("data.rentalType").description("매물 타입"), fieldWithPath("data.city").description("매물 위치"), + fieldWithPath("data.detail").description("상세 주소 예: 1동 1호"), fieldWithPath("data.zipCode").description("우편 주소"), fieldWithPath("data.size").description("매물 크기 ( 견적 )"), fieldWithPath("data.purpose").description("매물 목적/용도"), @@ -572,6 +576,7 @@ internal class HouseControllerTest @Autowired constructor( requestFields( fieldWithPath("rentalType").description("매매 타입 ( SALE(매매), JEONSE(전세), MONTHLYRENT(월세) )은 필수값입니다. "), fieldWithPath("city").description("주소는 '시도'로 시작하되, 줄이지 않은 표현으로 작성해야 합니다. 예: 서울시 서대문구 거북골로 34"), + fieldWithPath("detail").description("상세 주소 예: 1동 1호"), fieldWithPath("zipCode").description("우편번호 ( string 형식입니다. )"), fieldWithPath("size").description("집 크기는 m^2 단위로 산정해서 작성해야 합니다. string 형식입니다."), fieldWithPath("purpose").description("매물 목적/용도 예: 거주 ( 방3, 화장실 2 )"), @@ -719,7 +724,7 @@ internal class HouseControllerTest @Autowired constructor( // when val resultActions = mockMvc.perform( RestDocumentationRequestBuilders - .get("$uri/my") + .get("$uri/my?keyword=&dealState=") .header(HttpHeaders.AUTHORIZATION, accessToken) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) @@ -733,9 +738,10 @@ internal class HouseControllerTest @Autowired constructor( .andDo( document( "get-my-house-all", -// requestParameters( -// parameterWithName("keyword").description("매물명 키워드 검색"), -// ), + requestParameters( + parameterWithName("keyword").description("매물명 키워드 검색"), + parameterWithName("dealState").description("거래상태 필터링 ( 승인중 : APPLYING | 진행중 : ONGOING | 완료 : COMPLETED | 반려 : REJECTED)"), + ), responseFields( beneathPath("data").withSubsectionId("data"), *customMyPageResponseFieldSnippet() diff --git a/src/test/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImplTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImplTest.kt index 7485db41..fd5dbc0d 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImplTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/house/service/HouseServiceImplTest.kt @@ -8,7 +8,7 @@ import com.example.jhouse_server.domain.house.repository.DealRepository import com.example.jhouse_server.domain.house.repository.HouseRepository import com.example.jhouse_server.domain.scrap.repository.ScrapRepository import com.example.jhouse_server.domain.scrap.service.ScrapService -import com.example.jhouse_server.domain.user.UserSignInReqDto +import com.example.jhouse_server.domain.user.dto.UserSignInReqDto import com.example.jhouse_server.domain.user.entity.Authority import com.example.jhouse_server.domain.user.entity.UserType import com.example.jhouse_server.domain.user.repository.UserRepository @@ -563,7 +563,7 @@ internal class HouseServiceImplTest @Autowired constructor( val houseId = houseService.createHouse(houseReqDto(), writer) val pageable = PageRequest.of(0, 8) // when - val result = houseService.getMyHouseAll(writer, null, pageable) + val result = houseService.getMyHouseAll(writer, null, DealState.APPLYING, pageable) // then assertThat(result.content[0].dealState).isEqualTo(DealState.APPLYING.name) } diff --git a/src/test/kotlin/com/example/jhouse_server/domain/love/service/LoveServiceImplTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/love/service/LoveServiceImplTest.kt index 40769e01..7d63a2df 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/love/service/LoveServiceImplTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/love/service/LoveServiceImplTest.kt @@ -3,7 +3,7 @@ package com.example.jhouse_server.domain.love.service import com.example.jhouse_server.domain.board.repository.BoardRepository import com.example.jhouse_server.domain.board.service.BoardService import com.example.jhouse_server.domain.love.repository.LoveRepository -import com.example.jhouse_server.domain.user.UserSignInReqDto +import com.example.jhouse_server.domain.user.dto.UserSignInReqDto import com.example.jhouse_server.domain.user.repository.UserRepository import com.example.jhouse_server.domain.user.service.UserService import com.example.jhouse_server.global.util.MockEntity diff --git a/src/test/kotlin/com/example/jhouse_server/domain/user/controller/UserControllerTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/user/controller/UserControllerTest.kt index 1b7d8313..9bbc147b 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/user/controller/UserControllerTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/user/controller/UserControllerTest.kt @@ -1,6 +1,6 @@ package com.example.jhouse_server.domain.user.controller -import com.example.jhouse_server.domain.user.* +import com.example.jhouse_server.domain.user.dto.* import com.example.jhouse_server.domain.user.repository.UserRepository import com.example.jhouse_server.domain.user.service.UserService import com.example.jhouse_server.global.jwt.TokenProvider @@ -74,6 +74,8 @@ internal class UserControllerTest @Autowired constructor( fieldWithPath("data.profile_image_url").description("프로필 이미지 URL"), fieldWithPath("data.userType").description("사용자 타입 ( 일반 사용자 : NONE, 공인중개사 : AGENT, 관리자 : WEB/SERVER )"), fieldWithPath("data.email").description("사용자 이메일 계정"), + fieldWithPath("data.suspenseReason").description("최근 신고 사유"), + fieldWithPath("data.reportedAt").description("신고일시"), ) ) ) @@ -964,4 +966,124 @@ internal class UserControllerTest @Autowired constructor( ) ) } + + @Test + @DisplayName("비밀번호 일치 확인") + fun passwordCheck() { + //given + userService.signUp(userSignUpDto) + val tokenDto = userService.signIn(userSignInDto) + val accessToken = tokenDto.accessToken + val passwordCheckReqDto = PasswordReqDto(userSignUpDto.password) + val content: String = objectMapper.writeValueAsString(passwordCheckReqDto) + + //when + val resultActions = mockMvc.perform( + RestDocumentationRequestBuilders + .post("$uri/check/password") + .header(AUTHORIZATION, accessToken) + .content(content) + .contentType(APPLICATION_JSON) + .accept(APPLICATION_JSON) + .characterEncoding("UTF-8") + ) + + //then + resultActions + .andExpect(status().isOk) + .andDo(print()) + .andDo( + document( + "password-check", + requestFields( + fieldWithPath("password").description("비밀번호") + ), + responseFields( + fieldWithPath("code").description("결과 코드"), + fieldWithPath("message").description("응답 메세지"), + fieldWithPath("data").description("비밀번호 일치 여부") + ) + ) + ) + } + + @Test + @DisplayName("이메일 수정") + fun updateEmail() { + //given + userService.signUp(userSignUpDto) + val tokenDto = userService.signIn(userSignInDto) + val accessToken = tokenDto.accessToken + val emailReqDto = EmailReqDto("testToTest@jmhouse.com") + + val content: String = objectMapper.writeValueAsString(emailReqDto) + + //when + val resultActions = mockMvc.perform( + RestDocumentationRequestBuilders + .put("$uri/update/email") + .header(AUTHORIZATION, accessToken) + .content(content) + .contentType(APPLICATION_JSON) + .accept(APPLICATION_JSON) + .characterEncoding("UTF-8") + ) + + //then + resultActions + .andExpect(status().isOk) + .andDo(print()) + .andDo( + document( + "update-email", + requestFields( + fieldWithPath("email").description("사용자 이메일 계정") + ), + responseFields( + fieldWithPath("code").description("결과 코드"), + fieldWithPath("message").description("응답 메세지") + ) + ) + ) + } + + @Test + @DisplayName("전화번호 수정") + fun updatePhoneNum() { + //given + userService.signUp(userSignUpDto) + val tokenDto = userService.signIn(userSignInDto) + val accessToken = tokenDto.accessToken + val phoneNumReqDto = PhoneNumReqDto("01012344321") + + val content: String = objectMapper.writeValueAsString(phoneNumReqDto) + + //when + val resultActions = mockMvc.perform( + RestDocumentationRequestBuilders + .put("$uri/update/phone") + .header(AUTHORIZATION, accessToken) + .content(content) + .contentType(APPLICATION_JSON) + .accept(APPLICATION_JSON) + .characterEncoding("UTF-8") + ) + + //then + resultActions + .andExpect(status().isOk) + .andDo(print()) + .andDo( + document( + "update-phone-num", + requestFields( + fieldWithPath("phone_num").description("전화번호") + ), + responseFields( + fieldWithPath("code").description("결과 코드"), + fieldWithPath("message").description("응답 메세지") + ) + ) + ) + } } diff --git a/src/test/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImplTest.kt b/src/test/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImplTest.kt index 258c87d2..585125f7 100644 --- a/src/test/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImplTest.kt +++ b/src/test/kotlin/com/example/jhouse_server/domain/user/service/UserServiceImplTest.kt @@ -1,7 +1,7 @@ package com.example.jhouse_server.domain.user.service -import com.example.jhouse_server.domain.user.DefaultUser -import com.example.jhouse_server.domain.user.UserSignInReqDto +import com.example.jhouse_server.domain.user.dto.DefaultUser +import com.example.jhouse_server.domain.user.dto.UserSignInReqDto import com.example.jhouse_server.domain.user.entity.WithdrawalReason import com.example.jhouse_server.domain.user.entity.WithdrawalStatus.* import com.example.jhouse_server.domain.user.repository.UserRepository diff --git a/src/test/kotlin/com/example/jhouse_server/global/util/MockEntity.kt b/src/test/kotlin/com/example/jhouse_server/global/util/MockEntity.kt index d93934c0..9e2abde8 100644 --- a/src/test/kotlin/com/example/jhouse_server/global/util/MockEntity.kt +++ b/src/test/kotlin/com/example/jhouse_server/global/util/MockEntity.kt @@ -19,7 +19,7 @@ import com.example.jhouse_server.domain.record_comment.dto.RecordCommentReqDto import com.example.jhouse_server.domain.record_comment.dto.RecordCommentUpdateDto import com.example.jhouse_server.domain.record_review.dto.RecordReviewReqDto import com.example.jhouse_server.domain.record_review.dto.RecordReviewUpdateDto -import com.example.jhouse_server.domain.user.* +import com.example.jhouse_server.domain.user.dto.* import com.example.jhouse_server.domain.user.entity.* class MockEntity { @@ -363,6 +363,7 @@ class MockEntity { fun houseReqDto() = HouseReqDto( rentalType = RentalType.SALE, city = "서울시 서대문구 남가좌동 거북골로 34", + detail = "1동 103호", zipCode = "12345", size = "120909000", purpose = "주거용 ( 방3, 화장실 2 )", @@ -381,6 +382,7 @@ class MockEntity { fun houseUpdateReqDto() = HouseReqDto( rentalType = RentalType.JEONSE, city = "서울시 서대문구 남가좌동 거북골로 90", + detail = "1동 103호", zipCode = "12345", size = "120909000", purpose = "게스트하우스 ( 방3, 화장실 2 )", @@ -405,6 +407,7 @@ class MockEntity { fun houseTmpReqDto() = HouseReqDto( rentalType = RentalType.SALE, city = "서울시 서대문구 남가좌동 거북골로 34", + detail = "1동 103호", zipCode = "12345", size = "120909000", purpose = "주거용 ( 방3, 화장실 2 )", @@ -424,6 +427,7 @@ class MockEntity { fun houseInvalidReqDto() = HouseReqDto( rentalType = null, city = null, + detail = null, zipCode = null, size = null, purpose = null, @@ -443,6 +447,7 @@ class MockEntity { fun houseTmpNullReqDto() = HouseReqDto( rentalType = null, city = null, + detail = null, zipCode = null, size = null, purpose = null, @@ -462,6 +467,7 @@ class MockEntity { fun houseTooLongReqDto() = HouseReqDto( rentalType = RentalType.SALE, city = "서울시 서대문구 남가좌동 거북골로 34", + detail = "1동 103호", zipCode = "12345", size = "120909000", purpose = "주거용 ( 방3, 화장실 2 )",