Giter Club home page Giter Club logo

koddy-backend's Introduction

Koddy Backend

  • Kotlin 1.9.22
  • Spring Boot 3.3.2
  • Spring REST Docs, Swagger
  • Spring Data JPA
  • Kotlin JDSL
  • MySQL, Flyway
  • Redis
  • AWS
  • Kotest, Mockk, TestContainers, RestAssured

koddy-backend's People

Contributors

sjiwon avatar

Stargazers

 avatar

Watchers

 avatar

koddy-backend's Issues

알림 도메인을 설계한다

📄 Describe

  • 커피챗 참여와 관련된 알림을 추적하기 위한 도메인 설계

✅ Tasks

  • Storage에서 알림 도메인 관리 (읽음에 대한 추적을 위해서)

간편 회원가입 로직을 구현한다

📄 Describe

  • 간편 회원가입 로직 구현

✅ Tasks

  • 멘토/멘티 선택 + Email + Password만 선택하는 회원가입 로직 구현
    • 이후 이메일 인증 + 부가정보 기입

사용자 Role 관련 구조를 수정한다

🔨 Describe

  • 기존
    • Member - List
  • 개선
    • 프로젝트 구조 자체가 멘토/멘티로 가입 시점에 정해짐
    • 따라서 Member에 Role Enum을 포함시키는 구조로 개선

LocalTime, LocalDateTime 시간 정보 24:00:00에 대한 이슈를 해결한다

🔨 Describe

  • MySQL TIME, DATETIME 타입에서 24:00:00과 관련된 시간 정보를 Invalid하다고 판단
  • 따라서 프로젝트 상에서 하루의 마지막 시간23:59:59로 통일
    • 23:59:59 자체를 하루의 마지막 시간이라고 통일하고 Client단에서 시간 정보 처리

✅ Tasks

  • 24:00:00 -> 23:59:59
  • TimeUtils에서 String -> LocalTime, LocalDateTime 변환 메소드 추가
  • Request Record에서 LocalTime, LocalDateTime 바인딩 -> String + @JsonFormat 바인딩 설정

커피챗 신청/제안 로직을 구현한다

📄 Describe

  • 커피챗 신청/제안 로직 구현

✅ Tasks

멘티 -> 멘토 (신청)

1. 멘토에게 커피챗을 신청한다

  • 특정 월에 대한 멘토 스케줄(가능한 시간만 표현) 확인 후 해당 월의 날짜/시간 선택
  • 신청 이유 기입해서 신청

2. 멘티로부터 커피챗 신청이 오다

  • 신청 날짜, 자기소개, 이유 고려해서 수락 or 거절
  • 수락 = 미팅 방식 선택해서 적용
    • 줌 링크 (자동 생성 or 수동 생성)
    • 메신저 ID (카카오톡, 라인, 위챗)
  • 거절 = 거절 사유 기입해서 거절

멘토 -> 멘티 (제안)

1. 멘티에게 커피챗을 신청한다

  • 제안 이유 기입해서 신청

2. 멘토로부터 커피챗 신청이 오다

  • 자기소개, 이유 고려해서 수락 or 거절
  • 수락 = 신청 들어온 멘토 스케줄 화면으로 넘어가서 날짜/시간 선택
    • 이후 최종 멘토 수락은 알림 보내서 미팅 방식 선택하고 후처리?
  • 거절 = 거절 사유 기입해서 거절

OAuth API 관련 로직에 대해서 Facade Layer를 도입한다

📄 Describe

  • 기존
    • List<About OAuth Bean...> ...을 주입해서 isSupported를 통해서 필터링 후 Provider에 맞는 빈에 대한 로직 진행
  • 개선
    • Infrastructure Layer에 Facade를 적용해서 단일 인터페이스만으로 뒷단의 N개의 OAuth API를 추상화

토큰 저장소를 Redis로 교체한다

🔨 Describe

  • 토큰 저장소 RDB -> Redis로 교체
    • 요청이 빈번하게 들어오면 RDB Disk I/O보다 In-Memory I/O가 더 효율적이라고 판단
    • TTL 관리도 용이

회원가입 플로우를 개선한다

🔨 Describe

  • 기존
    • 멘토/멘티 Optional 필드까지 전부 받아서 적용
  • 개선
    • Optional 필드 제외하고 회원가입 진행
    • Optional 필드는 이후 프로필 완성 API로 적용

멘토 스케줄 데이터 요청 형식을 수정한다

🔨 Describe

  • 멘토 스케줄 데이터 요청 형식 수정

✅ Tasks

{
  "schedules": [
    {
      "day": "string",
      "startTime": {
        "hour": 0,
        "minute": 0,
        "second": 0,
        "nano": 0
      },
      "endTime": {
        "hour": 0,
        "minute": 0,
        "second": 0,
        "nano": 0
      }
    }
  ]
}
  • LocalTime으로 바인딩 받을 경우 위와 같이 4가지로 분배
  • 이 부분을 hour & minute만 보내도록 수정

커피챗 신청/제안에 대한 수락/거절 로직을 구현한다

📄 Describe

  • 커피챗 신청/제안에 대한 수락/거절 로직 구현

✅ Tasks

멘티 -> 멘토 신청 (APPLY)

  1. 신청받은거 멘토가 거절 (APPLY -> REJECT) -> 거절 사유 기입
  2. 신청받은거 멘토가 수락 (APPLY -> APPROVE) -> 미팅 방식 선택해서 수락

멘토 -> 멘티 제안 (APPLY)

  1. 제안받은거 멘티가 거절 (APPLY -> REJECT) -> 거절 사유 기입
  2. 제안받은거 멘티가 1차 수락 (APPLY -> PENDING) -> 멘토 스케줄 고려해서 선택하고 1차 수락
    1. 멘토가 최종 수락 (PENDING -> APPROVE) -> 미팅 방식 선택해서 수락
    2. 멘토가 최종 거절 (PENDING -> REJECT) -> 거절 사유 기입

회원가입 플로우를 개선한다

🔨 Describe

  • 기존 = 간편 회원가입(email + password) + 부가 정보 기입
  • 개선 = 소셜 로그인 + 필요에 의한 멘토 스케줄 부가 정보 기입
    • Required Value 전부 받기

국적, 언어, 멘토링 시간 관련 데이터 바인딩 방식을 수정한다

🔨 Describe

  • 기존 = Enum 그대로 매핑
  • 개선 = String Type으로 받은 후 내부에서 Converting
    • 이후 검색이나 여러 API 요청 시 Enum으로 매핑하게 된다면 @RequestParam으로 받을 경우 별도의 Converter를 구현해야 한다
    • 이러한 부분을 고려해서 단순 String Type으로 받은 후 내부에서 Convert

커피챗 참여와 관련된 알림 기능을 구현한다

📄 Describe

  • SSE(Server Sent Event)를 활용한 커피챗 참여 관련 알림 실시간 발송 로직 구현
    • Server -> Client로 전달하는 이벤트로써 굳이 주기적으로 폴링하거나 Web Socket처럼 양방향 Connection을 맺을 필요 X

커피챗 예약 관련 도메인을 설계한다

📄 Describe

  • 커피챗 예약 도메인 설계
    • 예약 정보 -> 년, 월, 일, 시간(시작/종료)
    • 궁금한 점
    • 미팅 방식 & 정보 기입
      • 회의 링크(줌, 구글 미트, ...), 메신저ID(카카오톡, 라인, 위챗, ...)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.