Skip to content

Commit fd1b434

Browse files
authored
Merge branch 'dev' into DASOMBE-18-refactor-면접-예약-날짜-변경-기능-추가
2 parents f41a765 + 0f7e3ce commit fd1b434

31 files changed

+604
-92
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: "🍀다솜-이슈-템플릿"
2+
description: "해당 이슈 생성 템플릿으로 작성해주세요! (2025.08.08 update)"
3+
labels: [FEAT]
4+
title: "[feat] 개발 타이틀"
5+
body:
6+
- type: input
7+
id: parentKey
8+
attributes:
9+
label: "🎟️ 상위 작업 (Ticket Number)"
10+
description: "상위 작업의 Ticket Number를 기입해주세요"
11+
placeholder: "DASOMBE-00"
12+
validations:
13+
required: true
14+
15+
- type: dropdown
16+
id: projectKey
17+
attributes:
18+
label: "📦 프로젝트"
19+
description: "이슈를 생성할 Jira 프로젝트를 선택하세요"
20+
options:
21+
- DASOMFE
22+
- DASOMBE
23+
validations:
24+
required: true
25+
26+
- type: textarea
27+
id: purpose
28+
attributes:
29+
label: "🎯 목적(Purpose)"
30+
description: "해당 Issue가 발생한 원인과 배경을 설명한다."
31+
placeholder: "예: 회원 기능 구현을 위한 로그인 기능 추가 필요"
32+
validations:
33+
required: true
34+
35+
- type: textarea
36+
id: description
37+
attributes:
38+
label: "📝 상세 내용(Description)"
39+
description: "구현할 기능 또는 수정 사항에 대한 구체적인 설명"
40+
placeholder: "예: 이메일 및 비밀번호 입력값 검증 로직 추가, OAuth 연동 검토"
41+
validations:
42+
required: true

.github/pull_request_template.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# [태그] 제목
2+
3+
(예: [feat] 사용자 인증 기능 추가)
4+
5+
## Issue
6+
7+
- 예시: #111, #112
8+
(해당 PR과 관련된 이슈 번호를 명시하여 추적 용이성을 확보)
9+
10+
## 변경 내용
11+
12+
- 이번 PR에서 어떤 변경이 이루어졌는지 간략하게 기술합니다.
13+
(예: 기존 로그인 API에 JWT 기반 인증 로직 추가)
14+
15+
## 체크리스트
16+
17+
- PR을 제출하기 전에 다음 사항들을 확인해주세요:
18+
19+
- [ ] 커밋 메시지가 컨벤션을 따르는가?
20+
- [ ] 린트 검사를 통과했는가? (`npm run lint` or `npm run lint:fix`)
21+
- [ ] 로컬에서 빌드가 성공하는가? (`npm run build`)
22+
23+
## 테스트
24+
25+
- [ ] 로컬에서 테스트 완료
26+
- [ ] 기존 기능에 영향 없음 확인
27+
- [ ] 다양한 브라우저에서 테스트 (필요시)
28+
29+
## 리뷰 요구사항(필요시)
30+
31+
- 특별히 리뷰해주길 원하는 부분
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Close Jira issue
2+
on:
3+
issues:
4+
types:
5+
- closed
6+
7+
jobs:
8+
close-issue:
9+
name: Close Jira issue
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Login to Jira
14+
uses: atlassian/gajira-login@v3
15+
env:
16+
JIRA_BASE_URL: ${{ secrets.JIRA_URL }}
17+
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
18+
JIRA_USER_EMAIL: ${{ secrets.JIRA_EMAIL }}
19+
20+
- name: Extract Jira issue key from GitHub issue title
21+
id: extract-key
22+
run: |
23+
ISSUE_TITLE="${{ github.event.issue.title }}"
24+
JIRA_KEY=$(echo "$ISSUE_TITLE" | grep -oE '[A-Z]+-[0-9]+')
25+
echo "JIRA_KEY=$JIRA_KEY" >> $GITHUB_ENV
26+
27+
- name: Close Jira issue
28+
if: env.JIRA_KEY != ''
29+
uses: atlassian/gajira-transition@v3
30+
with:
31+
issue: ${{ env.JIRA_KEY }}
32+
transition: 완료
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
name: Create Jira issue
2+
on:
3+
issues:
4+
types:
5+
- opened
6+
jobs:
7+
create-issue:
8+
name: Create Jira issue
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Login
12+
uses: atlassian/gajira-login@v3
13+
env:
14+
JIRA_BASE_URL: ${{ secrets.JIRA_URL }}
15+
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
16+
JIRA_USER_EMAIL: ${{ secrets.JIRA_EMAIL }}
17+
18+
- name: Checkout main code
19+
uses: actions/checkout@v4
20+
with:
21+
ref: main
22+
23+
- name: Issue Parser
24+
uses: stefanbuck/github-issue-parser@v3
25+
id: issue-parser
26+
with:
27+
template-path: .github/ISSUE_TEMPLATE/🍀다솜-이슈-템플릿.yml
28+
29+
- name: Log Issue Parser
30+
run: |
31+
echo '${{ steps.issue-parser.outputs.issueparser_parentKey }}'
32+
echo '${{ steps.issue-parser.outputs.__ticket_number }}'
33+
echo '${{ steps.issue-parser.outputs.jsonString }}'
34+
35+
- name: Convert markdown to Jira Syntax
36+
uses: peter-evans/jira2md@v1
37+
id: md2jira
38+
with:
39+
input-text: |
40+
### Github Issue Link
41+
- ${{ github.event.issue.html_url }}
42+
43+
${{ github.event.issue.body }}
44+
mode: md2jira
45+
46+
- name: Create Issue
47+
id: create
48+
uses: atlassian/gajira-create@v3
49+
with:
50+
project: DASOMBE
51+
issuetype: Task
52+
summary: "${{ github.event.issue.title }}"
53+
description: "${{ steps.md2jira.outputs.output-text }}"
54+
fields: |
55+
{
56+
"parent": {
57+
"key": "${{ steps.issue-parser.outputs.issueparser_parentKey}}"
58+
}
59+
}
60+
61+
- name: Log created issue
62+
run: echo "Jira Issue ${{ steps.issue-parser.outputs.parentKey }}/${{ steps.create.outputs.issue }} was created"
63+
64+
- name: Update issue title
65+
uses: actions-cool/issues-helper@v3
66+
with:
67+
actions: "update-issue"
68+
token: ${{ secrets.GITHUB_TOKEN }}
69+
title: "[${{ steps.create.outputs.issue }}] ${{ github.event.issue.title }}"
70+
71+
- name: Add comment with Jira issue link
72+
uses: actions-cool/issues-helper@v3
73+
with:
74+
actions: "create-comment"
75+
token: ${{ secrets.GITHUB_TOKEN }}
76+
issue-number: ${{ github.event.issue.number }}
77+
body: "Jira Issue Created: [${{ steps.create.outputs.issue }}](${{ secrets.JIRA_URL }}/browse/${{ steps.create.outputs.issue }})"

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ dependencies {
5757
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
5858
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
5959
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'
60+
61+
implementation 'software.amazon.awssdk:s3:2.28.23'
6062
}
6163

6264
tasks.named('test') {

src/main/java/dmu/dasom/api/domain/common/exception/ErrorCode.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@ public enum ErrorCode {
3434
SLOT_FULL(400, "C025", "해당 슬롯이 가득 찼습니다."),
3535
RESERVATION_NOT_FOUND(400, "C026", "예약을 찾을 수 없습니다."),
3636
SLOT_NOT_ACTIVE(400, "C027", "해당 슬롯이 비활성화 되었습니다."),
37-
FILE_ENCODE_FAIL(400, "C028", "파일 인코딩에 실패하였습니다."),
37+
FILE_UPLOAD_FAIL(400, "C028", "파일 업로드에 실패하였습니다."),
3838
RECRUITMENT_NOT_ACTIVE(400, "C029", "모집 기간이 아닙니다."),
3939
NOT_FOUND_PARTICIPANT(400, "C030", "참가자를 찾을 수 없습니다."),
4040
EXECUTIVE_NOT_FOUND(400, "C031", "임원진을 찾을 수 없습니다."),
41-
VERIFICATION_CODE_NOT_VALID(400, "C032", "인증 코드가 유효하지 않습니다."),
42-
SLOT_UNAVAILABLE(400, "C033", "해당 슬롯을 예약할 수 없습니다.")
43-
;
41+
GENERATION_NOT_FOUND(400, "C032", "저장된 기수를 찾을 수 없습니다."),
42+
INVALID_GENERATION_FORMAT(400, "C033", "유효하지 않은 기수 형식입니다. (예: '1기')");
43+
VERIFICATION_CODE_NOT_VALID(400, "C034", "인증 코드가 유효하지 않습니다."),
44+
SLOT_UNAVAILABLE(400, "C035", "해당 슬롯을 예약할 수 없습니다.");
4445

4546
private final int status;
4647
private final String code;

src/main/java/dmu/dasom/api/domain/executive/dto/ExecutiveListResponseDto.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dmu.dasom.api.domain.executive.dto;
22

3+
import dmu.dasom.api.domain.executive.enums.Team;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
@@ -22,7 +23,15 @@ public class ExecutiveListResponseDto {
2223
@Schema(description = "임원진 직책", example = "회장")
2324
private String position;
2425

25-
@Schema(description = "임원진 깃허브 주소", example = "https://github.com/dasom")
26-
private String githubUrl;
26+
@Schema(description = "수정할 임원진 역할", example = "동아리 운영 총괄", nullable = true)
27+
private String role;
28+
29+
@Schema(description = "임원진 깃허브 이름", example = "DASOM")
30+
private String github_username;
31+
32+
@Schema(description = "소속 팀", example = "president, tech, academic, pr, management")
33+
private Team team;
34+
35+
private Integer sortOrder;
2736

2837
}

src/main/java/dmu/dasom/api/domain/executive/dto/ExecutiveRequestDto.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dmu.dasom.api.domain.executive.dto;
22

33
import dmu.dasom.api.domain.executive.entity.ExecutiveEntity;
4+
import dmu.dasom.api.domain.executive.enums.Team;
45
import io.swagger.v3.oas.annotations.media.Schema;
56
import jakarta.validation.constraints.NotBlank;
67
import jakarta.validation.constraints.Size;
@@ -21,17 +22,30 @@ public class ExecutiveRequestDto {
2122
@Schema(description = "임원진 이름", example = "김다솜")
2223
private String name;
2324

24-
@NotBlank(message = "임원진 역할은 필수 입력 사항입니다.")
25-
@Schema(description = "임원진 역할", example = "회장")
25+
@NotBlank(message = "임원진 직책은 필수 입력 사항입니다.")
26+
@Schema(description = "임원진 직책", example = "회장")
2627
private String position;
2728

28-
private String githubUrl;
29+
@NotBlank(message = "임원진 역할은 필수 입력 사항입니다.")
30+
@Schema(description = "임원진 역할", example = "동아리 운영 총괄")
31+
private String role;
32+
33+
@Schema(description = "임원진 깃허브 이름", example = "DASOM")
34+
private String github_username;
35+
36+
@Schema(description = "소속 팀", example = "president, tech, academic, pr, management")
37+
private Team team;
38+
39+
private Integer sortOrder;
2940

3041
public ExecutiveEntity toEntity() {
3142
return ExecutiveEntity.builder()
3243
.name(this.name)
3344
.position(this.position)
34-
.githubUrl(this.githubUrl)
45+
.role(this.role)
46+
.githubUsername(this.github_username)
47+
.team(this.team)
48+
.sortOrder(this.sortOrder)
3549
.build();
3650
}
3751
}

src/main/java/dmu/dasom/api/domain/executive/dto/ExecutiveResponseDto.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dmu.dasom.api.domain.executive.dto;
22

3+
import dmu.dasom.api.domain.executive.enums.Team;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
@@ -22,6 +23,14 @@ public class ExecutiveResponseDto {
2223
@Schema(description = "임원진 직책", example = "회장")
2324
private String position;
2425

25-
@Schema(description = "임원진 깃허브", example = "https://github.com/dasom")
26-
private String githubUrl;
26+
@Schema(description = "수정할 임원진 역할", example = "동아리 운영 총괄")
27+
private String role;
28+
29+
@Schema(description = "임원진 깃허브 이름", example = "DASOM")
30+
private String github_username;
31+
32+
@Schema(description = "소속 팀", example = "president, tech, academic, pr, management")
33+
private Team team;
34+
35+
private Integer sortOrder;
2736
}

src/main/java/dmu/dasom/api/domain/executive/dto/ExecutiveUpdateRequestDto.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dmu.dasom.api.domain.executive.dto;
22

3+
import dmu.dasom.api.domain.executive.enums.Team;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import jakarta.validation.constraints.Size;
56
import lombok.AllArgsConstructor;
@@ -19,6 +20,15 @@ public class ExecutiveUpdateRequestDto {
1920
@Schema(description = "수정할 임원진 직책", example = "회장", nullable = true)
2021
private String position;
2122

22-
@Schema(description = "수정할 임원진 깃허브 주소", example = "https://github.com/dasom", nullable = true)
23-
private String githubUrl;
23+
@Schema(description = "수정할 임원진 역할", example = "동아리 운영 총괄", nullable = true)
24+
private String role;
25+
26+
@Schema(description = "임원진 깃허브 이름", example = "DASOM")
27+
private String github_username;
28+
29+
@Schema(description = "소속 팀", example = "president, tech, academic, pr, management")
30+
private Team team;
31+
32+
private Integer sortOrder;
33+
2434
}

0 commit comments

Comments
 (0)