Skip to content

Commit

Permalink
Merge pull request #184 from swyp3-babpool/fix/possibledatetime
Browse files Browse the repository at this point in the history
fix(possibledatetime): ์ผ์ • ์ถ”๊ฐ€/์‚ญ์ œ ์ฟผ๋ฆฌ ์ˆ˜์ •
  • Loading branch information
proHyundo authored Aug 4, 2024
2 parents d2f8b28 + 39b7182 commit cee0fee
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 13 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/github-actions-server.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Spring Boot Gradle CICD (version 0.2.3)
name: Spring Boot Gradle CICD (version 0.2.4)

on:
push:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,13 @@ public boolean changeStatusAsReserved(Long possibleDateTimeId) {

@Override
public List<PossibleDateTimeResponse> updatePossibleDateTime(Long userId, PossibleDateTimeUpdateRequest possibleDateTimeUpdateRequest) {

// ์ผ์ • ์ œ๊ฑฐ : possibleDateTimeStatus ๊ฐ€ RESERVED ์ธ ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ•˜๊ณ  ์‚ญ์ œ
// ์ผ์ • ์ œ๊ฑฐ
if(!possibleDateTimeUpdateRequest.getPossibleDateTimeDelList().isEmpty()) {
possibleDateTimeRepository.deletePossibleDateTimeWhereStatusIsNotReserved(userId, possibleDateTimeUpdateRequest.getPossibleDateTimeDelList());
}
// ์ถ”๊ฐ€
// ์ผ์ • ์ถ”๊ฐ€
if(!possibleDateTimeUpdateRequest.getPossibleDateTimeAddList().isEmpty()) {
possibleDateTimeRepository.savePossibleDateTimeList(possibleDateTimeUpdateRequest.getPossibleDateTimeAddList().stream()
possibleDateTimeRepository.savePossibleDateTimeListWhereNotExist(possibleDateTimeUpdateRequest.getPossibleDateTimeAddList().stream()
.map(datetime -> PossibleDateTime.builder().possibleDateTimeId(tsidKeyGenerator.generateTsid())
.userId(userId)
.possibleDateTime(datetime)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public interface PossibleDateTimeRepository {
// ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์™„๋ฃŒ
void savePossibleDateTimeList(List<PossibleDateTime> possibleDateTimeList);

// ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์™„๋ฃŒ
void savePossibleDateTimeListWhereNotExist(List<PossibleDateTime> possibleDateTimeList);

@Deprecated
List<PossibleDateAndTime> findAllPossibleDateAndTimeByProfileIdAndNowDateWithoutAcceptOrDone(Long profileId);
Expand Down
39 changes: 31 additions & 8 deletions src/main/resources/mapper/PossibleDateTimeMapper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,26 @@
</foreach>
</insert>

<insert id="savePossibleDateTimeListWhereNotExist">
INSERT INTO t_possible_datetime (possible_datetime_id, possible_datetime, possible_datetime_status, user_id)
SELECT possibleDateTimeId, possibleDateTime, possibleDateTimeStatus, userId
FROM (
<foreach collection="possibleDateTimeList" item="possibleDateTime" separator=" UNION ALL ">
SELECT CAST(#{possibleDateTime.possibleDateTimeId} AS BIGINT) AS possibleDateTimeId,
CAST(#{possibleDateTime.possibleDateTime} AS TIMESTAMP) AS possibleDateTime,
CAST(#{possibleDateTime.possibleDateTimeStatus} AS VARCHAR) AS possibleDateTimeStatus,
CAST(#{possibleDateTime.userId} AS BIGINT) AS userId
</foreach>
) AS new_values
WHERE NOT EXISTS (
SELECT 1
FROM t_possible_datetime
WHERE user_id = new_values.userId
AND possible_datetime = new_values.possibleDateTime
);
</insert>


<insert id="insertPossibleDate" parameterType="com.swyp3.babpool.domain.possibledatetime.domain.PossibleDateInsertDto"
useGeneratedKeys="true" keyProperty="possibleDateId">
INSERT INTO t_possible_datetime(possible_date,profile_id)
Expand Down Expand Up @@ -177,14 +197,17 @@
<when test="possibleDateTimeDelList != null and possibleDateTimeDelList.size() != 0">
DELETE FROM t_possible_datetime
WHERE possible_datetime_id IN (
SELECT possible_datetime_id
FROM t_possible_datetime
WHERE user_id = #{userId}
AND possible_datetime_status != 'RESERVED'
AND possible_datetime IN
<foreach collection="possibleDateTimeDelList" item="possibleDateTime" open="(" close=")" separator=",">
#{possibleDateTime}
</foreach>
SELECT temp.possible_datetime_id
FROM (
SELECT possible_datetime_id
FROM t_possible_datetime
WHERE user_id = #{userId}
AND possible_datetime_status != 'RESERVED'
AND possible_datetime IN
<foreach collection="possibleDateTimeDelList" item="possibleDateTime" open="(" close=")" separator=",">
#{possibleDateTime}
</foreach>
) AS temp
)
</when>
</choose>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,44 @@ void deletePossibleDateTimeWhereStatusIsNotReservedWithEmptyList(){
assertThat(possibleDateTimeList).hasSize(9);
}

@DisplayName("deletePossibleDateTimeWhereStatusIsNotReserved ๋งคํผ๋Š” possibleDateTimeDelList์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ผ์ •์ด ์กด์žฌํ•˜๋ฉด ๋ฌด์‹œํ•˜๊ณ  ์ •์ƒ๋™์ž‘ํ•œ๋‹ค.")
@Test
void deletePossibleDateTimeWhereStatusIsNotReservedWithNotExistDateTime(){
// given
Long userId = 100000000000000009L;
List<LocalDateTime> possibleDateTimeAddList = List.of(
LocalDateTime.of(2024, 7, 6, 11, 0),
LocalDateTime.of(2024, 7, 6, 12, 0),
LocalDateTime.of(2024, 7, 6, 8, 0)
);
possibleDateTimeRepository.savePossibleDateTimeList(possibleDateTimeAddList.stream()
.map(dateTime -> PossibleDateTime.builder()
.possibleDateTimeId(tsidKeyGenerator.generateTsid())
.userId(userId)
.possibleDateTime(dateTime)
.possibleDateTimeStatus(PossibleDateTimeStatusType.AVAILABLE)
.build())
.toList()
);
List<LocalDateTime> possibleDateTimeDelList = List.of(
LocalDateTime.of(2024, 7, 6, 11, 0),
LocalDateTime.of(2024, 7, 6, 9, 0),
LocalDateTime.of(2024, 7, 6, 10, 0)
);

// when
possibleDateTimeRepository.deletePossibleDateTimeWhereStatusIsNotReserved(userId, possibleDateTimeDelList);

// then
List<PossibleDateTime> possibleDateTimeList = possibleDateTimeRepository.findAllByUserId(userId);
log.info("possibleDateTimeList : {}", possibleDateTimeList);
assertThat(possibleDateTimeList).hasSize(2);
assertThat(possibleDateTimeList).extracting(PossibleDateTime::getPossibleDateTime)
.containsAll(List.of(LocalDateTime.of(2024, 7, 6, 12, 0),
LocalDateTime.of(2024, 7, 6, 8, 0))
);
}

@DisplayName("savePossibleDateTime ๋งคํผ๋Š” 1๊ฐœ ์ด์ƒ์˜ PossibleDateTime ๋ฅผ ์ €์žฅํ•œ๋‹ค.")
@Test
void savePossibleDateTime(){
Expand All @@ -98,6 +136,47 @@ void savePossibleDateTime(){
assertThat(allByUserId).hasSize(2);
}

@DisplayName("savePossibleDateTimeListWhereNotExist ๋งคํผ๋Š” ์ค‘๋ณต๋˜๋Š” ์ผ์ •์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ผ์ •์„ ์ €์žฅํ•œ๋‹ค.")
@Test
void savePossibleDateTimeListWhereNotExist(){
// given
Long userId = 100000000000000009L;
List<LocalDateTime> possibleDateTimeAddList1 = List.of(
LocalDateTime.of(2024, 7, 6, 11, 0),
LocalDateTime.of(2024, 7, 6, 12, 0)
);
possibleDateTimeRepository.savePossibleDateTimeList(possibleDateTimeAddList1.stream()
.map(dateTime -> PossibleDateTime.builder()
.possibleDateTimeId(tsidKeyGenerator.generateTsid())
.userId(userId)
.possibleDateTime(dateTime)
.possibleDateTimeStatus(PossibleDateTimeStatusType.AVAILABLE)
.build())
.toList());

List<LocalDateTime> possibleDateTimeAddList2 = List.of(
LocalDateTime.of(2024, 7, 6, 11, 0),
LocalDateTime.of(2024, 7, 6, 12, 0),
LocalDateTime.of(2024, 7, 6, 13, 0)
);

// when
possibleDateTimeRepository.savePossibleDateTimeListWhereNotExist(possibleDateTimeAddList2.stream()
.map(dateTime -> PossibleDateTime.builder()
.possibleDateTimeId(tsidKeyGenerator.generateTsid())
.userId(userId)
.possibleDateTime(dateTime)
.possibleDateTimeStatus(PossibleDateTimeStatusType.AVAILABLE)
.build())
.toList()
);

// then
List<PossibleDateTime> possibleDateTimeList = possibleDateTimeRepository.findAllByUserId(userId);
log.info("possibleDateTimeList : {}", possibleDateTimeList);
assertThat(possibleDateTimeList).hasSize(3);
}

@DisplayName("findAllByUserId ๋งคํผ๋Š” status์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ผ์ •์„ ์กฐํšŒํ•œ๋‹ค.")
@Test
void findAllByUserId(){
Expand Down

0 comments on commit cee0fee

Please sign in to comment.