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

KDT5 Team4_4조 토이프로젝트 제출_(양준용, 김다슬, 이용수, 송수연) #10

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

7581058
Copy link

@7581058 7581058 commented Jul 2, 2023

KDT5_Team4

양준용, 김다슬, 이용수, 송수연


📑 프로젝트 주제

image

거래 API를 활용해 코로나 시기에 오프라인 쇼핑을 하지 못하는 소비자들을 위한
온라인 상으로 퍼스널 컬러를 진단 하고 진단 결과에 따른 제품을 추천 받고 구매할 수 있는
메이크업 제품 판매 쇼핑몰입니다.


📆 프로젝트 기간

2023.05.30 ~ 2023.07.02


🔗 배포 링크

뷰티인사이드


🔧 기술 스택

config

development


enviroment


deployment

design


📁 주요 기능

사용자

인증:
로그인, 회원가입, 로그아웃

메인페이지:
메인 배너 출력, 베스트 제품 출력, 신상품 출력,  추천 제품 출력

퍼스널컬러 진단 페이지:
퍼스널 컬러 진단, 퍼스널 컬러별 추천 제품 출력

베스트 페이지:
베스트 제품 출력

메이크업 페이지:
카테고리별 제품 출력

장바구니 페이지:
제품 목록 저장, 저장된 목록 출력, 제품 구매로 연결

주문 페이지:
장바구니에서 구매할 제품 출력, 가격 합계 출력, 구매할 사용자의 등록된 계좌 출력, 구매 신청

마이페이지-구매 내역 페이지:
구매한 내역 출력, 구매 내역 상세 정보페이지로 이동

마이페이지-구매 내역 상세 페이지:
구매한 내역 상세 정보 출력

마이페이지-계좌 관리 페이지:
등록된 계좌 출력, 새로운 계좌 등록, 등록된 계좌 삭제

관리자

대시보드 페이지:
오늘의 거래 데이터 출력(오늘 거래 횟수, 취소수, 완료수, 총 매출)
상품 현황 출력(총 상품 수, 현재 품절 상품 수)
이번달 거래 데이터 출력(총 거래수, 거래 취소 수, 거래 완료 수)
매출 차트 출력

상품관리 페이지:
현재 등록된 상품 목록 출력, 상품 목록 정렬, 상품 선택 삭제, 상품 등록페이지로 이동

상품 등록 페이지:
상품 등록

상품 수정 페이지:
등록된 상품 정보 수정

상품 상세 페이지:
클릭된 상품 상세 정보 출력, 상품 삭제

거래 내역 관리 페이지:
거래 내역 목록 출력

거래 내역 상세 페이지:
클릭된 거래 내역 상세 정보 출력, 거래 취소, 거래 완료

사용자 목록 페이지:
회원가입된 사용자 목록 출력

💻 구현 화면

보기
로그인 회원가입
image image
퍼스널컬러 퍼스널컬러 진단
image image
퍼스널컬러 결과 메인
image image
베스트 메이크업
image image
장바구니 결제
image image
구매내역 구매내역상세
image image
계좌관리 계좌등록
image image
상세정보 관리자-대시보드
image image
관리자-상품관리 관리자-상품상세
image image
관리자-상품추가 관리자-상품수정
image image
관리자-거래내역관리 관리자-거래내역상세
image image
관리자-사용자 목록 관리자-로그인
image image

👍팀원&역할 분담

양준용 김다슬(조장) 이용수 송수연
image image image image
와이어프레임, UI, 사용자-퍼스널 컬러 진단 페이지, 사용자-회원가입, 사용자-로그아웃, 사용자-메인, 사용자-상세정보 와이어프레임, UI, 사용자-장바구니, 사용자-결제, 사용자-계좌관리, 사용자-구매내역,상세, 관리자-대시보드, 관리자-상품목록/상세/등록/수정, 관리자-거래내역/상세, 관리자-사용자목록 사용자-베스트, 사용자-메이크업, 사용자-로그인, 사용자-회원가입, 사용자-로그인인증(헤더) 사용자-회원가입, 사용자-퍼스널컬러진단페이지

참고 사항

보기

사용자 관리자를 각각 다른 저장소에서 개발해서 제출 업로드는 합쳐서 올립니다.

개별 저장소 링크:
사용자
관리자


관리자 계정

보기

이메일: [email protected]
비밀번호: 1q2w3e4r

@7581058 7581058 changed the title 4조 토이프로젝트 제출 KDT5_Team4 토이프로젝트 제출_(양준용, 김다슬, 이용수, 송수연) Jul 2, 2023
@7581058 7581058 changed the title KDT5_Team4 토이프로젝트 제출_(양준용, 김다슬, 이용수, 송수연) KDT5 Team4_4조 토이프로젝트 제출_(양준용, 김다슬, 이용수, 송수연) Jul 2, 2023
@7581058 7581058 assigned azure0929 and 7581058 and unassigned azure0929 Jul 2, 2023
Copy link
Member

@iamidlek iamidlek left a comment

Choose a reason for hiding this comment

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

총평

좋았던 점

가지고 있는 정보를 활용하여 시각적으로 다양한 기능을
구현하려고 노력하신 부분이 인상 깊었습니다.
api가 잘 정리되어 있어 좋을 것 같고 폴더 구조도 고민을 하신 것 같아 좋습니다.

아쉬운 점

api 관련 타입 설정이나 예외처리 부분이 일관적이지 않은 것 같습니다.
컴포넌트 내에 불필요한 변수가 들어 있거나
비슷한 로직을 가진 반복되는 컴포넌트가 많이 있는 것 같습니다.
컴포넌트 하나당 들고있는 내용이 많은 것 같습니다.
store를 활용 하는 등 역할을 나누어 보면 좋을 것 같습니다.
불필요한 요청이나 렌더링이 발생하게 되는 부분이 있습니다.
이런 부분은 기간적으로 짧아서 어쩔 수 없는 부분이라 생각합니다.
시간이 되면 몇군데 최적화를 해보시면 좋을 것 같아요.

질 만드셨습니다! 고생하셨습니다!

Comment on lines +7 to +13
useEffect(() => {
const time = new Date()
setDay(time.getFullYear() + '년' + (time.getMonth() + 1) + '월' + time.getDate() + '일')
}, [])

useEffect(() => {
const Timer = setInterval(() => {
Copy link
Member

Choose a reason for hiding this comment

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

하나의 useEffect 안에서 처리 가능할 것 같아요.
시간을 구하고 set하는 같은 동작을 함수로 만들 수 있을 것 같아요.

Comment on lines +24 to +29
const CATEGORYOPTION = [
{ label: '카테고리', value: '카테고리' },
{ label: '페이스', value: '페이스' },
{ label: '립', value: '립' },
{ label: '아이', value: '아이' },
]
Copy link
Member

Choose a reason for hiding this comment

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

컴포넌트 외부에 선언해도 좋을 것 같습니다.

Comment on lines +36 to +37
const THUMB_MAX = 1024 ** 2 //1MB
const DETAIL_MAX = 1024 ** 2 * 4 //4MB
Copy link
Member

Choose a reason for hiding this comment

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

매직 넘버를 만들지 않은 것은 좋으나
위 리뷰와 동일하게 컴포넌트 외부에 가지고 있어도 될 것 같습니다.

Comment on lines +126 to +132
Category.length === 0 ||
Category[0] === '카테고리' ||
Title.length === 0 ||
Price === 0 ||
Description.length === 0 ||
Thumb.length === 0 ||
Detail.length === 0
Copy link
Member

Choose a reason for hiding this comment

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

따로 validation하는 함수를 만들어
현재 비교 사항이 어떤 것을 위한 확인 인지 명칭을 정하는 것이 어떨까요?
나중에는 if 조건이 왜 어떤 것을 확인하기 위해 왜 이렇게 작성되어있는지
다시 읽어봐야 알 수 있을 것 같아요

import { useState, useEffect } from 'react'
import { addProduct, editProduct, Product } from '../apis/api'

export const AdminForm = ({ formtype }: { formtype: string }) => {
Copy link
Member

Choose a reason for hiding this comment

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

컴포넌트 하나에 많은 처리가 있는 것 같습니다.
컴포넌트를 나눌 것은 나누고 state(변화 시 재 렌더링이 필요한 변수)는 store로 관리하는 등
간단하게 만들어 각 컴포넌트의 역할을 파악하기 쉽게 만들
방법을 고민해 보면 좋을 것 같습니다.

const CoolProduct = () => {
const navigate = useNavigate()

const Product = [
Copy link
Member

Choose a reason for hiding this comment

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

내부에 선언하지 않아도 될 것 같습니다.


return (
<div>
<GlobalStyle />
Copy link
Member

Choose a reason for hiding this comment

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

매 컴포넌트 마다 부르게 작성하신 이유가 있을까요?

Comment on lines +270 to +273

productList?.forEach((product) => (productTotal += product.price));
total = productTotal + DELIVERY_CHARGE;

Copy link
Member

Choose a reason for hiding this comment

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

total의 경우 state나 memo로 관리하는 것이 어떨까 싶습니다.

// 선택한 태그 배열을 전달하여 분류 처리
useEffect(() => {
onSelectTags(selectedTags); // onSelectTags 콜백 함수 호출
}, [selectedTags, onSelectTags]);
Copy link
Member

Choose a reason for hiding this comment

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

onSelectTags를 바라볼 이유가 있을까요?

})

// 사용자 : 회원가입
export const signUp = async (email: string, password: string, displayName: string) => {
Copy link
Member

Choose a reason for hiding this comment

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

함수에서 반환하는 값의 타입이 있으면 좋을 것 같습니다.

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.

3 participants