Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
65afaf2
feat : sql 파일 생성
leeuihyun Jun 13, 2025
cf52bdd
feat : sql 변경에 따른 수정
leeuihyun Jun 13, 2025
52bd028
feat : 기본적인 Entity / 구조 생성
leeuihyun Jun 13, 2025
c75e365
feat : 기본 파일 구조 생성
leeuihyun Jun 13, 2025
34e85ec
feat : JpaAuditing 설정 추가
leeuihyun Jun 16, 2025
ed85b8d
Merge pull request #3 from Onederful-Project/feature/2
leeuihyun Jun 16, 2025
d2b58ad
feat : 회원가입, 로그인에 필요한 dto 생성
DG0702 Jun 16, 2025
e41deea
sql : 기존 users 테이블에서 컬럼 추가
DG0702 Jun 16, 2025
46c174f
refactor : 비밀키, 만료시간 설정
DG0702 Jun 16, 2025
b94b3c7
chore : 빌드 설정 변경
DG0702 Jun 16, 2025
5d77a11
feat : 회원가입, 비밀번호 암호화, Mapper을 이용하여 ResponseBody 생성 → 추후 수정 예정
DG0702 Jun 16, 2025
ab9c690
feat : 로그인, JWT 토큰 생성, 필터 처리 (생성, 검증)만 만들었습니다.
DG0702 Jun 16, 2025
87c8010
chore : 빌드 모듈 추가
DG0702 Jun 16, 2025
c2351d1
remove : 불필요한 DTO 삭제
DG0702 Jun 16, 2025
2cdd077
feat : JwtUtil 페이로드에서 Id 값 추출 메서드 생성, JwtFilter return 추가, WebConfig …
DG0702 Jun 16, 2025
7a13408
comment : 주석 추가 및 사용하지 않는 import 제거
DG0702 Jun 16, 2025
b3c9133
feat : 공통 예외처리 생성 , enum 타입으로 에러코드 정리,
DG0702 Jun 16, 2025
55beabe
feat : groups 기능을 사용하기 위해 LoginGroup, SignupGroup 인터페이스 생성
DG0702 Jun 16, 2025
1629040
feat : LoginRequestDto, SignupRequestDto 통합하기 위해 groups 기능 사용
DG0702 Jun 16, 2025
264ed27
feat : ApiResponseDto 공통 응답 DTO 생성, UserMapper 응답 성공 시 반환값 수정
DG0702 Jun 16, 2025
4b1e85b
feat : AuthController 회원 정보 기능 추가,
DG0702 Jun 16, 2025
5bb048b
feat : Task Controller 구현
leeuihyun Jun 17, 2025
108775c
feat : Task 비즈니스 로직 구현
leeuihyun Jun 17, 2025
50e7eb8
Merge pull request #9 from Onederful-Project/feature/8
DG0702 Jun 17, 2025
1b4e0b6
Merge branch 'develop' of https://github.com/Onederful-Project/spring…
leeuihyun Jun 17, 2025
32a0fa0
feat : 도전 과제 요구사항에 맞춰 명칭 수정
leeuihyun Jun 17, 2025
7defe72
refactor : src/main/java/com/example/onederful/security/JwtUtil.java
leeuihyun Jun 17, 2025
db37ac3
refactor : 로그인 Id 추출 로직 수정
leeuihyun Jun 17, 2025
e697cc1
refactor : Task 도전과제 변수명에 맞춰 수정
leeuihyun Jun 17, 2025
591f5d0
feat : 요구사항 변경에 따른 수정
leeuihyun Jun 17, 2025
6c137c1
feat : Task 생성 / 수정 DTO 분리
leeuihyun Jun 17, 2025
41585b9
feat : Task 응답 asssignee DTO 생성
leeuihyun Jun 17, 2025
d72a7da
feat : 요구사항 변경에 따른 응답 DTO 수정
leeuihyun Jun 17, 2025
2730e8c
refactor : 요구사항 변경에 따른 Entity 변경
leeuihyun Jun 17, 2025
386a74c
feat : create, update 응답 데이터 존재함에 따른 수정
leeuihyun Jun 17, 2025
11aca9c
feat: AOP 활동 로그 기록 기본 로직 및 조회 기능 구현
saevit Jun 17, 2025
b19d0b4
merge: develop 브랜치의 최신 기능 반영
saevit Jun 17, 2025
6a14525
refactor : DONE 상태 Task update 로직 수정
leeuihyun Jun 17, 2025
1baa835
refactor : Api 요구사항에 맞게 수정
leeuihyun Jun 17, 2025
20bf36e
Merge pull request #11 from Onederful-Project/feature/4
leeuihyun Jun 17, 2025
9330dab
feat: comment 생성 기능 구현 (수정필요)
doohaaa Jun 16, 2025
80b68c2
feat: comment 수정 기능 구현 (수정 필요)
doohaaa Jun 16, 2025
ad7db4c
feat: 각 task에 달린 comment 조회 기능 구현
doohaaa Jun 16, 2025
7327b5f
feat: 댓글 삭제 기능 구현
doohaaa Jun 17, 2025
0c20294
fix: 삭제된 댓글 조회를 막는 로직 추가
doohaaa Jun 17, 2025
68cbe70
feat: 내용을 포함하는 댓글 검색 기능 구현
doohaaa Jun 17, 2025
09b2f57
fix: 삭제된 댓글 조회를 막는 로직 추가, 오류 수정
doohaaa Jun 17, 2025
6f00c2b
refactor: userId 받아오는 코드 수정, security 의존성 삭제
doohaaa Jun 17, 2025
cb291a1
refactor: HttpRequestInfo 가져오는 로직 분리
saevit Jun 17, 2025
f5bb4d4
merge: develop 브랜치의 최신 기능 반영
saevit Jun 17, 2025
d60c0be
feat : Swagger 의존성 추가
leeuihyun Jun 17, 2025
69dac55
feat : Swagger Config 파일 작성
leeuihyun Jun 17, 2025
2c81d88
feat : Swagger 관련 url 인증 X
leeuihyun Jun 17, 2025
1ba91f2
feat : 성공, 실패 응답메서드 생성
DG0702 Jun 17, 2025
b079411
feat : groups 추가 사용 , 인터페이스 생성, 회원 탈퇴 기능 추가
DG0702 Jun 17, 2025
c3725f7
refactor : 가독성 향상을 위해 수정
DG0702 Jun 17, 2025
f14fd05
refactor : ApiResponseDto 위치 이동
DG0702 Jun 17, 2025
149b3f4
refactor : 불필요한 import 삭제
DG0702 Jun 17, 2025
5ee9cd7
refactor : 위치 이동
DG0702 Jun 17, 2025
d3e4c7f
refactor: userId 받아오는 코드 수정
doohaaa Jun 17, 2025
e308774
feat : jwt 예외 처리 중 (미완성)
DG0702 Jun 17, 2025
72b4f98
feat: task 생성, 수정, 삭제 시 로그 기록되록 구현
saevit Jun 17, 2025
2cd2053
refactor: api 수정 및 변수명 수정
doohaaa Jun 17, 2025
73c32a6
ã…merge complete
DG0702 Jun 17, 2025
200d3f2
feat : jwt 예외 처리 중 (미완성)
DG0702 Jun 18, 2025
9b487d7
feat : jwt 예외 처리 중 완성
DG0702 Jun 18, 2025
0767686
Merge pull request #13 from Onederful-Project/feature/12
leeuihyun Jun 18, 2025
b79b743
fix: 예외처리 통일, 놓친 예외/조건 추가
doohaaa Jun 18, 2025
8a8a885
squash! fix: 예외처리 통일, 놓친 예외/조건 추가
doohaaa Jun 18, 2025
4ddfac6
chore: queryDSL dependency 추가
urzn Jun 18, 2025
2955b5a
chore: queryDSL dependency 추가
urzn Jun 18, 2025
cd5fcfc
feat: UserNotFound 에러코드 추가
urzn Jun 18, 2025
b337891
feat: dashboard 컨트롤러 구현
urzn Jun 18, 2025
9f4ef36
feat: dashboard 레포지토리 구현
urzn Jun 18, 2025
2fbd9bb
feat: dashboard 서비스 구현
urzn Jun 18, 2025
296e1a4
feat: dashboard 응답 dto 구현
urzn Jun 18, 2025
19ef1f9
Merge branch 'develop' into feature/7
urzn Jun 18, 2025
acd00b0
refactor : NullpointerException 방지 코드 추가
DG0702 Jun 18, 2025
2c24e56
fix: my-tasks-today 조회 시 정렬 기능 에러 수정
urzn Jun 18, 2025
ffab980
swagger merge
DG0702 Jun 18, 2025
7f79a08
Merge pull request #15 from Onederful-Project/feature/10
DG0702 Jun 18, 2025
c25c8b6
Merge branch 'develop' into feature/7
urzn Jun 18, 2025
b516389
feat: user 로그인 시 로그 기록되록 구현
saevit Jun 18, 2025
bca0666
merge: develop 브랜치의 최신 기능 반영
saevit Jun 18, 2025
de6991a
chore : H2 인메모리 DB 의존성 추가
leeuihyun Jun 18, 2025
90dbf73
refactor : Task save시 반환값 추가
leeuihyun Jun 18, 2025
145a984
chore : test code yml 파일 작성
leeuihyun Jun 18, 2025
e5ccc60
test : Task test code 작성
leeuihyun Jun 18, 2025
7ccb00e
merge : build.gradle 충돌 해결
leeuihyun Jun 18, 2025
5100bd8
refactor : 중복 내용이 많은 DTO Group화
leeuihyun Jun 18, 2025
0aedd5b
feature : 예외처리 / Aop 사용 메서드 추가
leeuihyun Jun 18, 2025
297a560
feat : 업무 예외 Enum 추가
leeuihyun Jun 18, 2025
cb4a049
refactor : TaskSaveRequest 그룹화로 인한 수정
leeuihyun Jun 18, 2025
b1e4f33
fix: 유효성 검사 추가, 페이지네이션 기능 추가, CommentRequestDto 통합
doohaaa Jun 18, 2025
b00c3f2
Merge pull request #16 from Onederful-Project/feature/6
doohaaa Jun 18, 2025
7a22f02
feat: task 상태 변경 시 로그 추가 기록되록 구현
saevit Jun 18, 2025
143f3c5
feat : CORS 설정 , 필터 등록
DG0702 Jun 18, 2025
144ccbf
feat : Task 상태변경 요구사항 추가로 인한 구현
leeuihyun Jun 18, 2025
039a507
feat : Pagination 응답 DTO 생성
leeuihyun Jun 18, 2025
baccdfb
merge : develop 병합
leeuihyun Jun 18, 2025
cf3ff79
fix: 페이지네이션 시작 0으로 수정
doohaaa Jun 18, 2025
6ca5bbb
Merge branch 'develop' into feature/7
urzn Jun 18, 2025
e6e561f
Merge pull request #17 from Onederful-Project/feature/7
urzn Jun 18, 2025
c298b92
Merge branch 'develop' into feature/7
urzn Jun 18, 2025
21f6d83
fix: ErrorCode 문법 오류 해결, user not found 에러코드 중복 삭제
urzn Jun 18, 2025
b10a7d1
merge : 병합
leeuihyun Jun 18, 2025
ec4ef97
Merge pull request #19 from Onederful-Project/feature/18
DG0702 Jun 18, 2025
a174961
Merge branch 'develop' of https://github.com/Onederful-Project/spring…
leeuihyun Jun 18, 2025
f10deed
fix: 응답시 Common ApiResponseDto로 반환하도록 변경
urzn Jun 18, 2025
4ead216
fix: taskDoneRate 소수점 둘째자리까지 표시하도록 변경
urzn Jun 18, 2025
4f0a963
Merge pull request #22 from Onederful-Project/feature/7
urzn Jun 18, 2025
bebb8ac
Merge branch 'develop' into feature/23
urzn Jun 18, 2025
dec1867
develop 병합
leeuihyun Jun 18, 2025
a48fc4c
refactor : 응답을 ApiResponseDto로 통일
doohaaa Jun 18, 2025
5472c3b
Merge remote-tracking branch 'origin/develop' into feature/6
doohaaa Jun 18, 2025
7e44daf
Merge pull request #20 from Onederful-Project/feature/14
leeuihyun Jun 18, 2025
c061ff9
Merge branch 'develop' into feature/23
urzn Jun 18, 2025
0a75b60
merge: develop 브랜치의 최신 기능 반영
saevit Jun 18, 2025
eedbad8
refactor : 새로운 에러코드 생성
DG0702 Jun 18, 2025
5ff3840
feat : Bean Validation 어노테이션에서 예외 걸릴 경우 핸들러로 컨트롤
DG0702 Jun 18, 2025
33d73bd
refactor : Bean Validation 어노테이션에 default message 추가,변경
DG0702 Jun 18, 2025
84bd720
refactor : 가독성 향상을 위해 코드 수정
DG0702 Jun 18, 2025
07bd8fb
ㅡmerge success
DG0702 Jun 18, 2025
557f822
refactor : api 수정 PatchMapping->putMapping
doohaaa Jun 18, 2025
16b55cd
feat: comment 생성, 수정, 삭제 시 로그 기록되록 구현
saevit Jun 18, 2025
1f01585
feat: 로그 조회 시 잘못된 활동 유형에 대한 예외 처리 추가
saevit Jun 18, 2025
a15c5a1
test: dashboard repository 테스트 코드 구현
urzn Jun 18, 2025
e1c3813
test: dashboard service 테스트 코드 구현
urzn Jun 18, 2025
a6373c1
comment: log 도메인 주석 추가
saevit Jun 19, 2025
85c8ed1
feat : 메서드 testCode 구현 (line coverage 22%)
doohaaa Jun 18, 2025
4e750e9
feat : 메서드 testCode 구현 (line coverage 58%)
doohaaa Jun 19, 2025
88c7446
feat : 모든 회원 조회 기능 추가
DG0702 Jun 19, 2025
096a18b
feat : 모든 회원 조회 기능 추가
DG0702 Jun 19, 2025
fa30e77
feat: 예외 CustomException 사용하도록 변경
saevit Jun 19, 2025
093b3e3
test: 불필요한 테스트 코드 제거
doohaaa Jun 19, 2025
e50919f
refactor : Pagination 공통 응답 메서드 구현
leeuihyun Jun 19, 2025
3dc7483
refactor : 페이지 응답 객체 변경에 따른 수정
leeuihyun Jun 19, 2025
e81a17d
Merge pull request #29 from Onederful-Project/feature/21
doohaaa Jun 19, 2025
bb3641e
Merge branch 'develop' of https://github.com/Onederful-Project/spring…
leeuihyun Jun 19, 2025
906d04b
Merge branch 'develop' into refactor/25
DG0702 Jun 19, 2025
de0bca0
모든 회원 정보 조회 기능 추가, Bean validation예외 처리
DG0702 Jun 19, 2025
02638f5
refactor : 댓글 응답 형식 수정
doohaaa Jun 19, 2025
4d9859f
Merge pull request #28 from Onederful-Project/feature/23
urzn Jun 19, 2025
f97a580
Merge branch 'develop' of https://github.com/Onederful-Project/spring…
leeuihyun Jun 19, 2025
35e1a01
Merge pull request #27 from Onederful-Project/feature/5
saevit Jun 19, 2025
5324df7
fix : 변수명 재지정(프론트 연동 오류 해결), 출력 메세지 변경
doohaaa Jun 19, 2025
4874455
Merge pull request #33 from Onederful-Project/refactor/31
doohaaa Jun 19, 2025
688a7c0
Merge branch 'develop' of https://github.com/Onederful-Project/spring…
leeuihyun Jun 19, 2025
85f1601
fix : 요구사항 변경에 따른 수정
leeuihyun Jun 19, 2025
cfae0c1
refactor : Comment 태스크별 댓글 목록 조회 응답 객체 수정
leeuihyun Jun 19, 2025
405d2cd
bug : 로그인 중 로그 부분 에러 발견하여 주석 처리
leeuihyun Jun 19, 2025
496aaee
feat : README 작성
DG0702 Jun 19, 2025
f817f5e
Merge branch 'develop' into feature/34
DG0702 Jun 19, 2025
c5acad0
Merge pull request #35 from Onederful-Project/bugfix/26
leeuihyun Jun 19, 2025
edbc5df
refactor : 소문자 대문자로 수정
DG0702 Jun 19, 2025
0af6d2e
Merge branch 'develop' into feature/34
DG0702 Jun 19, 2025
bc3ded5
Merge pull request #36 from Onederful-Project/feature/34
DG0702 Jun 19, 2025
0040512
fix: 로그인과 회원가입시 HttpRequestUtil에서 토큰을 통한 userId 가져오지 않도록 수정
saevit Jun 19, 2025
9360093
fix: 오류로 주석 처리 했던 부분 해제
saevit Jun 19, 2025
cbd05d5
Merge pull request #38 from Onederful-Project/bugfix/37
saevit Jun 19, 2025
52b13a2
fix: Dashboard Repository Test 코드 어노테이션 수정
urzn Jun 19, 2025
d61a3ee
fix : API 요구사항 변경으로 인한 테스트코드 수정
leeuihyun Jun 19, 2025
1ac3506
fix : API 요구사항 잘못 작성되어있는 부분 수정
leeuihyun Jun 19, 2025
5460507
refactor : Pagination 재사용 클래스 DTO로 통합
leeuihyun Jun 19, 2025
c38148d
Merge pull request #40 from Onederful-Project/feature/23
leeuihyun Jun 19, 2025
b637553
Merge pull request #41 from Onederful-Project/bugfix/39
leeuihyun Jun 19, 2025
850273c
feat : driver-class-name 속성 추가
leeuihyun Jun 20, 2025
cb5e2b6
docs : README 오타 수정 / 운영 환경 변수 추가
leeuihyun Jun 20, 2025
5785d89
Merge pull request #43 from Onederful-Project/feature/42
leeuihyun Jun 20, 2025
d21d054
docs : README sql 실행 방법 추가
leeuihyun Jun 20, 2025
5c7136d
Merge pull request #45 from Onederful-Project/feature/44
leeuihyun Jun 20, 2025
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
179 changes: 177 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,177 @@
# spring-onederful
기업용 Task 관리 시스템입니다.
# 💫 아웃소싱 API

<hr>

## 🎀 프로젝트 소개

<hr>

아웃소싱 형태로 진행된 백엔드 프로젝트입니다.

클라이언트 측에서 프론트엔드 개발을 완료한 상태에 참여하였으며,

REST API 기반으로 프론트엔드와 안정적으로 연동되는 백엔드 서버를 설계 및 구축하였습니다.

요구사항 분석부터 API 설계, 예외처리까지 전반적인 서버 개발을 수행한 프로젝트입니다.

> **내일배움캠프 1조**
>
> **개발기간 : 2025-06-13 ~ 2025-06-20**

<hr>

## 🧰 기술 스택

![Java17](https://img.shields.io/badge/Java17-red)
![Springboot3.5](https://img.shields.io/badge/Springboot3.5-yellow)
![JWT](https://img.shields.io/badge/JWT-orange)
![Spring Data JPA](https://img.shields.io/badge/Spring_Data_JPA-green)
![QueryDSL](https://img.shields.io/badge/QueryDSL-blue)
![MySQL](https://img.shields.io/badge/MySQL-purple)
![Swagger](https://img.shields.io/badge/Swagger-pink)

<hr>

## 🖼️ ERD

![img.png](img.png)

<hr>

## 📜 API 명세서

API
명세서는 [OutSourcing Project API 문서](https://teamsparta.notion.site/API-2112dc3ef51480a9a21cf45c77d1e85f)
를 클릭해주세요

<hr>

## 👥 Team Member

- **이의현 (팀장)**
테스크 도메인 전반 (테스크 생성, 수정 ,조회, 상태변경, 삭제) 담당
GitHub: [leeuihyun](https://github.com/leeuihyun)


- **이동근 (팀원)**
회원 도메인 전반 (회원가입, 로그인, 유저 조회, JWT 인증) 담당
GitHub: [DG0702](https://github.com/dg0702)


- **김두하 (팀원)**
댓글 도메인 전반 (댓글 생성, 수정, 조회(검색), 삭제) 담당
GitHub: [doohaaa](https://github.com/doohaaa)


- **김민성 (팀원)**
대시보드 도메인 전반 (통계 정보 제공, 내 테스크 요약) 담당
GitHub: [urzn](https://github.com/urzn)


- **우새빛 (팀원)**
활동로그 도메인 전반 (주요 활동 기록, 활동 로그 조회) 담당
GitHub: [saevit](https://github.com/saevit)

<hr>

## ✨ 주요 기능

- **docker를 이용하여 프론트엔드와 연결**


- **프론트엔드, 백엔드의 연결 → 연동 검증 : 브라우저에서 실제 요청/응답 확인**

<hr>

## ✨운영 환경 변수

```json
DB_URL=jdbc:mysql: //localhost:3306/yourdb
DB_USERNAME=yourusername
DB_PASSWORD=youruserpassword
SECRET_KEY=your_jwt_secret_key
```

<hr>

## ✨SQL 실행방법

- 데이터베이스 자동생성 X
- `onederful.sql` 을 본인 데이터베이스에서 실행시켜서 수동 적용합니다.
- `onederful.sql` 은 최상위 경로에 있습니다.

<hr>

## 🪄 트러블 슈팅

### USER 도메인

- **406 ERROR (회원가입, 로그인)**

- **응답 할 때 OffsetDateTime 역직렬화 불가 → 의존성을 추가하여 해결**


- **JWT 예외처리**

- **`@ControllerAdvice`를 이용한 JWT 예외를 원하는 응답 형태로 변경 → Controller 보다 먼저 실행 되어 수동으로 응답 형태 생성**


- **CORS**

- **docker 이용하여 프론트엔드 연결 후 백엔드 로직 실행 → CORS 문제 발생하여 CORS 설정하여 해결**

### TASK 도메인

- **DB 정규화 지키기 위한 과도한 설계**

- **불필요하게 테이블의 복잡성 상승 → Enum을 사용하여 불필요한 분리를 줄이고 타입의 안정성 상승**


- **TestCode**

- **테스트 코드 작성하여 Sturbing 후 실행하였지만 값을 반환하지 않음**

- **반환값을 직접 지정하여 해결**

### COMMNET 도메인

- **협업의 어려움**

- **각 도메인 파트별로 개발 → 나중에 연관이 있는 부분을 공통적으로 통일해야하는 문제 발생**

- **팀원과 소통하며 기본적인 틀에서 조금씩 수정하여 해결**


- **프론트엔드 API를 이용한 개발의 어려움**

- **API 설계를 도메인 위주로 하였으나 프론트 엔드 API와 달라 기능이 구현되지 않음**

- **프론트엔드 API에 맞추어 API를 일부 수정하여 해결**

### DASHBOARD

- **Priority task 정렬**

- **Priority`(Enum)` high-medium-low로 정렬하기 위해 `Enum`에 정수 필드를 추가 방식과 `Map<>`을 사용하여 정렬하는 방식을 고민**

- **`Map<>`을 사용하는것으로 결정 → 순서를 정렬하는 로직이 이 경우밖에 없어서 결정**

- **추가적으로 순서를 정렬하는 로직이 있을 경우 `Enum`에 정수 필드를 추가하여 사용하는 방향으로 선택**

### LOG

- **AOP 도입 및 책임 분리의 어려움**

- **로직 분리의 기준을 정하는데 어려움 → 공통 처리와 비즈니스 로직 사이의 경계가 모호**

- **AOP → 요청 메서드, URL, 로그인 한 유저ID 공통 정보 추출**

- **추출한 데이터를 서비스 계층으로 전달하여 가공 및 DB 저장을 담당하도록 구조 설계함**








65 changes: 46 additions & 19 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,39 +1,66 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.0'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
id 'org.springframework.boot' version '3.5.0'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

// JWT
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'

// bcrypt
implementation 'at.favre.lib:bcrypt:0.10.2'

// OffsetDateTime 역직렬화 하기 위해 필요한 모듈
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

// 테스트용 인메모리 DB
testImplementation 'com.h2database:h2'

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.6'

//QueryDsl 추가
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

tasks.named('test') {
useJUnitPlatform()
useJUnitPlatform()
}

clean {
delete file('src/main/generated')
}
Binary file added img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
62 changes: 62 additions & 0 deletions onederful.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
CREATE TABLE users
(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '사용자 식별자',
username VARCHAR(100) NOT NULL UNIQUE COMMENT '아이디',
email VARCHAR(100) NOT NULL UNIQUE COMMENT '이메일',
password VARCHAR(255) NOT NULL COMMENT '비밀번호',
name VARCHAR(100) NOT NULL COMMENT '이름',
role VARCHAR(50) NOT NULL COMMENT '권한 (ENUM)',
created_at DATETIME COMMENT '생성일자',
updated_at DATETIME COMMENT '수정일자',
deleted_at DATETIME COMMENT '삭제날짜',
is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '삭제여부'
);

CREATE TABLE tasks
(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '업무 식별자',
title VARCHAR(100) NOT NULL COMMENT '제목',
description TEXT NOT NULL COMMENT '설명',
priority VARCHAR(100) NOT NULL COMMENT '우선순위 식별자 (ENUM)',
assignee_id BIGINT NOT NULL COMMENT '담당자 식별자 (FK)',
user_id BIGINT NOT NULL COMMENT '작성자 식별자 (FK)',
status VARCHAR(100) NOT NULL COMMENT '태스크 상태 (ENUM)',
due_date DATETIME COMMENT '마감일자',
started_at DATETIME COMMENT '시작일자',
created_at DATETIME COMMENT '생성일자',
updated_at DATETIME COMMENT '수정일자',
deleted_at DATETIME COMMENT '삭제날짜',
is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '삭제여부',

FOREIGN KEY (assignee_id) REFERENCES users (id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);

CREATE TABLE comments
(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '댓글 식별자',
content TEXT NOT NULL COMMENT '댓글 내용',
task_id BIGINT NOT NULL COMMENT '업무 식별자 (FK)',
user_id BIGINT NOT NULL COMMENT '작성자 식별자 (FK)',
created_at DATETIME COMMENT '생성일자',
updated_at DATETIME COMMENT '수정일자',
deleted_at DATETIME COMMENT '삭제날짜',
is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '삭제여부',

FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
FOREIGN KEY (task_id) REFERENCES tasks (id) ON DELETE CASCADE
);

CREATE TABLE logs
(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '로그 식별자',
user_id BIGINT NOT NULL COMMENT '사용자 식별자 (FK)',
activity VARCHAR(100) NOT NULL COMMENT '활동 유형',
ip_address VARCHAR(100) NOT NULL COMMENT 'ip 주소',
method VARCHAR(100) NOT NULL COMMENT '요청 메서드 (ENUM)',
target_id BIGINT NOT NULL COMMENT '작업 대상 식별자',
request_url VARCHAR(200) NOT NULL COMMENT '로그 요청 url',
created_at DATETIME COMMENT '생성일자',

FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);
2 changes: 2 additions & 0 deletions src/main/java/com/example/onederful/OnederfulApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication
public class OnederfulApplication {

Expand Down
27 changes: 27 additions & 0 deletions src/main/java/com/example/onederful/common/ApiResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.example.onederful.common;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.time.OffsetDateTime;

@Getter
@AllArgsConstructor
public class ApiResponseDto {

private boolean success;
private String message;
private Object data;
private OffsetDateTime timestamp;

// 성공 응답 static 메서드
public static ApiResponseDto success(String message,Object date){
return new ApiResponseDto(true, message , date, OffsetDateTime.now());
}

// 실패 응답 static 메서드
public static ApiResponseDto error(String message){
return new ApiResponseDto(false, message, null, OffsetDateTime.now());
}

}
16 changes: 16 additions & 0 deletions src/main/java/com/example/onederful/common/ListResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.example.onederful.common;

import java.util.List;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class ListResponse<T> {

private List<T> content;
private Long totalElements;
private int totalPages;
private int size;
private int number;
}
Loading