당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 팀프로젝트
  • react
  • emotion
  • 코드캠프
  • javascrpit
  • graphql
  • 팀플
  • algorithm
  • 팀 프로젝트
  • JS
  • next.js
  • 자바스크립트
  • CSS
  • refreshtoken
  • 배열
  • 리액트
  • 공통 컴포넌트
  • 코딩
  • React-hook-form
  • 알고리즘
  • 프론트엔드
  • 부트캠프
  • 코딩 부트캠프
  • 프로그래머스
  • ssg
  • HTML
  • typescript
  • 배포
  • javascript
  • 회고

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니

귀엽고 행복해

[roominus] 팀 프로젝트 4주차 - 주차별 회고(4)
프론트엔드✏️/팀 프로젝트✨

[roominus] 팀 프로젝트 4주차 - 주차별 회고(4)

2022. 8. 1. 14:46
728x90
반응형

~오쪼라고 단체사진~

// ThemeDetailPage 전체 코드

import { gql, useQuery } from "@apollo/client";
import { useRouter } from "next/router";
import { useEffect, useState } from "react";
import { useRecoilState } from "recoil";
import { userInfoState } from "../../../src/commons/store";
import ThemeCommentList from "../../../src/components/units/theme/comment/list/ThemeCommentList.container";
import ThemeCommentWrite from "../../../src/components/units/theme/comment/write/ThemeCommentWrite.container";
import ThemeDetail from "../../../src/components/units/theme/detail/ThemeDetail.container";

const FETCH_THEME_REVIEWS = gql`
  query fetchThemeReviews($themeId: String!) {
    fetchThemeReviews(themeId: $themeId) {
      id
      clear
      rank
      content
      createdAt
      star
      user {
        id
      }
    }
  }
`;

const FETCH_RESERVATIONS_USER = gql`
  query fetchReservationsUser($page: Float) {
    fetchReservationsUser(page: $page) {
      id
      reservation_date
      theme_menu {
        reservation_time
        theme {
          id
          title
        }
      }
    }
  }
`;

interface IFetchReservationData {
  theme_menu: {
    theme: {
      id: string;
    };
  };
}

interface IFetchThemeReviewsData {
  id: string;
  user: {
    id: string;
  };
}

export default function ThemeDetailPage() {
  const router = useRouter();

  const [isReviewer, setIsReviewer] = useState(true);

  const [userInfo] = useRecoilState(userInfoState);

  const { data } = useQuery(FETCH_RESERVATIONS_USER, {
    variables: {
      page: 1,
    },
  });

  const { data: fetchThemeReviews } = useQuery(FETCH_THEME_REVIEWS, {
    variables: {
      themeId: router.query.id,
    },
  });

  useEffect(() => {
    fetchThemeReviews?.fetchThemeReviews.filter(
      (el: IFetchThemeReviewsData) => el.user.id === userInfo.id
    ).length >= 1
      ? setIsReviewer(false)
      : setIsReviewer(true);

    // 댓글 작성한 적이 있으면 댓글 다는 권한 false로 변경

    if (
      data?.fetchReservationsUser.filter(
        (ele: IFetchReservationData) =>
          ele.theme_menu.theme?.id === router.query.id
      ).length === 0
    ) {
      setIsReviewer(false);
    }

    // 예약한 내역이 없으면 댓글 다는 권한 false로 변경

    if (!userInfo.id) setIsReviewer(false);

    // 비로그인 회원이면 권한 false로 변경
  }, [fetchThemeReviews?.fetchThemeReviews]);

  return (
    <>
      <ThemeDetail />
      {isReviewer && <ThemeCommentWrite />}
      <ThemeCommentList />
    </>
  );
}

디테일 페이지에서 reviewer일때만 후기(댓글) 작성칸이 나타나도록 했다. 

 

 

useEffect(() => {
    fetchThemeReviews?.fetchThemeReviews.filter(
      (el: IFetchThemeReviewsData) => el.user.id === userInfo.id
    ).length >= 1
      ? setIsReviewer(false)
      : setIsReviewer(true);

    // 댓글 작성한 적이 있으면 댓글 다는 권한 false로 변경

    if (
      data?.fetchReservationsUser.filter(
        (ele: IFetchReservationData) =>
          ele.theme_menu.theme?.id === router.query.id
      ).length === 0
    ) {
      setIsReviewer(false);
    }

    // 예약한 내역이 없으면 댓글 다는 권한 false로 변경

    if (!userInfo.id) setIsReviewer(false);

    // 비로그인 회원이면 권한 false로 변경
  }, [fetchThemeReviews?.fetchThemeReviews]);

 예약 정보랑 댓글 데이터를 가져온다.

거기서 user.id 를 뽑아와서 현재의 userInfo.id와 비교한다. 

나는 filter로 id가 같은지 비교해보고 그게 1 이상이면(같은 게 있다면) ... 으로 조건식을 만들었다.

 

 변수이름에 대해 무지할 때라서 el, ele 같은 이름을 썼다... 

예약 정보에 있는 테마들의 id와 현재 테마의 id(router.query.id)가 같은 게 있는지 확인하고 없다면 setIsReviewer(false) 해주었다. 

 

 로그인을 안 한 경우엔 간단하게 userInfo로 확인할 수 있다. 

댓글을 작성하거나 삭제 했을 때마다 검증이 필요하므로 의존성 배열에 fetchThemeReviews를 넣었다. 

 


 

기억나는게 검색 만든거랑, 이미 리뷰 쓴 사람/예약 안 한 사람/비회원 댓글 작성창 못 보게 하게 만든 건데...! 

후자는 좀 문제가 있다. 오늘 고치러 왔다. 하하하! 

 

 이번주에는 우선순위 3차였던 것들도 조금 하고, 퍼블리싱도 다듬고, 추가 기능도 넣었다.

정말 마무리하는 느낌의 주~ 퍼블리싱은 고쳐도 고쳐도 또 고칠게 나와서 힘들었다... orz 

이슈가 600개가 넘었다! 충격... 선배기수가 한 팀에서 300갠가 했던 것 같아서 그것도 많다~ 생각했는데 600까지 갈줄이야...

 

 금요일엔 우리 단체사진도 찍고 개인 사진도 다 찍었다. 멘토님이 강의실 한 번 빌려주셔서 한 시간 동안 완전 미친듯이 찍었다! 햇빛이 잘 들어서 너무 좋았다. 진짜 조명키고 찍은 거랑 차원이 달라서 너무너무 감사하고 있다. LOVE 사진 찍고 돌아와선 오랜만에 회의하고 비용 정산할 것도 적었다. 그리고! 내가 사진 찍어준대신 롤링페이퍼 해달라고 부탁드렸다. 그래서 다 같이 롤링페이퍼를 썼다~^ㅅ^ 귀여워귀여워! 그리고 지하에 '인생사진'에서 다 같이 사진 찍고 싶어서 그것도 찍었다. 여섯명이서 찍긴 힘들었지만... 아무튼 나는 진짜 우리팀이 너무 좋다! 행운이라고 생각한다. 이런 추억 남길 수 있음에 너무 감사하다. 

 

 새로고침하면 502 bad gateway가 뜨는 문제가 있는데... 클라우드 프론트나 로드밸런서 문제 같은데 배포는 진짜... ㅠㅠ 너무 도움 요청하고 싶다. 일단은 서버를 계속 열어두면 안 떠서 그렇게 돌아가고 있다. 배포 문제까지 딱 완벽하게 끝나길! 

 

 

 

 

+ ) 

 그리고 백엔드 서버 비용을 다 써서 다른 백엔드분 서버로 옮기느라 DB가 다 날아갔다. 전부 다시 올려아한다는... 슬픔...  그래도 일단 그 전에 gif들은 따두었다. 어서 데이터 올리고 댓글 부분 문제를 고치고 싶다! 

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 팀 프로젝트✨' 카테고리의 다른 글

0427 오늘의 에러  (0) 2023.04.27
팀 프로젝트 room:in us 회고  (0) 2022.08.08
프론트엔드에서 검색을 해보자~~~!!!  (0) 2022.07.29
JavaScript heap out of memory - 힙 메모리 누수 확인, 디버깅  (0) 2022.07.28
프론트엔드 부트캠프 78일차, 팀 프로젝트(20) 글은 일인당 하나로 제한합니다.  (0) 2022.07.28
    '프론트엔드✏️/팀 프로젝트✨' 카테고리의 다른 글
    • 0427 오늘의 에러
    • 팀 프로젝트 room:in us 회고
    • 프론트엔드에서 검색을 해보자~~~!!!
    • JavaScript heap out of memory - 힙 메모리 누수 확인, 디버깅
    당근먹는하니
    당근먹는하니

    티스토리툴바