diff --git a/README.md b/README.md new file mode 100644 index 0000000..5e97794 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Backend \ No newline at end of file diff --git a/build.gradle b/build.gradle index 062993d..03d3bc5 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' + runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' @@ -48,4 +49,4 @@ dependencies { tasks.named('test') { useJUnitPlatform() -} +} \ No newline at end of file diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/entity/Company.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/entity/Company.java new file mode 100644 index 0000000..a6a92d3 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/entity/Company.java @@ -0,0 +1,59 @@ +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.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Entity +@Table(name = "company") +public class Company extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", nullable = false) + private Member member; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String companySize; + + @Column(nullable = false) + private String industry; + + @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) { + this.member = member; + this.name = name; + this.companySize = companySize; + this.industry = industry; + this.painPoint = painPoint; + } +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/entity/Consulting.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/entity/Consulting.java new file mode 100644 index 0000000..ea6ec00 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/entity/Consulting.java @@ -0,0 +1,43 @@ +package com.swOnCampus.AIPlatform.domain.consulting.entity; + +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 lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Entity +@Table(name = "consulting") +public class Consulting extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @OneToOne + @JoinColumn(name = "company_id", nullable = false) + private Company company; // 기업 입력 정보 (채팅방) + + @Column(columnDefinition = "TEXT") + private String result; + + @Column(columnDefinition = "TEXT") + private String summary; + + @Builder + public Consulting(Company company, String result, String summary) { + this.company = company; + this.result = result; + this.summary = summary; + } +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/exception/ConsultingErrorCode.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/exception/ConsultingErrorCode.java new file mode 100644 index 0000000..e56d512 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/exception/ConsultingErrorCode.java @@ -0,0 +1,16 @@ +package com.swOnCampus.AIPlatform.domain.consulting.exception; + +import com.swOnCampus.AIPlatform.global.exception.ErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum ConsultingErrorCode implements ErrorCode { + // 404 + NOT_EXIST_CONSULTING(HttpStatus.NOT_FOUND, "해당 기업에 대한 컨설팅 결과가 존재하지 않습니다."); + + private final HttpStatus httpStatus; + private final String message; +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/repository/CompanyRepository.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/repository/CompanyRepository.java new file mode 100644 index 0000000..3b716aa --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/repository/CompanyRepository.java @@ -0,0 +1,10 @@ +package com.swOnCampus.AIPlatform.domain.consulting.repository; + +import com.swOnCampus.AIPlatform.domain.consulting.entity.Company; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CompanyRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/repository/ConsultingRepository.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/repository/ConsultingRepository.java new file mode 100644 index 0000000..49522a9 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/repository/ConsultingRepository.java @@ -0,0 +1,12 @@ +package com.swOnCampus.AIPlatform.domain.consulting.repository; + +import com.swOnCampus.AIPlatform.domain.consulting.entity.Consulting; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ConsultingRepository extends JpaRepository { + + Optional findByCompanyId(Long companyId); +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/CompanyService.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/CompanyService.java new file mode 100644 index 0000000..8dec525 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/CompanyService.java @@ -0,0 +1,13 @@ +package com.swOnCampus.AIPlatform.domain.consulting.service; + +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.CompanyInfoRequest; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.response.ConsultingResponse; + +public interface CompanyService { + + ConsultingResponse createOrGetConsulting( + Long memberId, + CompanyInfoRequest companyInfoRequest, + Long chatRoomId + ); +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/CompanyServiceImpl.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/CompanyServiceImpl.java new file mode 100644 index 0000000..f32a1a9 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/CompanyServiceImpl.java @@ -0,0 +1,73 @@ +package com.swOnCampus.AIPlatform.domain.consulting.service; + +import com.swOnCampus.AIPlatform.domain.consulting.entity.Company; +import com.swOnCampus.AIPlatform.domain.consulting.entity.Consulting; +import com.swOnCampus.AIPlatform.domain.consulting.exception.ConsultingErrorCode; +import com.swOnCampus.AIPlatform.domain.consulting.repository.CompanyRepository; +import com.swOnCampus.AIPlatform.domain.consulting.repository.ConsultingRepository; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.ConsultingSave; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.CompanyInfoRequest; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.ConsultingRequest; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.response.ConsultingResponse; +import com.swOnCampus.AIPlatform.domain.member.entity.Member; +import com.swOnCampus.AIPlatform.domain.member.repository.MemberRepository; +import com.swOnCampus.AIPlatform.global.exception.CommonErrorCode; +import com.swOnCampus.AIPlatform.global.exception.GlobalException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class CompanyServiceImpl implements CompanyService { + + private final CompanyRepository companyRepository; + private final MemberRepository memberRepository; + private final ConsultingRepository consultingRepository; + private final ConsultingService consultingService; + + @Override + public ConsultingResponse createOrGetConsulting( + Long memberId, + CompanyInfoRequest companyInfoRequest, + Long companyId // 채팅방 id + ) { + Member member = memberRepository.findById(memberId) + .orElseThrow(() -> new GlobalException(CommonErrorCode.NOT_EXIST_MEMBER)); + + if (companyId == null) { + companyId = createCompanyWithConsulting(member, companyInfoRequest); + } + Consulting consulting = consultingRepository.findByCompanyId(companyId) + .orElseThrow(() -> new GlobalException(ConsultingErrorCode.NOT_EXIST_CONSULTING)); + + return new ConsultingResponse(consulting.getSummary()); + } + + private Long createCompanyWithConsulting(Member member, CompanyInfoRequest companyInfoRequest) { + Company company = Company.builder() + .member(member) + .name(companyInfoRequest.name()) + .companySize(companyInfoRequest.companySize()) + .industry(companyInfoRequest.industry()) + .painPoint(companyInfoRequest.painPoint()) + .build(); + companyRepository.save(company); + + ConsultingRequest consultingRequest = new ConsultingRequest( + companyInfoRequest.industry(), + companyInfoRequest.companySize(), + companyInfoRequest.painPoint() + ); + + ConsultingSave result = consultingService.getConsultingResult(consultingRequest); + + Consulting consulting = Consulting.builder() + .company(company) + .result(result.result()) + .summary(result.summary()) + .build(); + consultingRepository.save(consulting); + + return consulting.getCompany().getId(); + } +} \ No newline at end of file diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/ConsultingService.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/ConsultingService.java new file mode 100644 index 0000000..99d7abd --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/ConsultingService.java @@ -0,0 +1,9 @@ +package com.swOnCampus.AIPlatform.domain.consulting.service; + +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.ConsultingSave; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.ConsultingRequest; + +public interface ConsultingService { + + ConsultingSave getConsultingResult(ConsultingRequest request); +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/ConsultingServiceImpl.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/ConsultingServiceImpl.java new file mode 100644 index 0000000..471c271 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/service/ConsultingServiceImpl.java @@ -0,0 +1,38 @@ +package com.swOnCampus.AIPlatform.domain.consulting.service; + +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.ConsultingSave; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.ConsultingRequest; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.response.ConsultingAiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +@Service +@RequiredArgsConstructor +public class ConsultingServiceImpl implements ConsultingService { + + private final RestTemplate restTemplate; + + @Value("${ai.api.url}") + private String aiApiUrl; + + @Override + public ConsultingSave getConsultingResult(ConsultingRequest request) { + ConsultingSave response = new ConsultingSave( + sendRequestToAi(request, false).result(), + sendRequestToAi(request, true).result() + ); + + return response; + } + + private ConsultingAiResponse sendRequestToAi(ConsultingRequest request, boolean summary) { + String url = UriComponentsBuilder.fromHttpUrl(aiApiUrl + "/api/consulting") + .queryParam("summary", summary) + .toUriString(); + + return restTemplate.postForObject(url, request, ConsultingAiResponse.class); + } +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/controller/ConsultingController.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/controller/ConsultingController.java new file mode 100644 index 0000000..72a73e2 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/controller/ConsultingController.java @@ -0,0 +1,39 @@ +package com.swOnCampus.AIPlatform.domain.consulting.web.controller; + +import com.swOnCampus.AIPlatform.domain.consulting.service.CompanyService; +import com.swOnCampus.AIPlatform.domain.consulting.web.dto.request.CompanyInfoRequest; +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 lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/v1/consulting") +public class ConsultingController { + + private final CompanyService companyService; + + @PostMapping() + public ResponseEntity> createConsulting( + @LoginMember Member member, + @RequestBody CompanyInfoRequest companyInfoRequest, + @RequestParam(required = false) Long companyId // 채팅방 id + ) { + ConsultingResponse result = companyService.createOrGetConsulting( + member.getMemberId(), companyInfoRequest, companyId); + + ApiResponse response = ApiResponse.createSuccess(HttpStatus.OK.value(), + result, "컨설팅 결과가 생성되었습니다."); + + return ResponseEntity.ok(response); + } +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/ConsultingSave.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/ConsultingSave.java new file mode 100644 index 0000000..0e3d8da --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/ConsultingSave.java @@ -0,0 +1,8 @@ +package com.swOnCampus.AIPlatform.domain.consulting.web.dto; + +public record ConsultingSave( + String result, + String summary +) { + +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/request/CompanyInfoRequest.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/request/CompanyInfoRequest.java new file mode 100644 index 0000000..5abc32e --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/request/CompanyInfoRequest.java @@ -0,0 +1,15 @@ +package com.swOnCampus.AIPlatform.domain.consulting.web.dto.request; + +import jakarta.validation.constraints.NotBlank; + +public record CompanyInfoRequest( + @NotBlank(message="회사명을 입력해주세요.") + String name, + @NotBlank(message="기업규모를 입력해주세요.") + String companySize, + @NotBlank(message="산업 분야를 입력해주세요.") + String industry, + @NotBlank(message="Pain Point를 입력해주세요.") + String painPoint +) { +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/request/ConsultingRequest.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/request/ConsultingRequest.java new file mode 100644 index 0000000..395c07e --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/request/ConsultingRequest.java @@ -0,0 +1,11 @@ +package com.swOnCampus.AIPlatform.domain.consulting.web.dto.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public record ConsultingRequest( + @JsonProperty("industry") String industry, + @JsonProperty("company_size") String companySize, + @JsonProperty("pain_point") String painPoint +) { + +} \ No newline at end of file diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/response/ConsultingAiResponse.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/response/ConsultingAiResponse.java new file mode 100644 index 0000000..62a465b --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/response/ConsultingAiResponse.java @@ -0,0 +1,7 @@ +package com.swOnCampus.AIPlatform.domain.consulting.web.dto.response; + +public record ConsultingAiResponse( + String result +) { + +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/response/ConsultingResponse.java b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/response/ConsultingResponse.java new file mode 100644 index 0000000..ede3888 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/consulting/web/dto/response/ConsultingResponse.java @@ -0,0 +1,7 @@ +package com.swOnCampus.AIPlatform.domain.consulting.web.dto.response; + +public record ConsultingResponse( + String summary +) { + +} diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/member/entity/Member.java b/src/main/java/com/swOnCampus/AIPlatform/domain/member/entity/Member.java index b5097ec..8899166 100644 --- a/src/main/java/com/swOnCampus/AIPlatform/domain/member/entity/Member.java +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/member/entity/Member.java @@ -1,9 +1,19 @@ package com.swOnCampus.AIPlatform.domain.member.entity; -import jakarta.persistence.*; -import lombok.*; - +import com.swOnCampus.AIPlatform.domain.consulting.entity.Company; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @@ -12,6 +22,7 @@ @Entity @Table(name = "MEMBER") public class Member { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") @@ -41,6 +52,9 @@ public class Member { @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) private List authorityList; + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) + private List companies; + public void addRole(Authority authority) { authorityList.add(authority); authority.setMember(this); diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberService.java b/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberService.java index 5017f07..3812919 100644 --- a/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberService.java +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberService.java @@ -1,6 +1,5 @@ package com.swOnCampus.AIPlatform.domain.member.service; - import com.swOnCampus.AIPlatform.domain.member.web.dto.LoginRequestDto; import com.swOnCampus.AIPlatform.domain.member.web.dto.LoginResponseDto; import com.swOnCampus.AIPlatform.domain.member.web.dto.SignUpRequestDto; diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberServiceImpl.java b/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberServiceImpl.java index 6a9ff0e..77d5fc4 100644 --- a/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberServiceImpl.java +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/member/service/MemberServiceImpl.java @@ -10,6 +10,7 @@ import com.swOnCampus.AIPlatform.domain.member.web.dto.SignUpRequestDto; import com.swOnCampus.AIPlatform.domain.member.web.dto.SignUpResponseDto; import com.swOnCampus.AIPlatform.global.security.jwt.JwtTokenProvider; +import com.swOnCampus.AIPlatform.domain.member.enums.Authorities; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -23,8 +24,6 @@ import java.util.function.Function; import java.util.stream.Collectors; -import static com.swOnCampus.AIPlatform.domain.member.enums.Authorities.ROLE_ADMIN; - @Service @RequiredArgsConstructor @Slf4j @@ -111,7 +110,7 @@ public SignUpResponseDto.SignUpResponse signUp(SignUpRequestDto.SignupRequest re .build(); Authority authority = Authority.builder() - .type(ROLE_ADMIN) + .type(Authorities.ROLE_ADMIN) .build(); newMember.addRole(authority); diff --git a/src/main/java/com/swOnCampus/AIPlatform/domain/report/service/ReportServiceImpl.java b/src/main/java/com/swOnCampus/AIPlatform/domain/report/service/ReportServiceImpl.java index 81144a0..7d09469 100644 --- a/src/main/java/com/swOnCampus/AIPlatform/domain/report/service/ReportServiceImpl.java +++ b/src/main/java/com/swOnCampus/AIPlatform/domain/report/service/ReportServiceImpl.java @@ -1,12 +1,12 @@ package com.swOnCampus.AIPlatform.domain.report.service; import com.lowagie.text.pdf.BaseFont; +import com.swOnCampus.AIPlatform.domain.report.web.dto.ReportingSummaryRequest; +import com.swOnCampus.AIPlatform.global.exception.GlobalException; import java.io.ByteArrayOutputStream; import java.util.Map; import com.swOnCampus.AIPlatform.domain.report.exception.ReportErrorCode; -import com.swOnCampus.AIPlatform.domain.report.web.dto.ReportingSummaryRequest; -import com.swOnCampus.AIPlatform.global.exception.GlobalException; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; diff --git a/src/main/java/com/swOnCampus/AIPlatform/global/exception/CommonErrorCode.java b/src/main/java/com/swOnCampus/AIPlatform/global/exception/CommonErrorCode.java new file mode 100644 index 0000000..0dc6953 --- /dev/null +++ b/src/main/java/com/swOnCampus/AIPlatform/global/exception/CommonErrorCode.java @@ -0,0 +1,15 @@ +package com.swOnCampus.AIPlatform.global.exception; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum CommonErrorCode implements ErrorCode { + // 404 + NOT_EXIST_MEMBER(HttpStatus.NOT_FOUND, "존재하지 않는 회원입니다."); + + private final HttpStatus httpStatus; + private final String message; +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..d66d843 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=AIPlatform diff --git a/src/test/java/com/swOncampus/AIPlatform/AiPlatformApplicationTests.java b/src/test/java/com/swOncampus/AIPlatform/AiPlatformApplicationTests.java new file mode 100644 index 0000000..5298085 --- /dev/null +++ b/src/test/java/com/swOncampus/AIPlatform/AiPlatformApplicationTests.java @@ -0,0 +1,13 @@ +package com.swOnCampus.AIPlatform; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class AiPlatformApplicationTests { + + @Test + void contextLoads() { + } + +}