-
[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개의 어노테이션만 설정하면 되는 것 같다.
먼저 구현해야될 기능이 생겨서 잠시 프로젝트 구조만 만들어놓고 중단해야겠다 ,, 다음주에 다시 !!
'Backend > 개발' 카테고리의 다른 글
[Spring Boot] 프로젝트 gradle 버전 변경 , h2 (2) 2021.08.03 [Spring Boot] 참가자 등록 구현, DTO (0) 2021.08.02 [Spring Boot] spread sheet 연동하기 2 (0) 2021.07.23 [Spring Boot] spread sheet 연동하기 (3) 2021.07.21 [Java] 우선순위 큐, Comparable vs Comparator (2) 2021.07.14