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] main branch 병합 #78

Merged
merged 60 commits into from
May 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 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
89295ce
[BE] feat : 캘린더 스케줄 조회
320Hwany Apr 29, 2024
758a006
[BE] test : 캘린더 스케줄 조회
320Hwany Apr 29, 2024
b67eba0
[BE] feat : 시간표 등록 스케줄 중복 예외 처리
320Hwany Apr 29, 2024
d608b19
[BE] test : 시간표 등록 스케줄 중복 예외 처리
320Hwany Apr 29, 2024
d3de165
[BE] feat : weekly 캘린더 스케줄 조회
320Hwany Apr 29, 2024
5e5e4e4
[BE] test : weekly 캘린더 스케줄 조회
320Hwany Apr 29, 2024
6478df2
[BE] style : 주석/메소드명/url 수정
320Hwany May 1, 2024
b85f739
Merge pull request #68 from U2DJ2/be/feat/schedule
320Hwany May 1, 2024
c18add8
[BE] refactor : university 크롤링 appender 역할 삭제
Anak-2 Apr 30, 2024
8a083b1
[BE] refactor : 대학교 이름 컬렉션 조회 최적화
Anak-2 Apr 30, 2024
322185c
[BE] refactor : 대학교 학과 배치 업데이트로 최적화
Anak-2 Apr 30, 2024
0f4be88
[BE] refactor : 대학교 학과 업데이트 맵에 쌓은 뒤 업데이트 하도록 수정
Anak-2 Apr 30, 2024
b8c5ed3
[BE] refactor : 외부 api 파싱, map에 저장하는 로직 분리
Anak-2 Apr 30, 2024
af4f0db
[BE] refator : 대학교 학과 요청 API 분리 및 문서화
Anak-2 May 1, 2024
395f444
[BE] fix : fake department 수정
Anak-2 May 1, 2024
39c6050
[BE] test : 문서화용 테스트 작성 완료
Anak-2 May 1, 2024
509b3b7
[BE] feat : CORS 설정
320Hwany May 1, 2024
8a04425
Merge pull request #75 from U2DJ2/be/feat/cors
320Hwany May 1, 2024
8977d35
[BE] style : final 키워드 추가
Anak-2 May 1, 2024
c28759a
[BE] refactor : 모호한 함수명과 엔티티 역할
Anak-2 May 1, 2024
42759a4
Merge pull request #73 from U2DJ2/be/refactor/university-crawling
Anak-2 May 1, 2024
2909b76
[BE] fix : 테스트 코드 오류 수정
Anak-2 May 1, 2024
c3dc318
Merge pull request #77 from U2DJ2/be/refactor/university-crawling
Anak-2 May 1, 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 @@ -6,7 +6,9 @@

public interface DepartmentService {

void putAllDepartment();
void patchAllDepartment();

List<DepartmentInfoResponse> getAllDepartment(final long universityId, String universityName);
List<DepartmentInfoResponse> getAllDepartmentByUniversityName(final String universityName);

List<DepartmentInfoResponse> getAllDepartmentById(final long universityId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import java.util.List;

@Service
public class DepartmentServiceImpl implements DepartmentService{
public class DepartmentServiceImpl implements DepartmentService {

private final DepartmentAppender departmentAppender;
private final DepartmentFinder departmentFinder;
Expand All @@ -19,12 +19,17 @@ public DepartmentServiceImpl(final DepartmentAppender departmentAppender, final
}

@Override
public void putAllDepartment() {
public void patchAllDepartment() {
departmentAppender.putAllDepartment();
}

@Override
public List<DepartmentInfoResponse> getAllDepartment(final long universityId, final String universityName) {
return departmentFinder.getAllDepartment(universityId, universityName);
public List<DepartmentInfoResponse> getAllDepartmentByUniversityName(final String universityName) {
return departmentFinder.getAllDepartmentByUniversityName(universityName);
}

@Override
public List<DepartmentInfoResponse> getAllDepartmentById(final long universityId) {
return departmentFinder.getAllDepartmentById(universityId);
}
}
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,26 @@
package moim_today.application.schedule;

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

import java.time.LocalDate;
import java.time.YearMonth;
import java.util.List;


public interface ScheduleService {

List<ScheduleResponse> findAllByWeekly(final long memberId, final LocalDate startDate);

List<ScheduleResponse> findAllByMonthly(final long memberId, final YearMonth yearMonth);

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,22 +1,45 @@
package moim_today.application.schedule;

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

import java.time.LocalDate;
import java.time.YearMonth;
import java.util.List;

@Service
public class ScheduleServiceImpl implements ScheduleService {

private final ScheduleManager scheduleManager;
private final ScheduleFinder scheduleFinder;
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 ScheduleFinder scheduleFinder,
final ScheduleAppender scheduleAppender, final ScheduleUpdater scheduleUpdater,
final ScheduleDeleter scheduleDeleter) {
this.scheduleManager = scheduleManager;
this.scheduleFinder = scheduleFinder;
this.scheduleAppender = scheduleAppender;
this.scheduleUpdater = scheduleUpdater;
this.scheduleDeleter = scheduleDeleter;
}

@Override
public List<ScheduleResponse> findAllByWeekly(final long memberId, final LocalDate startDate) {
return scheduleFinder.findAllByWeekly(memberId, startDate);
}

@Override
public List<ScheduleResponse> findAllByMonthly(final long memberId, final YearMonth yearMonth) {
return scheduleFinder.findAllByMonthly(memberId, yearMonth);
}

@Override
Expand All @@ -25,4 +48,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
Expand Up @@ -6,7 +6,7 @@

public interface UniversityService {

void putAllUniversity();
void fetchAllUniversity();

List<UniversityInfoResponse> getUniversities();
}
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();
public void fetchAllUniversity() {
universityUpdater.fetchAllUniversity();
}

@Override
Expand Down
41 changes: 41 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,41 @@
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(final Map<String, Set<String>> universityAndDepartments,
final List<UniversityJpaEntity> universityJpaEntities) {
Map<Long, Set<String>> existingUniversities = convertToUnivIdAndDepartments(universityAndDepartments, universityJpaEntities);
List<DepartmentJpaEntity> departmentJpaEntities = new ArrayList<>();

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

private 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
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,9 @@ public ScheduleJpaEntity toEntity(final long memberId, final long meetingId) {
.endDateTime(endDateTime)
.build();
}

public boolean exists(final ScheduleJpaEntity scheduleJpaEntity) {
return scheduleJpaEntity.getEndDateTime().isAfter(startDateTime) &&
scheduleJpaEntity.getStartDateTime().isBefore(endDateTime);
}
}
Loading
Loading