Skip to content

Commit

Permalink
Merge branch 'dev' into refactor/#4-convert-report-pdf
Browse files Browse the repository at this point in the history
  • Loading branch information
minahYu authored Nov 26, 2024
2 parents 6e3bfbb + a22ea82 commit 9b4940e
Show file tree
Hide file tree
Showing 16 changed files with 258 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
@EnableJpaRepositories
@SpringBootApplication
@EntityScan(basePackages = {
"com/swOnCampus/AIPlatform/domain/member/entity",
"com/swOnCampus/AIPlatform/domain/consulting/entity"
"com/swOnCampus/AIPlatform/domain/member/entity",
"com/swOnCampus/AIPlatform/domain/consulting/entity"
})
public class AiPlatformApplication {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ public class Company extends BaseEntity {
@Column(nullable = false, columnDefinition = "TEXT")
private String painPoint;

@OneToOne(mappedBy = "company", cascade = CascadeType.ALL, orphanRemoval = true)
private Consulting consulting;

@Builder
public Company(Member member, String name, String companySize, String industry,
String painPoint) {
Expand All @@ -56,4 +53,8 @@ public Company(Member member, String name, String companySize, String industry,
this.industry = industry;
this.painPoint = painPoint;
}

public void setMember(Member member) {
this.member = member;
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
package com.swOnCampus.AIPlatform.domain.consulting.entity;

import com.swOnCampus.AIPlatform.domain.member.entity.Member;
import com.swOnCampus.AIPlatform.global.entity.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -34,10 +28,23 @@ public class Consulting extends BaseEntity {
@Column(columnDefinition = "TEXT")
private String summary;

@Column(columnDefinition = "TEXT", name = "consulting_all")
private String consultingAll;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member", nullable = false)
private Member member;

@Builder
public Consulting(Company company, String result, String summary) {
public Consulting(Company company, String result, String summary, String consultingAll, Member member) {
this.company = company;
this.result = result;
this.summary = summary;
this.consultingAll = consultingAll;
this.member = member;
}

public void setMember(Member member) {
this.company.setMember(member);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.swOnCampus.AIPlatform.domain.consulting.service;

import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.ConsultingAllRequestDto;
import com.swOnCampus.AIPlatform.domain.consulting.web.dto.response.ConsultingAllResponseDto;

public interface ConsultingAllService {
ConsultingAllResponseDto.ConsultingAllResponse getConsultingAll(long memberId,ConsultingAllRequestDto.ConsultingAllRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package com.swOnCampus.AIPlatform.domain.consulting.service;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.swOnCampus.AIPlatform.domain.consulting.entity.Consulting;
import com.swOnCampus.AIPlatform.domain.consulting.repository.ConsultingRepository;
import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.ConsultingAllRequestDto;
import com.swOnCampus.AIPlatform.domain.consulting.web.dto.response.ConsultingAllResponseDto;
import com.swOnCampus.AIPlatform.domain.member.entity.Member;
import com.swOnCampus.AIPlatform.domain.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.Optional;

@Service
@RequiredArgsConstructor
@Slf4j
public class ConsultingAllServiceImpl implements ConsultingAllService {
private final MemberRepository memberRepository;
private final ConsultingRepository consultingRepository;
private final RestTemplate restTemplate;
private final ObjectMapper objectMapper;

@Value(value = "${ai.api.url}")
private String apiUrl;


@Override
public ConsultingAllResponseDto.ConsultingAllResponse getConsultingAll(long memberId, ConsultingAllRequestDto.ConsultingAllRequest request) {

String baseUrl = apiUrl + "/api/consulting";

URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl)
.queryParam("summary", "False")
.queryParam("test", "True")
.build()
.toUri();

log.info("uri: {}", uri);

HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("Accept", "application/json");

try {
HttpEntity<ConsultingAllRequestDto.ConsultingAllRequest> entity = new HttpEntity<>(request, headers);

ResponseEntity<String> response = restTemplate.postForEntity(uri, entity, String.class);

String responseBody = response.getBody();
log.info("response: {}", responseBody);

if (!response.getStatusCode().is2xxSuccessful()) {
throw new RuntimeException("컨설팅 생성 오류 : " + response.getStatusCode());
}

JsonNode rootNode = objectMapper.readTree(responseBody);
if (!rootNode.has("result") || rootNode.get("result").isNull()) {
throw new RuntimeException("컨설팅 생성에 오류가 발생하였습니다.");
}
String result = rootNode.get("result").asText();

Optional<Member> foundMember = memberRepository.findById(memberId);
if (!foundMember.isPresent()) {
throw new RuntimeException("존재하지 않는 멤버입니다.");
}

Member found = foundMember.get();

Consulting newAllConsulting = Consulting.builder()
.consultingAll(result)
.member(found)
.build();

found.addConsulting(newAllConsulting);

// 컨설팅 저장
consultingRepository.save(newAllConsulting);

return ConsultingAllResponseDto.ConsultingAllResponse.builder()
.result(result)
.build();

}
catch (Exception e){
e.printStackTrace();
throw new RuntimeException("전체 컨설팅 생성에 실패하였습니다.");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class ConsultingServiceImpl implements ConsultingService {

private final RestTemplate restTemplate;

@Value("${ai.api.url}")
@Value(value = "${ai.api.url}")
private String aiApiUrl;

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
package com.swOnCampus.AIPlatform.domain.consulting.web.controller;

import com.swOnCampus.AIPlatform.domain.consulting.service.CompanyService;
import com.swOnCampus.AIPlatform.domain.consulting.service.ConsultingAllService;
import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.CompanyInfoRequest;
import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.ConsultingAllRequestDto;
import com.swOnCampus.AIPlatform.domain.consulting.web.dto.response.ConsultingAllResponseDto;
import com.swOnCampus.AIPlatform.domain.consulting.web.dto.response.ConsultingResponse;
import com.swOnCampus.AIPlatform.domain.member.entity.Member;
import com.swOnCampus.AIPlatform.global.annotation.LoginMember;
import com.swOnCampus.AIPlatform.global.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -15,13 +23,29 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "기업정보 입력에 따른 컨설팅 결과 API", description = "기업정보 입력/컨설팅 요약 결과 조회 관련 API")
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/v1/consulting")
public class ConsultingController {

private final CompanyService companyService;
private final ConsultingAllService consultingAllService;

@Operation(summary = "기업정보 입력 API 요청", description = "AI 컨설팅에 필요한 기업정보 입력 API 요청")
@ApiResponses(value = {
@io.swagger.v3.oas.annotations.responses.ApiResponse(
responseCode = "COMMON200",
description = "요청 성공",
content = {
@Content(
schema = @Schema(
implementation = CompanyInfoRequest.class
)
)
}
)
})
@PostMapping()
public ResponseEntity<ApiResponse<?>> createConsulting(
@LoginMember Member member,
Expand All @@ -36,4 +60,13 @@ public ResponseEntity<ApiResponse<?>> createConsulting(

return ResponseEntity.ok(response);
}

// 컨설팅 결과 전체 상세 보기 (요약 x)
@PostMapping("/all")
public ResponseEntity<ApiResponse<ConsultingAllResponseDto.ConsultingAllResponse>> getAllConsulting(@LoginMember Member member, @RequestBody ConsultingAllRequestDto.ConsultingAllRequest request){
ConsultingAllResponseDto.ConsultingAllResponse responseDto = consultingAllService.getConsultingAll(member.getMemberId(), request);

ApiResponse<ConsultingAllResponseDto.ConsultingAllResponse> response = ApiResponse.createSuccess(HttpStatus.OK.value(), responseDto, "컨설팅 세부 정보 불러오기를 완료하였습니다.");
return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
package com.swOnCampus.AIPlatform.domain.consulting.web.dto.request;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;

public record CompanyInfoRequest(
@NotBlank(message="회사명을 입력해주세요.")
@Schema(description = "회사명을 입력해주세요.", example = "company")
@NotBlank(message = "회사명을 입력해주세요.")
String name,
@NotBlank(message="기업규모를 입력해주세요.")
@Schema(description = "기업규모를 입력해주세요.", example = "Small")
@NotBlank(message = "기업규모를 입력해주세요.")
String companySize,
@NotBlank(message="산업 분야를 입력해주세요.")
@Schema(description = "산업 분야를 입력해주세요.", example = "Retail")
@NotBlank(message = "산업 분야를 입력해주세요.")
String industry,
@NotBlank(message="Pain Point를 입력해주세요.")
@Schema(description = "Pain point를 입력해주세요.", example = "String")
@NotBlank(message = "Pain Point를 입력해주세요.")
String painPoint
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.swOnCampus.AIPlatform.domain.consulting.web.dto.request;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

public class ConsultingAllRequestDto {

@Data
@AllArgsConstructor
@NoArgsConstructor
public static class ConsultingAllRequest {
private String industry;
private String company_size;
private String pain_point;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.swOnCampus.AIPlatform.domain.consulting.web.dto.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

public class ConsultingAllResponseDto {

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class ConsultingAllResponse {
private String result;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.swOnCampus.AIPlatform.domain.consulting.web.dto.response;

import io.swagger.v3.oas.annotations.media.Schema;

public record ConsultingResponse(
@Schema(description = "컨설팅 요약 내용", example = "summary")
String summary
) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.swOnCampus.AIPlatform.domain.member.entity;

import com.swOnCampus.AIPlatform.domain.consulting.entity.Company;
import com.swOnCampus.AIPlatform.domain.consulting.entity.Consulting;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand All @@ -9,6 +10,8 @@
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;

import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down Expand Up @@ -43,9 +46,6 @@ public class Member {
@Column(name = "business_num")
private String businessNum;

@Column(name = "corporation")
private String corporation;

@Column(name = "sign_up_route")
private String signUpRoute;

Expand All @@ -55,8 +55,21 @@ public class Member {
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Company> companies;

@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Consulting> consultingList;

public void addRole(Authority authority) {
authorityList.add(authority);
authority.setMember(this);
}

public void addCompany(Company company) {
companies.add(company);
company.setMember(this);
}

public void addConsulting(Consulting consulting) {
consultingList.add(consulting);
consulting.setMember(this);
}
}
Loading

0 comments on commit 9b4940e

Please sign in to comment.