diff --git a/src/main/java/com/bootsignal/domain/course/entity/Course.java b/src/main/java/com/bootsignal/domain/course/entity/Course.java new file mode 100644 index 0000000..6e92dad --- /dev/null +++ b/src/main/java/com/bootsignal/domain/course/entity/Course.java @@ -0,0 +1,75 @@ +package com.bootsignal.domain.course.entity; + +import com.bootsignal.domain.institution.entity.Institution; +import com.bootsignal.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.math.BigDecimal; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Builder +public class Course extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + // 훈련과정 ID / 원본: trprId + @Column(nullable = false, unique = true) + private String trprId; + + // 과정명 / 원본: title + @Column(nullable = false) + private String title; + + // 기관명 / 원본: subtitle + @Column(nullable = false) + private String subTitle; + + // 과정 상세 링크 / 원본: titleLink + @Column(length = 1000) + private String titleLink; + + // 기관 상세 링크 / 원본: subTitleLink + @Column(length = 1000) + private String subTitleLink; + + // NCS 코드 / 원본: ncsCd + private String ncsCd; + + // NCS 명 / 원본: ncsNm + private String ncsName; + + // NCS 여부 / 원본: ncsYn + private String ncsYn; + + // 훈련비 / 원본: courseMan + private BigDecimal courseMan; + + // 실제 훈련비 / 원본: realMan + private BigDecimal realMan; + + // 본인 부담금 / 원본: tgcrGnrlTrneOwepAllt + private BigDecimal selfPaymentAmount; + + // 만족도 점수 / 원본: stdgScor + private BigDecimal stdgScor; + + // 총 훈련일수 / 원본: trDcnt + private Integer totalTrainingDays; + + // 총 훈련시간 / 원본: trtm + private Integer totalTrainingHours; + + // 훈련지역 코드 / 원본: trngAreaCd + private String trngAreaCd; + + // 소속 기관 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "institution_id") + private Institution institution; +} diff --git a/src/main/java/com/bootsignal/domain/course/repository/CourseRepository.java b/src/main/java/com/bootsignal/domain/course/repository/CourseRepository.java new file mode 100644 index 0000000..ef1ee46 --- /dev/null +++ b/src/main/java/com/bootsignal/domain/course/repository/CourseRepository.java @@ -0,0 +1,21 @@ +package com.bootsignal.domain.course.repository; + +import com.bootsignal.domain.course.entity.Course; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; +import java.util.Optional; + +public interface CourseRepository extends JpaRepository { + + Optional findByTrprId(String trprId); + + @Query(""" + select c + from Course c + join c.institution i + where i.institutionName like %:keyword% + """) + List searchByInstitutionName(String keyword); +} diff --git a/src/main/java/com/bootsignal/domain/course_session/entity/CourseSession.java b/src/main/java/com/bootsignal/domain/course_session/entity/CourseSession.java new file mode 100644 index 0000000..cc4691f --- /dev/null +++ b/src/main/java/com/bootsignal/domain/course_session/entity/CourseSession.java @@ -0,0 +1,56 @@ +package com.bootsignal.domain.course_session.entity; + +import com.bootsignal.domain.course.entity.Course; +import com.bootsignal.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Builder +public class CourseSession extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + // 훈련과정 회차 / 원본: trprDegr + private Integer trprDegr; + + // 훈련 시작일 / 원본: traStartDate + private LocalDate traStartDate; + + // 훈련 종료일 / 원본: traEndDate + private LocalDate traEndDate; + + // 정원 / 원본: yardMan + private Integer yardMan; + + // 수강신청 인원 / 원본: regCourseMan + private Integer regCourseMan; + + // 실제 수강인원 / 원본: totParMks + private Integer totParMks; + + // 수료인원 / 원본: finiCnt + private Integer finiCnt; + + // 고용보험 3개월 취업률 / 원본: eiEmplRate3 + private BigDecimal eiEmplRate3; + + // 고용보험 6개월 취업률 / 원본: eiEmplRate6 + private BigDecimal eiEmplRate6; + + // 주말/주중 구분 / 원본: wkendSe + private String wkendSe; + + // 과정 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "course_id") + private Course course; +} diff --git a/src/main/java/com/bootsignal/domain/course_session/repository/CourseSessionRepository.java b/src/main/java/com/bootsignal/domain/course_session/repository/CourseSessionRepository.java new file mode 100644 index 0000000..f5ade1a --- /dev/null +++ b/src/main/java/com/bootsignal/domain/course_session/repository/CourseSessionRepository.java @@ -0,0 +1,11 @@ +package com.bootsignal.domain.course_session.repository; + +import com.bootsignal.domain.course_session.entity.CourseSession; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface CourseSessionRepository extends JpaRepository { + + List findByCourse_Id(Long courseId); +} \ No newline at end of file diff --git a/src/main/java/com/bootsignal/domain/institution/entity/Institution.java b/src/main/java/com/bootsignal/domain/institution/entity/Institution.java new file mode 100644 index 0000000..7871fcc --- /dev/null +++ b/src/main/java/com/bootsignal/domain/institution/entity/Institution.java @@ -0,0 +1,46 @@ +package com.bootsignal.domain.institution.entity; + +import com.bootsignal.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Builder +public class Institution extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + // 훈련기관 코드 / 원본: instCd + @Column(nullable = false, unique = true) + private String instCd; + + // 훈련기관명 / 원본: subTitle + @Column(nullable = false) + private String institutionName; + + // 주소 / 원본: address + private String address; + + // 우편번호 / 원본: zipCd + private String zipCd; + + // 홈페이지 주소 / 원본: hpAddr + private String homepageUrl; + + // 대표 전화번호 / 원본: telNo + private String telNo; + + // 담당자명 / 원본: trprChap + private String managerName; + + // 담당자 전화번호 / 원본: trprChapTel + private String managerTel; + + // 담당자 이메일 / 원본: trprChapEmail + private String managerEmail; +} \ No newline at end of file diff --git a/src/main/java/com/bootsignal/domain/institution/repository/InstitutionRepository.java b/src/main/java/com/bootsignal/domain/institution/repository/InstitutionRepository.java new file mode 100644 index 0000000..ccce25e --- /dev/null +++ b/src/main/java/com/bootsignal/domain/institution/repository/InstitutionRepository.java @@ -0,0 +1,11 @@ +package com.bootsignal.domain.institution.repository; + +import com.bootsignal.domain.institution.entity.Institution; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface InstitutionRepository extends JpaRepository { + + Optional findByInstCd(String instCd); +} diff --git a/src/main/java/com/bootsignal/global/entity/BaseEntity.java b/src/main/java/com/bootsignal/global/entity/BaseEntity.java new file mode 100644 index 0000000..1c27f72 --- /dev/null +++ b/src/main/java/com/bootsignal/global/entity/BaseEntity.java @@ -0,0 +1,24 @@ +package com.bootsignal.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseEntity { + + @CreatedDate + @Column(updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; +} \ No newline at end of file