ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] 경매 프로그램 , 엔티티 설계
    Backend/개발 2021. 7. 28. 01:48
    반응형

    TIL 31일차 , 개인 프로젝트 기록 

    경매 프로그램

    ㅈㄴㄷ 경매프로그램같은거 만들어서 내전 대회 경매때 쓰면 좋을 것 같다.

    스프링부트 웹페이지에서 할 수 있게 한번 연습겸 만들어봐야겠다.

    일단 테스트용으로 원래 프로젝트에 만들진 못할거같아서 예전에 책 따라서 구현하는 레파지토리에 올리고

    나중에 배포하는부분부터 다시 책 따라 해봐야겠다.

    handlebars

    템플릿 엔진은 handlebars로 하고있기때문에 기존에 프로젝트에 추가해주었다.

        // template engine 추가
        implementation 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.2' 
    

    <참고> compile vs implementation

    gradle dependency compile vs implementation

    compile은 gradle 3.0 버전부터 deprecated되었다.

    compile은 의존성 관계에서 참조하고있는 모듈이 변경될경우 의존 관계에 있는 다른 모듈도 모두 recompile하며, 연결된 모듈의 api가 모두 외부로 노출되므로 implementation을 써야한다.

    구현 아이디어 대충 정리

    pariticipant, team 만들고
    리그참가신청페이지에서 참가 받고(수정 가능 or not)
    팀 생성은 어떻게할지 고민중
    경매프로그램은 participants에 있는 대로, 팀장 팀별로 포인트로 뽑아서 실시간으로 진행된다.

    경매방 생성 - return 입장코드
    참가 - 팀장, 사회자, 관전자
    팀장 : 방 입장코드, 팀장 코드 | point 경매 가능
    사회자 : 방 입장 코드, 사회자 시작, 일시 중단, 시간 세팅, 배팅 값 조정 등
    관전자 : 방 입장 코드 | read only

    경매시작 - 시작까지 count down 5초
    시작값 0 , +a 값으로 늘어난다. 배팅후 15초씩 다시 count
    count 0 : 낙찰 / 경매 종료 / 마지막 입력한 point

    실시간 구현 안해봤는데 어떻게해야할지 계속 생각해봐야겠다.

    participants entity

    // ParticipantsEntity 
    @Getter
    @NoArgsConstructor(access = AccessLevel.PROTECTED) // 접근권한 최소화. builder를 통한 생성자 하나만 둠
    @Entity(name="participants")
    public class ParticipantsEntity extends BaseTimeEntity{
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(nullable = false)
        private String summonerName;
    
        @Column(nullable = false)
        private String mainPosition;
    
        private String subPositions;
    
        @Column(nullable = false)
        private String currentTier;
    
        @Column(nullable = false)
        private String highestTier;
    
        private String comment;
    
        private Long point = -100L;
    
        @Builder // 생성 시점에 안전하게 객체 생성 가능. 이후에 값 변경은 메서드 이용
        public ParticipantsEntity(String summonerName, String mainPosition, String subPositions, String currentTier, String highestTier, String comment, Long point) {
            this.summonerName = summonerName;
            this.mainPosition = mainPosition;
            this.subPositions = subPositions;
            this.currentTier = currentTier;
            this.highestTier = highestTier;
            this.comment = comment;
            this.point = point;
        }
    }
    

    point를 만드는게 나은지 ,dto로만 해야할지 // 유찰, 아직 경매안함, 경매포인트, 0점의 구분을 어떻게할지 아직 모르겠다.

    @Builder

    생성자를 통해 최종 값을 채운 후 DB에 삽입. 값 변경이 필요한 경우 해당 이벤트에 맞는 public 메소드를 호출하여 변경하는 것을 전제로함.

    생성자 대신 @Builder를 통해 제공되는 빌더 클래스를 사용하는데 생성 시점에 값을 채워주는 역할은 같지만 생성자의 경우 지금채워야할 필드가 무엇인지 정확히 지정할 수 없음

    빌더 ⇒ 어느 필드에 어느 값을 채워야 할지 명확하게 인지 가능

    Entity 클래스에 어노테이션

    @Getter

    @NoArgsConstructor // 접근권한 최소화. builder를 통한 생성자 하나만 둠

    @Entity // class이름따라서 -> table에 name이 없고 entity에 name이 지정될경우 entity의 name을 table에서도 따름

    Table

    • database와 매핑

    Entity

    • jpa를 사용해서 매핑할 클래스는 반드시 붙여야한다
    • 기본생성자가 필수
    • 필드에 final 사용 불가

    그래서 table에 특별한 설정을 안하는 경우 entity만 만들어주면 될 것 같아서 이 3개의 어노테이션만 설정하면 되는 것 같다.

    먼저 구현해야될 기능이 생겨서 잠시 프로젝트 구조만 만들어놓고 중단해야겠다 ,, 다음주에 다시 !!

    댓글

Designed by Tistory.