Skip to content

Commit 4a59184

Browse files
authored
Merge pull request #248 from inha-iesw/develop
v1.2.0 Release
2 parents 6702ee6 + 8676e21 commit 4a59184

File tree

5 files changed

+38
-42
lines changed

5 files changed

+38
-42
lines changed

src/main/java/inha/git/common/Constant.java

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public class Constant {
8787
public final static String GITHUB_FILE_CACHE_PREFIX = "github:files:";
8888
public final static String GITHUB_FILE_CONTENT_CACHE_PREFIX = "github:fileContent:";
8989
public final static String GITHUB_API_URL = "https://api.github.com/repos/";
90+
public final static String GITHUB_URL = "https://github.com/";
9091
public final static String GITHUB_CONTENTS = "/contents/";
9192
public final static String NODE_MODULES = "node_modules";
9293
public final static String OUT = ".out";
@@ -100,37 +101,19 @@ public class Constant {
100101
//.bat
101102
public final static String BAT = ".bat";
102103
public final static String CLASS = ".class";
103-
//IDEMPOTENT
104104
public final static String IDEMPOTENT = "IDEMPOTENT";
105105
public final static Integer TIME_LIMIT = 3;
106106

107-
public final static String BASIC_STATISTICS = "_기본통계";
108-
public final static String SEMESTER_STATISTICS = "_학기별";
109-
public final static String FIELD_STATISTICS = "_분야별";
110-
public final static String CATEGORY_STATISTICS = "_카테고리별";
111-
public final static String TOTAL_FILTERING = "_모든필터링";
112-
public final static String COLLEGE = "단과대";
113-
public final static String DEPARTMENT = "학과";
114-
public final static String TOTAL_PROJECT_COUNT = "total number of I-FOSS ";
115-
public final static String LOCAL_PROJECT_COUNT = "local number of I-FOSS ";
116-
public final static String GITHUB_PROJECT_COUNT = "github number of I-FOSS ";
117-
public final static String REGISTERED_PATENT_COUNT = "number of registered of I-CRM";
118-
public final static String PROJECT_PARTICIPATING_STUDENT_COUNT = "number of students participating in the I-FOSS";
119-
public final static String PATENT_PARTICIPATING_STUDENT_COUNT = "number of students with registered I-CRM";
120-
public final static String QUESTION_COUNT = "number of registered I-SSS";
121-
public final static String QUESTION_PARTICIPATING_STUDENT_COUNT = "number of students participating in the I-SSS";
122-
//학기
123-
public final static String SEMESTER = "semester";
124-
//분야
125107
public final static String FIELD = "field";
126-
//카테고리
127-
public final static String CATEGORY = "category";
128108

129109
public final static String CURRICULUM = "교과";
130110

131111
public final static String IMAGE = "image";
132112
public final static String ATTACHMENT = "attachment";
133113

114+
public final static String OSS_PROJECT_URL = "https://oss.inha.ac.kr/project/detail/";
115+
public final static String I_FOSS_STATISTICS = "I-FOSS-통계";
116+
134117
@PostConstruct
135118
public void init() {
136119
basedir = basedirValue;

src/main/java/inha/git/project/domain/repository/ProjectJpaRepository.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ public interface ProjectJpaRepository extends JpaRepository<Project, Integer> {
4646
"JOIN FETCH p.semester s " +
4747
"JOIN FETCH p.category cat " +
4848
"WHERE p.state = :state " +
49+
"AND (:semesterId IS NULL OR s.id = :semesterId) " +
4950
"ORDER BY c.id ASC, d.id ASC, u.userNumber ASC")
50-
List<Project> findAllByState(@Param("state") State state);
51+
List<Project> findAllByState(@Param("semesterId") Integer semesterId,
52+
@Param("state") State state);
5153

5254
@Query("SELECT DISTINCT p FROM Project p " +
5355
"JOIN FETCH p.user u " +
@@ -58,9 +60,11 @@ public interface ProjectJpaRepository extends JpaRepository<Project, Integer> {
5860
"JOIN FETCH p.category cat " +
5961
"WHERE c.id = :collegeId " +
6062
"AND p.state = :state " +
63+
"AND (:semesterId IS NULL OR s.id = :semesterId) " +
6164
"ORDER BY c.id ASC, d.id ASC, u.userNumber ASC")
6265
List<Project> findAllByUserCollegeIdAndState(
6366
@Param("collegeId") Integer collegeId,
67+
@Param("semesterId") Integer semesterId,
6468
@Param("state") State state);
6569

6670
@Query("SELECT DISTINCT p FROM Project p " +
@@ -72,9 +76,11 @@ List<Project> findAllByUserCollegeIdAndState(
7276
"JOIN FETCH p.category cat " +
7377
"WHERE d.id = :departmentId " +
7478
"AND p.state = :state " +
79+
"AND (:semesterId IS NULL OR s.id = :semesterId) " +
7580
"ORDER BY c.id ASC, d.id ASC, u.userNumber ASC")
7681
List<Project> findAllByUserDepartmentIdAndState(
7782
@Param("departmentId") Integer departmentId,
83+
@Param("semesterId") Integer semesterId,
7884
@Param("state") State state);
7985

8086
@Query("SELECT DISTINCT p FROM Project p " +
@@ -86,9 +92,11 @@ List<Project> findAllByUserDepartmentIdAndState(
8692
"JOIN FETCH p.category cat " +
8793
"WHERE u.id = :userId " +
8894
"AND p.state = :state " +
95+
"AND (:semesterId IS NULL OR s.id = :semesterId) " +
8996
"ORDER BY p.createdAt DESC")
9097
List<Project> findAllByUserIdAndState(
9198
@Param("userId") Integer userId,
99+
@Param("semesterId") Integer semesterId,
92100
@Param("state") State state);
93101

94102
@Query("SELECT DISTINCT pf FROM ProjectField pf " +

src/main/java/inha/git/statistics/api/controller/StatisticsController.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,12 @@ public BaseResponse<QuestionStatisticsResponse> getQuestionStatistics(@Validated
9595
@GetMapping("/export/excel")
9696
@PreAuthorize("hasAnyAuthority('professor:read', 'admin:read')")
9797
@Operation(summary = "엑셀 다운로드 API", description = "모든 통계 데이터를 엑셀 파일로 다운로드합니다.")
98-
public void exportToExcel(@AuthenticationPrincipal User user, HttpServletResponse response, @RequestParam(value = "statisticsType", defaultValue = "TOTAL") StatisticsType statisticsType, @RequestParam(value = "filterId", required = false) Integer filterId) {
98+
public void exportToExcel(@AuthenticationPrincipal User user, HttpServletResponse response,
99+
@RequestParam(value = "statisticsType", defaultValue = "TOTAL") StatisticsType statisticsType,
100+
@RequestParam(value = "filterId", required = false) Integer filterId,
101+
@RequestParam(value = "semesterId", required = false) Integer semesterId) {
99102
log.info("엑셀 다운로드 요청: {}", user.getName());
100-
statisticsExcelService.exportToExcelFile(response, statisticsType, filterId);
103+
statisticsExcelService.exportToExcelFile(response, statisticsType, filterId, semesterId);
101104
}
102105

103106
/**

src/main/java/inha/git/statistics/api/service/StatisticsExcelService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
public interface StatisticsExcelService {
77

8-
void exportToExcelFile(HttpServletResponse response, StatisticsType statisticsType, Integer filterId);
8+
void exportToExcelFile(HttpServletResponse response, StatisticsType statisticsType, Integer filterId, Integer semesterId);
99

1010

1111
}

src/main/java/inha/git/statistics/api/service/StatisticsExcelServiceImpl.java

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.stream.Collectors;
2727

2828
import static inha.git.common.BaseEntity.State.ACTIVE;
29+
import static inha.git.common.Constant.*;
2930
import static inha.git.common.code.status.ErrorStatus.EXCEL_CREATE_ERROR;
3031

3132
/**
@@ -38,17 +39,21 @@
3839
public class StatisticsExcelServiceImpl implements StatisticsExcelService {
3940

4041
private final ProjectJpaRepository projectJpaRepository;
41-
private static final String OSS_PROJECT_URL = "https://oss.inha.ac.kr/project/detail/";
42+
43+
private static final String[] headers = {
44+
"순번", "단과대", "학과", "학번", "이름", "I-FOSS 제목",
45+
"학기", "카테고리", "분야", "저장소 타입", "링크", "업로드 날짜"
46+
};
4247

4348
@Override
44-
public void exportToExcelFile(HttpServletResponse response, StatisticsType statisticsType, Integer filterId) {
49+
public void exportToExcelFile(HttpServletResponse response, StatisticsType statisticsType, Integer filterId, Integer semesterId) {
4550
try (Workbook workbook = new XSSFWorkbook()) {
46-
Sheet sheet = workbook.createSheet("프로젝트 통계");
51+
Sheet sheet = workbook.createSheet(I_FOSS_STATISTICS);
4752

4853
Row headerRow = sheet.createRow(0);
4954
createHeaders(headerRow);
5055

51-
List<Project> projects = getProjectsByStatisticsType(statisticsType, filterId);
56+
List<Project> projects = getProjectsByStatisticsType(statisticsType, filterId, semesterId);
5257
writeProjectData(sheet, projects);
5358
setColumnWidths(sheet);
5459
writeToResponse(workbook, response);
@@ -59,10 +64,7 @@ public void exportToExcelFile(HttpServletResponse response, StatisticsType stati
5964
}
6065

6166
private void createHeaders(Row headerRow) {
62-
String[] headers = {
63-
"순번", "단과대", "학과", "학번", "이름", "프로젝트 제목",
64-
"학기", "카테고리", "분야", "저장소 타입", "링크", "생성 날짜"
65-
};
67+
6668

6769
CellStyle headerStyle = createHeaderStyle(headerRow.getSheet().getWorkbook());
6870

@@ -73,12 +75,12 @@ private void createHeaders(Row headerRow) {
7375
}
7476
}
7577

76-
private List<Project> getProjectsByStatisticsType(StatisticsType type, Integer filterId) {
78+
private List<Project> getProjectsByStatisticsType(StatisticsType type, Integer filterId, Integer semesterId) {
7779
List<Project> projects = switch (type) {
78-
case TOTAL -> projectJpaRepository.findAllByState(ACTIVE);
79-
case COLLEGE -> projectJpaRepository.findAllByUserCollegeIdAndState(filterId, ACTIVE);
80-
case DEPARTMENT -> projectJpaRepository.findAllByUserDepartmentIdAndState(filterId, ACTIVE);
81-
case USER -> projectJpaRepository.findAllByUserIdAndState(filterId, ACTIVE);
80+
case TOTAL -> projectJpaRepository.findAllByState(semesterId, ACTIVE);
81+
case COLLEGE -> projectJpaRepository.findAllByUserCollegeIdAndState(filterId, semesterId, ACTIVE);
82+
case DEPARTMENT -> projectJpaRepository.findAllByUserDepartmentIdAndState(filterId, semesterId, ACTIVE);
83+
case USER -> projectJpaRepository.findAllByUserIdAndState(filterId, semesterId, ACTIVE);
8284
};
8385

8486
if (!projects.isEmpty()) {
@@ -142,7 +144,7 @@ private String getFieldNames(Project project) {
142144

143145
private String getProjectLink(Project project) {
144146
return project.getRepoName() != null ?
145-
"https://github.com/" + project.getRepoName() :
147+
GITHUB_URL + project.getRepoName() :
146148
OSS_PROJECT_URL + project.getId();
147149
}
148150

@@ -158,19 +160,19 @@ private CellStyle createHeaderStyle(Workbook workbook) {
158160
}
159161

160162
private void setColumnWidths(Sheet sheet) {
161-
for (int i = 0; i < 12; i++) {
163+
for (int i = 0; i < headers.length; i++) {
162164
sheet.autoSizeColumn(i);
163165
}
164166
}
165167

166168
private void writeToResponse(Workbook workbook, HttpServletResponse response) throws IOException {
167-
String fileName = "I-OSS_Statistics_" +
169+
String fileName = I_FOSS_STATISTICS + '-' +
168170
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")) +
169171
".xlsx";
170172

171173
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
172174
response.setHeader("Content-Disposition", "attachment; filename=" +
173-
URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()));
175+
URLEncoder.encode(fileName, StandardCharsets.UTF_8));
174176

175177
try (ServletOutputStream outputStream = response.getOutputStream()) {
176178
workbook.write(outputStream);

0 commit comments

Comments
 (0)