Skip to content

Commit 49024ba

Browse files
committed
feat: 지원자 API 와 구글 스프레드 시트 연동
1 parent 82c0d1a commit 49024ba

File tree

2 files changed

+36
-8
lines changed

2 files changed

+36
-8
lines changed

src/main/java/dmu/dasom/api/domain/applicant/service/ApplicantServiceImpl.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,50 @@
88
import dmu.dasom.api.domain.applicant.repository.ApplicantRepository;
99
import dmu.dasom.api.domain.common.exception.CustomException;
1010
import dmu.dasom.api.domain.common.exception.ErrorCode;
11+
import dmu.dasom.api.domain.google.service.GoogleApiService;
1112
import dmu.dasom.api.global.dto.PageResponse;
1213
import lombok.RequiredArgsConstructor;
14+
import org.springframework.beans.factory.annotation.Value;
1315
import org.springframework.data.domain.Page;
1416
import org.springframework.data.domain.PageRequest;
1517
import org.springframework.stereotype.Service;
1618

19+
import java.util.List;
20+
1721
@RequiredArgsConstructor
1822
@Service
1923
public class ApplicantServiceImpl implements ApplicantService {
2024

2125
private final static int DEFAULT_PAGE_SIZE = 20;
2226

2327
private final ApplicantRepository applicantRepository;
28+
private final GoogleApiService googleApiService;
29+
30+
@Value("${google.spreadsheet.id}")
31+
private String spreadsheetId;
2432

2533
// 지원자 저장
2634
@Override
2735
public void apply(final ApplicantCreateRequestDto request) {
28-
applicantRepository.save(request.toEntity());
36+
Applicant applicant = applicantRepository.save(request.toEntity());
37+
38+
// 스프레드 시트에 기록할 데이터
39+
List<List<Object>> values = List.of(List.of(
40+
applicant.getId(),
41+
applicant.getStudentNo(),
42+
applicant.getContact(),
43+
applicant.getEmail(),
44+
applicant.getGrade(),
45+
applicant.getReasonForApply(),
46+
applicant.getActivityWish(),
47+
applicant.getIsPrivacyPolicyAgreed(),
48+
applicant.getCreatedAt(),
49+
applicant.getUpdatedAt()
50+
));
51+
52+
String range = "Sheet1!A:J";
53+
54+
googleApiService.writeToSheet(spreadsheetId, range, values);
2955
}
3056

3157
// 지원자 조회

src/main/java/dmu/dasom/api/domain/google/service/GoogleApiService.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.google.api.client.json.jackson2.JacksonFactory;
66

77
import com.google.api.services.sheets.v4.Sheets;
8+
import com.google.api.services.sheets.v4.model.AppendValuesResponse;
89
import com.google.api.services.sheets.v4.model.UpdateValuesResponse;
910
import com.google.api.services.sheets.v4.model.ValueRange;
1011
import com.google.auth.Credentials;
@@ -56,17 +57,18 @@ public void writeToSheet(String spreadsheetId, String range, List<List<Object>>
5657
try {
5758
Sheets service = getSheetsService();
5859
ValueRange body = new ValueRange().setValues(values);
59-
UpdateValuesResponse result = service.spreadsheets().values()
60-
.update(spreadsheetId, range, body)
60+
AppendValuesResponse response = service.spreadsheets().values()
61+
.append(spreadsheetId, range, body)
6162
.setValueInputOption("USER_ENTERED")
63+
.setInsertDataOption("INSERT_ROWS")
6264
.execute();
63-
logger.info("Updated rows: {}", result.getUpdatedRows());
64-
} catch (IOException e) {
65-
logger.error("Failed to write data to the spreadsheet", e);
66-
throw new CustomException(ErrorCode.WRITE_FAIL);
65+
logger.info("Appended rows: {}", response.getUpdates().getUpdatedRows());
6766
} catch (GeneralSecurityException e) {
68-
logger.error("Failed to write data to the spreadsheet", e);
67+
logger.error("Failed to write data to the spreadsheet due to security issues", e);
6968
throw new CustomException(ErrorCode.INTERNAL_SERVER_ERROR);
69+
} catch (IOException e) {
70+
logger.error("Failed to write data to the spreadsheet due to IO issues", e);
71+
throw new CustomException(ErrorCode.WRITE_FAIL);
7072
}
7173
}
7274

0 commit comments

Comments
 (0)