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

4조 과제 제출 (차동민, 박진영, 김성은, 김세연) #1

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

Conversation

cdm1263
Copy link

@cdm1263 cdm1263 commented Jul 14, 2023

Wallet Keeper

배포사이트

Wallet Keeper



개발팀원

dev-DongMin
차동민
dev-SeongEun
김성은
dev-SaeYeon
김세연
dev-JinYoung
박진영
역할
작성용 모달 구현,캘린더 구현,
깃허브 및 브랜치 관리
역할
차트 구현, 디자인 구현
역할
날짜별 조회,수정
삭제,검색기능 구현
역할
날짜별 수입,지출,합계 구현



프로젝트기간

2023.07.05 ~ 2023.07.14





기술스택

Develoment


Config

Enviroment


Cowork Tools

전체 화면 구성

메인 페이지 수입 추가
메인 수입추가
지출 추가 전체 내역 검색(전체)
지출추가 전체 내역 검색-전체
전체 내역 검색(수입) 전체 내역 검색(지출)
지출추가 어바웃

차트 부분

차트 부분

cdm1263 and others added 30 commits July 5, 2023 16:42
cdm1263 and others added 29 commits July 13, 2023 22:01
주석 추가 및 warning 해결
FEAT : #10 차트에러 수정 및 전역 스타일 다듬기
STYLE:사이트 로고 수정, DOCS: README수정 및 사용되는 이미지 추가
Comment on lines +3 to +26
//상세 디자인 스타일은 우주부동산 피그마에 정리되어 있습니다.
export const theme: DefaultTheme = {
colors: {
blue: {
main: '#4464FF', // Blue : 프로젝트 메인 컬러, 수입 항목 + 플러스 값
pressed: '#2C3D8F', // Deep blue : 버튼 클릭 상태 컬러
bg: '#CDDEFF' // Light blue : 버튼 클릭하지 않은 상태, input,list등 넓은 면적 또는 bg
},
black: {
black30: '#1f1f1f1f', //기본 블랙, 텍스트 + 배경 사용
black50: '#1f1f1f71', //기본 블랙, 텍스트 + 배경 사용
black100: '#1F1F1F', //기본 블랙, 텍스트 + 배경 사용
},
white: '#FFFFFF', // Box bg
red: '#FF6969', //소비 항목 + 마이너스 값
// green: '#41EE53'
gray: [
'#6A6E83', //[0] Dark Gray
'#A8B1CE', //[1] Light Gray
'#F8F9FD' //[2] White Gray
]
}
};

Choose a reason for hiding this comment

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

공통 브랜드 컬러를 theme.ts와 styled.d.ts를 이용하여 글로벌하게 사용하고 일관될 수 있게 세팅하고 간 점 정말 중요한거 같습니다

Comment on lines +1 to +81
import axios from 'axios';

// API 공통 영역 변수
const api = axios.create({
baseURL: 'http://52.78.195.183:3003/api',
headers: {
'Content-Type': 'application/json'
}
});

// 기록 작성 및 수정용 interface
export interface IContent {
amount: number;
userId: string;
category: string;
date: string;
}
export interface IContentExtend extends IContent {
_id: string;
__v: number;
}

// 소비 기록 작성
const postData = async (content: IContent) => {
const res = await api({ method: 'POST', url: '/expenses', data: content });
return res.data;
};

// 소비 품목 목록 조회
const getCategory = async (userId: string) => {
const res = await api.get(`/categories?userId=${userId}`);
return res.data;
};

// 검색어에 해당하는 소비 항목 및 금액 조회
const getSearch = async (keyword: string, userId: string) => {
const res = await api.get(`/expenses/search?q=${keyword}&userId=${userId}`);
return res.data;
};

// 일별, 주별, 월별 소비 조회
const getPeriod = async (period: string, userId: string) => {
const res = await api.get(
`/expenses/summary?period=${period}&userId=${userId}`
);
return res.data;
};

// 소비 기록 수정
const editData = async (contentId: string, content: IContent) => {
const res = await api({
method: 'PUT',
url: `/expenses/${contentId}`,
data: content
});
return res.data;
};

// 소비 기록 삭제
const delData = async (contentId: string) => {
const res = await api.delete(`/expenses/${contentId}`);
return res.data;
};

// 소비 기록 달력 호출
const getCalendar = async (year: number, month: number, userId: string) => {
const res = await api.get(
`/expenses/calendar?year=${year}&month=${month}&userId=${userId}`
);
return res.data;
};

export {
postData,
getCategory,
getSearch,
getPeriod,
editData,
delData,
getCalendar
};

Choose a reason for hiding this comment

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

API를 모듈화 시켜서 관리하고 주석을 상세하게 달아 놓는 것은 가장 기본적이면서도 가장 중요한 것 같습니다
프로젝트가 커질수록 기능이 많아지는 만큼 관련 함수도 많아지는데 나중에 자신이 짠 코드를 까먹는 경우, 어디 파일에 있는지
찾기 어려운 경우가 있습니다.
이번 프로젝트는 간단한 프로젝트여서 API를 하나의 파일로 정리해도 무관하지만,
규모가 큰 프로젝트나 현업에서는 API를 기능별로 파일을 나눠서 분류하는 경우도 있으니 나중에 기회가 된다면
그렇게 해보는 것도 추천드립니다!

Comment on lines +47 to +64
const Btns = styled.div`
width: 100%;
height: 9%;
background-color: ${theme.colors.blue.main};
`;
const BtnActive = styled.button`
width: 50%;
height: 100%;
padding: 10px;
text-align: center;
font-size: 1.1rem;
font-weight: 800;
word-spacing: -0.1em;
border-radius: 40px 40px 0px 0px;
background: ${theme.colors.white};
color: ${theme.colors.blue.main};
border: none;
`;

Choose a reason for hiding this comment

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

스타일드 컴포넌트를 이용해서 CSS를 동적으로 구현하려고 하고 페이지내에서 고유하게 주려고 했던 것은 정말 좋습니다!
다만, 아쉬운 것은 스타일드 컴포넌트가 HTML 태그를 커스텀할 수 있다는 장점으로 인해 많이 고유한 태그를 커스텀할 때는 오히려 혼란을 줄 수도 있고 코드가 복잡할 수가 있습니다!

이러한 것들을 방지하기 위해서는
common영역에 들어갈 공통적으로 사용될 코드들을 최대한 만들어 놓고 가는게 좋습니다
그래야 코드 가독성도 깔끔해지는 효과를 보실 수 있습니다

가령) btn같은 버튼들을 아예 컴포넌트 파일을 따로 만든 뒤에 그안에서 styled-components로 커스텀해놓고
props를 이용해서 상황에 맞게 색깔이나 width, height 값을 변경할 수 있게 만들면 필요할 때마다 그 컴포넌트만 import해서
사용할 수 있으므로 필요한 상황에서만 커스텀 컴포넌트를 만들게 되어 좀더 일관적인 코드를 짤 수 있습니다!

Comment on lines +89 to +101
const Container = styled.div`
height: 100%;
width: 100%;
background-color: ${theme.colors.white};
`;
const DateContain = styled.div`
width: 100%;
height: 10%;
padding-top: 40px;
display: flex;
align-items: center;
justify-content: center;
`;

Choose a reason for hiding this comment

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

공통코드에 이어 추가설명하자면 현재 코드들을 보면
태그 단위별로 모두 커스텀해서 스타일을 주고 있는 모습을 볼 수 있습니다
코드에 정답이 있는 것은 아니지만
재사용되지 않을 코드들에 대해서는
부모요소안에서 중첩으로 스타일을 주는 것이 더욱 가독성이 좋은 코드를 짤 수 있고 효율적일 수 있습니다!

Comment on lines +8 to +13
interface IPostModalProps {
setChange: React.Dispatch<React.SetStateAction<boolean>>;
getContent: () => Promise<void>;
selectedDate: string;
setIsModalOpen: React.Dispatch<React.SetStateAction<boolean>>;
}

Choose a reason for hiding this comment

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

interface를 활용하여 setState 함수와 Promise 까지 타입를 지정해준 것은 정말 좋았습니다!
Promise를 interface에 선언하는 것은 어떤 면에서 의미가 있을까요?

Comment on lines +175 to +180
color: ${$IncomeColor
? theme.colors.blue.main
: $SpendingColor
? theme.colors.red
: theme.colors.white};
`}

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.

5 participants