Skip to content

Commit

Permalink
Merge pull request #41 from softeerbootcamp4th/feature/20-fastChargeI…
Browse files Browse the repository at this point in the history
…nteraction

[feat] 고속충전 인터랙션 추가 (resolve #20)
  • Loading branch information
darkdulgi authored Jul 29, 2024
2 parents 94c1b4c + 6bf19b1 commit e903158
Show file tree
Hide file tree
Showing 19 changed files with 376 additions and 19 deletions.
52 changes: 39 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# Team6-AwesomeOrange

> 백엔드 레포는 여기로! => [백엔드 레포](https://github.com/softeerbootcamp4th/Team6-AwesomeOrange-BE)
## Contributors
| [@lybell-art](https://github.com/lybell-art) | [@darkdulgi](https://github.com/darkdulgi) | [@ahra1221](https://github.com/blaxsior) | [@win-luck](https://github.com/win-luck) |
| [@lybell-art](https://github.com/lybell-art) | [@darkdulgi](https://github.com/darkdulgi) | [@blaxsior](https://github.com/blaxsior) | [@win-luck](https://github.com/win-luck) |
|:---------------------------------------------------------:|:-------------------------------------------------------:|:-------------------------------------------------------:|:-----------------------------------------------------------------:|
| <img width="400" src="https://github.com/lybell-art.png"> | <img width="400" src="https://github.com/darkdulgi.png"> | <img width="400" src="https://github.com/blaxsior.png"> | <img width="400" src="https://github.com/win-luck.png"> |
| **Front-End** | **Front-End** | **Back-End** | **Back-End** |
Expand All @@ -14,21 +16,45 @@
[Convention](https://github.com/softeerbootcamp4th/Team6-AwesomeOrange-BE/wiki/%08%5BTeam-Convention%5D)

## Plan & Design Link
[Plan & Design Link(Figma)](https://www.figma.com/design/XieJv765qFmU9dFuQAG7tQ/%EC%96%B4%EC%8D%B8%EC%98%A4%EB%A0%8C%EC%A7%80_Hand-off_%EC%B5%9C%EC%A2%85(07%2F24)?node-id=33-1157)

## Schedule
**Front-End**

| 1주차 | 공통 커스텀 훅 및 인터랙션 인터페이스 추가, 메인 페이지의 인트로, 헤더, 차량 기본정보, QnA, 푸터 구현 |
| --- | --- |
| 2주차 | 인터랙션 페이지, 인터랙션 모달, 각각의 인터랙션 구현 |
| 3주차 | 각각의 인터랙션 구현, 기대평 구현 |
| 4주차 | 선착순 이벤트 구현, 시간 남을 시 어드민 페이지(로그인, 이벤트목록) 구현 |
| 5주차 | 어드민 페이지(이벤트 등록수정, 이벤트 관리, 기대평 관리) 구현 및 리팩토링, 발표자료 제작 |

**Back-End**

| 1주차 | JPA Entity 구축, 배포 등 인프라 설정, 유저 로그인, 선착순 이벤트 프로토타입 구현 |
| --- | --- |
| 2주차 | 기대평, 어드민 시스템, 가중치 반영 추첨 구현 (+단위 테스트) |
| 3주차 | 선착순 이벤트 최적화, 서비스 확장성 개선, 테스트코드 작성 |
| 4주차 | 버그 수정, 부하 테스트 기반 서비스 최적화 |

## Backlog
### Front-End
![image](https://github.com/user-attachments/assets/3fec291d-4aed-4f04-895b-7b2686aecc59)

### Back-End
![image](https://github.com/user-attachments/assets/d7444775-cbad-48a2-a278-fd73368a1b6e)

## ERD
<img width="686" alt="image" src="https://github.com/user-attachments/assets/eece7379-ad7b-4b29-b0bb-ae4bc20a7104">

## Tech Stack

### Front-End
- Javascript ES2020+
- React
- Tailwindcss
- Vite
- Zustand
<img src="https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=JavaScript&logoColor=black"><img src="https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=React&logoColor=black"><img src="https://img.shields.io/badge/TailwindCSS-06B6D4?style=for-the-badge&logo=Tailwind CSS&logoColor=white"><img src="https://img.shields.io/badge/Vite-646CFF?style=for-the-badge&logo=Vite&logoColor=purple"><img src="https://img.shields.io/badge/Zustand-DDA0DD?style=for-the-badge&logo=Zustand&logoColor=purple">

### Back-End
- Spring Boot 3.2.2
- Java 17
- MySQL 8.0
- Redis
- AWS EC2
- AssertJ
- Docker
<img src="https://img.shields.io/badge/Spring Boot-6DB33F?style=for-the-badge&logo=Spring Boot&logoColor=black"><img src="https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=MySQL&logoColor=black"><img src="https://img.shields.io/badge/Redis-FF4438?style=for-the-badge&logo=Redis&logoColor=black"><img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=Docker&logoColor=black"><img src="https://img.shields.io/badge/Grafana-F46800?style=for-the-badge&logo=Grafana&logoColor=black"><img src="https://img.shields.io/badge/Apache JMeter-D22128?style=for-the-badge&logo=Apache JMeter&logoColor=black">

## Issue & TroubleShooting
[Issue & TroubleShooting](https://github.com/softeerbootcamp4th/Team6-AwesomeOrange-BE/wiki/%5BIssue-&-TroubleShooting%5D)

## Project Archeitecture
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"dev": "vite --host",
"build": "vite build && npm run build:server && node prerender.js",
"build:client": "vite build",
"build:server": "vite build --ssr src/main-server.jsx --outDir dist-ssg",
Expand Down
Binary file added public/font/HyundaiSansTextKROTFBold.otf
Binary file not shown.
Binary file added public/font/HyundaiSansTextKROTFMedium.otf
Binary file not shown.
Binary file removed public/font/HyundaiSansTextOffice-Medium.ttf
Binary file not shown.
Binary file removed public/font/HyundaiSansTextOffice-Medium.woff
Binary file not shown.
10 changes: 10 additions & 0 deletions src/assets/property1.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions src/assets/property2.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions src/assets/property3.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions src/assets/property4.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions src/assets/property5.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 0 additions & 1 deletion src/assets/react.svg

This file was deleted.

16 changes: 12 additions & 4 deletions src/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,21 @@
@font-face {
font-family: "ds-digital";
src: url("/font/DS-DIGI.TTF") format("truetype");
font-display: swap;
}

@font-face {
font-family: "hdsans";
src:
url("/font/HyundaiSansTextOffice-Medium.woff") format("woff"),
url("/font/HyundaiSansTextOffice-Medium.ttf") format("truetype");
src: url("/font/HyundaiSansTextKROTFBold.otf") format("opentype");
font-weight: bold;
font-display: swap;
}

@font-face {
font-family: "hdsans";
src: url("/font/HyundaiSansTextKROTFMedium.otf") format("opentype");
font-weight: medium;
font-display: swap;
}

@layer base {
Expand All @@ -24,4 +32,4 @@
.graphic-gradient {
@apply bg-gradient-to-r from-[#3ED7BE] to-[#069AF8];
}
}
}
30 changes: 30 additions & 0 deletions src/interactions/fastCharge/BatteryProgressBar.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import style from "./batteryStyle.module.css";

function getBatteryColor(progress) {
if (progress <= 50 / 330) return "bg-red-500";
if (progress <= 190 / 330) return "bg-yellow-400";
return "bg-blue-400";
}

function BatteryProgressBar({ progress }) {
const batteryColor = getBatteryColor(progress);
const batteryDynamicStyle = {
"--progress": progress,
};

return (
<div className="w-full h-full relative flex" style={batteryDynamicStyle}>
<div
className={`${batteryColor} ${style.left} h-full shrink-0 rounded-l-[20px]`}
></div>
<div
className={`${batteryColor} ${style.bar} h-full shrink-0 relative -left-1`}
></div>
<div
className={`${batteryColor} ${style.right} h-full shrink-0 relative -left-2 rounded-r-[20px]`}
></div>
</div>
);
}

export default BatteryProgressBar;
80 changes: 80 additions & 0 deletions src/interactions/fastCharge/FastChargeInteraction.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import { useImperativeHandle } from "react";
import BatteryProgressBar from "./BatteryProgressBar.jsx";
import orderIcon from "@/assets/property2.svg";
import dialSvg from "./timer.svg";
import useDialDrag from "./useDialDrag.js";

const MAX_MINUTE = 30;

function getProgress(angle) {
const rawProgress = -angle / (Math.PI * 2);
if (rawProgress < 0) return 0;
if (rawProgress > 1) return 1;
return rawProgress;
}

function FastChargeInteraction({ interactCallback, $ref }) {
const {
angle,
style: dialStyle,
ref: dialRef,
onPointerStart,
resetAngle,
} = useDialDrag(0);

useImperativeHandle(
$ref,
() => ({
reset() {
resetAngle();
},
}),
[resetAngle],
);
const progress = getProgress(angle);

return (
<article className="bg-black relative w-full h-full overflow-hidden flex items-center flex-col">
<div className="w-full max-w-[1200px] px-10 lg:px-20 flex gap-2 items-start mt-16 lg:mt-[6.25rem] ">
<img src={orderIcon} alt="2" />
<div className="flex flex-col gap-3.5 font-bold">
<h3 className="text-neutral-400 text-title-m md:text-title-l">
불편함 없이, 더 빠르게
</h3>
<p className="text-white text-body-m md:text-body-l">
The new IONIQ 5의 배터리를 충전하는 데 얼마만큼의 시간이 걸릴까요?
</p>
<p className="text-neutral-200 text-body-s">
다이얼을 돌려 충전에 필요한 시간을 확인해보세요!
</p>
</div>
</div>
<div className="absolute top-[clamp(240px,40%,384px)] w-72 md:w-96 h-32 border-solid border-2 border-neutral-600 rounded-[30px] p-3.5">
<div className="absolute w-5 h-9 bg-neutral-600 right-[-1.25rem] top-[2.875rem] rounded-r-md"></div>
<BatteryProgressBar progress={progress} />
</div>
<div className="absolute bottom-0 size-72 md:size-[448px] lg:size-[562px] translate-y-[40%] md:translate-y-1/2 flex justify-center">
<img
src={dialSvg}
alt="다이얼"
className="w-full h-full absolute left-0 top-0 cursor-pointer touch-none"
style={dialStyle}
ref={dialRef}
onPointerDown={(e) => {
onPointerStart(e);
interactCallback?.();
}}
draggable="false"
/>
<p className="text-white absolute bottom-[calc(50%+48px)] md:bottom-[calc(50%+94px)] lg:bottom-[calc(50%+140px)] text-title-s pointer-events-none">
<span className="text-head-m md:text-head-l lg:text-[4.375rem] mr-1.5 lg:mr-2.5">
{Math.round(progress * MAX_MINUTE)}
</span>
</p>
</div>
</article>
);
}

export default FastChargeInteraction;
Loading

0 comments on commit e903158

Please sign in to comment.