Skip to content

Commit 7c918a0

Browse files
Merge pull request #65 from prgrms-web-devcourse-final-project/develop
[EA3-115] chore: develop → main 브랜치 머지
2 parents 89a013a + 7fcf0fe commit 7c918a0

File tree

199 files changed

+6263
-38
lines changed

Some content is hidden

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

199 files changed

+6263
-38
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
name: "✨ feature-template"
3+
about: 새로운 기능을 추가하거나 기존 기능을 개선할 때 사용해주세요
4+
title: ''
5+
labels: "✨ feature"
6+
assignees: ''
7+
8+
---
9+
10+
## 📝 설명 <!-- 어떤 걸 구현 예정인지 대략적으로 설명해주세요 -->
11+
12+
13+
## ✅ 구현 목록 <!-- 해야 할 일들을 적어주세요 -->
14+
- [ ]
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
name: "\U0001F41B fix-template"
3+
about: 버그 발생 시 사용해주세요
4+
title: ''
5+
labels: "\U0001F41B fix"
6+
assignees: ''
7+
8+
---
9+
10+
🐛 버그 설명 <!-- 어떤 버그인지 간결하게 설명해주세요 -->
11+
12+
🚨 버그 발생 상황 <!-- 어떤 상황에서 발생한 버그인지 설명해주세요 -->
13+
<!-- (가능하면) Given-When-Then 형식으로 서술해주세요 -->
14+
15+
💡 예상 결과 <!-- 예상했던 정상적인 결과가 어떤 것이었는지 설명해주세요 -->
16+
17+
🚩 실제 동작 <!-- 현재 어떻게 동작하는지 설명해주세요 -->
18+
19+
🛠️ 가능한 해결 방법 <!-- 문제를 해결하기 위한 아이디어가 있다면 간단히 작성해주세요 -->
20+
21+
📎 추가 정보 <!-- 문제와 관련된 스크린샷이나 에러 로그 또는 기타 참고 자료를 첨부해주세요 -->

.github/workflows/create-jira-issue.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ jobs:
7878
- name: Log created issue
7979
run: echo "Jira Issue ${{ steps.issue-parser.outputs.parentKey }}/${{ steps.create.outputs.issue }} was created"
8080

81-
- name: Checkout main code
81+
- name: Checkout develop code
8282
uses: actions/checkout@v4
8383
with:
84-
ref: main
84+
ref: develop
8585

8686
- name: Convert label-selection to Capitalized TYPE
8787
run: |

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# === Gradle ===
2+
src/main/generated/**
23
.gradle
34
build/
45
!gradle/wrapper/gradle-wrapper.jar

build.gradle

Lines changed: 49 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -21,58 +21,76 @@ ext {
2121

2222
repositories {
2323
mavenCentral()
24+
google()
2425
}
2526

2627
dependencies {
2728
// 데이터 베이스 의존성
28-
// implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
29-
// runtimeOnly 'com.h2database:h2'
30-
// runtimeOnly 'org.postgresql:postgresql'
29+
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
30+
runtimeOnly 'com.mysql:mysql-connector-j:8.4.0'
31+
//implementation 'com.h2database:h2:2.3.232'
32+
//implementation 'org.springframework.boot:spring-boot-devtools'
3133

3234
// Sql 쿼리 파라미터 보는 라이브러리
33-
// implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
35+
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
3436

35-
// 테스트 데이터베이스 의존성
36-
// testImplementation 'com.h2database:h2:1.4.200'
37+
// 테스트 데이터베이스 의존성
38+
testImplementation 'com.h2database:h2:1.4.200'
3739

38-
//Querydsl 추가
39-
// implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
40-
// annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
41-
// annotationProcessor "jakarta.annotation:jakarta.annotation-api"
42-
// annotationProcessor "jakarta.persistence:jakarta.persistence-api"
43-
//
44-
// testImplementation 'org.springframework.boot:spring-boot-starter-test'
45-
// testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
40+
// Querydsl 추가
41+
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
42+
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
43+
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
44+
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
45+
46+
testImplementation 'org.springframework.boot:spring-boot-starter-test'
47+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
4648

4749
// 테스트 의존성
4850
testImplementation 'org.springframework.boot:spring-boot-starter-test'
4951
testImplementation 'org.springframework.security:spring-security-test'
5052
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
53+
54+
// 롬복
55+
compileOnly 'org.projectlombok:lombok:1.18.30'
5156
annotationProcessor 'org.projectlombok:lombok'
5257

5358
// 웹 관련 의존성
5459
implementation 'org.springframework.boot:spring-boot-starter-web'
5560
implementation 'org.springframework.boot:spring-boot-starter-validation'
5661

62+
// lombok 의존성
63+
implementation "org.projectlombok:lombok:1.18.38"
64+
5765
// 시큐리티 의존성
58-
// implementation 'org.springframework.boot:spring-boot-starter-security'
66+
implementation 'org.springframework.boot:spring-boot-starter-security'
67+
68+
// Redis DB Cloud 의존성
69+
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
70+
implementation 'org.springframework.session:spring-session-data-redis'
5971

6072
//JWT 의존성
6173
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
6274
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
6375
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
6476

77+
// OAuth2 의존성
78+
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
79+
6580
// GCP 관련 의존성
66-
implementation 'com.google.cloud:spring-cloud-gcp-starter-secretmanager'
67-
implementation 'com.google.cloud:google-cloud-storage'
81+
// implementation 'com.google.cloud:spring-cloud-gcp-starter-secretmanager:4.9.1'
82+
// implementation 'com.google.cloud:google-cloud-storage:2.38.0'
83+
84+
// swagger
85+
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
6886
}
6987

7088
dependencyManagement {
7189
imports {
7290
// Spring Cloud 전반 (Feign, Gateway 등) 의존성 버전 관리
73-
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
91+
// mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
7492
// GCP 관련 스타터(BOM) 관리 - Secret Manager, GCS 등
75-
mavenBom "com.google.cloud:spring-cloud-gcp-dependencies:${springCloudGcpVersion}"
93+
// mavenBom "com.google.cloud:spring-cloud-gcp-dependencies:${springCloudGcpVersion}"
7694
}
7795
}
7896

@@ -83,15 +101,15 @@ tasks.named('test') {
83101
// 환경별 application.properties 포함/제외 설정
84102
def activeProfile = project.hasProperty("profile") ? project.getProperty("profile") : "local"
85103

86-
processResources {
87-
filesMatching("**/application.properties") {
88-
expand(profile: activeProfile)
89-
}
90-
91-
// 환경에 따라 불필요한 설정 파일 제외
92-
if (activeProfile == "local") {
93-
exclude("application-prod.properties")
94-
} else if (activeProfile == "prod") {
95-
exclude("application-local.properties")
96-
}
97-
}
104+
//processResources {
105+
// filesMatching("**/application.properties") {
106+
// expand(profile: activeProfile)
107+
// }
108+
//
109+
// // 환경에 따라 불필요한 설정 파일 제외
110+
// if (activeProfile == "local") {
111+
// exclude("application-prod.properties")
112+
// } else if (activeProfile == "prod") {
113+
// exclude("application-local.properties")
114+
// }
115+
//}

src/main/java/grep/neogul_coder/NeogulCoderApplication.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package grep.neogul_coder;
22

33
import java.util.TimeZone;
4-
import javax.annotation.PostConstruct;
4+
5+
import jakarta.annotation.PostConstruct;
56
import org.springframework.boot.SpringApplication;
67
import org.springframework.boot.autoconfigure.SpringBootApplication;
78

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package grep.neogul_coder.domain.attendance;
2+
3+
import grep.neogul_coder.global.entity.BaseEntity;
4+
import jakarta.persistence.*;
5+
6+
import java.time.LocalDate;
7+
8+
@Entity
9+
public class Attendance extends BaseEntity {
10+
11+
@Id
12+
@GeneratedValue(strategy = GenerationType.IDENTITY)
13+
private Long attendanceId;
14+
15+
@Column(nullable = false)
16+
private Long studyId;
17+
18+
@Column(nullable = false)
19+
private Long userId;
20+
21+
@Column(nullable = false)
22+
private LocalDate attendanceDate;
23+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package grep.neogul_coder.domain.attendance.controller;
2+
3+
import grep.neogul_coder.domain.attendance.controller.dto.response.AttendanceResponse;
4+
import grep.neogul_coder.global.response.ApiResponse;
5+
import org.springframework.web.bind.annotation.GetMapping;
6+
import org.springframework.web.bind.annotation.PostMapping;
7+
import org.springframework.web.bind.annotation.RequestMapping;
8+
import org.springframework.web.bind.annotation.RestController;
9+
10+
import java.util.List;
11+
12+
@RequestMapping("/api/attendances")
13+
@RestController
14+
public class AttendanceController implements AttendanceSpecification {
15+
16+
@GetMapping
17+
public ApiResponse<List<AttendanceResponse>> getAttendances() {
18+
return ApiResponse.success(List.of(new AttendanceResponse()));
19+
}
20+
21+
@PostMapping
22+
public ApiResponse<Void> createAttendance() {
23+
return ApiResponse.noContent();
24+
}
25+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package grep.neogul_coder.domain.attendance.controller;
2+
3+
import grep.neogul_coder.domain.attendance.controller.dto.response.AttendanceResponse;
4+
import grep.neogul_coder.global.response.ApiResponse;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.tags.Tag;
7+
8+
import java.util.List;
9+
10+
@Tag(name = "Attendance", description = "출석 API")
11+
public interface AttendanceSpecification {
12+
13+
@Operation(summary = "출석 조회", description = "일주일 단위로 출석을 조회합니다.")
14+
ApiResponse<List<AttendanceResponse>> getAttendances();
15+
16+
@Operation(summary = "출석 체크", description = "스터디에 출석을 합니다.")
17+
ApiResponse<Void> createAttendance();
18+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package grep.neogul_coder.domain.attendance.controller.dto.response;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.Getter;
5+
6+
import java.time.LocalDate;
7+
8+
@Getter
9+
public class AttendanceResponse {
10+
11+
@Schema(description = "스터디 Id", example = "1")
12+
private Long studyId;
13+
14+
@Schema(description = "유저 Id", example = "2")
15+
private Long userId;
16+
17+
@Schema(description = "출석일", example = "2025-07-10")
18+
private LocalDate attendanceDate;
19+
}

0 commit comments

Comments
 (0)