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

Develop to Main 릴리즈 (#111) #112

Merged
merged 67 commits into from
Feb 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
d192bbe
feat : Redis를 사용하기 위해 build.gradle 수정 (#95)
sungjindev Feb 13, 2024
fa5fefe
feat : Redis 연결을 위한 기본 Config 클래스 추가 (#95)
sungjindev Feb 14, 2024
1719402
feat : 검색어 자동 완성 기능을 위해 RedisSortedSetService 구현 (#95)
sungjindev Feb 14, 2024
d6b5b4c
feat : findAllDisplayName 로직 구현 (#95)
sungjindev Feb 14, 2024
20bdac9
feat : 검색어 자동 완성을 위해 모든 가게명에 대해 음절 단위로 잘라 Redis에 저장하는 로직 구현 (#95)
sungjindev Feb 14, 2024
7bd03ee
feat : Redis에서 특정 index 이후의 값들을 가져오는 로직 구현 (#95)
sungjindev Feb 14, 2024
43eaafe
feat : 검색어 자동 완성 기능과 관련된 서비스 로직 구현 (#95)
sungjindev Feb 14, 2024
db3d86c
Merge branch 'develop' of https://github.com/Korea-Certified-Store/ba…
sungjindev Feb 14, 2024
ecadff3
feat : 검색어 자동 완성을 위한 API 구현 (#95)
sungjindev Feb 14, 2024
a77e476
feat : redis 설정 (#100)
jinhoon227 Feb 14, 2024
46c0a54
feat : 테스트 트리거 추가 (#100)
jinhoon227 Feb 14, 2024
340a967
feat : 테스트 트리거 제거 (#100)
jinhoon227 Feb 14, 2024
0def7e0
Merge pull request #101 from Korea-Certified-Store/feature/redis-conf…
jinhoon227 Feb 14, 2024
7dc1942
fix : Merge commit
sungjindev Feb 14, 2024
0f176ee
fix : 검색어 자동 완성 최대 개수를 5개에서 10개로 변경 (#95)
sungjindev Feb 14, 2024
319fc20
refactor : findAllDisplayName() 쿼리 개선 (#95)
sungjindev Feb 14, 2024
94ab06f
refactor : 병목 현상이 걸리던 로직을 멀티 스레드 병렬 처리로 변경하여 175초에서 4초로 성능 개선 (#95)
sungjindev Feb 16, 2024
d1f8177
refactor : 병목 현상이 걸리던 로직을 158초에서 0.009초로 개선 (#95)
sungjindev Feb 16, 2024
63b9b73
feat : redis 추가 (#103)
jinhoon227 Feb 16, 2024
a350f14
fix : Redis에 비밀번호를 사용하여 접근하도록 변경 (#95)
sungjindev Feb 17, 2024
5336ed1
Merge pull request #104 from Korea-Certified-Store/feature/add-redis-…
jinhoon227 Feb 17, 2024
ec20ba9
Merge branch 'develop' into feature/add-searchKeyword-autocorrect(#95)
sungjindev Feb 17, 2024
84f016c
fix : backend-submodule 수정 반영 (#95)
sungjindev Feb 17, 2024
9b5eeae
Merge pull request #102 from Korea-Certified-Store/feature/add-search…
sungjindev Feb 17, 2024
84ceafd
feat : 누락되어 있던 검색어 자동 완성 기능 테스트 추가 (#105)
sungjindev Feb 17, 2024
66570c5
feat : Redis 데이터들이 잘 업데이트 될 수 있도록 전체 데이터를 지워주는 로직 추가 (#105)
sungjindev Feb 17, 2024
4c831de
fix : 비동기 멀티 스레드로 구현되어 있는 로직에 대해 검증이 바로 진행되는 이슈가 있어서 slepp 추가 (#105)
sungjindev Feb 17, 2024
b1772e7
feat : 사용자 제보 기능을 위한 추상 클래스인 Report 구현 (#105)
sungjindev Feb 17, 2024
037cd16
feat : 새로운 가게를 요청하기 위한 NewStoreReport Entity 구현 (#105)
sungjindev Feb 17, 2024
9c89ad5
feat : 등록된 가게를 수정 요청하기 위한 FixStoreReport Entity 구현 (#105)
sungjindev Feb 17, 2024
43e0fef
feat : 등록된 가게를 삭제 요청하기 위한 DelStoreReport Entity 구현 (#105)
sungjindev Feb 17, 2024
b64cc0c
feat : ReportRepository 구현 (#105)
sungjindev Feb 17, 2024
cabc31a
feat : ReportService 구현 (#105)
sungjindev Feb 17, 2024
d9d194b
feat : SaveNewStoreReportRequest 구현 (#105)
sungjindev Feb 17, 2024
49ccb30
feat : SaveNewStoreReportRequest 구현 (#105)
sungjindev Feb 17, 2024
f1e0b13
feat : SaveSpecificStoreReportRequest 구현 (#105)
sungjindev Feb 17, 2024
20e1c04
feat : 사용자의 신규 가게 등록 요청이 들어오면 사용할 서비스 로직 구현 (#105)
sungjindev Feb 17, 2024
6665831
feat : 사용자의 특정 가게에 대한 수정, 삭제 요청이 들어오면 사용할 서비스 로직 구현 (#105)
sungjindev Feb 17, 2024
e4645b6
feat : 사용자의 신규 가게 등록 요청을 위한 API 개발 (#105)
sungjindev Feb 17, 2024
ddc9fb9
feat : 사용자의 특정 가게에 대한 정보 수정 혹은 삭제 요청을 위한 API 개발 (#105)
sungjindev Feb 17, 2024
7374fc1
feat : 잘못된 인증제 정보가 들어왔을 때 예외 처리 추가 (#105)
sungjindev Feb 17, 2024
bce3b7c
fix : Springdoc 관련 의존성 문제가 있어서 최신 버전으로 update (#105)
sungjindev Feb 17, 2024
7ed574d
feat : 편의를 위해 Springdoc Request Body에 Default value 설정 (#105)
sungjindev Feb 17, 2024
148e514
feat : Request Body에 대한 유효성 검사를 쉽게 하기 위해 @Valid 적용 (#105)
sungjindev Feb 17, 2024
9870ce1
feat : saveNewStoreReport()에 대한 테스트 코드 작성 (#105)
sungjindev Feb 17, 2024
d521035
feat : saveSpecificStoreReport()에 대한 테스트 코드 작성 (#105)
sungjindev Feb 17, 2024
ff74cab
feat : reportId를 가지고 DB에서 조회하는 서비스 로직 구현 (#105)
sungjindev Feb 17, 2024
d43eb94
feat : DB에 있는 모든 Report를 조회하는 서비스 로직 구현 (#105)
sungjindev Feb 17, 2024
b11f91b
feat : reportId를 가지고 사용자 제보 내용을 조회할 수 있는 api 구현 (#105)
sungjindev Feb 17, 2024
c44a087
feat : DB에 있는 모든 사용자 제보 내용을 조회할 수 있는 API 구현 (#105)
sungjindev Feb 17, 2024
48bdabc
feat : reportId로 report 내용을 조회하는 로직에 대한 테스트 코드 작성 (#105)
sungjindev Feb 17, 2024
07406a4
feat : DB에서 전체 Report 내용을 조회하는 로직에 대한 테스트 코드 작성 (#105)
sungjindev Feb 17, 2024
7abeedf
fix : 일부 주석 내용 수정 (#105)
sungjindev Feb 17, 2024
2ca264c
Merge pull request #106 from Korea-Certified-Store/feature/add-userRe…
sungjindev Feb 18, 2024
2cf26c4
feat : 요구사항 변경에 따라 적합한 자료구조인 Redis Hash 서비스 코드 구현 (#107)
sungjindev Feb 18, 2024
6a59442
fix : RedisHashService 코드 중복 개선 (#107)
sungjindev Feb 18, 2024
f8e1aa4
feat : 모든 가게 이름을 Redis Hash에 저장하기 위한 saveAllDisplayName() 로직 구현 (#107)
sungjindev Feb 18, 2024
7aa13bc
feat : RedisHashService에 모든 데이터를 지우는 로직 구현 (#107)
sungjindev Feb 18, 2024
55a1cee
feat : StoreService에 init() 로직 구현 (#107)
sungjindev Feb 18, 2024
b9d4235
feat : StoreService에 검색어 자동 완성 기능과 관련된 로직 구현 (#107)
sungjindev Feb 18, 2024
921c395
fix : RedisConfig 관련 오류 수정 (#107)
sungjindev Feb 18, 2024
8fa4a80
refactor : 요구사항이 변경됨에 따라 Redis의 성능 이슈가 발생하여 MySQL 로직으로 모두 전환 (#107)
sungjindev Feb 18, 2024
46157d7
fix : Workflow와 Submodule에서도 Redis 관련 내용 제거 (#107)
sungjindev Feb 18, 2024
7fd7d89
Merge pull request #108 from Korea-Certified-Store/feature/fix-search…
sungjindev Feb 19, 2024
87138a4
fix : docker-compose 파일에서 Redis 의존성 제거 (#109)
sungjindev Feb 19, 2024
aa99dc0
Merge pull request #110 from Korea-Certified-Store/fix/remove-redis-f…
sungjindev Feb 19, 2024
2f9682c
Merge branch 'main' into develop
sungjindev Feb 20, 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
2 changes: 1 addition & 1 deletion .github/workflows/action-develop-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
branches:
- develop

# 코드의 내용을 이 파일을 실행하여 action을 수행하는 주체(Github Actions에서 사용하는 VM)가 읽을 수 있도록 권한을 설정
# 코드의 내용을 이 파일을 실행하여 action을 수행하는 주체(Github Actions에서 사용하는 VM)가 읽을 수 있도록 권한을 설정
permissions:
contents: read

Expand Down
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,12 @@ dependencies {

//spring doc 추가
dependencies {
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
}

//Validation을 위해 추가! Spring Boot 2.3버전 이후부터는 web 의존성안에 있던 validation 관련 package가 아예 모듈로 빠짐
implementation 'org.springframework.boot:spring-boot-starter-validation'

}

test {
Expand Down
75 changes: 75 additions & 0 deletions src/main/java/com/nainga/nainga/domain/report/api/ReportApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.nainga.nainga.domain.report.api;

import com.nainga.nainga.domain.report.application.ReportService;
import com.nainga.nainga.domain.report.domain.Report;
import com.nainga.nainga.domain.report.dto.SaveNewStoreReportRequest;
import com.nainga.nainga.domain.report.dto.SaveSpecificStoreReportRequest;
import com.nainga.nainga.global.util.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class ReportApi {
private final ReportService reportService;

//사용자의 신규 가게 등록 요청에 대한 제보를 저장
@Tag(name = "[New] 사용자 제보")
@Operation(summary = "사용자의 신규 가게 등록 요청에 대한 제보를 서버에 저장", description = "사용자의 신규 가게 등록 요청에 대한 제보를 서버에 저장합니다.<br><br>" +
"[Request Body]<br>" +
"storeName: 등록 요청하는 가게 이름<br>" +
"formattedAddress: 등록 요청하는 가게 주소<br>" +
"certifications: 가게가 가지고 있는 인증제들의 이름을 담은 리스트. 착한가격업소, 모범음식점, 안심식당이 아닌 경우 예외 발생<br>" +
"[Response Body]<br>" +
"등록된 reportId<br>")
@PostMapping("api/report/newStore/v1")
public Result<Long> saveNewStoreReport(@Valid @RequestBody SaveNewStoreReportRequest saveNewStoreReportRequest) {
Long reportId = reportService.saveNewStoreReport(saveNewStoreReportRequest);
return new Result<>(Result.CODE_SUCCESS, Result.MESSAGE_OK, reportId);
}

//사용자의 특정 가게에 대한 수정, 삭제 요청 정보를 저장
@Tag(name = "[New] 사용자 제보")
@Operation(summary = "사용자의 특정 가게에 대한 정보 수정 혹은 삭제 요청에 대한 제보를 서버에 저장", description = "사용자의 특정 가게에 대한 정보 수정 혹은 삭제 요청에 대한 제보를 서버에 저장합니다.<br><br>" +
"[Request Body]<br>" +
"dtype: 제보 종류를 구분하기 위한 값. fix는 수정 요청, del은 삭제 요청. fix나 del이 아닌 경우 예외 발생<br>" +
"storeId: 수정 혹은 삭제를 요청하는 가게 id<br>" +
"contents: 제보 내용<br>" +
"[Response Body]<br>" +
"등록된 reportId<br>")
@PostMapping("api/report/specificStore/v1")
public Result<Long> saveSpecificStoreReport(@Valid @RequestBody SaveSpecificStoreReportRequest saveSpecificStoreReportRequest) {
Long reportId = reportService.saveSpecificStoreReport(saveSpecificStoreReportRequest);
return new Result<>(Result.CODE_SUCCESS, Result.MESSAGE_OK, reportId);
}

//reportId를 가지고 사용자 제보 내용 조회
@Tag(name = "[New] 사용자 제보")
@Operation(summary = "reportId를 가지고 사용자 제보 내용 조회", description = "reportId를 가지고 사용자 제보 내용을 조회합니다.<br><br>" +
"[Request Body]<br>" +
"reportId: 검색할 사용자 제보의 reportId. 유효하지 않은 reportId의 경우 예외 발생<br>" +
"[Response Body]<br>" +
"해당 reportId로 검색된 사용자 제보 내용<br>")
@GetMapping("api/report/byId/v1")
public Result<Report> findById(@NotNull @RequestParam(value = "reportId") Long reportId) {
Report report = reportService.findById(reportId);
return new Result<>(Result.CODE_SUCCESS, Result.MESSAGE_OK, report);
}

//DB에 있는 모든 사용자 제보 내용 조회
@Tag(name = "[New] 사용자 제보")
@Operation(summary = "DB에 있는 모든 사용자 제보 내용 조회", description = "DB에 있는 모든 사용자 제보 내용을 조회합니다.<br><br>" +
"[Response Body]<br>" +
"DB에 있는 모든 사용자 제보 내용<br>")
@GetMapping("api/report/all/v1")
public Result<List<Report>> findAll() {
List<Report> reports = reportService.findAll();
return new Result<>(Result.CODE_SUCCESS, Result.MESSAGE_OK, reports);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.nainga.nainga.domain.report.application;

import com.nainga.nainga.domain.report.dao.ReportRepository;
import com.nainga.nainga.domain.report.domain.DelSpecificStoreReport;
import com.nainga.nainga.domain.report.domain.FixSpecificStoreReport;
import com.nainga.nainga.domain.report.domain.NewStoreReport;
import com.nainga.nainga.domain.report.domain.Report;
import com.nainga.nainga.domain.report.dto.SaveNewStoreReportRequest;
import com.nainga.nainga.domain.report.dto.SaveSpecificStoreReportRequest;
import com.nainga.nainga.global.exception.GlobalException;
import com.nainga.nainga.global.exception.ReportErrorCode;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class ReportService {
private final ReportRepository reportRepository;

@Transactional
public Long saveNewStoreReport(SaveNewStoreReportRequest saveNewStoreReportRequest) throws GlobalException { //사용자의 신규 가게 등록 요청
List<String> certificationList = List.of("착한가격업소", "모범음식점", "안심식당"); //현재 App에서 사용중인 Certification 목록
for (String certification : saveNewStoreReportRequest.getCertifications()) {
if (!certificationList.contains(certification)) {
throw new GlobalException(ReportErrorCode.INVALID_CERTIFICATION); //잘못된 인증제 값이 들어온 것이므로 예외 발생
}
}

NewStoreReport newStoreReport = NewStoreReport.builder()
.storeName(saveNewStoreReportRequest.getStoreName())
.formattedAddress(saveNewStoreReportRequest.getFormattedAddress())
.certifications(saveNewStoreReportRequest.getCertifications())
.build();

return reportRepository.save(newStoreReport);
}

@Transactional
public Long saveSpecificStoreReport(SaveSpecificStoreReportRequest saveSpecificStoreReportRequest) throws GlobalException { //사용자의 특정 가게에 대한 수정, 삭제 요청
if (saveSpecificStoreReportRequest.getDtype().equals("fix")) {
FixSpecificStoreReport fixSpecificStoreReport = FixSpecificStoreReport.builder()
.storeId(saveSpecificStoreReportRequest.getStoreId())
.contents(saveSpecificStoreReportRequest.getContents())
.build();

return reportRepository.save(fixSpecificStoreReport);
} else if (saveSpecificStoreReportRequest.getDtype().equals("del")) {
DelSpecificStoreReport delSpecificStoreReport = DelSpecificStoreReport.builder()
.storeId(saveSpecificStoreReportRequest.getStoreId())
.contents(saveSpecificStoreReportRequest.getContents())
.build();

return reportRepository.save(delSpecificStoreReport);
} else {
throw new GlobalException(ReportErrorCode.INVALID_DTYPE); //잘못된 DTYPE이 들어왔을 경우에 Custom GlobalException 처리
}
}

public Report findById(Long id) throws GlobalException { //reportId를 가지고 report를 DB에서 조회하는 로직
Optional<Report> report = reportRepository.findById(id);
if (report.isEmpty()) {
throw new GlobalException(ReportErrorCode.INVALID_REPORT_ID); //잘못된 reportId로 검색하는 경우에 Custom GlobalException 처리
} else {
return report.get();
}
}

public List<Report> findAll() { //DB에 있는 모든 Report 조회
return reportRepository.findAll();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.nainga.nainga.domain.report.dao;

import com.nainga.nainga.domain.report.domain.Report;
import jakarta.persistence.EntityManager;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
@RequiredArgsConstructor
public class ReportRepository {

private final EntityManager em;

public Long save(Report report) {
em.persist(report);
return report.getId();
}

public Optional<Report> findById(Long id) {
List<Report> result = em.createQuery("select r from Report r where r.id = :id", Report.class)
.setParameter("id", id)
.getResultList();
return result.stream().findAny();
}

public List<Report> findAll() {
return em.createQuery("select r from Report r", Report.class)
.getResultList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.nainga.nainga.domain.report.domain;

import jakarta.persistence.DiscriminatorValue;
import jakarta.persistence.Entity;
import lombok.*;

@Entity
@Getter
@Builder
@DiscriminatorValue("del")
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DelSpecificStoreReport extends Report {
private Long storeId; //가게 id
private String contents; //신고 내용
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.nainga.nainga.domain.report.domain;

import jakarta.persistence.DiscriminatorValue;
import jakarta.persistence.Entity;
import lombok.*;

@Entity
@Getter
@Builder
@DiscriminatorValue("fix")
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class FixSpecificStoreReport extends Report {
private Long storeId; //가게 id
private String contents; //신고 내용
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.nainga.nainga.domain.report.domain;

import jakarta.persistence.DiscriminatorValue;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import lombok.*;

import java.util.List;

@Entity
@Getter
@Builder
@DiscriminatorValue("new")
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class NewStoreReport extends Report {
private String storeName; //가게 이름
private String formattedAddress; //가게 주소
@ElementCollection
private List<String> certifications; //가게가 가지고 있는 인증제 이름 리스트
}
16 changes: 16 additions & 0 deletions src/main/java/com/nainga/nainga/domain/report/domain/Report.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.nainga.nainga.domain.report.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
public abstract class Report {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "report_id")
private Long id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.nainga.nainga.domain.report.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.util.List;

@Data
public class SaveNewStoreReportRequest {
@NotEmpty
@Schema(defaultValue = "가게 이름", description = "새로 등록하고자 하는 가게 이름")
private String storeName; //가게 이름
@NotEmpty
@Schema(defaultValue = "주소", description = "새로 등록하고자 하는 가게 주소")
private String formattedAddress; //가게 주소
@NotEmpty
@Schema(defaultValue = "[\"착한가격업소\", \"모범음식점\", \"안심식당\"]", description = "새로 등록할 가게가 가지고 있는 인증제들의 이름을 담은 리스트. 착한가격업소, 모범음식점, 안심식당이 아닌 경우 예외 발생")
private List<String> certifications; //가게가 가지고 있는 인증제 이름 리스트

public SaveNewStoreReportRequest(String storeName, String formattedAddress, List<String> certifications) {
this.storeName = storeName;
this.formattedAddress = formattedAddress;
this.certifications = certifications;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.nainga.nainga.domain.report.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

@Data
public class SaveSpecificStoreReportRequest {
@NotEmpty
@Schema(defaultValue = "fix/del", description = "제보 종류를 구분하기 위한 값. fix는 수정 요청, del은 삭제 요청.")
private String dtype; //Report 종류를 구분하기 위한 type
@NotNull
@Schema(defaultValue = "0", description = "수정 혹은 삭제를 요청하는 가게 id")
private Long storeId; //가게 id
@NotEmpty
@Schema(defaultValue = "제보 내용", description = "제보 내용")
private String contents; //신고 내용

public SaveSpecificStoreReportRequest(String dtype, Long storeId, String contents) {
this.dtype = dtype;
this.storeId = storeId;
this.contents = contents;
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/nainga/nainga/domain/store/api/StoreApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import com.nainga.nainga.domain.store.application.GoodPriceGoogleMapStoreService;
import com.nainga.nainga.domain.store.application.MobeomGoogleMapStoreService;
import com.nainga.nainga.domain.store.application.SafeGoogleMapStoreService;
import com.nainga.nainga.domain.store.application.StoreService;
import com.nainga.nainga.domain.store.dto.CreateDividedGoodPriceStoresResponse;
import com.nainga.nainga.domain.store.dto.CreateDividedMobeomStoresResponse;
import com.nainga.nainga.domain.store.dto.CreateDividedSafeStoresResponse;
import com.nainga.nainga.domain.storecertification.dto.StoreCertificationsByLocationResponse;
import com.nainga.nainga.global.util.Result;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -15,12 +17,15 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class StoreApi {
private final MobeomGoogleMapStoreService mobeomGoogleMapStoreService;
private final SafeGoogleMapStoreService safeGoogleMapStoreService;
private final GoodPriceGoogleMapStoreService goodPriceGoogleMapStoreService;
private final StoreService storeService;

@Hidden
@Tag(name = "초기 Data 생성")
Expand Down Expand Up @@ -78,5 +83,18 @@ public Result<CreateDividedGoodPriceStoresResponse> createDividedGoodPriceStores
System.out.println("response = " + response); //편하게 콘솔 로그에서 확인하기 위한 용도
return new Result<>(Result.CODE_SUCCESS, Result.MESSAGE_OK, response);
}

//검색어를 이용해 가게 이름에 대해 검색하여 나온 검색 결과를 바탕으로 검색어를 자동 완성해서 최대 10개의 자동 완성된 검색어를 리턴
@Tag(name = "[New] 검색어 자동 완성")
@Operation(summary = "사용자의 검색 키워드를 바탕으로 검색어 자동 완성", description = "사용자의 검색 키워드를 바탕으로 DB에서 매칭되는 가게 이름을 조회하여 최대 10개까지 검색어를 자동으로 완성하여 반환해줍니다.<br><br>" +
"[Request Body]<br>" +
"searchKeyword: 사용자의 검색 키워드<br>" +
"[Response Body]<br>" +
"자동으로 완성된 최대 10개의 검색어<br>")
@GetMapping("api/store/autocorrect/v1")
public Result<List<String>> autocorrect(@RequestParam(value = "searchKeyword") String searchKeyword) {
List<String> autocorrectResult = storeService.autocorrect(searchKeyword);
return new Result<>(Result.CODE_SUCCESS, Result.MESSAGE_OK, autocorrectResult);
}
}

Loading
Loading