Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
766e51f
Merge pull request #399 from ProjectX-Algoitzy/feature/398
engus525 Jan 12, 2025
1a60e0b
Merge pull request #400 from ProjectX-Algoitzy/feature/398
engus525 Jan 12, 2025
b778924
Merge pull request #402 from ProjectX-Algoitzy/feature/398
engus525 Jan 12, 2025
007794b
Merge pull request #404 from ProjectX-Algoitzy/feature/398
engus525 Jan 12, 2025
ae5ee4b
Merge pull request #407 from ProjectX-Algoitzy/fix/406
engus525 Jan 12, 2025
2c9bbaf
Merge pull request #409 from ProjectX-Algoitzy/fix/406
engus525 Jan 15, 2025
980386c
Merge pull request #412 from ProjectX-Algoitzy/refactor/411
engus525 Jan 15, 2025
c067046
Merge pull request #418 from ProjectX-Algoitzy/refactor/417
engus525 Feb 12, 2025
bf49698
Merge pull request #421 from ProjectX-Algoitzy/hotfix/420
engus525 Feb 26, 2025
6cef355
Merge branch 'hotfix/420' into develop
engus525 Feb 28, 2025
7edb602
[CHORE] AWS 서버 이관 #424
engus525 Mar 2, 2025
cc53daf
Merge pull request #428 from ProjectX-Algoitzy/chore/424
engus525 Mar 3, 2025
728f050
Merge pull request #431 from ProjectX-Algoitzy/fix/429
engus525 Mar 3, 2025
ccceaa5
Update README.md
engus525 Mar 14, 2025
24f600c
Update README.md
engus525 Mar 14, 2025
4c593fa
Update README.md
engus525 Mar 15, 2025
8d81b25
readme 팀원 역할 명시
engus525 Mar 15, 2025
afe3385
Merge pull request #433 from ProjectX-Algoitzy/fix/432
engus525 Mar 24, 2025
c12c14a
[FEATURE] 문의하기 기능 개발 #414 (#435)
engus525 Mar 25, 2025
9d255eb
[FEATURE] 문의하기 기능 개발 (#437)
engus525 Apr 15, 2025
9bd1c32
[FIX] 250326 QA 반영 (#439)
engus525 Apr 21, 2025
d271b2a
Merge pull request #441 from ProjectX-Algoitzy/fix/440
engus525 Apr 21, 2025
fde6f8f
Merge pull request #442 from ProjectX-Algoitzy/fix/440
engus525 Apr 21, 2025
622486c
Update issue templates
engus525 Apr 29, 2025
f747beb
Merge pull request #448 from ProjectX-Algoitzy/fix/446
engus525 May 2, 2025
693da7a
Create pull_request_template.md
engus525 May 3, 2025
6cc81f8
Delete .github/pull_request_template.md
engus525 May 3, 2025
6bb23e7
Create pull_request_template.md
engus525 May 3, 2025
e19f407
Delete .github/ISSUE_TEMPLATE/pull_request_template.md
engus525 May 3, 2025
5c221e3
Create pull_request_template.md
engus525 May 3, 2025
0579b23
Merge pull request #450 from ProjectX-Algoitzy/fix/445
engus525 May 20, 2025
122675d
Merge pull request #452 from ProjectX-Algoitzy/fix/449
engus525 May 21, 2025
209b15c
Merge pull request #455 from ProjectX-Algoitzy/fix/454
engus525 May 22, 2025
8c0bb87
Merge pull request #458 from ProjectX-Algoitzy/fix/457
engus525 May 27, 2025
bb5eec4
Merge pull request #460 from ProjectX-Algoitzy/fix/457
engus525 May 27, 2025
1f0aea5
Merge pull request #472 from ProjectX-Algoitzy/fix/471
engus525 Oct 8, 2025
7503d13
[FEATURE] 데일리 챌린지 #462 (#474)
engus525 Oct 14, 2025
943f08a
[FEATURE] 데일리 챌린지 #462
engus525 Oct 14, 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
34 changes: 34 additions & 0 deletions .github/ISSUE_TEMPLATE/issue-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: Issue template
about: Describe this issue template's purpose here.
title: ''
labels: ''
assignees: engus525

---

## ✅ 목적
<!-- 이 이슈를 통해 무엇을 달성하려고 하는지 명확히 작성 -->
-

## 🛠️ 작업 내용
<!-- 해야 할 구체적인 작업 항목 작성 -->
- [ ]
- [ ]
- [ ]

## 💬 참고사항
<!-- 관련 이슈, PR, 문서 링크 등 필요한 추가 정보가 있으면 작성 -->
-

## ⏰ 예상 일정
<!-- 완료 목표일이나 대략적인 일정 -->
-

## ⚡ 우선순위
<!-- 낮음 / 보통 / 높음 중 하나 선택 -->
-

## 📎 관련 이슈
<!-- 이 이슈가 관련된 다른 이슈 번호 (ex. #123) -->
-
21 changes: 21 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## #️⃣ Issue Number
<!--- ex) #이슈번호, #이슈번호 -->

## 📝 요약(Summary)
<!--- 변경 사항 및 관련 이슈에 대해 간단하게 작성해주세요. 어떻게보다 무엇을 왜 수정했는지 설명해주세요. -->

## 🛠️ PR 유형
어떤 변경 사항이 있나요?

- [ ] 새로운 기능 추가
- [ ] 버그 수정
- [ ] 코드에 영향을 주지 않는 변경사항(오타 수정, 탭 사이즈 변경, 변수명 변경)
- [ ] 코드 리팩토링
- [ ] 주석 추가 및 수정
- [ ] 문서 수정
- [ ] 테스트 추가, 테스트 리팩토링
- [ ] 빌드 부분 혹은 패키지 매니저 수정
- [ ] 파일 혹은 폴더명 수정
- [ ] 파일 혹은 폴더 삭제

## 📸스크린샷 (선택)
1 change: 0 additions & 1 deletion .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ public void renewGeneration(RenewGenerationRequest request) {
.title(oldCurriculum.getTitle())
.week(oldCurriculum.getWeek())
.content(oldCurriculum.getContent())
.orderNumber(oldCurriculum.getOrderNumber())
.build()
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.example.config.jpa;

import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

@Converter
public class IntegerListToStringConverter implements AttributeConverter<List<Integer>, String> {

@Override
public String convertToDatabaseColumn(List<Integer> integerList) {
if (ObjectUtils.isEmpty(integerList)) {
return null;
}
return integerList.stream().map(String::valueOf).collect(Collectors.joining(","));
}

@Override
public List<Integer> convertToEntityAttribute(String dbData) {
if (!StringUtils.hasText(dbData)) {
return Collections.emptyList();
}
return Arrays.stream(dbData.split(",")).map(Integer::parseInt).toList();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
package org.example.domain.attendance.enums;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum AttendanceType {

PROBLEM,
BLOG,
WORKBOOK
PROBLEM("문제 인증"),
BLOG("블로그 포스팅"),
WORKBOOK("주말 모의테스트");

private final String value;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.example.domain.challenge_join_log;

import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import java.time.LocalDateTime;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.example.domain.challenge_join_log.enums.LanguageType;
import org.example.domain.challenge_problem.ChallengeProblem;
import org.example.domain.member.Member;
import org.hibernate.annotations.Comment;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class)
public class ChallengeJoinLog {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "date")
private ChallengeProblem challengeProblem;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;

@Comment("실행 시간")
private Integer executionTime;

@Comment("메모리")
private Integer memory;

@Comment("코드 길이")
private Integer codeLength;

@Comment("제출 시각")
private LocalDateTime submitTime;

@Enumerated(value = EnumType.STRING)
@Comment("언어")
private LanguageType languageType;

@CreatedDate
private LocalDateTime createdTime;

@Builder
public ChallengeJoinLog(ChallengeProblem challengeProblem, Member member,
Integer executionTime, Integer memory, Integer codeLength, LanguageType languageType,
LocalDateTime submitTime) {
this.challengeProblem = challengeProblem;
this.member = member;
this.executionTime = executionTime;
this.memory = memory;
this.codeLength = codeLength;
this.languageType = languageType;
this.submitTime = submitTime;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.example.domain.challenge_join_log.enums;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum LanguageType {
CPP(1001),
PYTHON(1003),
JAVA(1002);

private final int baekjoonCode;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.example.domain.challenge_join_log.repository;

import org.example.domain.challenge_join_log.ChallengeJoinLog;
import org.example.domain.challenge_problem.ChallengeProblem;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ChallengeJoinLogRepository extends JpaRepository<ChallengeJoinLog, Long> {

void deleteByChallengeProblem(ChallengeProblem challengeProblem);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.example.domain.challenge_problem;

import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import java.time.LocalDate;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.example.domain.problem.Problem;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class)
public class ChallengeProblem {

@Id
private LocalDate date;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "problem_id")
private Problem problem;


@Builder
public ChallengeProblem(Problem problem) {
this.date = LocalDate.now();
this.problem = problem;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.example.domain.challenge_problem.repository;

import java.time.LocalDate;
import java.util.Optional;
import org.example.domain.challenge_problem.ChallengeProblem;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ChallengeProblemRepository extends JpaRepository<ChallengeProblem, LocalDate> {

@EntityGraph(attributePaths = {"problem"})
Optional<ChallengeProblem> findByDate(LocalDate date);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.example.domain.challenge_problem.repository;

import java.time.LocalDate;
import lombok.RequiredArgsConstructor;
import org.example.api_response.exception.GeneralException;
import org.example.api_response.status.ErrorStatus;
import org.example.domain.challenge_problem.ChallengeProblem;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class CoreChallengeProblemService {

private final ChallengeProblemRepository challengeProblemRepository;

public ChallengeProblem findById(LocalDate localDate) {
return challengeProblemRepository.findById(localDate)
.orElseThrow(() -> new GeneralException(ErrorStatus.NOT_FOUND, "존재하지 않는 챌린지 문제 ID입니다."));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.example.domain.challenge_reward;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import java.time.LocalDateTime;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.example.domain.member.Member;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class)
public class ChallengeReward {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;

@CreatedDate
@Column(updatable = false)
private LocalDateTime createdTime;

@Builder
public ChallengeReward(Member member) {
this.member = member;
}
}
Loading
Loading