Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] 대학교 크롤링 최적화 #72

Closed
wants to merge 41 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
2aaccce
[BE] refactor : 모임의 시작/종료 기간 자료형 변경(datetime -> date)
jerry3269 Apr 18, 2024
4a04060
[BE] feat : 공개 모임 생성 로직 틀 작성
jerry3269 Apr 18, 2024
ca2df0a
[BE] feat : 비공개 모임 생성 로직 틀 작성
jerry3269 Apr 18, 2024
c7375d3
[BE] fix : MoimAppender가 JpaRepo를 의존하지 않도록 변경
jerry3269 Apr 18, 2024
c661ada
[BE] refactor : 모임 엔티티에 공개 여부 필드 추가(DisplayStatus)
jerry3269 Apr 18, 2024
423b72b
[BE] feat : 공개 모임 생성 로직
jerry3269 Apr 18, 2024
2c82ecc
[BE] feat : 비공개 모임 생성 로직
jerry3269 Apr 18, 2024
0568e37
[BE] feat : 문서화를 위한 FakeMoimService 생성
jerry3269 Apr 24, 2024
34844ba
[BE] fix : 공개 모임 생성 URL 수정
jerry3269 Apr 24, 2024
3943f30
[BE] feat : 테스트를 위한 모임 카테고리 임의 추가
jerry3269 Apr 24, 2024
0c93340
[BE] refactor : 모임 생성 테스트를 위한 반환 객체 설정
jerry3269 Apr 24, 2024
1cc13d0
[BE] feat : 모임 생성 테스트
jerry3269 Apr 24, 2024
d213724
[BE] refactor : 파일 업로드 반환 타입 추상화
jerry3269 Apr 24, 2024
fda879c
[BE] faet : 모임 사진 업로드 기능 구현 및 테스트
jerry3269 Apr 24, 2024
4c27132
[BE] refactor : Assertions static import로 추출하기
jerry3269 Apr 27, 2024
3b0ed7c
[BE] refactor : 모임 이미지 업로드 테스트 문서화
jerry3269 Apr 27, 2024
a0f3fa3
Merge pull request #55 from U2DJ2/be/feat/moim-create
jerry3269 Apr 27, 2024
dc3b894
[BE] feat : 개인 일정 등록
320Hwany Apr 27, 2024
918c179
[BE] test : 개인 일정 등록
320Hwany Apr 27, 2024
33a420b
[BE] feat : 개인 일정 수정
320Hwany Apr 27, 2024
955d235
[BE] test : 개인 일정 수정
320Hwany Apr 27, 2024
f6d6941
[BE] feat : 개인 일정 삭제
320Hwany Apr 27, 2024
b9a7703
[BE] test : 개인 일정 삭제
320Hwany Apr 27, 2024
ee960cd
fix : 개인 일정 쿼리 오류 수정
320Hwany Apr 28, 2024
efea203
Merge pull request #59 from U2DJ2/be/feat/schedule
320Hwany Apr 28, 2024
51580ee
[BE] feat : 모임 상세 조회 구현
jerry3269 Apr 27, 2024
2f9247a
[BE] test : 모임 상세 조회 테스트
jerry3269 Apr 27, 2024
eb072ee
[BE] feat : 모임 정보 수정 기능 구현
jerry3269 Apr 28, 2024
7c30922
[BE] test : 모임 정보 수정 테스트
jerry3269 Apr 29, 2024
e795cee
[BE] fix : 회원가입 URL excludePathPatterns에 추가
jerry3269 Apr 29, 2024
3b80370
[BE] refactor : 회원가입 API 변경
jerry3269 Apr 29, 2024
ef13090
[BE] refactor : 회원가입 API 변경
jerry3269 Apr 29, 2024
b3c420d
Merge branch 'be/feat/moim' of https://github.com/U2DJ2/booki-today i…
jerry3269 Apr 29, 2024
14ae9fc
[BE] fix : 변경된 API 테스트 반영
jerry3269 Apr 29, 2024
d3ffdcd
[BE] refactor : 모임 조회 API 파라미터 방식으로 변경
jerry3269 Apr 29, 2024
c4db091
[BE] refactor : 문서화 인증 Tag 통일
jerry3269 Apr 29, 2024
16a0cf2
Merge pull request #64 from U2DJ2/be/feat/moim
jerry3269 Apr 29, 2024
2aafa97
[BE] refactor : university 크롤링 appender 역할 삭제
Anak-2 Apr 30, 2024
60936de
[BE] refactor : 대학교 이름 컬렉션 조회 최적화
Anak-2 Apr 30, 2024
06e4dfd
[BE] refactor : 대학교 학과 배치 업데이트로 최적화
Anak-2 Apr 30, 2024
1d4a75c
[BE] refactor : 대학교 학과 업데이트 맵에 쌓은 뒤 업데이트 하도록 수정
Anak-2 Apr 30, 2024
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
3 changes: 3 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ build/
### Generated ###
**/src/main/generated/

### initDB ###
**/src/main/java/moim_today/global/init/**

### Properties ###
application.yml
application-dev.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public interface AuthService {

void login(final MemberLoginRequest memberLoginRequest, final HttpServletRequest request);

void register(final MemberRegisterRequest memberRegisterRequest, final HttpServletRequest request);
void signUp(final MemberRegisterRequest memberRegisterRequest, final HttpServletRequest request);

void logout(final HttpServletRequest request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ public void logout(final HttpServletRequest request) {
}

@Override
public void register(final MemberRegisterRequest memberRegisterRequest,
final HttpServletRequest request) {
public void signUp(final MemberRegisterRequest memberRegisterRequest,
final HttpServletRequest request) {
universityFinder.checkUniversityIdIsPresent(memberRegisterRequest.universityId());
departmentFinder.isDepartmentAssociatedWithUniversity(memberRegisterRequest.universityId(), memberRegisterRequest.departmentId());
memberFinder.validateEmailNotExists(memberRegisterRequest.email());
authManager.register(memberRegisterRequest, request);
authManager.signUp(memberRegisterRequest, request);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;

@Service
public class AmazonS3Service implements FileService{

Expand All @@ -21,7 +23,8 @@ public AmazonS3Service(final FileUploader fileUploader, final FileRemover fileRe
}

public FileInfoResponse uploadFile(final String fileType, final MultipartFile multipartFile){
return fileUploader.uploadFile(fileType, multipartFile);
String imageUrl = fileUploader.uploadFile(fileType, multipartFile);
return new FileInfoResponse(imageUrl);
}

public void deleteFile(final MemberSession memberSession, final FileDeleteRequest fileDeleteRequest){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void updateProfile(final long memberId,

@Override
public void updateProfileImage(final long memberId, final MultipartFile file) {
FileInfoResponse fileInfoResponse = fileUploader.uploadFile(PROFILE_IMAGE.value(), file);
memberUpdater.updateProfileImageUrl(memberId, fileInfoResponse.uploadFileUrl());
String imageUrl = fileUploader.uploadFile(PROFILE_IMAGE.value(), file);
memberUpdater.updateProfileImageUrl(memberId, imageUrl);
}
}
19 changes: 19 additions & 0 deletions backend/src/main/java/moim_today/application/moim/MoimService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package moim_today.application.moim;

import moim_today.dto.moim.*;
import org.springframework.web.multipart.MultipartFile;

public interface MoimService {

void createPublicMoim(final long memberId, final long universityId,
final PublicMoimAppendRequest publicMoimAppendRequest);

void createPrivateMoim(final long memberId, final long universityId,
final PrivateMoimAppendRequest privateMoimAppendRequest);

UploadMoimImageResponse uploadMoimImage(final MultipartFile file);

MoimDetailResponse getMoimDetail(final long moimId);

void updateMoim(final long memberId, final MoimUpdateRequest moimUpdateRequest);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package moim_today.application.moim;

import moim_today.dto.moim.*;
import moim_today.implement.file.FileUploader;
import moim_today.implement.moim.MoimAppender;
import moim_today.implement.moim.MoimFinder;
import moim_today.implement.moim.MoimUpdater;
import moim_today.persistence.entity.moim.moim.MoimJpaEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import static moim_today.global.constant.FileTypeConstant.MOIM_IMAGE;

@Service
public class MoimServiceImpl implements MoimService{

private final MoimAppender moimAppender;
private final FileUploader fileUploader;
private final MoimFinder moimFinder;
private final MoimUpdater moimUpdater;

public MoimServiceImpl(final MoimAppender moimAppender,
final FileUploader fileUploader,
final MoimFinder moimFinder,
final MoimUpdater moimUpdater) {
this.moimAppender = moimAppender;
this.fileUploader = fileUploader;
this.moimFinder = moimFinder;
this.moimUpdater = moimUpdater;
}

@Override
public void createPublicMoim(final long memberId, final long universityId,
final PublicMoimAppendRequest publicMoimAppendRequest) {
moimAppender.createPublicMoim(memberId, universityId, publicMoimAppendRequest);
}

@Override
public void createPrivateMoim(final long memberId, final long universityId,
final PrivateMoimAppendRequest privateMoimAppendRequest) {
moimAppender.createPrivateMoim(memberId, universityId, privateMoimAppendRequest);
}

@Override
public UploadMoimImageResponse uploadMoimImage(final MultipartFile file) {
String imageUrl = fileUploader.uploadFile(MOIM_IMAGE.value(), file);
return UploadMoimImageResponse.from(imageUrl);
}

@Override
public MoimDetailResponse getMoimDetail(final long moimId) {
MoimJpaEntity moimJpaEntity = moimFinder.getById(moimId);
return MoimDetailResponse.from(moimJpaEntity);
}

@Override
public void updateMoim(final long memberId, final MoimUpdateRequest moimUpdateRequest) {
moimUpdater.updateMoim(memberId, moimUpdateRequest);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
package moim_today.application.schedule;

import moim_today.dto.schedule.ScheduleCreateRequest;
import moim_today.dto.schedule.ScheduleUpdateRequest;
import moim_today.dto.schedule.TimeTableRequest;


public interface ScheduleService {

void fetchTimeTable(final long memberId, final TimeTableRequest timeTableRequest);

void createSchedule(final long memberId, final ScheduleCreateRequest scheduleCreateRequest);

void updateSchedule(final long memberId, final ScheduleUpdateRequest scheduleUpdateRequest);

void deleteSchedule(final long memberId, final long scheduleId);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package moim_today.application.schedule;

import moim_today.domain.schedule.Schedule;
import moim_today.dto.schedule.ScheduleCreateRequest;
import moim_today.dto.schedule.ScheduleUpdateRequest;
import moim_today.dto.schedule.TimeTableRequest;
import moim_today.implement.schedule.ScheduleAppender;
import moim_today.implement.schedule.ScheduleDeleter;
import moim_today.implement.schedule.ScheduleManager;
import moim_today.implement.schedule.ScheduleUpdater;
import moim_today.persistence.entity.schedule.ScheduleJpaEntity;
import org.springframework.stereotype.Service;

import java.util.List;
Expand All @@ -13,10 +18,15 @@ public class ScheduleServiceImpl implements ScheduleService {

private final ScheduleManager scheduleManager;
private final ScheduleAppender scheduleAppender;
private final ScheduleUpdater scheduleUpdater;
private final ScheduleDeleter scheduleDeleter;

public ScheduleServiceImpl(final ScheduleManager scheduleManager, final ScheduleAppender scheduleAppender) {
public ScheduleServiceImpl(final ScheduleManager scheduleManager, final ScheduleAppender scheduleAppender,
final ScheduleUpdater scheduleUpdater, final ScheduleDeleter scheduleDeleter) {
this.scheduleManager = scheduleManager;
this.scheduleAppender = scheduleAppender;
this.scheduleUpdater = scheduleUpdater;
this.scheduleDeleter = scheduleDeleter;
}

@Override
Expand All @@ -25,4 +35,20 @@ public void fetchTimeTable(final long memberId, final TimeTableRequest timeTable
List<Schedule> schedules = scheduleManager.processTimetable(timeTableXML, timeTableRequest);
scheduleAppender.batchUpdateSchedules(schedules, memberId);
}

@Override
public void createSchedule(final long memberId, final ScheduleCreateRequest scheduleCreateRequest) {
ScheduleJpaEntity scheduleJpaEntity = scheduleCreateRequest.toEntity(memberId);
scheduleAppender.createSchedule(scheduleJpaEntity);
}

@Override
public void updateSchedule(final long memberId, final ScheduleUpdateRequest scheduleUpdateRequest) {
scheduleUpdater.updateSchedule(memberId, scheduleUpdateRequest);
}

@Override
public void deleteSchedule(final long memberId, final long scheduleId) {
scheduleDeleter.deleteSchedule(memberId, scheduleId);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package moim_today.application.university;

import moim_today.dto.university.UniversityInfoResponse;
import moim_today.implement.university.UniversityAppender;
import moim_today.implement.university.UniversityUpdater;
import moim_today.implement.university.UniversityFinder;
import org.springframework.stereotype.Service;

Expand All @@ -10,17 +10,17 @@
@Service
public class UniversityServiceImpl implements UniversityService{

private final UniversityAppender universityAppender;
private final UniversityUpdater universityUpdater;
private final UniversityFinder universityFinder;

public UniversityServiceImpl(final UniversityAppender universityAppender, final UniversityFinder universityFinder) {
this.universityAppender = universityAppender;
public UniversityServiceImpl(final UniversityUpdater universityUpdater, final UniversityFinder universityFinder) {
this.universityUpdater = universityUpdater;
this.universityFinder = universityFinder;
}

@Override
public void putAllUniversity() {
universityAppender.fetchAllUniversity();
universityUpdater.fetchAllUniversity();
}

@Override
Expand Down
38 changes: 38 additions & 0 deletions backend/src/main/java/moim_today/domain/department/Department.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package moim_today.domain.department;

import moim_today.persistence.entity.department.DepartmentJpaEntity;
import moim_today.persistence.entity.university.UniversityJpaEntity;

import java.util.*;

public record Department(
long universityId,
String departmentName
) {

public static List<DepartmentJpaEntity> toEntities(Map<Long, Set<String>> universityAndDepartments) {
List<DepartmentJpaEntity> departmentJpaEntities = new ArrayList<>();

for (Map.Entry<Long, Set<String>> entrySet : universityAndDepartments.entrySet()) {
for (String departmentName : entrySet.getValue()) {
departmentJpaEntities.add(DepartmentJpaEntity.builder()
.universityId(entrySet.getKey())
.departmentName(departmentName)
.build());
}
}
return departmentJpaEntities;
}

public static Map<Long, Set<String>> convertToUnivIdAndDepartments(final Map<String, Set<String>> universityAndDepartments,
final List<UniversityJpaEntity> universityJpaEntities) {
Map<Long, Set<String>> existingUniversities = new HashMap<>();

universityJpaEntities.stream()
.forEach(universityJpaEntity -> {
existingUniversities.put(universityJpaEntity.getId(), universityAndDepartments.get(universityJpaEntity.getUniversityName()));
});

return existingUniversities;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package moim_today.domain.moim;

public enum DisplayStatus {

PUBLIC, PRIVATE
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@

// todo 정기 모임 카테고리 세부사항 추가
public enum MoimCategory {

STUDY, TEAM_PROJECT
}
42 changes: 42 additions & 0 deletions backend/src/main/java/moim_today/dto/moim/MoimDetailResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package moim_today.dto.moim;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Builder;
import moim_today.domain.moim.DisplayStatus;
import moim_today.domain.moim.enums.MoimCategory;
import moim_today.persistence.entity.moim.moim.MoimJpaEntity;

import java.time.LocalDate;

@Builder
public record MoimDetailResponse(
String title,
String contents,
int capacity,
int currentCount,
String imageUrl,
MoimCategory moimCategory,
DisplayStatus displayStatus,
int views,
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul")
LocalDate startDate,
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul")
LocalDate endDate

) {

public static MoimDetailResponse from(final MoimJpaEntity moimJpaEntity) {
return MoimDetailResponse.builder()
.title(moimJpaEntity.getTitle())
.contents(moimJpaEntity.getContents())
.capacity(moimJpaEntity.getCapacity())
.currentCount(moimJpaEntity.getCurrentCount())
.imageUrl(moimJpaEntity.getImageUrl())
.moimCategory(moimJpaEntity.getMoimCategory())
.displayStatus(moimJpaEntity.getDisplayStatus())
.views(moimJpaEntity.getViews())
.startDate(moimJpaEntity.getStartDate())
.endDate(moimJpaEntity.getEndDate())
.build();
}
}
27 changes: 27 additions & 0 deletions backend/src/main/java/moim_today/dto/moim/MoimUpdateRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package moim_today.dto.moim;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Builder;
import moim_today.domain.moim.DisplayStatus;
import moim_today.domain.moim.enums.MoimCategory;

import java.time.LocalDate;

@Builder
public record MoimUpdateRequest(
long moimId,
String title,
String contents,
int capacity,
//imageUrl null 허용
String imageUrl,
//비밀번호 null 허용
String password,
MoimCategory moimCategory,
DisplayStatus displayStatus,
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul")
LocalDate startDate,
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul")
LocalDate endDate
) {
}
Loading
Loading