m1ndy5's coding blog

1차 API 설계 및 클래스 설계 본문

Toy Projects/중간 장소 추천 서비스

1차 API 설계 및 클래스 설계

정민됴 2023. 12. 9. 14:09

유저

  • 클래스 설계
    UserController -> UserService -> UserRepository
  • API 설계
    유저 생성 : POST /members
    유저 전체 조회 : GET /members
    유저 한명 조회 : GET /members/{id}
    유저 정보 수정 : PATCH /members/{id}
    유저 삭제 및 비활성화 : PATCH /members/{id}

    커뮤니티 - 게시글

  • 클래스 설계
    PostController -> PostService -> PostRepository
  • API 설계
    게시글 생성 : POST /posts
    유저의 게시글 전체 조회 : GET /members/{id}/posts
    게시글 한개 조회 : GET /posts/{id}
    게시글 수정 : PUT /posts/{id}
    게시글 삭제 : PATCH /posts/{id}

    커뮤니티 - 댓글 & 대댓글

  • 클래스 설계
    CommentController -> CommentService -> CommentRepository
  • API 설계
    게시글에 댓글 달기 : POST /posts/{id}/comments
    게시글의 댓글 전체 조회 : GET /posts/{id}/comments
    댓글 한개 조회 : GET /posts/{id}/comments/{id} or /comments/{id}
    댓글 수정 : PUT /posts/{id}/comments/{id} or /comments/{id}
    댓글 삭제 : PATCH /posts/{id}/comments/{id} or /comments/{id}
    대댓글 달기 : POST /comments/{id}/recomments
    댓글의 대댓글 전체 조회 : GET /comments/{id}/recomments
    대댓글 수정 : PUT /comments/{id}/recomments/{id} or /recomments/{id}
    대댓글 삭제 : PATCH /comments/{id}/recomments/{id} or /recomments/{id}

    중간 지점 찾기

  • 클래스 설계
    MiddlePointController

    << interface >> MiddlePointService
    Centroid Service : 무게 중심으로 중간 좌표 구하는 로직
    // 추후에 더 좋은 방법있으면 만들기

    MiddlePointRepository
  • API 설계
    사용자들의 좌표 입력 : POST /middlepoints
    전송값 : 사용자들의 위치 좌표
    결과값 : 유저들의 위치 좌표 값들의 중간 지점에 해당하는 지역 코드들(여러개)

    가게 추천

  • 클래스 설계
    StoreController

    << interface >> StoreService
    AdminCheckStoreService : 관리자가 허용한 가게들만 등록 가능
    // 추후에 더 좋은 방법있으면 만들기

    StoreRepository
  • API 설계
    가게 등록 : POST /area/{area-code}/stores
    가게 조회 : GET /area/{area-code}/stores
    가게 한개 조회 : GET /area/{area-code}/stores/{id}
    가게 정보 수정 : PATCH /area/{area-code}/stores/{id} or /stores/{id} -> 이 또한 관리자에게 요청을 보내면 승인하는 형식으로 해야할듯
    가게 삭제 : PATCH /area/{area-code}/stores/{id} or /stores/{id} -> 관리자 권한, 일반 사용자는 삭제 권한 x
  • 생각해봐야할 점
    지역코드를 어떻게 지정할까?
    ENUM으로 해도 될까?

    가게 리뷰 작성

  • 클래스 설계
    ReviewController -> ReviewService -> ReviewRepository
  • API 설계
    리뷰 등록 : POST /stores/{id}/reviews
    한 가게 리뷰 전제 조회 : GET /stores/{id}/reviews
    리뷰 한개 조회 : GET /stores/{id}/reviews/{id}
    리뷰 수정 : PUT /stores/{id}/reviews/{id} or /reviews/{id}
    리뷰 삭제 : PATCH /stores/{id}/reviews/{id} or /reviews/{id}