Skip to content

Commit

Permalink
feat: update travel hellomatia
Browse files Browse the repository at this point in the history
Feat/update travel hellomatia
  • Loading branch information
hellomatia authored May 22, 2024
2 parents d72eab5 + 8becab8 commit c08d6f2
Show file tree
Hide file tree
Showing 11 changed files with 170 additions and 14 deletions.
10 changes: 9 additions & 1 deletion src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,12 @@ include::{snippets}/travel/photos/http-response.adoc[]
include::{snippets}/travel/delete/http-request.adoc[]

**Response**
include::{snippets}/travel/delete/http-response.adoc[]
include::{snippets}/travel/delete/http-response.adoc[]

=== 여행 정보 수정

**Request**
include::{snippets}/travel/modify/http-request.adoc[]

**Response**
include::{snippets}/travel/modify/http-response.adoc[]
2 changes: 1 addition & 1 deletion src/main/java/com/mlog/config/WebSecurityConfigure.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

.authorizeHttpRequests(auth -> auth
.requestMatchers("/user/login", "/", "/index.html").permitAll()
.requestMatchers("/user/login","/user/join", "/", "/index.html").permitAll()
.anyRequest().authenticated())

.formLogin(AbstractHttpConfigurer::disable);
Expand Down
12 changes: 8 additions & 4 deletions src/main/java/com/mlog/travel/controller/TravelController.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.mlog.travel.controller;

import com.mlog.security.JwtAuthentication;
import com.mlog.travel.dto.SaveTravelRequest;
import com.mlog.travel.dto.TravelListResult;
import com.mlog.travel.dto.TravelDetailResult;
import com.mlog.travel.dto.*;
import com.mlog.travel.service.TravelService;
import com.mlog.travel.dto.TravelPhotoListResult;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -45,4 +42,11 @@ public ApiResult<TravelPhotoListResult> travelDetailResultPhoto(@PathVariable Lo
public ApiResult<Boolean> deleteTravel(@PathVariable Long travelId) {
return success(travelService.deleteTravel(travelId));
}

@PutMapping("/{travelId}")
public ApiResult<Boolean> updateTravel(@AuthenticationPrincipal JwtAuthentication authentication,
@PathVariable Long travelId,
@RequestBody UpdateTravelRequest updateTravelRequest) {
return success(travelService.updateTravel(authentication.id, travelId, updateTravelRequest));
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/mlog/travel/dto/SaveTravelRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import java.time.LocalDateTime;
import java.util.List;

import static org.springframework.beans.BeanUtils.copyProperties;

@Getter
@Setter
@ToString
Expand All @@ -21,6 +23,16 @@ public class SaveTravelRequest {
private Double rating;
private List<DetailedScheduleDTO> detailedSchedules;

public static SaveTravelRequest of(UpdateTravelRequest updateTravelRequest) {
SaveTravelRequest request = new SaveTravelRequest();
copyProperties(updateTravelRequest, request);
request.setDetailedSchedules(updateTravelRequest.getDetailedSchedules()
.stream()
.map(DetailedScheduleDTO::of)
.toList());
return request;
}

@Getter
@Setter
@ToString
Expand All @@ -29,5 +41,12 @@ public static class DetailedScheduleDTO {
private String title;
private String description;
private List<String> images;

public static SaveTravelRequest.DetailedScheduleDTO of
(UpdateTravelRequest.DetailedScheduleDTO detailedScheduleDTO) {
DetailedScheduleDTO detailedSchedule = new SaveTravelRequest.DetailedScheduleDTO();
copyProperties(detailedScheduleDTO, detailedSchedule);
return detailedSchedule;
}
}
}
35 changes: 35 additions & 0 deletions src/main/java/com/mlog/travel/dto/UpdateTravelRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.mlog.travel.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.time.LocalDateTime;
import java.util.List;

import static org.springframework.beans.BeanUtils.copyProperties;

@Getter
@Setter
@ToString
public class UpdateTravelRequest {
private String title;
private String description;
private String image;
private String lat;
private String lng;
private LocalDateTime startDate;
private LocalDateTime endDate;
private Double rating;
private List<DetailedScheduleDTO> detailedSchedules;

@Getter
@Setter
@ToString
public static class DetailedScheduleDTO {
private Integer seq;
private String title;
private String description;
private List<String> images;
}
}
13 changes: 13 additions & 0 deletions src/main/java/com/mlog/travel/entity/Travel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.mlog.travel.entity;

import com.mlog.travel.dto.SaveTravelRequest;
import com.mlog.travel.dto.UpdateTravelRequest;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
Expand Down Expand Up @@ -39,4 +40,16 @@ public static Travel of(SaveTravelRequest saveTravelRequest, String titleImgUrl
.userId(userId)
.build();
}

public static Travel of(Travel travel, UpdateTravelRequest updateTravelRequest) {
return Travel.builder()
.title(updateTravelRequest.getTitle() != null ? updateTravelRequest.getTitle() : travel.getTitle())
.titleImgUrl(updateTravelRequest.getImage() != null ? updateTravelRequest.getImage() : travel.getTitleImgUrl())
.description(updateTravelRequest.getDescription() != null ? updateTravelRequest.getDescription() : travel.getDescription())
.rating(updateTravelRequest.getRating() != null ? updateTravelRequest.getRating() : travel.getRating())
.lat(updateTravelRequest.getLat() != null ? updateTravelRequest.getLat() : travel.getLat())
.lng(updateTravelRequest.getLng() != null ? updateTravelRequest.getLng() : travel.getLng())
.startAt(updateTravelRequest.getStartDate() != null ? updateTravelRequest.getStartDate() : travel.getStartAt())
.build();
}
}
12 changes: 12 additions & 0 deletions src/main/java/com/mlog/travel/entity/TravelDetail.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.mlog.travel.entity;

import com.mlog.travel.dto.SaveTravelRequest;
import com.mlog.travel.dto.UpdateTravelRequest;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
Expand Down Expand Up @@ -30,4 +31,15 @@ public static TravelDetail of(SaveTravelRequest.DetailedScheduleDTO detailedSche
.travelId(travelId)
.build();
}

public static TravelDetail of(TravelDetail travelDetail,
UpdateTravelRequest.DetailedScheduleDTO detailedScheduleDTO) {
return TravelDetail.builder()
.id(travelDetail.getId())
.seq(detailedScheduleDTO.getSeq() != null ? detailedScheduleDTO.getSeq() : travelDetail.getSeq())
.title(detailedScheduleDTO.getTitle() != null ? detailedScheduleDTO.getTitle() : travelDetail.getTitle())
.description(detailedScheduleDTO.getDescription() != null ? detailedScheduleDTO.getDescription() : travelDetail.getDescription())
.travelId(travelDetail.getTravelId())
.build();
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/mlog/travel/mapper/TravelMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ public interface TravelMapper {
@Select("select * from travel_detail where travel_id = #{travelId} order by seq")
List<TravelDetail> findTravelDetailByTravelId(Long travelId);

@Select("select * from travel_detail where id = #{travelDetailId}")
TravelDetail findTravelDetailByTravelDetailId(Long travelDetailId);

@Select("select * from travel_photo where travel_detail_id = #{travelDetailId}")
List<TravelPhoto> findTravelDetailPhotoByTravelDetailId(Long travelDetailId);

Expand All @@ -44,4 +47,15 @@ public interface TravelMapper {

@Delete("delete from travel_photo where travel_detail_id = #{travelDetailId}")
int deleteTravelDetailPhotoByTravelDetailId(Long travelDetailId);

@Update("update travel " +
"set title=#{title}, title_img_url=#{titleImgUrl}, description=#{description}, rating=#{rating}, " +
"lat=#{lat}, lng=#{lng}, start_at=#{startAt}, end_at=#{endAt}, updated_at=now()" +
"where id = #{id}")
int updateTravel(Travel travel);

@Update("update travel_detail " +
"set seq = #{seq}, title=#{title}, description=#{description}, updated_at=now() " +
"where id = #{id}")
int updateTravelDetail(TravelDetail travelDetail);
}
6 changes: 2 additions & 4 deletions src/main/java/com/mlog/travel/service/TravelService.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package com.mlog.travel.service;

import com.mlog.travel.dto.SaveTravelRequest;
import com.mlog.travel.dto.TravelDetailResult;
import com.mlog.travel.dto.TravelListResult;
import com.mlog.travel.dto.TravelPhotoListResult;
import com.mlog.travel.dto.*;

public interface TravelService {
Boolean saveTravel(Long id, SaveTravelRequest saveTravelRequest);
TravelListResult findAllTravel(Long userId);
TravelDetailResult findTravelDetail(Long id);
TravelPhotoListResult findTravelPhotoList(Long id);
Boolean deleteTravel(Long travelId);
Boolean updateTravel(Long userId, Long travelId, UpdateTravelRequest updateTravelRequest);
}
12 changes: 8 additions & 4 deletions src/main/java/com/mlog/travel/service/TravelServiceImpl.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.mlog.travel.service;

import com.mlog.aws.S3Service;
import com.mlog.travel.dto.SaveTravelRequest;
import com.mlog.travel.dto.TravelDetailResult;
import com.mlog.travel.dto.TravelListResult;
import com.mlog.travel.dto.TravelPhotoListResult;
import com.mlog.travel.dto.*;
import com.mlog.travel.entity.Travel;
import com.mlog.travel.entity.TravelDetail;
import com.mlog.travel.entity.TravelPhoto;
Expand Down Expand Up @@ -74,4 +71,11 @@ public Boolean deleteTravel(Long travelId) {
travelMapper.deleteTravelDetailByTravelId(travelId);
return Boolean.TRUE;
}

@Override
public Boolean updateTravel(Long userId, Long travelId, UpdateTravelRequest updateTravelRequest) {
deleteTravel(travelId);
saveTravel(userId, SaveTravelRequest.of(updateTravelRequest));
return Boolean.TRUE;
}
}
49 changes: 49 additions & 0 deletions src/test/java/com/mlog/travel/controller/TravelControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -184,4 +184,53 @@ void setUp(WebApplicationContext context,
.andDo(document("travel/delete"))
;
}

@Test
@Transactional
@WithMockJwtAuthentication
public void 사용자_여행정보_수정() throws Exception {
ResultActions result = mockMvc.perform(put("/travel/5")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.content("{" +
"\"title\": \"행복한 여행\",\n" +
" \"description\": \"한줄평!! 너무 좋습니다!\",\n" +
" \"image\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiiiiiiiiiiiiiiiiiiiiiiiii\",\n" +
" \"lat\": 35.20396241242666,\n" +
" \"lng\": 126.80639199013274,\n" +
" \"startDate\": \"2024-05-21T15:19:49.598Z\",\n" +
" \"endDate\": \"2024-05-29T15:19:49.598Z\",\n" +
" \"rating\": 5,\n" +
" \"detailedSchedules\": [\n" +
" {\n" +
" \"seq\": 1,\n" +
" \"title\": \"상세 일정1\",\n" +
" \"description\": \"상세 일정 설명 1\",\n" +
" \"images\": [\n" +
" \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiiiiiiiiiiiiiiiiiiiiiiiii\",\n" +
" \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiiiiiiiiiiiiiiiiiiiiiiiii\"\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"seq\": 2,\n" +
" \"title\": \"상세 일정2\",\n" +
" \"description\": \"상세 일정 설명 2\",\n" +
" \"images\": [\n" +
" \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiiiiiiiiiiiiiiiiiiiiiiiii\",\n" +
" \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiiiiiiiiiiiiiiiiiiiiiiiii\"\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}")
);
result.andDo(print())
.andExpect(status().isOk())
.andExpect(handler().handlerType(TravelController.class))
.andExpect(handler().methodName("updateTravel"))
.andExpect(jsonPath("$.success", is(true)))
.andExpect(jsonPath("$.response", is(true)))
.andExpect(jsonPath("$.error").isEmpty())
.andDo(document("travel/modify"))
;
}
}

0 comments on commit c08d6f2

Please sign in to comment.