Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import com.gongspot.project.domain.like.dto.LikeResponseDTO;
import com.gongspot.project.domain.like.service.LikeQueryService;
import com.gongspot.project.domain.place.converter.PlaceConverter;
import com.gongspot.project.domain.place.dto.PlaceRequestDTO;
import com.gongspot.project.domain.place.dto.PlaceResponseDTO;
import com.gongspot.project.domain.place.entity.Place;
import com.gongspot.project.domain.place.service.PlaceCommandService;
import com.gongspot.project.domain.place.service.PlaceQueryService;
import com.gongspot.project.domain.review.dto.ReviewResponseDTO;
Expand All @@ -14,6 +16,7 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -130,4 +133,22 @@ public ApiResponse<String> viewCongestion(@PathVariable("placeId") Long placeId)
placeCommandService.viewCongestion(user.getId(), placeId);
return ApiResponse.onSuccess("포인트 사용 완료");
}

@PreAuthorize("hasRole('ADMIN')")
@Operation(summary = "공간 정보 수정 (관리자)")
@PatchMapping("/{placeId}")
public ApiResponse<Void> patchPlace(
@PathVariable("placeId") Long placeId,
@RequestBody PlaceRequestDTO.PlacePatchDTO patchDTO) {
placeCommandService.updatePlace(placeId, patchDTO);
return ApiResponse.onSuccess();
}

@PreAuthorize("hasRole('ADMIN')")
@Operation(summary = "공간 정보 상세 조회 (관리자)")
@GetMapping("/details/{placeId}")
public ApiResponse<PlaceResponseDTO.PlaceDetailDTO> getPlaceDetail(@PathVariable("placeId") Long placeId) {
Place place = placeQueryService.getPlaceDetails(placeId);
return ApiResponse.onSuccess(PlaceConverter.toPlaceDetailDTO(place));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -150,5 +150,19 @@ public static PlaceResponseDTO.SearchPlaceListDTO toSearchPlaceListDTO(List<Plac
.placeList(placeList)
.build();
}

public static PlaceResponseDTO.PlaceDetailDTO toPlaceDetailDTO(Place place) {
return PlaceResponseDTO.PlaceDetailDTO.builder()
.name(place.getName())
.locationInfo(place.getLocationInfo())
.openingHours(place.getOpeningHours())
.phoneNumber(place.getPhoneNumber())
.purpose(place.getPurpose())
.type(place.getType())
.mood(place.getMood())
.facilities(place.getFacilities())
.location(place.getLocation())
.build();
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.gongspot.project.domain.place.dto;

import com.gongspot.project.common.enums.*;
import lombok.Getter;

import java.util.List;

public class PlaceRequestDTO {
@Getter
public static class PlacePatchDTO {
String locationInfo;
String openingHours;
String phoneNumber;
List<PurposeEnum> purposeList;
PlaceEnum type;
List<MoodEnum> moodList;
List<FacilitiesEnum> facilityList;
List<LocationEnum> locationList;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,20 @@ public static class VisitedPlaceListDTO {
private Integer totalCount;
private List<VisitedPlaceDTO> visitedPlaces;
}

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class PlaceDetailDTO {
String name;
String locationInfo;
String openingHours;
String phoneNumber;
List<PurposeEnum> purpose;
PlaceEnum type;
List<MoodEnum> mood;
List<FacilitiesEnum> facilities;
List<LocationEnum> location;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@

import com.gongspot.project.domain.home.entity.HotCheck;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.*;

import java.util.ArrayList;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.gongspot.project.domain.place.repository;

import com.gongspot.project.common.enums.*;
import com.gongspot.project.domain.place.dto.PlaceRequestDTO;
import com.gongspot.project.domain.place.dto.PlaceResponseDTO;
import com.gongspot.project.domain.place.entity.Place;
import com.gongspot.project.domain.place.entity.QPlace;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.gongspot.project.domain.place.repository;

import com.gongspot.project.common.enums.*;
import com.gongspot.project.domain.place.dto.PlaceRequestDTO;
import com.gongspot.project.domain.place.dto.PlaceResponseDTO;
import com.gongspot.project.domain.place.entity.Place;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,23 @@
import com.gongspot.project.common.code.status.ErrorStatus;
import com.gongspot.project.common.enums.*;
import com.gongspot.project.common.exception.BusinessException;
import com.gongspot.project.domain.place.dto.PlaceRequestDTO;
import com.gongspot.project.domain.place.dto.PlaceResponseDTO;
import com.gongspot.project.domain.place.entity.Place;
import com.gongspot.project.domain.place.entity.QPlace;
import com.gongspot.project.domain.search.entity.RecentSearch;
import com.gongspot.project.domain.user.entity.User;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Expression;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.JPQLQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.querydsl.jpa.impl.JPAUpdateClause;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;
Expand All @@ -31,8 +38,14 @@ public class PlaceRepositoryImpl implements PlaceRepositoryCustom {
public List<PlaceResponseDTO.SearchPlaceDTO> findFilteredPlaces(Long userId, String keyword, List<PurposeEnum> purpose, PlaceEnum type, List<MoodEnum> mood, List<FacilitiesEnum> facilities, List<LocationEnum> location, Long page) {
BooleanBuilder builder = new BooleanBuilder();

String normalizedKeyword = keyword.toLowerCase().replace(" ", "");

if (keyword != null && !keyword.isBlank()) {
builder.and(place.name.containsIgnoreCase(keyword));
builder.and(
Expressions.stringTemplate(
"REPLACE(LOWER({0}), ' ', '')", place.name
).like("%" + normalizedKeyword + "%")
);
} else {
BooleanBuilder filterGroup = new BooleanBuilder();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.gongspot.project.domain.place.service;

import com.gongspot.project.domain.place.dto.PlaceRequestDTO;

public interface PlaceCommandService {
void isLikedPlace(Long UserId, Long placeId);
void unLikedPlace(Long UserId, Long placeId);
void viewCongestion(Long userId, Long placeId);
void updatePlace(Long placeId, PlaceRequestDTO.PlacePatchDTO patchDTO);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.gongspot.project.common.exception.BusinessException;
import com.gongspot.project.domain.like.entity.Like;
import com.gongspot.project.domain.like.repository.LikeRepository;
import com.gongspot.project.domain.place.dto.PlaceRequestDTO;
import com.gongspot.project.domain.place.entity.Place;
import com.gongspot.project.domain.point.entity.Point;
import com.gongspot.project.domain.point.repository.PointRepository;
Expand Down Expand Up @@ -94,4 +95,21 @@ public void viewCongestion(Long userId, Long placeId) {
pointRepository.save(point);

}

@Override
@Transactional
public void updatePlace(Long placeId, PlaceRequestDTO.PlacePatchDTO patchDTO) {
Place place = placeRepository.findById(placeId)
.orElseThrow(() -> new BusinessException(ErrorStatus.PLACE_NOT_FOUND));

if (patchDTO.getLocationInfo() != null) place.setLocationInfo(patchDTO.getLocationInfo());
if (patchDTO.getOpeningHours() != null) place.setOpeningHours(patchDTO.getOpeningHours());
if (patchDTO.getPhoneNumber() != null) place.setPhoneNumber(patchDTO.getPhoneNumber());
if (patchDTO.getType() != null) place.setType(patchDTO.getType());

if (patchDTO.getPurposeList() != null) place.setPurpose(patchDTO.getPurposeList());
if (patchDTO.getMoodList() != null) place.setMood(patchDTO.getMoodList());
if (patchDTO.getFacilityList() != null) place.setFacilities(patchDTO.getFacilityList());
if (patchDTO.getLocationList() != null) place.setLocation(patchDTO.getLocationList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import com.gongspot.project.common.enums.*;
import com.gongspot.project.domain.place.dto.PlaceResponseDTO;
import com.gongspot.project.domain.place.entity.Place;

import java.util.List;

public interface PlaceQueryService {
PlaceResponseDTO.GetPlaceDTO getPlace(Long userId, Long placeId);
PlaceResponseDTO.VisitedPlaceListDTO getVisitedPlaces(Long userId);
List<PlaceResponseDTO.SearchPlaceDTO> getFilteredPlaces(Long userId, String keyword, List<PurposeEnum> purpose, PlaceEnum type, List<MoodEnum> mood, List<FacilitiesEnum> facilities, List<LocationEnum> location, Long page);
Place getPlaceDetails(Long placeId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalDateTime;
Expand Down Expand Up @@ -81,6 +82,7 @@ public PlaceResponseDTO.VisitedPlaceListDTO getVisitedPlaces(Long userId) {
}

@Override
@Transactional
public List<PlaceResponseDTO.SearchPlaceDTO> getFilteredPlaces(Long userId, String keyword, List<PurposeEnum> purpose, PlaceEnum type, List<MoodEnum> mood, List<FacilitiesEnum> facilities, List<LocationEnum> location, Long page) {
if (keyword != null) {
User user = userRepository.findById(userId)
Expand All @@ -95,4 +97,10 @@ public List<PlaceResponseDTO.SearchPlaceDTO> getFilteredPlaces(Long userId, Stri
}
return placeRepository.findFilteredPlaces(userId, keyword, purpose, type, mood, facilities, location, page);
}

@Override
public Place getPlaceDetails(Long placeId) {
return placeRepository.findById(placeId)
.orElseThrow(() -> new BusinessException(ErrorStatus.PLACE_NOT_FOUND));
}
}