Skip to content

Commit

Permalink
feat: Add Entity (#17)
Browse files Browse the repository at this point in the history
* feat: Add Entity

* feat: ShortMatch 수정

* feat: Add Attribute Type Convertor

MatchType, MatchResult, SnsType 에 대한 각각 Enum 값을 DB에 String으로 저장하기 위해 보다
효율이 좋다는 Convertor 사용 하는 방식을 적용

* feat: Fix jpa table name match to game

match가 mysql 예약어라 발생하는 문제로 인해 모든 테이블에서 match 단어를 game으로 변경하여 오해를 줄입니다.

추가로 join 관계에 대해 다른 방안을 만들기 위해서 일단 id 를 들고있을 수 있도록 변경합니다

* feat: Delete unused Test File

* feat: Create UserRepository

* feat: Create UserRepository Test

유저 정보 저장시 sns 정보를 통해 만들어지는지 테스트

* feat: Update Config

* feat: Add QueryDsl Setting

복잡한 join 관계에 대해서 query 사용을 위한 dsl 추가

* feat: Add User jpa update method

* feat: Test user nickname update

유저의 닉네임을 수정할 수 있다.
유저의 닉네임은 10자를 넘을 수 없다.

* feat: Fix Jpa Join Column

jpa 연관 관계 매핑하여 수정

Co-authored-by: jiyeon <[email protected]>
Co-authored-by: 이빵주 <[email protected]>

* build: Fix QueryDsl Setting

* ci: Fix Build task command

---------

Co-authored-by: jinsu4755 <[email protected]>
Co-authored-by: jiyeon <[email protected]>
Co-authored-by: 이빵주 <[email protected]>
  • Loading branch information
4 people authored Jul 7, 2023
1 parent e31c1a0 commit e36015f
Show file tree
Hide file tree
Showing 25 changed files with 762 additions and 20 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/pr_checker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
run: ./gradlew checkstyleMain checkstyleTest

- name: Build with Gradle
run: ./gradlew build
run: ./gradlew clean build

- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v1
Expand Down
15 changes: 13 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ dependencies {

implementation 'org.springframework.boot:spring-boot-starter-security'

//implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

// sentry dependency
implementation 'io.sentry:sentry-spring-boot-starter:6.23.0'
Expand All @@ -59,7 +59,13 @@ dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

//runtimeOnly 'com.mysql:mysql-connector-j'
def queryDslVersion = "5.0.0"
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jpa"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"

runtimeOnly 'com.mysql:mysql-connector-j'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
Expand Down Expand Up @@ -104,3 +110,8 @@ sentry {
projectName = "java-spring-boot"
authToken = sentryProperties.getProperty("sentry-auth-token")
}

def querydslDir = "$buildDir/generated/sources/annotationProcessor"
sourceSets {
main.java.srcDir querydslDir
}
7 changes: 3 additions & 4 deletions src/main/java/com/universe/uni/UniApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
@SpringBootApplication
public class UniApplication {

public static void main(String[] args) {
SpringApplication.run(UniApplication.class, args);
}

public static void main(String[] args) {
SpringApplication.run(UniApplication.class, args);
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/universe/uni/config/QueryDslConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.universe.uni.config;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.querydsl.jpa.impl.JPAQueryFactory;


@Configuration
public class QueryDslConfig {
@PersistenceContext
private EntityManager entityManager;

@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/universe/uni/domain/GameResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.universe.uni.domain;

import java.util.Arrays;
import java.util.Objects;

public enum GameResult {
WIN, LOSE, DRAW;

public static GameResult findMatchResultBy(String gameResultName) {
return Arrays.stream(values())
.filter(gameResult -> Objects.equals(gameResult.name(),gameResultName))
.findFirst()
.orElseThrow(()->new IllegalArgumentException("Unsupported match result type"));
}
}
16 changes: 16 additions & 0 deletions src/main/java/com/universe/uni/domain/GameType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.universe.uni.domain;

import java.util.Arrays;
import java.util.Objects;

public enum GameType {
SHORT,
LONG;

public static GameType findMatchTypeBy(String gameTypeName) {
return Arrays.stream(values())
.filter(gameType -> Objects.equals(gameType.name(), gameTypeName))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("Unsupported match type" + gameTypeName));
}
}
17 changes: 17 additions & 0 deletions src/main/java/com/universe/uni/domain/SnsType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.universe.uni.domain;

import java.util.Arrays;
import java.util.Objects;

public enum SnsType {
KAKAO,
GOOGLE,
APPLE;

public static SnsType findSnsTypeBy(String snsTypeName) {
return Arrays.stream(values())
.filter(snsType -> Objects.equals(snsType.name(), snsTypeName))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("Unsupported social login type: " + snsTypeName));
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/universe/uni/domain/entity/Couple.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.universe.uni.domain.entity;

import java.time.LocalDate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.ColumnDefault;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Entity
@Table(name = "couple")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Couple {

@Id
@Column(name = "couple_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "start_date", nullable = false)
private LocalDate startDate;

@Column(name = "invite_code", nullable = false)
private String inviteCode;

@Column(name = "heart_token", nullable = false)
@ColumnDefault("5")
private int heartToken;
}
43 changes: 43 additions & 0 deletions src/main/java/com/universe/uni/domain/entity/Game.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.universe.uni.domain.entity;

import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@Table(name = "game")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public class Game {

@Id
@Column(name = "game_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "couple_id")
private Couple couple;

@Column(name = "enable", nullable = false)
private Boolean enable;

@Column(name = "finish_at")
private LocalDateTime finishAt;
}
27 changes: 27 additions & 0 deletions src/main/java/com/universe/uni/domain/entity/LongGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.universe.uni.domain.entity;

import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@DiscriminatorValue("LongGame")
@PrimaryKeyJoinColumn(name = "game_id")
public class LongGame extends Game {

@Column(name = "duration", nullable = false)
private int duration;

@Column(name = "round", nullable = false)
private int round;

@Column(name = "rest_of_game", nullable = false)
private int restOfGame;
}
37 changes: 37 additions & 0 deletions src/main/java/com/universe/uni/domain/entity/MissionCategory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.universe.uni.domain.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "mission_category")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MissionCategory {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mission_category_id", nullable = false)
private Long id;

@Column(name = "title", nullable = false)
private String title;

@Column(name = "description", nullable = false)
private String description;

@Column(name = "tip", nullable = false)
private String tip;

@Column(name = "image", nullable = false)
private String image;

@Column(name = "lever", nullable = false)
private int level;
}
37 changes: 37 additions & 0 deletions src/main/java/com/universe/uni/domain/entity/MissionContent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.universe.uni.domain.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@Table(name = "mission_content")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MissionContent {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mission_content_id", nullable = false)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "mission_category_id")
private MissionCategory missionCategory;

@Column(name = "content", nullable = false)
private String content;

@Column(name = "image", nullable = false)
private String image;
}
38 changes: 38 additions & 0 deletions src/main/java/com/universe/uni/domain/entity/RoundGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.universe.uni.domain.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Entity
@Table(name = "round_game")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class RoundGame {

@Id
@Column(name = "round_game_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "game_id", nullable = false)
private Game game;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "mission_category_id", nullable = false)
private MissionCategory missionCategory;

@Column(name = "enable", nullable = false)
private Boolean enable;
}
Loading

0 comments on commit e36015f

Please sign in to comment.