-
Notifications
You must be signed in to change notification settings - Fork 1
1127 BE 회의록
송준섭 edited this page Dec 4, 2023
·
1 revision
- 별에 관련된 API 글 API랑 구분하기 CRUD
- 유저별로 모든 별에 대한 정보 가져오는 API + 게시글 id
- GET /board/by-author를 바꿔서 (GET /star/by-author처럼)
- 별 정보(pos, size, color)와 함께 게시글 id, title을 같이 넘겨
- 그 뒤에 GET /board/:id 요청하면 게시글 상세정보 고고
- GET /board/by-author를 바꿔서 (GET /star/by-author처럼)
- 생성할 때 PATCH /star/:id 수정+등록
- 별에 필요한 정보
- position
- size
- color
- 유저별로 모든 별에 대한 정보 가져오는 API + 게시글 id
-
유저에 대한 “비공개, 링크로만 접근 가능, 검색 가능” 세 단계 상태 컬럼에 추가하기
- user 테이블
- status 컬럼 : [”private”, “shared_link”, “searchable”]
- share 테이블
- id 컬럼
- link 컬럼 : “0000-0000-0000-0000”: uuid string 또는 null
- user_id 컬럼 : user 테이블 id 외래키
- 이후 게시글에 대한 정보 요청방법
- 그냥 user 모듈에서 board service
- repository를 의존성 주입 한담에 findAlBy..
- 프로세스
- 프론트에서 shared/0000-0000-1234
- GET /api/auth/shared/0000-0000-1234 로 요청
- 서버에서
- share 테이블에서 link컬럼 조회하여 매칭되는거 있나 확인
- 없으면 404
- 있으면 user_id를 이용해서 그 사람의 별 포지션, 스타일 이런거 가져와서 프론트에 넘겨주면 프론트가 그림
- 그리고 세부 별 클릭해서 세부 데이터 조회하면 그에 맞는 글 데이터 넘겨주면 됨
- 프론트에서 shared/0000-0000-1234
2안
그냥 맨 처음에 링크에대해 프론트에서 api콜이 오면 우리는 유저 아이디 또는 유저 닉네임만 넘겨준다
그리고 다시 프론트에서 api를 쏴서 그 유저에 대한 별 스타일 등을 조회한다
문제점은 지금 조회에 Guard들이 다 있다는것 → 근데 링크조회를 받아온 사용자는 로그인을 안했을 수 있다. 손님일 수있음
Board 조회에 Guard가 필요한 이유
일단 지금 구현을 할 때 Guard에서 붙여준 req.user정보를 사용함 → 이건 수정할 수 있어
로그인 한 사용자에게 서비스를 제공하기로 했음
- user 테이블
- GET /api/auth/shared/0000-0000-1234 로 요청
- 서버는 링크에 해당하는 유저 닉네임을 넘겨줌 ( 만약 없는 링크면 404 )
- 클라이언트는 넘겨받은 유저 닉네임으로 GET /api/board/by-author?author=닉네임 으로 별 글 목록 조회
- GET /board/:id, GET /board/by-author는 public으로 사용할 수 있도록 UseGuards를 뺌
- GET /board는 사용자 본인의 별글 목록 조회를 위해 새로 만들어서 UseGuards 넣음
- GET /board/:id ← private이면 private + 본인 요청인 경우에만 허용해야됨 → 이거는 따로 로직 안에 그 글의 주인을 조회 하고 그 글의 주인의 공유 상태를 확인하는 로직 추가
- 그러니까 그러면 결국 useguard 있어야됨ㅋ
- 그걸로 렌더링
유저의 처음 상태는 비공개
일단 유저의 공유 여부를 전환하기 위해 PATCH /api/auth/status에 요청을 보냄
요청 메세지 Body는
{
“status”: “public” // 또는 "only_link", "private"
}
그 후 공유 링크를 얻으려면 GET /api/auth/sharelink에 요청을 보냄
그러면 서버는 쿠키에서 유저 정보를 읽음
만약 유저가 private인 상태다 → NotFound 발생
아닌 경우는 데이터베이스에서 유저 정보로 링크 조회
만약 조회되는 링크가 없다면 새로 생성하여 데이터베이스에 저장하고 응답메세지로 반환
글 조회에 Guard가 필요하냐
© 2023 debussysanjang
- 🐙 [가은] Three.js와의 설레는 첫만남
- 🐙 [가은] JS로 자전과 공전을 구현할 수 있다고?
- ⚽️ [준섭] NestJS 강의 정리본
- 🐧 [동민] R3F Material 간단 정리
- 👾 [재하] 만들면서 배우는 NestJS 기초
- 👾 [재하] GitHub Actions을 이용한 자동 배포
- ⚽️ [준섭] 테스트 코드 작성 이유
- ⚽️ [준섭] TypeScript의 type? interface?
- 🐙 [가은] 우리 팀이 Zustand를 쓰는 이유
- 👾 [재하] NestJS, TDD로 개발하기
- 👾 [재하] AWS와 NCP의 주요 서비스
- 🐰 [백범] Emotion 선택시 고려사항
- 🐧 [동민] Yarn berry로 모노레포 구성하기
- 🐧 [동민] Vite, 왜 쓰는거지?
- ⚽️ [준섭] 동시성 제어
- 👾 [재하] NestJS에 Swagger 적용하기
- 🐙 [가은] 너와의 추억을 우주의 별로 띄울게
- 🐧 [동민] React로 멋진 3D 은하 만들기(feat. R3F)
- ⚽️ [준섭] NGINX 설정
- 👾 [재하] Transaction (트랜잭션)
- 👾 [재하] SSH 보안: Key Forwarding, Tunneling, 포트 변경
- ⚽️ [준섭] MySQL의 검색 - LIKE, FULLTEXT SEARCH(전문검색)
- 👾 [재하] Kubernetes 기초(minikube), docker image 최적화(멀티스테이징)
- 👾 [재하] NestJS, 유닛 테스트 각종 mocking, e2e 테스트 폼데이터 및 파일첨부
- 2주차(화) - git, monorepo, yarn berry, TDD
- 2주차(수) - TDD, e2e 테스트
- 2주차(목) - git merge, TDD
- 2주차(일) - NCP 배포환경 구성, MySQL, nginx, docker, docker-compose
- 3주차(화) - Redis, Multer 파일 업로드, Validation
- 3주차(수) - AES 암복호화, TypeORM Entity Relation
- 3주차(목) - NCP Object Storage, HTTPS, GitHub Actions
- 3주차(토) - Sharp(이미지 최적화)
- 3주차(일) - MongoDB
- 4주차(화) - 플랫폼 종속성 문제 해결(Sharp), 쿼리 최적화
- 4주차(수) - 코드 개선, 트랜잭션 제어
- 4주차(목) - 트랜잭션 제어
- 4주차(일) - docker 이미지 최적화
- 5주차(화) - 어드민 페이지(전체 글, 시스템 정보)
- 5주차(목) - 감정분석 API, e2e 테스트
- 5주차(토) - 유닛 테스트(+ mocking), e2e 테스트(+ 파일 첨부)
- 6주차(화) - ERD
- 2주차(화) - auth, board 모듈 생성 및 테스트 코드 환경 설정
- 2주차(목) - Board, Auth 테스트 코드 작성 및 API 완성
- 3주차(월) - Redis 연결 후 RedisRepository 작성
- 3주차(화) - SignUpUserDto에 ClassValidator 적용
- 3주차(화) - SignIn시 RefreshToken 발급 및 Redis에 저장
- 3주차(화) - 커스텀 AuthGuard 작성
- 3주차(수) - SignOut시 토큰 제거
- 3주차(수) - 깃헙 로그인 구현
- 3주차(토) - OAuth 코드 통합 및 재사용
- 4주차(수) - NestJS + TypeORM으로 MySQL 전문검색 구현
- 4주차(목) - NestJS Interceptor와 로거
- [전체] 10/12(목)
- [전체] 10/15(일)
- [전체] 10/30(월)
- [FE] 11/01(수)~11/03(금)
- [전체] 11/06(월)
- [전체] 11/07(화)
- [전체] 11/09(목)
- [전체] 11/11(토)
- [전체] 11/13(월)
- [BE] 11/14(화)
- [BE] 11/15(수)
- [FE] 11/16(목)
- [FE] 11/19(일)
- [BE] 11/19(일)
- [FE] 11/20(월)
- [BE] 11/20(월)
- [BE] 11/27(월)
- [FE] 12/04(월)
- [BE] 12/04(월)
- [FE] 12/09(금)
- [전체] 12/10(일)
- [FE] 12/11(월)
- [전체] 12/11(월)
- [전체] 12/12(화)