-
Notifications
You must be signed in to change notification settings - Fork 4
06 ‐ 02 ‐ My Page (Profile) Wiki
juhyeonlee edited this page Nov 24, 2023
·
21 revisions
- 비즈니스 요구사항
- 아키텍처 설계
- API 엔드포인트 설계
- 다른 모듈과 상호작용 포인트
- 모델 수정 사항
- 사용자의 개인정보와 프로필, 알람, 관심 리스트를 관리한다.
- 개인정보 페이지
- 개인정보(실명, 이메일, 지역, 소속)를 조회할 수 있다.
- 비밀번호를 수정할 수 있다.
- 42인증을 진행할 수 있다.
- 프로필 페이지
- 프로필 정보(프로필 이미지, 닉네임, 소속집단, 이메일, 자기소개)와 링크(링크 제목, 링크 URL)를 조회할 수 있다.
- 닉네임 중복을 확인한다.
- 프로필 정보(프로필 이미지, 닉네임, 자기소개)를 수정할 수 있다.
- 자기소개는 한영 관계없이 150자이다.
- 홈페이지 설정 페이지
- 푸쉬 알람과 이메일 알람을 설정할 수 있다.
- 등록된 알람 키워드 목록을 조회, 등록, 삭제, 전체삭제 할 수 있다.
- 관심 리스트 페이지
- 관심 리스트를 조회, 삭제, 전체삭제 할 수 있다.
- Controller : HTTP 요청을 처리 + 데이터 전처리
- PersonalInfoController : 개인정보(비밀번호) 처리
- ProfileController : 프로필 정보(프로필 이미지, 닉네임, 자기소개, 링크) 처리
- KeywordAlarmController : 알람 키워드
- FavoriteController : 관심있는 리스트
- Service : 비즈니스 로직 수행
- PersonalInfoService : 개인정보조회, 42인증, 비밀번호 수정
- ProfileService : 프로필 조회, 타 사용자 프로필 조회, 닉네임 중복 확인(이는 회원가입 API와 공유), 프로필 정보 수정, 링크 수정
- KeywordAlarmService : 알람 키워드 조회, 등록, 삭제, 전체 삭제
- FavoriteService : 관심있는 리스트 조회, 전체 삭제
- FileService : 파일(여기서는 프로필 이미지)저장, 업로드, 삭제
- Repository : 데이터 저장소와 상호작용을 담당한다.
- UserRepository : 사용자와 관련된 정보들
- UserLinkRepository : 링크와 관련된 정보들
- User : 사용자에 대한 정보가 저장되는 데이터베이스
- id : 사용자에 대한 고유 식별자(Long)
- email : 사용자의 E-mail(String)
- password : 사용자가 등록한 비밀번호로, 암호화되어 저장(String)
- name : 사용자의 실명(String)
- nickname : 사용자의 닉네임(String)
- isAlarm : 사용자가 설정한 알람(Alarm)
- address : 사용자가 설정한 지역(String)
- imageUrl : 사용자가 등록한 프로필 이미지
- certification : 사용자 본인 인증 여부(boolean)
- company : 사용자의 소속(String)
- introducte : 사용자의 자기소개(String)
- peerLevel : 사용자의 피어 레벨(Long)
- representAchievement : 사용자의 대표업적(String)
- keywordAlarm : 사용자가 등록한 알람 키워드(String, ^&%로 구분)
- PeerOperation : 42 서울에 대한 정보들(PeerOperation)
- userAchievements : 사용자가 달성한 업적(List-UserAchievement)
- userLinks : 사용자가 등록한 소개 링크(List-UserLink)
- teamUsers : 사용자가 속한 팀(List-TeamUser)
- recruiteFavorites : 사용자가 등록한 관심 목록(List-RecruitFavorite)
- socialLogins : 소셜 로그인(42/Google)에 관한 데이터(List-SocialLogin)
- indexList1 : 대화목록 - 먼저 대화를 한 경우(List-Message)
- indexList2 : 대화목록 - 대화를 받은 경우(List-Message)
- recruitList : 사용자가 작성한 모집글(List-Recruit)
- UserLink : 사용자가 등록한 링크들이 저장되는 데이터베이스
- id : 사용자가 등록한 링크에 대한 고유 식별자(Long)
- userId : 해당 링크를 등록한 사용자(User)
- link : 링크 주소(String)
- linkName : 링크 이름(String)
- HTTP 헤더에 JWT 토큰을 추가해서 전달해 주셔야합니다. 해당 토큰을 이용해서 사용자를 찾아 CRUD를 진행합니다. (JWT 토큰을 사용하는 API는 JWT 표시, 사용하지 않는 API는 표시 안함)
- 개인정보 조회 :
GET
/api/v1/info (JWT) - 비밀번호 수정 :
PUT
/api/v1/info/password (JWT) - 프로필 조회 :
GET
/api/v1/profile (JWT) - 프로필 수정 :
PUT
/api/v1/profile/introduction/edit(JWT) - 상대방 프로필 조회 :
GET
/api/v1/profile/other/?userId=?infoList= - 링크 수정 :
PUT
/api/v1/profile/link (JWT) - 알람 키워드 조회 :
GET
/api/v1/alarm (JWT) - 알람 키워드 등록 :
POST
/api/v1/alarm/add (JWT) - 알람 키워드 삭제 :
DELETE
/api/v1/alarm/delete?keyword= (JWT) - 알람 키워드 전체 삭제 :
DELETE
/api/v1/alarm/delete/all (JWT) - 관심 모집글 조회 :
GET
/api/v1/recruit/favorite?type=&page&pagesize= (JWT) - 관심 모집글 전체 삭제 :
DELETE
/api/v1/recruit/favorite?type= (JWT)
- 프로필 변경시, 사용되는 프로필 이미지 변경은 NHN의 object storage와 연결되어 있는 ObjectStorage 모듈과 관련있습니다.
- 관심 리스트 조회는 recruit 모듈과 관련있습니다.
- PersonalService
- 42 인증을 진행한 사용자라면,
getAuthenticationFt
를 통해 인트라 아이디를 전달해 줍니다. - Google 인증을 진행한 사용자라면,
getAuthenticationGoogle
를 통해 gmail을 전달해 줍니다.
- 42 인증을 진행한 사용자라면,
- ProfileService
- editLinks
- 사용자가 가지고 있던 링크를 모두 지우고 프론트에서 요청한 링크로 덮어쓰기합니다.
- 만일, 프론트에서 가져온 링크 중에 빈 문자열 혹은 공백으로 된 문자열들은 그냥 건너뜁니다.
- getOtherProfile
- 우선적으로 요청할 수 있는 정보는 닉네임(
nickname
)과 프로필 이미지(profileImageUrl
)로 한정했습니다.- 이는 추후 추가 가능합니다.
- 때문에 이외의 요청이 들어오면 예외처리됩니다.
- 우선적으로 요청할 수 있는 정보는 닉네임(
- editProfile
- 프로필 이미지를 MultipartFile로 가져와야 하기 때문에, 프론트에서 form-data 형식으로 전송합니다.
- form-data는 boolean값이 String으로 들어오기 때문에, 원래 boolean이었던 imageChange를 String으로 받아 처리하도록 했습니다.
- 실제로, ProfileController에서 boolean값으로 반환 뒤,
isChange
로 가져옵니다.- boolean값으로 변환한 이후에는
imageChange
는 사용되지 않습니다.
- boolean값으로 변환한 이후에는
- 프로필 이미지를 변경 할 때 조건문은 다음과 같은 분기문을 기반으로 작성했습니다.
-
isChange
는 사용자 프로필 이미지가 기본 이미지가 아니고, 프론트에서 요청한 이미지가 없는 경우에만 고려 대상입니다.
if (사용자 프로필 이미지가 기본 이미지가 아닌 경우 - 즉, 등록되어 있는 경우) if (프론트에서 요청한 이미지(`profileImage`)가 있는 경우) 이미지를 변경합니다. else if (프론트에서 이미지 변경을 요청(`isChange`가 true)한 경우) 이미지를 삭제합니다. else if (프론트에서 요청한 이미지가 있는 경우) 이미지를 저장(등록합니다.
-
- 프로필 이미지를 MultipartFile로 가져와야 하기 때문에, 프론트에서 form-data 형식으로 전송합니다.
- editLinks
- KeywordAlarmService
- 알람 키워드는 리스트 형태가 아니라 구분문자(^&%)를 기준으로 하나의 문자열로 생성해 저장합니다.
- 가령, Java와 C#을 저장한다면
JS^&%C#
으로 저장됩니다.
- 가령, Java와 C#을 저장한다면
- 알람 키워드는 리스트 형태가 아니라 구분문자(^&%)를 기준으로 하나의 문자열로 생성해 저장합니다.
- FavoriteService
- 관심 모집글은 메인 페이지에 표시되는 관심 모집글과 동일하게 작동해야하기 때문에, 프론트에 전송하는 관심 모집글 컨텐츠 자체는 메인 페이지의 관심 모집글과 동일합니다.
- 알람(알람 키워드가 아닌)은 프론트 엔드의 PWA와 연관있어 보류 했습니다.
- DB 설계, 앤드 포인트 설계 등 전혀 되어있지 않습니다.
- 업적은 기획 수준에서 보류되었습니다.