- 동태완
- 이재철
- 이병길
- 박재빈
- 웹 : https://github.com/LEEJAECHEOL/nomad_clone_web
- 앱 : https://github.com/qwq140/nomad-clone-app
- 서버 : https://github.com/LEEJAECHEOL/nomadCloneProject-bachend
https://drive.google.com/file/d/1ofteccsHds765LtgQAxYyiI3h58RF-Bt/view?usp=sharing
- Spring Boot DevTools
- Lombok
- Spring Data JPA
- MySQL Driver
- Spring Security
- Spring Web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>
<dependency>
<groupId>org.qlrm</groupId>
<artifactId>qlrm</artifactId>
<version>2.1.1</version>
</dependency>
create user 'nomad'@'%' identified by '1234';
GRANT ALL PRIVILEGES ON *.* TO 'nomad'@'%';
create database nomad;
use nomad;
server:
port: 8080
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
force: true
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/nomad?serverTimezone=Asia/Seoul
username: nomad
password: 1234
jpa:
hibernate:
ddl-auto: update #create update none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
show-sql: true
properties:
hibernate.format_sql: true
jackson:
serialization:
fail-on-empty-beans: false
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
enabled: true
file:
path: C:/Users/Dong/Desktop/NomadWork/nomadCloneProject-bachend/src/main/resources/uploads/
- Community
- Courses
- MyError
- Faq
- MyFile
- Likes
- Pay
- Tech
- User
- Video
- Course 리스트 최대 6개까지 나타냄
- Challenges 기능 구현 x
- Courses 모든 리스트를 나타냄
- Level, Price, Tech에 따라 필터링 가능
@Component
@RequiredArgsConstructor
public class CoursesQuery {
private final EntityManager em;
public List<CoursesFilterPreviewRespDto> findByFilter(String level, String isFree) {
StringBuffer sb = new StringBuffer();
sb.append("SELECT id, previewImage, title, subTitle, level, tech, price, videoId FROM courses ");
if(level != "") {
sb.append("WHERE level = '" + level + "' ");
}else {
if(isFree != "") {
sb.append("WHERE ");
}
}
if(isFree.equals("true")) {
if(level != "") {
sb.append("AND price = 0 ");
}else {
sb.append("price = 0 ");
}
}else if(isFree.equals("false")) {
if(level != "") {
sb.append("AND price != 0 ");
}else {
sb.append("price != 0 ");
}
}
Query query = em.createNativeQuery(sb.toString());
JpaResultMapper result = new JpaResultMapper();
return result.list(query, CoursesFilterPreviewRespDto.class);
}
}
- 해당 강의를 결제하기 전에 사용자에게 강의에 대한 정보를 제공
- 무료 강의인 경우 버튼 클릭 시 바로 등록
- 유료 강의인 경우 버튼 클릭 시 결제 페이지로 이동하여 결제를 진행
- 카테고리에 따라 분류가 가능하고 최신순, 인기순으로 나열이 가능
- 관리자계정의 경우 카테고리 등록 가능
- 좋아요 기능
- 글쓰기 기능
- 게시글의 내용을 보는 페이지
- 댓글 작성, 삭제가 가능
- Vimeo API 사용
- 실시간 1:1 문의
- 채널톡 API 사용
- 로그인은 구글 로그인만 가능