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

v0.1.0 배포 #120

Merged
merged 50 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
2ec921c
Feat/16 (#23)
kutta97 Nov 1, 2023
7da9943
feat: Label, LabelText 공통 컴포넌트 (#27)
DongjaJ Nov 2, 2023
03fb14b
feat: 공용 레이아웃 컴포넌트 추가 (#29)
kutta97 Nov 3, 2023
863f37e
feat(ui): profileInfo 컴포넌트 제작
Eosdia Nov 3, 2023
4b2f773
fix : vercel 배포 링크에서 라우팅 오류 해결 (#36)
DongjaJ Nov 3, 2023
d328a6b
fix(ui): props 변수명 변경, infoTexts 활용
Eosdia Nov 3, 2023
f9daaa6
chore: 이슈 템플릿 내용 주석처리
sukvvon Nov 3, 2023
d7a5f9a
chore: 이슈 템플릿에 설정된 레이블 제거
sukvvon Nov 3, 2023
8a3e621
feat: BottomNavBar 컴포넌트 개발 (#34)
kutta97 Nov 3, 2023
5f7dc89
design(ui): 이미지크기 변경
Eosdia Nov 3, 2023
b4eb204
feat: InfoTextList, InfoTextItem 컴포넌트 추가 및 DateText 컴포넌트 제거 (#38)
sukvvon Nov 3, 2023
a2da367
Merge pull request #31 from Anifriends/feat/22
Eosdia Nov 3, 2023
a699d61
chore: packages의 ui를 shared로 변경, library 버전 통일, router 타입 추가 (#39)
sukvvon Nov 5, 2023
13ce14e
feat(shared): axios Interceptor 추가 (#40)
DongjaJ Nov 5, 2023
3cd8b10
fix(shared): 단위를 %에서 rem, calc를 활용하여 변경 (#42)
sukvvon Nov 5, 2023
845c56d
feat: ApplicantStatus 컴포넌트 개발 (#44)
kutta97 Nov 7, 2023
482d1e0
fix: 공통 레이아웃 컴포넌트 margin 버그 수정 및 리팩토링 (#48)
kutta97 Nov 7, 2023
a4750df
feat(shared): ImageCarousel 컴포넌트 추가 (#55)
sukvvon Nov 7, 2023
7c8f658
feat : ReviewItem 컴포넌트 (#51)
DongjaJ Nov 8, 2023
6cc7128
feat: 공통 header 기능 개발 및 layout 컴포넌트 리팩토링 (#54)
kutta97 Nov 8, 2023
5e26275
feat: EditPhotoList, EditPhotoItem 컴포넌트 추가 (#52)
sukvvon Nov 8, 2023
4114d77
feat: api 함수 부분적으로 추가 (#46)
DongjaJ Nov 8, 2023
0cc6702
feat: SettingGroup & SettingItem 컴포넌트 개발 (#49)
Eosdia Nov 8, 2023
b2829d3
feat: InfoTextItem 컴포넌트 리팩토링 및 InfoItem 컴포넌트를 통한 확장성 개선 (#59)
kutta97 Nov 8, 2023
8fd157e
feat: Pretendard 폰트 추가, Provider 위치 통일 및 추가 (#68)
sukvvon Nov 10, 2023
d26d42f
feat: 보호소앱과 봉사자앱의 로그인 페이지의 UI, useToggle 훅 추가 (#66)
sukvvon Nov 10, 2023
8ffb93c
feat: 봉사자 어플 msw 연결 + 봉사자, 보호소 앱에 로그인, 이메일 중복체크 mock api 추가 (#77)
DongjaJ Nov 11, 2023
636f81b
feat: 보호소 앱 마이페이지 UI 개발 (#62)
kutta97 Nov 11, 2023
3d1a46c
feat: 봉사 리뷰 페이지 ui (#64)
DongjaJ Nov 11, 2023
9b1193c
feat: 봉사 모집글 리스트 페이지 ui (#74)
DongjaJ Nov 11, 2023
5b6e38d
refactor: Signin 페이지 svg 파일 컴포넌트로 변환, useToggle initialState false로 변…
sukvvon Nov 11, 2023
4d0ab97
feat(shared): api 수정 및 추가 (#60)
DongjaJ Nov 11, 2023
37adb87
chore: 이슈 템플릿에 존재하는 오타 제거 및 공백 추가
sukvvon Nov 12, 2023
4126324
hotfix: api 함수 에러 해결 (#83)
DongjaJ Nov 13, 2023
128a991
bug: 공통 레이아웃 컴포넌트 UI 깨짐 현상 수정 (#86)
kutta97 Nov 13, 2023
f906135
feat: 보호소앱과 봉사자앱의 회원가입 페이지의 UI, useRadioGroup 훅, RadioGroup 컴포넌트 추가 (…
sukvvon Nov 13, 2023
2521697
Refactor : shared에 있는 api들에서 공통 api들을 제외하고 각 apps의 api로 이동 (#87)
DongjaJ Nov 13, 2023
eb5088a
design(shared): 공통 레이아웃 컴포넌트의 margin bottom 제거 (#95)
kutta97 Nov 13, 2023
af2c666
feat(shelter): 봉사 모집 게시글 페이지 UI 및 Filter hook 개발 (#96)
kutta97 Nov 14, 2023
def3bc1
feat(shelter): 보호소 마이페이지 msw 연결 (#97)
kutta97 Nov 14, 2023
af65cb4
feat: 보호소앱과 봉사자앱의 로그인 페이지의 로직 추가 (#100)
sukvvon Nov 14, 2023
1eda42d
feat: 보호소앱과 봉사자앱의 회원가입 페이지의 로직 추가 (#99)
sukvvon Nov 14, 2023
b773892
feat(shelter): 무한 스크롤 훅 추가 (#91)
DongjaJ Nov 14, 2023
da36a7e
Feat : 봉사자 모집 리스트 페이지 로직 추가 및 msw 연결 (#104)
DongjaJ Nov 14, 2023
d4fa5a2
feat: 보호소 봉사모집 상세페에지 UI 및 버튼 로직 구현 (#105)
Eosdia Nov 14, 2023
579ec90
feat: 보호소 리뷰 페이지에 api 연결 및 로직 추가 (#108)
DongjaJ Nov 15, 2023
a8a4546
feat: 보호소앱, 봉사자앱의 auth(signin, signup) api, api 관련 type, msw handler …
sukvvon Nov 15, 2023
127dc57
feat: Pretendard에서 IBM Plex Sans으로 기본 폰트 변경 (#116)
sukvvon Nov 16, 2023
5122d13
refactor: auth 관련 타입 상수명 개선 및 tanstack react query 사용으로 인한 auth api 내…
sukvvon Nov 16, 2023
f5f123f
feat(shelter, volunteer): SigninPage 컴포넌트 msw 관련 로직 추가 (#119)
sukvvon Nov 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = {
root: true,
extends: ["custom"],
extends: ['custom'],
};
17 changes: 10 additions & 7 deletions .github/ISSUE_TEMPLATE/♻️-리팩토링-요청.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
---
name: '♻️ 리팩토링 요청'
name: "♻️ 리팩토링 요청"
about: 변경 혹은 개선해야 되는 문제를 작성해 주세요
title: 'refactor: '
labels: ''
assignees: ''

---

## 개선해야 되는 코드 혹은 기능에 대해서 적어주세요
## 개선해야 되는 코드 혹은 기능에 대해서 적어주세요
<!-- 개선해야 될 코드에 대한 명확하고 간단한 설명 -->


개선해야 될 코드에 대한 명확하고 간단한 설명

## 원하는 개선 방향
<!-- 개선해야 되는 간단한 이유 혹은 개선 후 장점에 대해 적어주세요 -->


개선해야 되는 간단한 이유 혹은 개선 후 장점에 대해 적어주세요

## 생각 중인 기능 추가 방안
<!-- 해결책으로 간단하게 생각한 개선 방법에 대해 적어주세요 -->

해결책으로 간단하게 생각한 개선 방법에 대해 적어주세요

## ETC

스크린샷이나 기능 등 추가 자료를 기술해 주세요
## ETC
<!-- 스크린샷이나 기능 등 추가 자료를 기술해 주세요 -->
19 changes: 10 additions & 9 deletions .github/ISSUE_TEMPLATE/✨-기능-추가-요청.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
---
name: '✨ 기능 추가 요청'
name: "✨ 기능 추가 요청"
about: 구현하려는 새로운 기능을 요청
title: 'feat: '
title: 'feat: '
labels: ''
assignees: ''

---

## 추가하려는 기능이 어떠한 문제 혹은 기능과 연관되어 있나요?
## 추가하려는 기능이 어떠한 문제 혹은 기능과 연관되어 있나요?
<!-- 문제가 무엇인지에 대한 명확하고 간결한 설명을 적어주세요 -->

문제가 무엇인지에 대한 명확하고 간결한 설명을 적어주세요

## 원하는 기능 추가

추가하려는 기능을 명확하고 간결하게 설명해주세요
## 원하는 기능 추가
<!-- 추가하려는 기능을 명확하고 간결하게 설명해주세요 -->

- [ ] todo
- [ ] todo

## 생각 중인 기능 추가 방안
<!-- 해결책으로 간단하게 생각한 기능의 방향 혹은 컴포넌트를 설명해주세요 -->

해결책으로 간단하게 생각한 기능의 방향 혹은 컴포넌트를 설명해주세요

## ETC

스크린샷이나 기능 등 추가 자료를 기술해 주세요
## ETC
<!-- 스크린샷이나 기능 등 추가 자료를 기술해 주세요 -->
9 changes: 6 additions & 3 deletions .github/ISSUE_TEMPLATE/🐛-버그-리포트.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,20 @@ about: 버그를 고쳐주세요
title: 'bug: '
labels: ''
assignees: ''

---

## 버그 설명
<!-- 발생되는 문제에 대해 간단하게 설명해 주세요 -->

발생되는 문제에 대해 간단하게 설명해 주세요

## 버그 발생 단계

## 버그 발생 단계
<!--
동작을 재현하는 단계:

1. ‘...‘로 이동합니다.
2. ‘....‘을 클릭합니다.
3. ‘....’까지 아래로 스크롤합니다.
4. 오류 보기
4. 오류 보기
-->
4 changes: 2 additions & 2 deletions apps/shelter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"scripts": {
"build": "tsc && vite build",
"dev": "vite",
"lint": "eslint \"src/**/*.ts\"",
"lint": "eslint \"src/**/*.{ts,tsx}\"",
"preview": "vite preview"
},
"dependencies": {
Expand All @@ -24,7 +24,7 @@
"react-error-boundary": "^4.0.11",
"react-hook-form": "^7.47.0",
"react-router-dom": "^6.17.0",
"ui": "workspace:*",
"shared": "workspace:*",
"zod": "^3.22.4",
"zustand": "^4.4.4"
},
Expand Down
22 changes: 16 additions & 6 deletions apps/shelter/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
import { ChakraProvider } from '@chakra-ui/react';
import { CustomButton, Header } from 'ui';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import { RouterProvider } from 'react-router-dom';
import Fonts from 'shared/fonts';
import theme from 'shared/theme';

import { router } from '@/routes';

const queryClient = new QueryClient();

export default function App() {
return (
<ChakraProvider>
<Header />
보호소 어플리케이션
<CustomButton />
</ChakraProvider>
<QueryClientProvider client={queryClient}>
<ChakraProvider theme={theme} resetCSS>
<Fonts />
<RouterProvider router={router} />
<ReactQueryDevtools initialIsOpen={false} />
</ChakraProvider>
</QueryClientProvider>
);
}
26 changes: 26 additions & 0 deletions apps/shelter/src/apis/auth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import axiosInstance from 'shared/apis/axiosInstance';
import type {
checkDuplicatedEmailRequestData,
checkDuplicatedEmailResponseData,
SigninRequestData,
SigninResponseData,
} from 'shared/types/apis/auth';

import { SignupRequestData } from '@/types/apis/auth';

export const signinShelter = async (data: SigninRequestData) =>
await axiosInstance.post<SigninResponseData, SigninRequestData>(
'/auth/shelters/login',
data,
);

export const signupShelter = async (data: SignupRequestData) =>
await axiosInstance.post<unknown, SignupRequestData>('/shelters', data);

export const checkDuplicatedShelterEmail = async (email: string) =>
await axiosInstance.post<
checkDuplicatedEmailResponseData,
checkDuplicatedEmailRequestData
>('/shelters/email', {
email,
});
140 changes: 140 additions & 0 deletions apps/shelter/src/apis/recruitment.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
import axiosInstance from 'shared/apis/axiosInstance';

type PageInfo = {
totalElements: number;
hasNext: boolean;
};

type Recruitment = {
recruitmentId: number;
recruitmentTitle: string;
recruitmentStartTime: string;
recruitmentEndTime: string;
recruitmentDeadline: string;
recruitmentIsClosed: boolean;
recruitmentApplicantCount: number;
recruitmentCapacity: number;
};

type RecruitSearchParams = {
keyword: string;
startDate: string;
endDate: string;
isClosed: boolean;
content: boolean;
title: boolean;
pageSize: number;
pageNumber: number;
};

type PostRecruitmentParams = {
title: string;
startTime: string;
endTime: string;
deadline: string;
capacity: number;
content: string;
imageUrls: string[];
};

type AttendanceStatus = {
applicantId: number;
attendance: boolean;
};

type Gender = 'MALE' | 'FEMALE';
type RecruitementStatus = 'PENDING' | 'REFUSED' | 'APPROVED';

export const getShelterRecruitments = async (
recruitSearchParams: Partial<RecruitSearchParams>,
) =>
axiosInstance.get<
{
pageInfo: PageInfo;
recruitments: Recruitment[];
},
RecruitSearchParams
>('/shelters/recruitments', {
params: recruitSearchParams,
});

export const createShelterRecruitment = (
recruitmentParams: PostRecruitmentParams,
) =>
axiosInstance.post<unknown, PostRecruitmentParams>(
`/shelters/recruitments`,
recruitmentParams,
);

export const updateShelterRecruitment = (
recruitmentId: number,
recruitmentParams: PostRecruitmentParams,
) =>
axiosInstance.patch<unknown, PostRecruitmentParams>(
`/shelters/recruitments/${recruitmentId}`,
recruitmentParams,
);

export const deleteShelterRecruitment = (recruitmentId: number) =>
axiosInstance.delete<unknown, unknown>(
`/shelters/recruitments/${recruitmentId}`,
);

export const closeShelterRecruitment = (recruitmentId: number) =>
axiosInstance.patch<unknown, unknown>(
`/shelters/recruitments/${recruitmentId}/close`,
);

export const getShelterRecruitmentApplicants = (recruitmentId: number) =>
axiosInstance.get<{
applicants: {
applicantId: number;
volunteerId: number;
volunteerName: string;
volunteerBirthDate: string;
volunteerGender: Gender;
completedVolunteerCount: number;
volunteerTemperature: number;
applicantStatus: RecruitementStatus;
}[];
recruitmentCapacity: number;
}>(`/shelters/recruitments/${recruitmentId}/applicants`);

export const updateShelterRecruitmentApplicant = (
recruitmentId: number,
applicantId: number,
) =>
axiosInstance.patch<
unknown,
{
status: RecruitementStatus;
}
>(`/shelters/recruitments/${recruitmentId}/applicants/${applicantId}`);

export const getShelterApprovedRecruitmentApplicants = (
recruitmentId: number,
) =>
axiosInstance.get<{
applicants: {
volunteerId: number;
applicantId: number;
volunteerName: string;
volunteerBirthDate: string;
volunteerGender: Gender;
volunteerPhoneNumber: string;
volunteerAttendance: boolean;
}[];
}>(`/shelters/recruitments/${recruitmentId}/approval`);

export const updatShelterApplicantsApproval = (
recruitmentId: number,
applicants: AttendanceStatus[],
) =>
axiosInstance.patch<
unknown,
{
applicants: AttendanceStatus[];
}
>(`/shelters/recruitments/${recruitmentId}/approval`, {
applicants,
});
53 changes: 53 additions & 0 deletions apps/shelter/src/apis/shelter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import axiosInstance from 'shared/apis/axiosInstance';

import { ShelterInfo } from '@/types/apis/shetler';

type PasswordUpdateParams = {
newPassword: string;
oldPassword: string;
};

type PageParams = {
pageSize: number;
pageNumber: number;
};

export const getShelterInfoAPI = () =>
axiosInstance.get<ShelterInfo>('/shelters/me');

export const updateShelterInfo = (shelterInfo: ShelterInfo) =>
axiosInstance.patch<unknown, ShelterInfo>('/shelters/me', shelterInfo);

export const updatePassword = (passwordUpdateParams: PasswordUpdateParams) =>
axiosInstance.patch<unknown, PasswordUpdateParams>(
'/shelters/me/password',
passwordUpdateParams,
);

export const updateAddressStatusAPI = (isOpenedAddress: boolean) =>
axiosInstance.patch<
unknown,
{
isOpenedAddress: boolean;
}
>('/shelters/me/address/status', { isOpenedAddress });

export const getShelterReviewList = (pageParams: PageParams) =>
axiosInstance.get<{
pageInfo: {
totalElements: number;
hasNext: boolean;
};
reviews: {
reviewId: number;
reviewCreatedAt: string;
reviewContent: string;
reviewImageUrls: string[];
volunteerName: string;
volunteerTemperature: number;
volunteerReviewCount: number;
volunteerImageUrl: string;
}[];
}>(`/shelters/me/reviews`, {
params: pageParams,
});
Loading