Skip to content

Commit 1293180

Browse files
authored
Release v1.1.0 (#117)
주요 기능 2025년 1학기 시간표 업데이트 관심 과목 담기 관심 과목을 기반으로 시간표를 생성하는 기능을 추가했습니다. detail: feat(TS-47): 관심과목 기반 시간표 생성 #106 인기 관심 과목 순위를 메뉴바 하단에 추가했습니다. 수강신청 수강신청 안내문이 추가되었습니다. 학과와 수강신청 날짜(본인학년/전학년)를 선택해 신청할 수 있는 학과를 제한하는 기능을 추가했습니다. 제한 시간을 사용자가 지정할 수 있도록 변경했습니다. (default: 35s, min: 10s, max: 3600s) 개선 및 변경 강의 목록 렌더링 방식 변경 react-window 라이브러리로 보이는 만큼만 렌더링 되도록 하여 최적화했습니다. 매크로 이미지 처리 로직 간소화 이미지 URL을 받아 추가 fetch 요청으로 이미지를 불러오던 방식에서 서버로부터 받은 Base64 이미지를 직접 사용하도록 변경했습니다. 필터 검색 기능 개선 필터 입력칸을 누르면 입력칸을 비우고 모든 옵션이 보이도록 하였습니다. 모바일 화면이 개선되었습니다. 에러 모달이 추가되었습니다. detail: refactor: modal 리팩토링 #68 404 페이지가 추가되었습니다. 에러 핸들링 방식이 변경되었습니다. 에러 코드 확인: refactor(TS-14): 에러 핸들링 방식 변경 #104 2025-1학기 기준 변경된 사항들을 필터에 반영했습니다. 로그인 화면 배경 이미지가 변경되었습니다. develop 브랜치 기준 테스트 도메인이 추가되었습니다.
1 parent 686ba9e commit 1293180

File tree

131 files changed

+6057
-1027
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+6057
-1027
lines changed

.eslintrc.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module.exports = {
2727
"semi": ["error", "always"],
2828
"no-duplicate-imports": "error",
2929
"no-console": ["warn", { "allow": ["warn", "error", "info"] }],
30-
"no-unused-vars": "warn",
30+
"no-unused-vars": "off",
3131
"no-multiple-empty-lines": "error"
3232
},
3333
}

.github/workflows/deploy.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ jobs:
1818
with:
1919
node-version: '20'
2020

21+
- name: .env setting
22+
run: |
23+
echo "VITE_BASE_URL=${{secrets.VITE_BASE_URL}}" >> .env.production
24+
echo "VITE_GTM_ID=${{secrets.VITE_GTM_ID}}" >> .env.production
25+
2126
- name: Install dependencies
2227
run: npm ci
2328

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,8 @@ dist-ssr
2222
*.njsproj
2323
*.sln
2424
*.sw?
25+
26+
.env*
27+
28+
# Local Netlify folder
29+
.netlify

README.md

Lines changed: 230 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,239 @@
1-
# React + TypeScript + Vite
1+
# Tutorial-Sejong
22

3-
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
3+
<div align="center">
4+
<img width="50%" src="https://github.com/user-attachments/assets/b724bb30-bb52-4a03-8f5c-31d546cabfb8">
5+
<br>
6+
Tutorial-Sejong은 실제와 유사한 환경에서 수강 신청을 연습할 수 있는 서비스를 제공해 학우들의 수강신청 준비에 도움을 드리고자 만들게 된 서비스 입니다.
7+
<br>
8+
수강신청이 처음이거나 오랜만 또는 연습이 필요한 세종대 학우들을 위해 최대한 세종대학교 학사시스템 UI와 비슷하게 제작했습니다.
9+
</div>
410

5-
Currently, two official plugins are available:
11+
## 목차
612

7-
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
8-
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
13+
<b> 1. [개요](#개요)</b>
14+
<br>
15+
<b> 2. [주요 기능](#주요-기능)</b>
16+
<br>
17+
<b> 3. [팀 소개](#팀-소개)</b>
18+
<br>
19+
<b> 4. [기술스택](#기술스택)</b>
20+
<br>
21+
<b> 5. [화면](#화면)</b>
22+
<br>
23+
<b> 6. [디렉토리 구조](#디렉토리-구조)</b>
924

10-
## Expanding the ESLint configuration
25+
## 개요
1126

12-
If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
27+
<b>배포 주소:</b> https://tutorial-sejong.com/
28+
<br>
29+
<b>프론트 깃허브 주소:</b> https://github.com/tutorial-sejong/cr-frontend
30+
<br>
31+
<b>백엔드 깃허브 주소:</b> https://github.com/tutorial-sejong/cr-backend
1332

14-
- Configure the top-level `parserOptions` property like this:
33+
## 팀 소개
34+
35+
<table>
36+
<thead>
37+
<tr>
38+
<th colspan="4">Tutorial-Sejong</th>
39+
</tr>
40+
</thead>
41+
<tbody>
42+
<tr>
43+
<td>안정현</br> <a href="https://github.com/Anhye0n">깃허브</a><br/> </td>
44+
<td>오지현</br> <a href="https://github.com/zhy2on">깃허브</a><br/> </td>
45+
<td>문지원</br> <a href="https://github.com/jeewonMoon">깃허브</a><br/> </td>
46+
<td>황수빈</br> <a href="https://github.com/surra7">깃허브</a><br/> </td>
47+
</tr>
48+
</tbody>
49+
</table>
50+
51+
## 주요 기능
52+
53+
### 💡2025년 1학기 시간표 검색
54+
55+
- 해당 학기에 맞는 시간표로 업데이트 됩니다.
56+
57+
### 💡관심 과목 담기
58+
59+
- 관심 과목을 기반으로 생성된 시간표를 확인할 수 있습니다.
60+
- 어떤 강의를 많이 담았는지 인기 관심 과목 순위로 알 수 있습니다.
61+
62+
### 💡수강신청
63+
64+
- 학과와 수강신청 날짜(본인학년/전학년)를 선택해 신청할 수 있는 학과를 제한할 수 있습니다.
65+
- 신청 시 10% 확률로 수강 여석이 없을 수 있습니다.
66+
- 시작 후 35초가 지나면 모든 과목의 수강 여석이 마감됩니다. (제한 시간은 변경할 수 있습니다.)
67+
68+
## 기술스택
69+
70+
### 프론트엔드
71+
72+
<img src="https://img.shields.io/badge/vite-646CFF?style=for-the-badge&logo=vite&logoColor=white"> <img src="https://img.shields.io/badge/react-61DAFB?style=for-the-badge&logo=react&logoColor=black"> <img src="https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white"> <img src="https://img.shields.io/badge/styledcomponents-DB7093?style=for-the-badge&logo=styledcomponents&logoColor=white">
73+
<img src="https://img.shields.io/badge/reduxtoolkit-764ABC?style=for-the-badge&logo=redux&logoColor=white"> <img src="https://img.shields.io/badge/githubactions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white">
74+
75+
### 백엔드
76+
77+
<img src="https://img.shields.io/badge/java-007396?style=for-the-badge&logo=java&logoColor=white">
78+
<img src="https://img.shields.io/badge/spring boot-6DB33F?style=for-the-badge&logo=spring boot&logoColor=white">
79+
<img src="https://img.shields.io/badge/spring security-6DB33F?style=for-the-badge&logo=Spring Security&logoColor=white"> <img src="https://img.shields.io/badge/MariaDB-003545?style=for-the-badge&logo=mariadb&logoColor=white" />
80+
<img src="https://img.shields.io/badge/githubactions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white">
81+
<img src="https://img.shields.io/badge/docker-2496ED?style=for-the-badge&logo=docker&logoColor=white">
82+
83+
### 협업 툴
84+
85+
<img src="https://img.shields.io/badge/github-181717?style=for-the-badge&logo=github&logoColor=white"> <img src="https://img.shields.io/badge/notion-000000?style=for-the-badge&logo=Notion&logoColor=white"> <img src="https://img.shields.io/badge/jira-0052CC?style=for-the-badge&logo=jira&logoColor=white">
86+
87+
## 화면
88+
89+
<details>
90+
<summary>화면 접기/펼치기</summary>
91+
<div markdown="1">
92+
93+
### 로그인
94+
95+
<img src="https://github.com/user-attachments/assets/c9d8f9dd-97e0-4c3f-8725-21d236ecdc4e">
96+
97+
- 회원가입 없이 임의 학번으로 로그인
98+
- 동일한 학번과 비밀번호로 접속 시 관심과목 등 데이터 유지
99+
100+
### 시간표 검색
101+
102+
<img src="https://github.com/user-attachments/assets/88fd868c-e9c3-4ac9-9fd5-a43b5158f02a">
103+
104+
- 메뉴바 하단에서 인기 관심 과목 순위 확인 가능
105+
106+
<img src="https://github.com/user-attachments/assets/74872fe2-d426-4c1b-9301-6f2d33c48ad2">
107+
108+
- 과목 클릭시 상세 정보 모달
109+
110+
### 관심과목 담기
111+
112+
<img src="https://github.com/user-attachments/assets/55df1f8a-a565-4773-a718-543deec1d82a">
113+
114+
<img src="https://github.com/user-attachments/assets/c713f288-5a07-4544-b2be-b4492cacf162">
115+
116+
- 시간표 버튼 클릭했을 때 관심 과목이 없는 경우
117+
118+
![Untitledvideo-MadewithClipchamp2-ezgif com-video-to-gif-converter](https://github.com/user-attachments/assets/867c1772-832b-4efc-9257-74c3c74f336b)
119+
120+
- 관심 과목 기반 시간표 생성
121+
- 시간이 겹치는 경우:
122+
- 시작 시간이 같은 경우 -> 끝나는 시간이 빠른 것이 앞으로
123+
- 시작 시간이 다른 경우 -> 시작 시간이 늦은 것이 앞으로
124+
125+
### 수강신청
126+
127+
<img src="https://github.com/user-attachments/assets/4d11e297-34b7-4a6a-b864-70f384908f39">
128+
129+
- 학과, 수강신청 날짜 선택 가능
130+
- 선택 안 할 시 전학년으로 지정
131+
132+
<img src="https://github.com/user-attachments/assets/c42ddbd9-bc44-440d-aba8-09821646811b">
133+
134+
- 헤더의 시간에 맞춰 시작
135+
- 시작 버튼을 눌러야 검색 가능
136+
- 시간 제한:
137+
- 기본값 35초
138+
- 최소/최대값: 10초, 1분(3600초)
139+
- 최소/최대값을 벗어난 값 입력시 최소/최대값으로 자동 조정
140+
141+
<img src="https://github.com/user-attachments/assets/d35be6b4-528b-43d1-a83e-6d815528f816">
142+
143+
- 랜덤으로 매크로 방지 이미지 생성
144+
145+
<img src="https://github.com/user-attachments/assets/efd7acd4-53b0-4cc8-acff-24bb152d5e96">
146+
147+
- 시작 버튼을 누르고 지정한 제한 시간이 지났거나 10%의 확률로 실패
148+
149+
<img src="https://github.com/user-attachments/assets/513b94b2-b67f-488d-84f1-3bfe8b5f4a20">
150+
151+
- 확인 버튼 누를 시 수강 신청 실패로 간주, 새로고침
152+
153+
### 404
154+
155+
<img src="https://github.com/user-attachments/assets/ad8426b7-5683-4bca-9b8a-151b0c438ea4">
156+
157+
- 잘못된 경로 또는 서버 오류시 보여지는 화면
158+
159+
</div>
160+
</details>
161+
<br>
162+
163+
## 디렉토리 구조
15164

16-
```js
17-
export default {
18-
// other rules...
19-
parserOptions: {
20-
ecmaVersion: 'latest',
21-
sourceType: 'module',
22-
project: ['./tsconfig.json', './tsconfig.node.json'],
23-
tsconfigRootDir: __dirname,
24-
},
25-
}
26165
```
166+
cs-frontend
167+
├─ .eslintrc.cjs : lint 규칙
168+
├─ .prettierrc : prettier 설정
169+
├─ index.html
170+
├─ package-lock.json
171+
├─ package.json
172+
├─ README.md
173+
├─ src
174+
│ ├─ apis
175+
│ │ ├─ api : api 요청/응답 코드 폴더
176+
│ │ │ ├─ auth.ts : 로그인 및 인증 관련 코드
177+
│ │ │ └─ course.ts : 강의 및 수강신청 관련 코드
178+
│ │ └─ utils : 인스턴스 / 공통 함수 폴더
179+
│ ├─ App.tsx
180+
│ ├─ assets
181+
│ │ ├─ data
182+
│ │ │ ├─ constant.ts : 상수 데이터
183+
│ │ │ └─ filter.ts : 필터 옵션 데이터
184+
│ │ ├─ img : 아이콘이나 로고 등 필요한 이미지 폴더
185+
│ │ └─ types : 자주 쓰이는 타입 분리 폴더
186+
│ ├─ components
187+
│ │ ├─ common : 여러 곳에서 쓰이는 컴포넌트 폴더
188+
│ │ │ ├─ FilterButton.tsx : 검색, 조회 등 필터 적용 버튼
189+
│ │ │ ├─ FilterInput.tsx
190+
│ │ │ ├─ Modal
191+
│ │ │ │ ├─ handlers
192+
│ │ │ │ │ └─ handler.tsx
193+
│ │ │ │ ├─ AntiMacroCodeModal.tsx : 매크로 모달
194+
│ │ │ │ ├─ EnrollmentInfoModal.tsx : 수강인원 등 강의 정보 모달
195+
│ │ │ │ ├─ ErrorModal.tsx
196+
│ │ │ │ ├─ InfoModal.tsx : 수강신청 모달
197+
│ │ │ │ ├─ LoadingModal.tsx
198+
│ │ │ │ ├─ RankInfoModal.tsx : 인기 관심 과목 상세 정보 모달
199+
│ │ │ │ ├─ TimetableModal : 시간표 모달
200+
│ │ │ │ └─ WaitingModal.tsx : 접속 대기 모달
201+
│ │ │ ├─ SelectBox.tsx : 필터 드롭다운
202+
│ │ │ └─ Table : 강의 목록 테이블
203+
│ │ ├─ CourseRegister : 수강신청 탭
204+
│ │ ├─ DeleteAccount
205+
│ │ ├─ Header
206+
│ │ │ ├─ ...
207+
│ │ │ └─ TopNav.tsx : 타이틀
208+
│ │ ├─ LectureList : 시간표 검색 탭
209+
│ │ ├─ LoginForm
210+
│ │ ├─ Menubar : 사이드 메뉴
211+
│ │ ├─ ProtectedRoute.tsx : 사용자 인증 여부에 따른 접근 제한
212+
│ │ ├─ TabMenu
213+
│ │ ├─ Wishlist : 관심과목 탭
214+
│ │ └─ WishRank : 인기 관심 과목
215+
│ ├─ custom.d.ts : svg 관련 설정 파일
216+
│ ├─ main.tsx
217+
│ ├─ pages
218+
│ │ ├─ DeleteAccount.tsx
219+
│ │ ├─ index
220+
│ │ │ ├─ Home.tsx
221+
│ │ │ ├─ Login.tsx
222+
│ │ │ └─ NotFound.tsx : 에러 페이지
223+
│ │ └─ Maintenance.tsx : 리뉴얼 중 페이지
224+
│ ├─ store : 리덕스 툴킷 관련 폴더
225+
│ │ ├─ hooks
226+
│ │ │ └─ index.ts
227+
│ │ ├─ modules : 슬라이스
228+
│ │ └─ store.ts
229+
│ ├─ styles : 공통 스타일
230+
│ ├─ utils
231+
│ │ ├─ randomUtils.ts : 랜덤 학번 및 숫자 생성
232+
│ │ └─ scrollToTop.ts : 페이지 이동 시 스크롤 초기화
233+
│ └─ vite-env.d.ts
234+
├─ tsconfig.app.json
235+
├─ tsconfig.json
236+
├─ tsconfig.node.json
237+
└─ vite.config.ts
27238
28-
- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
29-
- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
30-
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
239+
```

index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<html lang="en">
33
<head>
44
<meta charset="UTF-8" />
5-
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
5+
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7-
<title>수강신청</title>
7+
<title>Tutorial Sejong</title>
88
</head>
99
<body>
1010
<div id="root"></div>

netlify.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[build]
2+
command = "npm run build"
3+
publish = "dist"
4+
5+
[[redirects]]
6+
from = "/*"
7+
to = "/index.html"
8+
status = 200

0 commit comments

Comments
 (0)