일기/TIL 94

TIL: Today I Learned 96일차 [ 최종프로젝트 최종발표 ]

오늘은 마지막 최종발표일이자 수료식하는 날! 오전에 북마크쪽에 문제가 발생하여 이슈처리하였다. 컨트롤러에서 API순서와 기능문제가 있었고, 빠르게 수정하였다. 10시쯤 모든 발표가 마무리 되었고, A반중에서 고수들이 모여있는 첼린지팀 1조와 시작부터 4명이고 리더가 없어서 불안했던 우리팀 8조가 최고의 프로젝트 상을 받았다. 그동안 많이 소통하고 격려했던 팀원들과 많은 도움을 주셨던 튜터님들 덕분에 상을 받을 수 있어서 너무 기뻤다. 내배캠 생활동안의 마지막 일기 TIL이지만, 앞으로 꾸준히 나만의 TIL을 작성하며 열심히 공부하고 취업준비해야겠다!

일기/TIL 2023.04.03

TIL: Today I Learned 95일차 [ 최종프로젝트 25일차 ]

최종발표회를 앞둔 마지막 날 발표때는 들어가지 않지만 admin 관련해서 신고엔티티 및 기능을 작성했다. 아예 새로 만드는 기능이기에 팀원들과 튜터님의 도움을 받아서 ERD작성하고 다대다 관계 등을 고민하며 기능을 만들 수 있었다. 생각한대로 완벽하게 만들지는 못했지만, 처음부터 만드는 작업이 흥미롭고 재미있었다. import { Entity, Column, PrimaryGeneratedColumn, OneToMany, ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, } from 'typeorm'; import { Post } from '../../post/entities/post.entity'; import { U..

일기/TIL 2023.04.03

TIL: Today I Learned 94일차 [ 최종프로젝트 24일차 ]

1. 문제 신고엔티티에서 신고당한사람(reportedId)는 유저,게시물,코멘트와 조인할 필요가 있다. @Entity() export class Reports { @PrimaryGeneratedColumn() id: number; @ManyToOne(() => User, (reporter) => reporter.reports) reporter: User; @Column() reporterId: number; // 다대다 테이블? 릴레이션 테이블? 아니면 3개 노가다? @Column() reportedId: number; @Column() description: string; @Column({ type: 'enum', enum: ['checking', 'rejected', 'completed'], defa..

일기/TIL 2023.03.31

TIL: Today I Learned 93일차 [ 최종프로젝트 23일차 ]

1. 문제 프론트에서 북마크 토글시 제공하는 반환값 2. 시도해본 것들 프론트와의 소통이 중요했다. 제가 어떤 값을 보내드리면 되죠? 라고 물었더니 컬렉션 id, name, hasPost: true & false값이 필요하다고 했다. hasPost는 데이터베이스에 없는 컬럼인데 어떻게 반환해야 할까? 3. 해결과정 프론트 담당자에게 Res에 대한 대답을 듣고나니 코드 짜기는 수월했다. 일단 해당 컬렉션에 포스트가 있는지, 없는지 체크하는 hasPost가 제일 고민이었는데 생각보다 간단했다. 그냥 만들어서 전달해주면 되었다. /* ### 23.03.29 ### 표정훈 ### 북마크 토글 API🔥 */ async selectBookmark(postId: number, collectionId: number, ..

일기/TIL 2023.03.29

TIL: Today I Learned 92일차 [ 최종프로젝트 22일차 ]

1. 문제 북마크에서 기본으로 제공하는 기본 북마크에 포스트를 저장하는 기능 2. 시도해본 것들 우선 기본 북마크는 어떻게 찾을 것인가? 회원가입하자마자 모두에게 주어지는 기본 북마크이므로 제일 먼저 생성된 북마크이다. 3. 해결과정 findOne 메서드로 찾으면 가장 먼저 나오는 것이 기본 북마크였다. /* ### 23.03.28 ### 표정훈 ### 기본 북마크에 포스팅 더하기 */ async basicCollectionPlusPosting(postId: number, userId: number) { try { //본인의 첫번째 북마크(모든 게시물)의 id를 찾는다. const basicBookmark = await this.collectionRepository.findOne({ where: { us..

일기/TIL 2023.03.29

TIL: Today I Learned 91일차 [ 최종프로젝트 21일차 ]

1. 문제 회원정지시 3일,7일,30일로 하려고 할때, 자동화하여 정지 풀어주는 로직을 고민하고 있었다. 2. 시도해본 것들 처음에는 타이머를 생각했으나, 서버가 꺼지면 자동으로 초기화되는 등 실제 서비스 제공하기는 어렵다. 3. 해결과정 타이머의 대체제를 찾던 도중 'node-cron'이라는 기능을 알게 되었다. 실제 서비스에서도 사용할 수 있고, 사용하는 방법도 간단했다. 4. 알게 된 점 타이머와 node-corn의 차이점을 알게 되었고, corn의 경우, 서비스 코드에서 작성하는것이 아니라 app.module.ts 또는 main.ts 같은 곳에 작성해야 서비스가 사용될때마다 주기적으로 이벤트를 줘서 작동시킬 수 있다. import * as cron from 'node-cron'; import { ..

일기/TIL 2023.03.28

TIL: Today I Learned 90일차 [ 최종프로젝트 20일차 ]

기존에 뜨는 맛집리스트라는 기능구현을 했다. TypeORM으로 기능 구현했는데 그룹화하고, 평균값 구하는 등 많은 일을 하려다보니 find문을 사용한후로 다양한 로직을 구현했다. /* ### 23.03.20 ### 표정훈 ### [Main] 요즘 뜨는 맛집리스트🔥 */ async HotMyList() { try { // 1달 전 날짜를 구한다 const oneMonthAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); // 컬렉션과 게시물, 좋아요 정보를 가져온다 const myListSumLikes = await this.collectionItemRepository.find({ relations: { post: { postLikes: true, user: ..

일기/TIL 2023.03.27

TIL: Today I Learned 89일차 [ 최종프로젝트 19일차 ]

요즘 뜨는맛집 - 유저프로필이미지가 없다 => post에 있는 user 정보가 아니라 collection에 있는 user정보였다. 요즘 뜨는맛집 - 리스트 5개 나오게 하기 => take 수량변경 맛집리스트 수정에서 이미지가 안된다 => 참고해야할 변수명이 image가 아닌 file 이었다. 맛집리스트 상세보기 - 카테고리 그룹네임-> 카테고리 네임 변경 프론트 연결중에 문제가 생긴 부분을 수정했고, 내일 배포할때 사용할 구글폼을 팀원들과 함께 작성하였다. 테스트코드 공부를 좀 하였으나 역시나 어려워서 머리가 아픈 하루였다.

일기/TIL 2023.03.23

TIL: Today I Learned 88일차 [ 최종프로젝트 18일차 ]

컬렉션 안에 있는 맛집별로 평균 평점을 구하는 작업을 했다. 처음엔 아무 생각없이 모든 평점을 모아서 평균을 냈는데, 생각해보니 1가지 맛집에 대한 평점만 낸것이어서, 다른 맛집도 추가하여 분리해보았다. 맛집ID가 같은 것끼리 분리해야하니, 그룹화가 필요했고, 그룹화 이후 각 포스트 정보는 1개씩만 대표로 가져오게 했다. async getMyListDetail(collectionId: number, page: string) { try { let pageNum = Number(page) - 1; const myListInOnePage = 1; if (isNaN(pageNum) || pageNum < 0) { pageNum = 0; } // 컬렉션 이름과 포스트 정보 가져오기 const myList = aw..

일기/TIL 2023.03.23

TIL: Today I Learned 87일차 [ 최종프로젝트 17일차 ]

요즘 뜨는 맛집리스트와 내 친구의 맛집리스트 기능구현을 했다. 요즘 뜨는 맛집리스트는 쿼리문을 작성하는 것까진 쉬웠으나 원하는 값을 뽑아오는건 힘들었다. 추가적으로 내 친구의 맛집리스트는 어떤식으로 데이터를 가져올지 고민을 했다. 우선 user에서 정보를 가져와야 할 것 같았다. 내 userId를 통해 내가 팔로잉하고 있는 유저아이디를 찾았다. 해당 유저아이디를 where에 넣어서 유저게시물 정보를 찾아오는 방식으로 구현했다. (유저아이디 먼저 찾고, 유저아이디를 토대로 게시물 정보 찾기) const followerId = await this.followRepository.find({ where: { follower: { id: userId }, }, select: { following: { id: tr..

일기/TIL 2023.03.23