Skip to content

Commit

Permalink
chore: merge branch 'main' into Accessibility-test/#136
Browse files Browse the repository at this point in the history
  • Loading branch information
seonghunYang committed Nov 27, 2024
2 parents afe24d9 + 10a0543 commit e5d3903
Show file tree
Hide file tree
Showing 120 changed files with 2,276 additions and 738 deletions.
22 changes: 22 additions & 0 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Vercel Production Deployment

env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
on:
push:
branches:
- main
jobs:
Deploy-Production:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Vercel CLI
run: npm install --global vercel@latest
- name: Pull Vercel Environment Information
run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
- name: Build Project Artifacts
run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
- name: Deploy Project Artifacts to Vercel
run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
# env files
.env*.local
.env*.production

# vercel
.vercel
Expand Down
2 changes: 1 addition & 1 deletion .husky/prepare-commit-msg
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ commit_msg_file=$1
commit_msg=$(cat "$1")
second_line=$(echo "$commit_msg" | sed -n '2p')

commit_msg_title_regex='(feat|fix|refactor|chore|test|docs|style|rename|setting|remove|build): .{1,100}?$'
commit_msg_title_regex='(feat|fix|refactor|chore|test|docs|style|rename|setting|remove|build): .{1,100}?'


# 제목
Expand Down
4 changes: 4 additions & 0 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,9 @@ const config: StorybookConfig = {
autodocs: 'tag',
},
staticDirs: ['../public'],
env: (config) => ({
...config,
STORY_BOOK: 'true',
}),
};
export default config;
173 changes: 103 additions & 70 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,63 @@
<div align="center" >

<div align="center">

### [졸부서비스 바로가기](https://mju-graduate.com)
# 🎓 졸업을부탁해

[스토리북](https://65ccb85d5afe55a024495bc0-qsukhlhbnl.chromatic.com/?path=/story/ui-lecture-lecture-search--add-senario)
**명지인을 위한 간편 졸업요건검사 서비스**

<img width="413" alt="스크린샷 2024-02-11 오전 10 55 51" src="https://github.com/Myongji-Graduate/MyongjiGraduate-Next/assets/75975946/1f96dc0f-aa21-4503-ad77-4d2e2798f27f">
"졸업을 부탁해"는 학생들이 파편화된 졸업 요건 정보를 수집하고 수동으로 계산해야 하는 번거로움과 불안감을 해소하기 위해 시작된 프로젝트입니다. MyiWeb MSI의 성적표를 원클릭으로 업로드하면, 졸업에 필요한 모든 정보를 쉽고 빠르게 확인할 수 있습니다.

![Next.js](https://img.shields.io/badge/Next.js-v14-000000?style=flat-square&logo=Next.js&logoColor=white)

[기술 블로그](https://soft-anorak-0ca.notion.site/c2a0eca0f26547f99bb033f4d741754b?pvs=4) | [스토리북](https://65ccb85d5afe55a024495bc0-zwdkrllhrv.chromatic.com/?path=/docs/ui-view-atom-button--docs)

</div>

## 💻 프로젝트 소개
### 기능 목록

#### 졸업 요건 검사

![결과1](https://github.com/user-attachments/assets/474cdcd8-9d52-49ea-8476-41411884f697)

- 졸업 요건 충족률 및 졸업 가능 여부를 제공합니다.
- 카테고리별 기준 학점, 이수 학점 및 충족률을 제공합니다.

#### 카테고리별 이수 현황

![결과2](https://github.com/user-attachments/assets/f85d123a-2d90-45e3-b97e-92d5a5324c25)

- 세부 카테고리별 충족 여부, 기준 학점, 이수 학점을 제공합니다.
- 미충족 카테고리의 경우, 미이수 / 기이수 과목 정보를 제공합니다.

#### 기이수 과목 한눈에 보기

![기이수과목](https://github.com/user-attachments/assets/53468cdf-1dac-49fa-905b-f4a8495dc76c)

- 기이수 과목(지금까지 수강한 과목) 정보를 확인할 수 있습니다.

#### 과목 추가 및 삭제

![성적표커스텀](https://github.com/user-attachments/assets/25d226ca-5ef6-4e83-83c4-2b494d0ff6ef)

- 과목 데이터를 삭제하여 커스텀할 수 있습니다.
- 과목 검색을 통해 과목 데이터를 추가하여 커스텀할 수 있습니다.
- 기이수 과목 커스텀을 통해 졸업사정결과를 예측할 수 있습니다.

#### 원클릭 성적표 등록

![성적표등록](https://github.com/user-attachments/assets/c698b159-318b-4a1a-957b-9c0d5a29dda8)

- MyiWeb MSI의 성적표를 통해서 성적표를 한 번에 입력할 수 있습니다.
- 성적표 기반의 맞춤형 졸업 요건 검사 결과를 제공합니다.

- 졸업을 부탁해는 학우들이 자신의 졸업요건은 직접 계산해야하지만 수강과목, 졸업요건과 같은 정보들이 파편화되고 방대해 어려움을 겪는다는 문제점에서 시작된 프로젝트입니다.
- 학교 홈페이지에서 제공하는 성적확인원 PDF 업로드를 통해 졸업 요건 충족도 및 미이수 과목 정보를 확인할 수 있고, 커스텀 기능을 통해 미리 자신의 졸업 요건 충족도를 예측할 수 있습니다.

### 🎃 조회수 & 사용자 통계

<img width="80%" height="80%" src="https://github.com/Myongji-Graduate/MyongjiGraduate-BE/assets/64758861/86857528-df46-4055-b7f8-bf5cdf0865a4">

### 🎃 사용자 후기

<img width="30%" height="30%" src="https://github.com/user-attachments/assets/1eeff796-8923-4509-80c3-364ee1c9c4e5">

### 🥇 교내 SW 경진대회 대상

[명지투데이 - '제1회 ICT융합대학 SW프로그램 개발 경진대회 시상식' 열려](https://www.mju.ac.kr/mjukr/302/subview.do?enc=Zm5jdDF8QEB8JTJGYmJzJTJGbWp1a3IlMkYxNjYlMkYxOTQzMDclMkZhcnRjbFZpZXcuZG8lM0Y%3D)
Expand All @@ -29,70 +67,65 @@
### Front-End

<table>
<tr>
<td>
<a href="https://github.com/seonghunYang">
<img src="https://avatars.githubusercontent.com/u/52571252?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/yougyung">
<img src="https://avatars.githubusercontent.com/u/75975946?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/gahyuun">
<img src="https://avatars.githubusercontent.com/u/81469686?v=4" width="100px" />
</a>
</td>
</tr>
<tr>
<td><b>양성훈</b></td>
<td><b>모유경</b></td>
<td><b>박가현</b></td>
</tr>
<tr>
<td><b>FE Developer</b></td>
<td><b>FE Developer</b></td>
<td><b>FE Developer</b></td>
</tr>
<tr>
<td>
<a href="https://github.com/seonghunYang">
<img src="https://avatars.githubusercontent.com/u/52571252?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/yougyung">
<img src="https://avatars.githubusercontent.com/u/75975946?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/gahyuun">
<img src="https://avatars.githubusercontent.com/u/81469686?v=4" width="100px" />
</a>
</td>
</tr>
<tr>
<td><b>양성훈</b></td>
<td><b>모유경</b></td>
<td><b>박가현</b></td>
</tr>
<tr>
<td><b>FE Developer</b></td>
<td><b>FE Developer</b></td>
<td><b>FE Developer</b></td>
</tr>
</table>

### Back-End

<table>
<tr>
<td>
<a href="https://github.com/dojinyou">
<img src="https://avatars.githubusercontent.com/u/61923768?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/stophwan">
<img src="https://avatars.githubusercontent.com/u/64758861?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/5uhwann">
<img src="https://avatars.githubusercontent.com/u/106325839?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/5uhwann">
<img src="https://avatars.githubusercontent.com/u/96857599?v=4" width="100px" />
</a>
</td>
</tr>
<tr>
<td><b>유도진</b></td>
<td><b>정지환</b></td>
<td><b>박수환</b></td>
<td><b>나경호</b></td>
</tr>
<tr>
<td><b>BE Developer</b></td>
<td><b>BE Developer</b></td>
<td><b>BE Developer</b></td>
<td><b>BE Developer</b></td>
</tr>
</table>
<tr>
<td>
<a href="https://github.com/dojinyou">
<img src="https://avatars.githubusercontent.com/u/61923768?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/stophwan">
<img src="https://avatars.githubusercontent.com/u/64758861?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/5uhwann">
<img src="https://avatars.githubusercontent.com/u/106325839?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/5uhwann">
<img src="https://avatars.githubusercontent.com/u/96857599?v=4" width="100px" />
</a>
</td>
</tr>
<tr>
<td><b>유도진</b></td>
<td><b>정지환</b></td>
<td><b>박수환</b></td>
<td><b>나경호</b></td>
</tr>
<tr>
<td><b>BE Developer</b></td>
8 changes: 7 additions & 1 deletion app/(sub-page)/components/navigation-bar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import SideNavigationBar from './side-navigation-bar';
import UserInfoNavigator from '@/app/ui/user/user-info-navigator/user-info-navigator';
import SignButtonGroup from '@/app/ui/user/user-info-navigator/sign-button-group';
import Link from 'next/link';
import NavigationItems from './navigation-items';
import UserDeleteModal from '@/app/ui/user/user-info-navigator/user-delete-modal';

export default function NavigationBar() {
return (
Expand All @@ -13,8 +15,12 @@ export default function NavigationBar() {
<Image className="md:h-10 h-7 w-[110px] md:w-[150px]" width={150} height={100} src={logo} alt="main-logo" />
</Link>
<Responsive maxWidth={1023}>
<SideNavigationBar header={<UserInfoNavigator />} content={<div>콘텐츠</div>} footer={<SignButtonGroup />} />
<SideNavigationBar header={<UserInfoNavigator />} content={<NavigationItems />} footer={<SignButtonGroup />} />
</Responsive>
<Responsive minWidth={1024}>
<NavigationItems />
</Responsive>
<UserDeleteModal />
</div>
);
}
47 changes: 47 additions & 0 deletions app/(sub-page)/components/navigation-items.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { auth } from '@/app/business/services/user/user.query';
import Button from '@/app/ui/view/atom/button/button';
import Link from 'next/link';
import { ChevronRightIcon } from 'lucide-react';

export default async function NavigationItems() {
const userInfo = await auth();

return (
<div className="flex flex-col lg:flex-row divide-y lg:divide-y-0 ">
{userInfo ? (
<>
<NavigationItem href={'/my'} label="마이페이지" />
<NavigationItem href={'/result'} label="결과확인" />
</>
) : (
<NavigationItem href={'/sign-in'} label="로그인" />
)}
<NavigationItem href={'/tutorial'} label="튜토리얼" />
<NavigationItem
target="_black"
href={'https://soft-anorak-0ca.notion.site/e35e3b210995463fa748f35aab536f2c?pvs=74'}
label="팀소개"
/>
</div>
);
}

interface NavigationItemProps {
href: string;
label: string;
target?: '_black' | '_self' | '_parent' | '_top';
}

export function NavigationItem({ href, label, target }: NavigationItemProps) {
return (
<Link href={href} target={target} className="flex items-center justify-between">
<Button
size={'xs'}
className="text-black lg:text-white hover:text-slate-400 lg:text-base text-lg my-1"
variant={'text'}
label={label}
/>
<ChevronRightIcon className="h-4 w-4 lg:hidden text-black" />
</Link>
);
}
28 changes: 28 additions & 0 deletions app/(sub-page)/find-id/components/find-id-container.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
'use client';
import useFunnel from '@/app/hooks/useFunnel';
import FindIdForm from '@/app/ui/user/find-id-form/find-id-form';
import { useState } from 'react';
import { FormState } from '@/app/ui/view/molecule/form/form-root';
import FindIdSuccess from './find-id-success';

export default function FindIdContainer() {
const { Funnel, setStep } = useFunnel<'form' | 'success'>('form');
const [authId, setAuthId] = useState<string | undefined>(undefined);
return (
<div className="p-6">
<Funnel>
<Funnel.Step name="form">
<FindIdForm
onNext={(formState?: FormState) => {
if (formState?.value) setAuthId(formState.value.authId);
setStep('success');
}}
/>
</Funnel.Step>
<Funnel.Step name="success">
<FindIdSuccess authId={authId} />
</Funnel.Step>
</Funnel>
</div>
);
}
27 changes: 27 additions & 0 deletions app/(sub-page)/find-id/components/find-id-success.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import Button from '@/app/ui/view/atom/button/button';
import Link from 'next/link';
interface FindIdSuccessProps {
authId: string | undefined;
}
export default function FindIdSuccess({ authId }: FindIdSuccessProps) {
return (
<div className=" flex items-center justify-center px-4 sm:px-6">
<div className="max-w-md w-full space-y-8">
<div className="space-y-2">
<p className="text-gray-500 text-center">입력하신 정보와 일치하는 아이디입니다.</p>
</div>
<div className="p-8 px-20 bg-light-blue-1 text-point-blue rounded-lg text-center">{authId}</div>
<div className="space-y-4">
<div className="flex justify-center gap-4">
<Link href="/sign-in">
<Button size="sm" label={'로그인 하기'} />
</Link>
<Link href="/find-password">
<Button size="sm" label={'비밀번호 바꾸기'} />
</Link>
</div>
</div>
</div>
</div>
);
}
Loading

0 comments on commit e5d3903

Please sign in to comment.