Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Y_FE_Toy1_Team10 패캠 수강생을 위한 위키 FASTWIKI #12

Open
wants to merge 233 commits into
base: main
Choose a base branch
from

Conversation

TaePoong719
Copy link

@TaePoong719 TaePoong719 commented Sep 22, 2023

FAST WIKI : 패캠 수강생을 위한 위키

📚프로젝트 소개

제작기간 : 2023.09.08 ~ 2023.09.22
제작인원 : 5명

  • 패스트 캠퍼스 수강생을 위한 편의 기능 제공(QR, 줌 링크, 노션 링크 ..)
  • 행정 처리 정보(출석정정, 휴가 ..)를 수정 가능한 위키 형태로 제공
  • 공지사항과 수강생의 랜덤 토크가 가능한 갤러리 기능 제공
  • 랭킹 시스템등급제로 수강생끼리의 학습을 촉진


👩‍💻팀원소개

심정아 이예인 장호진 정효주 최우혁 이재협 멘토님
joanShim furaha707 LeHiHo hhjs2 Taepoong LEEJAEHYUB
학습시간 기록, 모달 컴포넌트 디자인 시안 갤러리 CRUD, 에디터, 카테고리 필터링, 페이지네이션 메인페이지, 캐러샐, 최근게시물, 랭킹페이지, 다크모드 wiki page, 댓글 CRUD, 사이드바, wiki 반응형, 마크다운 에디터 배포, 레이아웃 및 초기설정, 헤더, 회원가입/로그인 , 유저정보, 등급 판별 따스한 멘토링 및 코드리뷰❤️

🎁기술 스택

✨Browser✨

Library

Deploy / Dev

👤유저플로우

image


🖼️라우터 구조

image


✨세부 기능 설명

1️⃣ 메인 페이지 - 장호진

  • 퀵링크(온라인강의, 노션, 줌, 슬랙, 스프레드시트)가 포함된 배너를 제작하여 react-slickd을 이용해 캐러셀을 구현
  • firebase에 저장된 studytime 상위 5명 표시
  • 갤러리의 최신게시물 6개 표시
2023-09-22.23.03.46.mov

2️⃣ wiki 페이지 - 정효주

페이지별 화면 렌더링 회원 로그인 확인
1 2
마크다운 에디터 수정 후 작성자 시간 업데이트
  • 페이지 별로 저장된 데이터를 Firebase로 불러와 화면에 보여짐
  • 로그인 전 수정 시도 시 경고 알람창이 뜬 후 확인 버튼을 누르면 로그인 창으로 이동
  • 마크다운 문법으로 수정한 후, firebase에 Update됨
  • 글 수정시 수정한 사람, 수정한 날짜 Update

3️⃣댓글 기능 - 정효주

https://github.com/TaePoong719/fastcampus-wiki/assets/102405617/2a13692e-2b1e-4f0d-b893-265b2cd89b30

  • 로그인 여부에 따라 댓글을 입력하면 firebase에 데이터를 등록
    3
  • 랭킹 페이지 유저의 등급 별로 Emblem 등급 다르게 표시 됨
  • firebase에서 실시간으로 데이터를 불러와 새로고침하지 않아도 작성한 댓글이 생성
  • 자신이 작성한 댓글만 삭제와 수정 버튼이 보여 가능

4️⃣ 갤러리 - 이예인

  • 공지 및 자유게시판의 용도의 갤러리 페이지 구현
카테고리 필터링 페이징 (3x2) 리스트 페이지
  • 게시글에 썸네일 지정, 이미지 및 텍스트 작성 및 수정 가능
상세페이지 새 게시글 등록 게시글 수정

5️⃣ 랭크 - 장호진

  • firebase에 저장된 유저의 공부시간을 순위별로 표시하고 댓글창 구현
2023-09-22.23.13.05.mov

6️⃣ 헤더, 사이드바 반응형 - 최우혁

데스크톱 모바일(로그인X) 모바일(로그인O)
  • 반응형 헤더 구현(별도의 모바일 헤더 컴포넌트)

  • 사이드바 반응형 애니메이션

7️⃣ 회원가입 / 로그인 - 최우혁

회원가입/로그인 예외처리
  • Firebase Authentication을 이용하여 유저 정보를 관리
  • Firebase Firestore 유저 컬렉션으로 프로필 사진과, 공부시간, 등급 등의 정보를 가져 동료들의 작업을 원활히 도움
  • 유저의 편의성을 위해, 로그인 후 자동으로 진입 전 페이지로 돌아감(회원가입 페이지는 제외)
  • 로그인, 회원가입 에러 예외처리

8️⃣ 학습시간 기록 - 심정아

초기 화면 학습시간 기록 시작 모달 off

학습시간의 측정을 위해서 공부 시작과 종료를 측정하고 누적 공부시간을 Firebase firestore에 저장

  1. header의 학습기록 버튼 생성
  2. 로그인 상태에서 학습기록 버튼을 누르면 나타나는 Modal에서 학습 기록을 시작
    1. Modal을 닫아도 기록 상태 유지
    2. 학습 기록 시작 시 header에서 기록 중 표시
  3. Modal 내 현재시각, 현재까지의 학습시간이 표시
  4. 공부 중일 경우 기록중 배지 표시
  5. 공부 종료 시 계산 된 학습시간은 분단위로 올림되어 firestore에 저장

9️⃣ 유저정보 - 최우혁

데스크톱 모바일 사진 편집
  • 사진 편집 기능 : 편집 버튼을 누르면 파일 입출력이 나오고, 사진 저장 버튼으로 바뀝니다
  • 반응형에 따른 조건부 렌더링

🔟 등급 판별 - 최우혁

  • 학습시간 기록과 로그인 시에 localStorage와 firestore의 등급을 갱신
  • 데이터베이스의 사용을 줄이기 위하여 localStorage를 사용
  • 등급 변경 시 Alert 창을 통하여 유저에게 알림
  • 여러 컴포넌트에서 사용하는 로직을 한 함수, 한 기능 원칙을 통해 간결하게 정리

1️⃣1️⃣ 다크모드 - 장호진

모든 요소를 전역적으로 관리하는 다크모드

2023-09-22.23.15.30.mov

1️⃣2️⃣ 반응형 디자인 - 공통

  • 모든 페이지에 반응형 적용
Untitled.1.mp4

기술문서 보러가기

TaePoong719 and others added 30 commits September 8, 2023 20:02
디자인 초안이 나옴에 따른 컴포넌트 관계 설정 및 컴포넌트 레이아웃 재조정 (이슈 #1)
Revert "디자인 초안이 나옴에 따른 컴포넌트 관계 설정 및 컴포넌트 레이아웃 재조정 (이슈 #1)"
마크다운 에디터 구현을 위한 초기 세팅 (이슈 #7)
@TaePoong719 TaePoong719 changed the title Y fe toy1 team10 Y_FE_Toy1_Team10 패캠 수강생을 위한 위키 FASTWIKI Sep 22, 2023
Copy link

@LEEJAEHYUB LEEJAEHYUB left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

타스형여러분 정말 고생많으셨습니다!
여러분들 모두 기능, 코드 다 잘 구현하시고 잘 작성하셨어요!
제가 드린 리뷰 내용은 참고 부탁드리고 추후 프로젝트나 코드 작성 시에 참고만 해주시면 감사드리겠습니다 :)
남은 기간 화이팅하시고 남은 프로젝트들도 지금 처럼만 잘 하셔서 좋은 결과 있으시길 바랍니다!
추가로 문제가 발생한 것과 현재 이슈에 대해 피드백하고 고치려고 하신 점 너무 훌륭하세요!
고생하셨습니다 :)

</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

나중에 React에서 Index.html에서 해야할 일들, 정리해야할 코드들을 한번 검색해보세요!
보통 google analytics 같은 분석 insight를 사용해야 할 때 index.html에서 해야할 일 들이 있을 수도 있습니다!


const App = () => {
return (
<DarkMode>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DarkMode 컴포넌트는 스타일드 컴포넌트에서 다크모드를 구현한 컴포넌트가 맞지만 global 스타일을 지정한 부분도 있기 때문에 컴포넌트 이름명을 다른 것으로 했으면 어떨까 싶습니다.

handleClick,
activeCategory,
}) => {
const [displaySidebar, setDisplaySidebar] = useState(false);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

useState에도 타입지정을 권장합니다.


<SidebarList>
<li key={"출석"} className={"sidebar__menu"}>
<Link to="출석" onClick={() => handleItemClick("출석")}>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link에 ["출석", "행정", "학습시간 등급"] 이게 반복되고 있습니다.
모바일일 경우, 데스크톱일 경우 나눌때 링크를 한번만 작성해볼 수 있는 방법을 생각해보면 좋을것 같아요! 반복되는 코드를 줄일 수 있을것 같아요.

/>
</a>
<a
href="https://docs.google.com/spreadsheets/d/1Ffg--2TCzecwLMODoBHrTAk7zWufPLrJoyLVCwE4ea4/edit#gid=1823006152"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

href 링크도 img태그의 src처럼 안전하게 관리해보세요!

);
}

const userCredential = await createUserWithEmailAndPassword(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

비밀번호가 일정한 기준을 충족하는지에 대한 검증 로직이 추가 되면 좋을 것 같습니다.
예를 들어 비밀번호 길이, 비밀번호 조합 등의 로직 등이 있을 것 같습니다.

showCancelButton: true,
confirmButtonText: "확인",
cancelButtonText: "취소",
}).then((res) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

async await 이므로 여기도 then 대신 await로 변경할 수 있을 것 같습니다.

};

// 데이터 수정하기
const editGallery = async (id: string | undefined) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

async/ await 는 try catch 문으로 에러 핸들링을 권장합니다.

}, []);

// 사이드바 쿼리구현
const handleClick = async (category: string) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

async를 사용한다면 try catch로 에러 핸들링을 권장합니다.

});

//firebase에 문서 update
const upDateUser = async (value: ValueState) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

async await 일 때는 try catch 문으로 에러 핸들링을 권장합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants