Skip to content

Commit

Permalink
Merge branch 'dev' into feature/48
Browse files Browse the repository at this point in the history
  • Loading branch information
galug authored Mar 30, 2024
2 parents 9924bb8 + f0833c7 commit f8bdc9c
Show file tree
Hide file tree
Showing 68 changed files with 1,094 additions and 218 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
HELP.md
.gradle
.DS_Store
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
Expand Down Expand Up @@ -62,3 +63,6 @@ hs_err_pid*

# Querydsl
/src/main/generated/

# Environment
/src/main/resources/*.p8
11 changes: 11 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
FROM openjdk:17-jdk-alpine as builder
ARG JAR_FILE=./build/libs/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM openjdk:17-jdk-alpine
COPY --from=builder dependencies/ ./
COPY --from=builder snapshot-dependencies/ ./
COPY --from=builder spring-boot-loader/ ./
COPY --from=builder application/ ./
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "-Duser.timezone=Asia/Seoul", "org.springframework.boot.loader.JarLauncher"]
30 changes: 28 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,41 @@ dependencies {
//json
implementation 'com.googlecode.json-simple:json-simple:1.1.1'


//PEM 파일 파싱
implementation 'org.bouncycastle:bcprov-jdk18on:1.77'
implementation 'org.bouncycastle:bcpkix-jdk18on:1.77'
implementation 'org.bouncycastle:bcutil-jdk18on:1.77'
}

tasks.named('test') {
useJUnitPlatform()
}


clean {
delete file('src/main/generated')
}

jar {
enabled = false
}

bootJar {
layered {
application {
intoLayer("spring-boot-loader") {
include "org/springframework/boot/loader/**"
}
intoLayer("application")
}
dependencies {
intoLayer("application") {
includeProjectDependencies()
}
intoLayer("snapshot-dependencies") {
include "*:*:*SNAPSHOT"
}
intoLayer("dependencies")
}
layerOrder = ["dependencies", "spring-boot-loader", "snapshot-dependencies", "application"]
}
}
2 changes: 0 additions & 2 deletions src/main/java/com/example/namo2/Namo2Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class Namo2Application {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ public void delete(Long categoryId, Long userId) {
category.delete();
}

public void removeCategoriesByUser(User user) {
categoryRepository.deleteAllByUser(user);
}

public Category getCategory(Long categoryId) {
return categoryRepository.findById(categoryId)
.orElseThrow(() -> new BaseException(NOT_FOUND_CATEGORY_FAILURE));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private void createMoimMemoLocationImgs(List<MultipartFile> imgs, MoimMemoLocati
@Transactional(readOnly = false)
public void modifyMoimMemoLocation(Long memoLocationId, MoimMemoRequest.LocationDto locationDto,
List<MultipartFile> imgs) {
MoimMemoLocation moimMemoLocation = moimMemoLocationService.getMoimMemoLocation(memoLocationId);
MoimMemoLocation moimMemoLocation = moimMemoLocationService.getMoimMemoLocationWithImgs(memoLocationId);
moimMemoLocation.update(locationDto.getName(), locationDto.getMoney());

moimMemoLocationService.removeMoimMemoLocationAndUsers(moimMemoLocation);
Expand All @@ -121,7 +121,7 @@ private void removeMoimMemoLocationImgs(MoimMemoLocation moimMemoLocation) {

@Transactional(readOnly = false)
public void removeMoimMemoLocation(Long memoLocationId) {
MoimMemoLocation moimMemoLocation = moimMemoLocationService.getMoimMemoLocation(memoLocationId);
MoimMemoLocation moimMemoLocation = moimMemoLocationService.getMoimMemoLocationWithImgs(memoLocationId);

moimMemoLocationService.removeMoimMemoLocationAndUsers(moimMemoLocation);
removeMoimMemoLocationImgs(moimMemoLocation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

import com.example.namo2.domain.moim.domain.MoimSchedule;

import com.example.namo2.domain.user.domain.User;

import com.example.namo2.global.common.exception.BaseException;
import com.example.namo2.global.common.response.BaseResponseStatus;

Expand All @@ -39,8 +41,8 @@ public MoimMemoLocationImg createMoimMemoLocationImg(MoimMemoLocationImg moimMem
return moimMemoLocationImgRepository.save(moimMemoLocationImg);
}

public MoimMemoLocation getMoimMemoLocation(Long memoLocationId) {
return moimMemoLocationRepository.findMoimMemoLocationById(memoLocationId)
public MoimMemoLocation getMoimMemoLocationWithImgs(Long memoLocationId) {
return moimMemoLocationRepository.findMoimMemoLocationWithImgsById(memoLocationId)
.orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MOIM_MEMO_LOCATION_FAILURE));
}

Expand All @@ -52,6 +54,10 @@ public void removeMoimMemoLocationAndUsers(List<MoimMemoLocation> moimMemoLocati
moimMemoLocationAndUserRepository.deleteMoimMemoLocationAndUserByMoimMemoLocation(moimMemoLocation);
}

public void removeMoimMemoLocationAndUsersByUser(User user) {
moimMemoLocationAndUserRepository.deleteAllByUser(user);
}

public void removeMoimMemoLocationImgs(MoimMemoLocation moimMemoLocation) {
moimMemoLocationImgRepository.deleteMoimMemoLocationImgByMoimMemoLocation(moimMemoLocation);
}
Expand All @@ -64,7 +70,7 @@ public void removeMoimMemoLocation(MoimMemoLocation moimMemoLocation) {
moimMemoLocationRepository.delete(moimMemoLocation);
}

public List<MoimMemoLocation> getMoimMemoLocation(MoimMemo moimMemo) {
public List<MoimMemoLocation> getMoimMemoLocationWithImgs(MoimMemo moimMemo) {
return moimMemoLocationRepository.findMoimMemo(moimMemo);
}

Expand All @@ -80,4 +86,5 @@ public List<MoimMemoLocation> getMoimMemoLocations(MoimSchedule moimSchedule) {
public List<MoimMemoLocationAndUser> getMoimMemoLocationAndUsers(List<MoimMemoLocation> moimMemoLocations) {
return moimMemoLocationRepository.findMoimMemoLocationAndUsers(moimMemoLocations);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import com.example.namo2.domain.memo.domain.MoimMemoLocation;
import com.example.namo2.domain.memo.domain.MoimMemoLocationAndUser;

import com.example.namo2.domain.user.domain.User;

public interface MoimMemoLocationAndUserRepository extends JpaRepository<MoimMemoLocationAndUser, Long> {
@Modifying
@Query("delete from MoimMemoLocationAndUser lau where lau.moimMemoLocation = :moimMemoLocation")
Expand All @@ -17,4 +19,6 @@ public interface MoimMemoLocationAndUserRepository extends JpaRepository<MoimMem
@Modifying
@Query("delete from MoimMemoLocationAndUser lau where lau.moimMemoLocation in :moimMemoLocation")
void deleteMoimMemoLocationAndUserByMoimMemoLocation(List<MoimMemoLocation> moimMemoLocation);

void deleteAllByUser(User user);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public interface MoimMemoLocationRepository
+ " from MoimMemoLocation ml"
+ " left join fetch ml.moimMemoLocationImgs"
+ " where ml.id = :locationId")
Optional<MoimMemoLocation> findMoimMemoLocationById(@Param("locationId") Long locationId);
Optional<MoimMemoLocation> findMoimMemoLocationWithImgsById(@Param("locationId") Long locationId);

@Query("select ml "
+ "from MoimMemoLocation ml"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@ public BaseResponse<MoimMemoResponse.SliceDiaryDto<MoimMemoResponse.DiaryDto>> f
return new BaseResponse(diaryDto);
}

@Operation(summary = "모임 메모 삭제", description = "모임 메모 삭제 API")
@Operation(summary = "모임 메모 장소 삭제", description = "모임 메모 장소 삭제 API")
@DeleteMapping("/schedule/memo/{memoLocationId}")
public BaseResponse<Object> deleteMoimMemo(@PathVariable Long memoLocationId) {
public BaseResponse<Object> removeMoimMemoLocation(@PathVariable Long memoLocationId) {
moimMemoFacade.removeMoimMemoLocation(memoLocationId);
return BaseResponse.ok();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,6 @@ public MoimResponse.MoimParticipantDto createMoimAndUser(Long userId, String cod
return MoimResponseConverter.toMoimParticipantDto(moim);
}

/**
* 마지막 사람이 지워질 시
* 모임에 대한 삭제 로직이 필요할 듯 합니다.
* 고민점
* 1. 모임이라는 로직에 엮여 있는 테이블이 많다보니 연쇄적으로 많은 테이블에 있는 많은
* row 들이 지워지는데 성능상 문제가 없을지 고민해볼 필요가 있을 것 같습니다.
* 2. S3에서 지금까지는 모임 관련 메모들을 지우면 사진을 모두 지우는 중인데
* S3에서 이미지 파일을 지우면서 얻는 메모리적 이점이 클지
* 아니면 S3에서 이미지 파일을 냅두면서 얻을 수 있는 시간적 이점이 클지 고민해볼 필요가 있을 듯합니다.
* 그런데 사실 개인 정보 관련 부분이라 지우는게 맞는듯하긴할것같아요.
*/
@Transactional(readOnly = false)
public void removeMoimAndUser(Long userId, Long moimId) {
User user = userService.getUser(userId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,6 @@ public void modifyMoimScheduleCategory(MoimScheduleRequest.PatchMoimScheduleCate
moimScheduleAndUser.updateCategory(category);
}

/**
* 모임 스케줄 삭제는 모임 메모와 연관된 요소 있으므로 나중에
*/
@Transactional(readOnly = false)
public void removeMoimSchedule(Long moimScheduleId) {
MoimSchedule moimSchedule = moimScheduleService.getMoimScheduleWithMoimMemo(moimScheduleId);
Expand All @@ -124,7 +121,7 @@ private void removeMoimScheduleMemo(MoimMemo moimMemo) {
if (moimMemo == null) {
return;
}
List<MoimMemoLocation> moimMemoLocations = moimMemoLocationService.getMoimMemoLocation(moimMemo);
List<MoimMemoLocation> moimMemoLocations = moimMemoLocationService.getMoimMemoLocationWithImgs(moimMemo);
moimMemoLocationService.removeMoimMemoLocationAndUsers(moimMemoLocations);
removeMoimMemoLocationImgs(moimMemoLocations);
moimMemoService.removeMoimMemo(moimMemo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,8 @@ public void validateExistsMoimAndUser(Moim moim, User user) {
public void removeMoimAndUser(MoimAndUser moimAndUser) {
moimAndUserRepository.delete(moimAndUser);
}

public void removeMoimAndUsersByUser(User user) {
moimAndUserRepository.deleteAllByUser(user);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,26 @@ public void removeMoimScheduleAndUser(MoimSchedule moimSchedule) {
moimScheduleAndUserRepository.deleteMoimScheduleAndUserByMoimSchedule(moimSchedule);
}

public void removeMoimScheduleAndUser(MoimScheduleAndUser moimScheduleAndUser) {
public void removeMoimScheduleAndUser(MoimSchedule moimSchedule, MoimScheduleAndUser moimScheduleAndUser) {
if (moimSchedule.isLastScheduleMember()) {
moimSchedule.deleteMoimSchedule();
}
moimScheduleAndUserRepository.delete(moimScheduleAndUser);
}

public void removeMoimScheduleAndUsers(List<MoimScheduleAndUser> moimScheduleAndUsers) {
moimScheduleAndUserRepository.deleteAll(moimScheduleAndUsers);
}

public MoimScheduleAndUser getMoimScheduleAndUser(MoimSchedule moimSchedule, User user) {
return moimScheduleAndUserRepository.findMoimScheduleAndUserByMoimScheduleAndUser(moimSchedule, user)
.orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MOIM_SCHEDULE_AND_USER_FAILURE));
}

public List<MoimScheduleAndUser> getAllByUser(User user) {
return moimScheduleAndUserRepository.findAllByUser(user);
}

public void removeMoimScheduleAlarm(MoimScheduleAndUser moimScheduleAndUser) {
moimScheduleAlarmRepository.deleteMoimScheduleAlarmByMoimScheduleAndUser(moimScheduleAndUser);
}
Expand All @@ -52,6 +63,11 @@ public void removeMoimScheduleAlarm(List<MoimScheduleAndUser> moimScheduleAndUse
moimScheduleAlarmRepository.deleteMoimScheduleAlarmByMoimScheduleAndUser(moimScheduleAndUser);
}

public void removeMoimScheduleAlarms(List<MoimScheduleAndUser> moimScheduleAndUsers) {
moimScheduleAndUsers.forEach(moimScheduleAndUser ->
moimScheduleAlarmRepository.deleteAll(moimScheduleAndUser.getMoimScheduleAlarms()));
}

public void createMoimScheduleAlarm(MoimScheduleAlarm moimScheduleAlarm) {
moimScheduleAlarmRepository.save(moimScheduleAlarm);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,12 @@ public MoimSchedule getMoimSchedule(Long id) {
}

public MoimSchedule getMoimScheduleWithMoimMemo(Long id) {
return moimScheduleRepository.findMoimScheduleById(id)
return moimScheduleRepository.findMoimScheduleWithMoimMemoById(id)
.orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_SCHEDULE_FAILURE));
}

public MoimSchedule getMoimScheduleWithMoimScheduleAndUsers(Long id) {
return moimScheduleRepository.findMoimSheduleAndMoimScheduleAndUsersById(id)
.orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_SCHEDULE_FAILURE));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public void removeSchedule(Long moimScheduleId) {
moimMemoRepository.delete(moimMemo);
}
*/

moimScheduleAndUserRepository.deleteMoimScheduleAndUserByMoimSchedule(moimSchedule);
moimScheduleRepository.delete(moimSchedule);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,6 @@ public interface MoimAndUserRepository extends JpaRepository<MoimAndUser, Long>
Integer countMoimAndUserByMoim(Moim moim);

boolean existsMoimAndUserByMoimAndUser(Moim moim, User user);

void deleteAllByUser(User user);
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,6 @@ public interface MoimScheduleAndUserRepository

@Query("select msu from MoimScheduleAndUser msu where msu.moimSchedule = :moimSchedule")
List<MoimScheduleAndUser> findMoimScheduleAndUserByMoimSchedule(@Param("moimSchedule") MoimSchedule moimSchedule);

List<MoimScheduleAndUser> findAllByUser(User user);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,11 @@ public interface MoimScheduleRepository extends JpaRepository<MoimSchedule, Long
+ " from MoimSchedule ms"
+ " join fetch ms.moimMemo"
+ " where ms.id = :id")
Optional<MoimSchedule> findMoimScheduleById(Long id);
Optional<MoimSchedule> findMoimScheduleWithMoimMemoById(Long id);

@Query("select ms"
+ " from MoimSchedule ms"
+ " join fetch ms.moimScheduleAndUsers"
+ " where ms.id= :id")
Optional<MoimSchedule> findMoimSheduleAndMoimScheduleAndUsersById(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import jakarta.persistence.Column;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
Expand Down Expand Up @@ -45,6 +47,9 @@ public class MoimSchedule extends BaseTimeEntity {
@Embedded
private Location location;

@Enumerated(EnumType.STRING)
private MoimScheduleStatus status;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "moim_id")
private Moim moim;
Expand All @@ -62,6 +67,7 @@ public MoimSchedule(Long id, String name, Period period, Location location, Moim
this.period = period;
this.location = location;
this.moim = moim;
status = MoimScheduleStatus.ACTIVE;
}

public void registerMemo(MoimMemo moimMemo) {
Expand All @@ -78,4 +84,8 @@ public Boolean isLastScheduleMember() {
return moimScheduleAndUsers.size() == 1;
}

public void deleteMoimSchedule() {
this.status = MoimScheduleStatus.DELETED;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.namo2.domain.moim.domain;

public enum MoimScheduleStatus {
ACTIVE, DELETED
}
Loading

0 comments on commit f8bdc9c

Please sign in to comment.