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
@@ -1,6 +1,7 @@
package com.jobdri.jobdri_api.domain.analysis.entity;

import com.jobdri.jobdri_api.domain.mockapply.entity.MockApply;
import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

Expand All @@ -13,7 +14,7 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(access = AccessLevel.PRIVATE)
@Table(name = "analyses")
public class Analysis {
public class Analysis extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.jobdri.jobdri_api.domain.analysis.entity;

import com.jobdri.jobdri_api.domain.mockapply.entity.MockApply;
import com.jobdri.jobdri_api.global.entity.CreatedAtEntity;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand All @@ -20,7 +19,7 @@
)
}
)
public class CustomQuestionCandidate {
public class CustomQuestionCandidate extends CreatedAtEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -36,15 +35,11 @@ public class CustomQuestionCandidate {
@Column(name = "char_limit", nullable = false)
private int limit;

@Column(nullable = false)
private LocalDateTime createdAt;

public static CustomQuestionCandidate create(MockApply mockApply, String content, int limit) {
return CustomQuestionCandidate.builder()
.mockApply(mockApply)
.content(content)
.limit(limit)
.createdAt(LocalDateTime.now())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jobdri.jobdri_api.domain.analysis.entity;

import com.jobdri.jobdri_api.domain.mockapply.entity.MockApply;
import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

Expand All @@ -13,7 +14,7 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(access = AccessLevel.PRIVATE)
@Table(name = "questions")
public class Question {
public class Question extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.jobdri.jobdri_api.domain.analysis.entity;

import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

Expand All @@ -9,7 +10,7 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(access = AccessLevel.PRIVATE)
@Table(name = "question_analyses")
public class QuestionAnalysis {
public class QuestionAnalysis extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jobdri.jobdri_api.domain.audit.entity;

import com.jobdri.jobdri_api.domain.user.entity.User;
import com.jobdri.jobdri_api.global.entity.CreatedAtEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
Expand All @@ -15,13 +16,11 @@
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Entity
@Table(name = "audit_logs")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class AuditLog {
public class AuditLog extends CreatedAtEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -51,9 +50,6 @@ public class AuditLog {
@Column(length = 500)
private String userAgent;

@Column(nullable = false)
private LocalDateTime createdAt;

@Builder(access = AccessLevel.PRIVATE)
private AuditLog(
User user,
Expand All @@ -63,8 +59,7 @@ private AuditLog(
String beforeValue,
String afterValue,
String ipAddress,
String userAgent,
LocalDateTime createdAt
String userAgent
) {
this.user = user;
this.action = action;
Expand All @@ -74,7 +69,6 @@ private AuditLog(
this.afterValue = afterValue;
this.ipAddress = ipAddress;
this.userAgent = userAgent;
this.createdAt = createdAt;
}

public static AuditLog create(
Expand All @@ -96,7 +90,6 @@ public static AuditLog create(
.afterValue(afterValue)
.ipAddress(ipAddress)
.userAgent(userAgent)
.createdAt(LocalDateTime.now())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jobdri.jobdri_api.domain.company.entity;

import com.jobdri.jobdri_api.domain.jobposting.entity.JobPosting;
import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

Expand All @@ -13,7 +14,7 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(access = AccessLevel.PRIVATE)
@Table(name = "companies")
public class Company {
public class Company extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,14 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.util.StringUtils;
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;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.InvalidPathException;
Expand Down Expand Up @@ -47,6 +51,25 @@ public ApiResponse<CorpusImportResult> importCorpus(
);
}

@Operation(summary = "corpus 엑셀 업로드 적재", description = "관리자가 xlsx 파일을 직접 업로드해 corpus 원본 테이블에 적재합니다.")
@PostMapping(value = "/import/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ApiResponse<CorpusImportResult> importCorpusByUpload(
@RequestParam("file") MultipartFile file
) {
validateUploadFile(file);
try {
return ApiResponse.onSuccess(
"업로드한 corpus 엑셀 적재에 성공했습니다.",
corpusImportService.importFromXlsx(file.getInputStream())
);
} catch (IOException e) {
throw new GeneralException(
GeneralErrorCode.INVALID_PARAMETER,
"파일 형식이 올바르지 않습니다."
);
}
}

@Operation(summary = "corpus 임베딩 동기화", description = "유효한 corpus 데이터를 읽어 pgvector 테이블에 임베딩을 저장합니다.")
@PostMapping("/embeddings/sync")
public ApiResponse<CorpusEmbeddingSyncResponse> syncEmbeddings(
Expand Down Expand Up @@ -89,4 +112,21 @@ private Path validateImportPath(String rawPath) {
);
}
}

private void validateUploadFile(MultipartFile file) {
if (file == null || file.isEmpty()) {
throw new GeneralException(
GeneralErrorCode.MISSING_PARAMETER,
"업로드할 엑셀 파일이 필요합니다."
);
}

String originalFilename = file.getOriginalFilename();
if (!StringUtils.hasText(originalFilename) || !originalFilename.toLowerCase().endsWith(".xlsx")) {
throw new GeneralException(
GeneralErrorCode.INVALID_PARAMETER,
"xlsx 파일만 업로드할 수 있습니다."
);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.jobdri.jobdri_api.domain.corpus.entity;

import com.jobdri.jobdri_api.domain.classification.entity.DetailClassification;
import com.jobdri.jobdri_api.global.entity.CreatedAtEntity;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand All @@ -20,7 +19,7 @@
)
}
)
public class CorpusClassificationMapping {
public class CorpusClassificationMapping extends CreatedAtEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -39,9 +38,6 @@ public class CorpusClassificationMapping {
@JoinColumn(name = "detail_classification_id", nullable = false)
private DetailClassification detailClassification;

@Column(nullable = false)
private LocalDateTime createdAt;

public static CorpusClassificationMapping create(
String sourceJobGroupL1,
String sourceJobFamilyL2,
Expand All @@ -53,7 +49,6 @@ public static CorpusClassificationMapping create(
.sourceJobFamilyL2(sourceJobFamilyL2)
.sourceRoleL3(sourceRoleL3)
.detailClassification(detailClassification)
.createdAt(LocalDateTime.now())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@

import com.jobdri.jobdri_api.domain.company.entity.Company;
import com.jobdri.jobdri_api.domain.classification.entity.DetailClassification;
import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand All @@ -20,7 +19,7 @@
@Index(name = "idx_mock_job_posting_corpus_classification", columnList = "job_group_l1, job_family_l2, role_l3")
}
)
public class MockJobPostingCorpus {
public class MockJobPostingCorpus extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -73,9 +72,6 @@ public class MockJobPostingCorpus {
@Column(name = "invalid_reason", columnDefinition = "TEXT")
private String invalidReason;

@Column(name = "created_at", nullable = false)
private LocalDateTime createdAt;

public static MockJobPostingCorpus create(
String sourceAnalysisId,
Company company,
Expand Down Expand Up @@ -109,7 +105,6 @@ public static MockJobPostingCorpus create(
.embeddingText(embeddingText)
.validForEmbedding(validForEmbedding)
.invalidReason(invalidReason)
.createdAt(LocalDateTime.now())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@

import com.jobdri.jobdri_api.domain.company.entity.Company;
import com.jobdri.jobdri_api.domain.classification.entity.DetailClassification;
import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand All @@ -21,7 +20,7 @@
@Index(name = "idx_mock_question_corpus_classification", columnList = "job_group_l1, job_family_l2, role_l3")
}
)
public class MockQuestionCorpus {
public class MockQuestionCorpus extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -71,9 +70,6 @@ public class MockQuestionCorpus {
@Column(name = "is_valid_for_embedding", nullable = false)
private boolean validForEmbedding;

@Column(name = "created_at", nullable = false)
private LocalDateTime createdAt;

public static MockQuestionCorpus create(
String sourceQuestionId,
String sourceAnalysisId,
Expand Down Expand Up @@ -105,7 +101,6 @@ public static MockQuestionCorpus create(
.questionText(questionText)
.embeddingText(embeddingText)
.validForEmbedding(validForEmbedding)
.createdAt(LocalDateTime.now())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ public CorpusImportResult importFromXlsx(Path xlsxPath) throws IOException {
}
}

public CorpusImportResult importFromXlsx(InputStream inputStream) throws IOException {
try (InputStream managedInputStream = inputStream;
Workbook workbook = new XSSFWorkbook(managedInputStream)) {
return importWorkbook(workbook);
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}

public CorpusImportResult importWorkbook(Workbook workbook) {
DataFormatter formatter = new DataFormatter();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.jobdri.jobdri_api.domain.skill.entity.Skill;
import com.jobdri.jobdri_api.domain.user.entity.User;
import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

Expand All @@ -15,7 +16,7 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(access = AccessLevel.PRIVATE)
@Table(name = "experiences")
public class Experience {
public class Experience extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.jobdri.jobdri_api.domain.company.entity.Company;
import com.jobdri.jobdri_api.domain.mockapply.entity.MockApply;
import com.jobdri.jobdri_api.domain.user.entity.User;
import com.jobdri.jobdri_api.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

Expand All @@ -16,7 +17,7 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(access = AccessLevel.PRIVATE)
@Table(name = "job_postings")
public class JobPosting {
public class JobPosting extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Loading
Loading