Skip to content

Commit

Permalink
feat: 기본 도메인들을 생성한다 (#132)
Browse files Browse the repository at this point in the history
* feat: 기본 예외 작성 (#131)

* feat: BaseEntity 작성 (#131)

* feat: Celeb 도메인 작성 (#130)

* feat: Restaurant 도메인 작성 (#130)

* feat: RestaurantImage 도메인 작성 (#130)

* feat: Video 도메인 작성 (#130)

* style: polishing (#130)

---------

Co-authored-by: shin-mallang <[email protected]>
Co-authored-by: TaeyeonRoyce <[email protected]>
Co-authored-by: odo27 <[email protected]>
  • Loading branch information
4 people authored Jul 18, 2023
1 parent 753dbb1 commit dc62719
Show file tree
Hide file tree
Showing 15 changed files with 335 additions and 0 deletions.
38 changes: 38 additions & 0 deletions backend/src/main/java/com/celuveat/celeb/domain/Celeb.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.celuveat.celeb.domain;

import static lombok.AccessLevel.PROTECTED;

import com.celuveat.common.domain.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
public class Celeb extends BaseEntity {

@Column(nullable = false)
private String name;

@Column(nullable = false, unique = true)
private String youtubeChannelName;

@Column(nullable = false)
private String profileImageUrl;

public String name() {
return name;
}

public String youtubeChannelName() {
return youtubeChannelName;
}

public String profileImageUrl() {
return profileImageUrl;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.celuveat.celeb.domain;

import org.springframework.data.jpa.repository.JpaRepository;

public interface CelebRepository extends JpaRepository<Celeb, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.celuveat.common.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
30 changes: 30 additions & 0 deletions backend/src/main/java/com/celuveat/common/domain/BaseEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.celuveat.common.domain;

import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import java.time.LocalDateTime;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@CreatedDate
private LocalDateTime createdDate;

public Long id() {
return id;
}

public LocalDateTime createdDate() {
return createdDate;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.celuveat.common.exception;

public abstract class BaseException extends RuntimeException {

public BaseException() {
}

public abstract BaseExceptionType exceptionType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.celuveat.common.exception;

import org.springframework.http.HttpStatus;

public interface BaseExceptionType {

HttpStatus httpStatus();

String errorMessage();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.celuveat.common.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ExceptionControllerAdvice {

private final Logger log = LoggerFactory.getLogger(getClass());

@ExceptionHandler(BaseException.class)
ResponseEntity<ExceptionResponse> handleException(BaseException e) {
BaseExceptionType type = e.exceptionType();
log.warn("[WARN] 잘못된 요청이 들어왔습니다. 내용 -> {}", type.errorMessage());
return new ResponseEntity<>(
new ExceptionResponse(type.errorMessage()),
type.httpStatus());
}

@ExceptionHandler(Exception.class)
ResponseEntity<ExceptionResponse> handleException(Exception e) {
log.error("[ERROR] 예상하지 못한 예외가 발생했습니다.", e);
return ResponseEntity.internalServerError()
.body(new ExceptionResponse("알 수 없는 오류가 발생했습니다."));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.celuveat.common.exception;

public record ExceptionResponse(
String message
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.celuveat.restaurant.domain;

import static lombok.AccessLevel.PROTECTED;

import com.celuveat.common.domain.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
public class Restaurant extends BaseEntity {

@Column(nullable = false)
private String name;

@Column(nullable = false)
private String roadAddress;

@Column(nullable = false)
private String category;

@Column(nullable = false)
private String latitude;

@Column(nullable = false)
private String longitude;

private String phoneNumber;

@Column(nullable = false)
private String naverMapUrl;

public String name() {
return name;
}

public String roadAddress() {
return roadAddress;
}

public String category() {
return category;
}

public String latitude() {
return latitude;
}

public String longitude() {
return longitude;
}

public String phoneNumber() {
return phoneNumber;
}

public String naverMapUrl() {
return naverMapUrl;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.celuveat.restaurant.domain;

import static jakarta.persistence.EnumType.*;
import static jakarta.persistence.FetchType.*;
import static lombok.AccessLevel.PROTECTED;

import com.celuveat.common.domain.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
public class RestaurantImage extends BaseEntity {

@Column(nullable = false)
private String name;

@Column(nullable = false)
private String author;

@Column(nullable = false)
@Enumerated(STRING)
private SocialMedia socialMedia;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "restaurant_id")
private Restaurant restaurant;

public String name() {
return name;
}

public String author() {
return author;
}

public SocialMedia socialMedia() {
return socialMedia;
}

public Restaurant restaurant() {
return restaurant;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.celuveat.restaurant.domain;

import org.springframework.data.jpa.repository.JpaRepository;

public interface RestaurantImageRepository extends JpaRepository<RestaurantImage, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.celuveat.restaurant.domain;

import org.springframework.data.jpa.repository.JpaRepository;

public interface RestaurantRepository extends JpaRepository<Restaurant, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.celuveat.restaurant.domain;

public enum SocialMedia {

YOUTUBE,
INSTAGRAM,
;
}
53 changes: 53 additions & 0 deletions backend/src/main/java/com/celuveat/video/domain/Video.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.celuveat.video.domain;

import static jakarta.persistence.FetchType.LAZY;
import static lombok.AccessLevel.PROTECTED;

import com.celuveat.celeb.domain.Celeb;
import com.celuveat.common.domain.BaseEntity;
import com.celuveat.restaurant.domain.Restaurant;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
public class Video extends BaseEntity {

@Column(nullable = false)
private String youtubeUrl;

@Column(nullable = false)
private LocalDate uploadDate;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "celeb_id")
private Celeb celeb;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "restaurant_id")
private Restaurant restaurant;

public String youtubeUrl() {
return youtubeUrl;
}

public LocalDate uploadDate() {
return uploadDate;
}

public Celeb celeb() {
return celeb;
}

public Restaurant restaurant() {
return restaurant;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.celuveat.video.domain;

import org.springframework.data.jpa.repository.JpaRepository;

public interface VideoRepository extends JpaRepository<Video, Long> {
}

0 comments on commit dc62719

Please sign in to comment.