From 2c1fa901c65e8249c88b63b4f10e30628b0972ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=90=ED=99=8D=EC=84=9D?= <78216059+bayy1216@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:46:25 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[Feat]:=20=EC=97=94=ED=84=B0=ED=8B=B0=20NOT?= =?UTF-8?q?=20NULL,=20UNIQUE=20=EC=A0=9C=EC=95=BD=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#17)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/challengegroup/ChallengeGroup.java | 5 ++ .../challengegroup/challenge/Challenge.java | 20 ++--- .../image/ChallengeGroupImage.java | 13 +-- .../review/ChallengeReview.java | 15 ++-- .../userchallenge/UserChallenge.java | 9 +- .../userexp/ChallengeGroupUserExp.java | 9 +- .../verification/ChallengeVerification.java | 6 +- .../org/haedal/zzansuni/domain/user/User.java | 1 + .../zzansuni/global/api/SwaggerConfig.java | 8 -- .../app/src/main/resources/application.yml | 4 +- .../main/resources/db/migration/V1__init.sql | 84 +++++++++---------- 11 files changed, 84 insertions(+), 90 deletions(-) diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java index 0757e44..09581d1 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java @@ -24,14 +24,19 @@ public class ChallengeGroup extends BaseTimeEntity { private Long id; @Enumerated(EnumType.STRING) + @Column(nullable = false) private ChallengeCategory category; + @Column(nullable = false) private String title; + @Column(nullable = false) private String content; + @Column(nullable = false) private String guide; + @Column(nullable = false) private Integer cumulativeCount; @OneToMany(mappedBy = "challengeGroup", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/Challenge.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/Challenge.java index ed0c203..31b11cc 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/Challenge.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/Challenge.java @@ -1,14 +1,7 @@ package org.haedal.zzansuni.domain.challengegroup.challenge; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; + import java.time.LocalDate; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -31,23 +24,30 @@ public class Challenge extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "challenge_group_id") private ChallengeGroup challengeGroup; + @Column(nullable = false) private Integer requiredCount; @Enumerated(EnumType.STRING) + @Column(nullable = false) private DayType dayType; + @Column(nullable = false) private Integer onceExp; + @Column(nullable = false) private Integer successExp; + @Column(nullable = false) private Integer difficulty; + @Column(nullable = false) private LocalDate startDate; + @Column(nullable = false) private LocalDate endDate; diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/image/ChallengeGroupImage.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/image/ChallengeGroupImage.java index c54e53d..377ab35 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/image/ChallengeGroupImage.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/image/ChallengeGroupImage.java @@ -1,12 +1,6 @@ package org.haedal.zzansuni.domain.challengegroup.image; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -26,10 +20,11 @@ public class ChallengeGroupImage extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(nullable = false) private String imageUrl; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "challenge_group_id") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "challenge_group_id", nullable = false) private ChallengeGroup challengeGroup; } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/review/ChallengeReview.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/review/ChallengeReview.java index 47d7fdf..1cef70b 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/review/ChallengeReview.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/review/ChallengeReview.java @@ -1,12 +1,6 @@ package org.haedal.zzansuni.domain.challengegroup.review; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -27,15 +21,18 @@ public class ChallengeReview extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_challenge_id") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_challenge_id", nullable = false) private UserChallenge userChallenge; + @Column(nullable = false) private String content; + @Column(nullable = false) private Integer rating; // 쿼리 성능을 위해 비정규화 + @Column(nullable = false) private Long challengeGroupId; public static ChallengeReview create(UserChallenge userChallenge, diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java index 1306d1f..8fd7426 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java @@ -30,15 +30,16 @@ public class UserChallenge extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "challenge_id") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "challenge_id", nullable = false) private Challenge challenge; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_id", nullable = false) private User user; @Enumerated(EnumType.STRING) + @Column(nullable = false) private ChallengeStatus status; @OneToMany(mappedBy = "userChallenge", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java index 8879603..12fc64e 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java @@ -14,14 +14,15 @@ public class ChallengeGroupUserExp { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "challenge_group_id") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "challenge_group_id", nullable = false) private ChallengeGroup challengeGroup; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_id", nullable = false) private User user; + @Column(nullable = false) private Integer totalExp; public static ChallengeGroupUserExp create(ChallengeGroup challengeGroup, User user) { diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/verification/ChallengeVerification.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/verification/ChallengeVerification.java index 10f1506..a04626a 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/verification/ChallengeVerification.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/verification/ChallengeVerification.java @@ -18,15 +18,17 @@ public class ChallengeVerification extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_challenge_id") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_challenge_id", nullable = false) private UserChallenge userChallenge; private String imageUrl; + @Column(nullable = false) private String content; @Enumerated(EnumType.STRING) + @Column(nullable = false) private ChallengeVerificationStatus status; public static ChallengeVerification create(ChallengeCommand.VerificationCreate command, UserChallenge userChallenge) { diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/user/User.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/user/User.java index 1868219..cec1df8 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/user/User.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/user/User.java @@ -25,6 +25,7 @@ public class User extends BaseTimeEntity { @Column(nullable = false) private Role role; + @Column(unique = true) private String email; private String password; diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/global/api/SwaggerConfig.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/global/api/SwaggerConfig.java index edee853..548a1a9 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/global/api/SwaggerConfig.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/global/api/SwaggerConfig.java @@ -1,7 +1,5 @@ package org.haedal.zzansuni.global.api; -import io.swagger.v3.oas.annotations.OpenAPIDefinition; -import io.swagger.v3.oas.annotations.servers.Server; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; @@ -10,12 +8,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -@OpenAPIDefinition( - servers = { - @Server(url = "https://api.reditus.site",description = "Prod Server"), - @Server(url = "http://localhost:8080", description = "localhost"), - } -) @Configuration public class SwaggerConfig { private static final String BEARER_KEY = "bearer-key"; diff --git a/zzansuni-api-server/app/src/main/resources/application.yml b/zzansuni-api-server/app/src/main/resources/application.yml index 453985d..bcf692a 100644 --- a/zzansuni-api-server/app/src/main/resources/application.yml +++ b/zzansuni-api-server/app/src/main/resources/application.yml @@ -57,7 +57,7 @@ spring: h2.console.enabled: false flyway: enabled: true - baseline-on-migrate: true # Flyway가 초기화되지 않은 데이터베이스에 마이그레이션을 적용할 때 초기 버전으로 마이그레이션 파일을 적용할지 여부 + baseline-on-migrate: false # Flyway가 초기화되지 않은 데이터베이스에 마이그레이션을 적용할 때 초기 버전으로 마이그레이션 파일을 적용할지 여부 fail-on-missing-locations: true # 스크립트 파일을 저장하는 위치를 못 찾을때 실패할지 여부 baseline-version: 1 # Flyway가 초기화되지 않은 데이터베이스에 마이그레이션을 적용할 때 버전을 설정 kakao: @@ -70,7 +70,7 @@ spring: # dev profile activate: on-profile: dev datasource: - url: jdbc:mysql://localhost:3306/zzansuni + url: jdbc:mysql://localhost:3306/zzansuni?createDatabaseIfNotExist=true username: "root" password: "root" jpa: diff --git a/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql b/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql index 6491813..3c75ce1 100644 --- a/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql +++ b/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql @@ -2,10 +2,10 @@ CREATE TABLE users ( id BIGINT NOT NULL AUTO_INCREMENT, exp INTEGER NOT NULL, - created_at DATETIME(6), - last_modified_at DATETIME(6), + created_at DATETIME(6) NOT NULL, + last_modified_at DATETIME(6) NOT NULL, auth_token VARCHAR(255), - email VARCHAR(255), + email VARCHAR(255) UNIQUE, nickname VARCHAR(255) NOT NULL, password VARCHAR(255), profile_image_url VARCHAR(255), @@ -17,29 +17,29 @@ CREATE TABLE users CREATE TABLE challenge_group ( id BIGINT NOT NULL AUTO_INCREMENT, - cumulative_count INTEGER, - created_at DATETIME(6), - last_modified_at DATETIME(6), - content VARCHAR(255), - guide VARCHAR(255), - title VARCHAR(255), - category ENUM('ECHO', 'ETC', 'HEALTH', 'SHARE', 'VOLUNTEER'), + cumulative_count INTEGER NOT NULL, + created_at DATETIME(6) NOT NULL, + last_modified_at DATETIME(6) NOT NULL, + content VARCHAR(255) NOT NULL, + guide VARCHAR(255) NOT NULL, + title VARCHAR(255) NOT NULL, + category ENUM('ECHO', 'ETC', 'HEALTH', 'SHARE', 'VOLUNTEER') NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB; CREATE TABLE challenge ( id BIGINT NOT NULL AUTO_INCREMENT, - difficulty INTEGER, - end_date DATE, - once_exp INTEGER, - required_count INTEGER, - start_date DATE, - success_exp INTEGER, - challenge_group_id BIGINT, - created_at DATETIME(6), - last_modified_at DATETIME(6), - day_type ENUM('DAY', 'MONTH', 'WEEK', 'YEAR'), + difficulty INTEGER NOT NULL, + end_date DATE NOT NULL, + once_exp INTEGER NOT NULL, + required_count INTEGER NOT NULL, + start_date DATE NOT NULL, + success_exp INTEGER NOT NULL, + challenge_group_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + last_modified_at DATETIME(6) NOT NULL, + day_type ENUM('DAY', 'MONTH', 'WEEK', 'YEAR') NOT NULL, PRIMARY KEY (id), CONSTRAINT FK_challenge_challenge_group FOREIGN KEY (challenge_group_id) REFERENCES challenge_group (id) ) ENGINE=InnoDB; @@ -47,10 +47,10 @@ CREATE TABLE challenge CREATE TABLE challenge_group_image ( id BIGINT NOT NULL AUTO_INCREMENT, - challenge_group_id BIGINT, - created_at DATETIME(6), - last_modified_at DATETIME(6), - image_url VARCHAR(255), + challenge_group_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + last_modified_at DATETIME(6) NOT NULL, + image_url VARCHAR(255) NOT NULL, PRIMARY KEY (id), CONSTRAINT FK_challenge_group_image_challenge_group FOREIGN KEY (challenge_group_id) REFERENCES challenge_group (id) ) ENGINE=InnoDB; @@ -58,9 +58,9 @@ CREATE TABLE challenge_group_image CREATE TABLE challenge_group_user_exp ( id BIGINT NOT NULL AUTO_INCREMENT, - total_exp INTEGER, - challenge_group_id BIGINT, - user_id BIGINT, + total_exp INTEGER NOT NULL, + challenge_group_id BIGINT NOT NULL, + user_id BIGINT NOT NULL, PRIMARY KEY (id), CONSTRAINT FK_challenge_group_user_exp_challenge_group FOREIGN KEY (challenge_group_id) REFERENCES challenge_group (id), CONSTRAINT FK_challenge_group_user_exp_users FOREIGN KEY (user_id) REFERENCES users (id) @@ -69,11 +69,11 @@ CREATE TABLE challenge_group_user_exp CREATE TABLE user_challenge ( id BIGINT NOT NULL AUTO_INCREMENT, - challenge_id BIGINT, - created_at DATETIME(6), - last_modified_at DATETIME(6), - user_id BIGINT, - status ENUM('FAIL', 'PROCEEDING', 'SUCCESS'), + challenge_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + last_modified_at DATETIME(6) NOT NULL, + user_id BIGINT NOT NULL, + status ENUM('FAIL', 'PROCEEDING', 'SUCCESS') NOT NULL, PRIMARY KEY (id), CONSTRAINT FK_user_challenge_challenge FOREIGN KEY (challenge_id) REFERENCES challenge (id), CONSTRAINT FK_user_challenge_users FOREIGN KEY (user_id) REFERENCES users (id) @@ -82,12 +82,12 @@ CREATE TABLE user_challenge CREATE TABLE challenge_review ( id BIGINT NOT NULL AUTO_INCREMENT, - rating INTEGER, - challenge_group_id BIGINT, - created_at DATETIME(6), - last_modified_at DATETIME(6), - user_challenge_id BIGINT, - content VARCHAR(255), + rating INTEGER NOT NULL, + challenge_group_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + last_modified_at DATETIME(6) NOT NULL, + user_challenge_id BIGINT NOT NULL, + content VARCHAR(255) NOT NULL, PRIMARY KEY (id), CONSTRAINT FK_challenge_review_user_challenge FOREIGN KEY (user_challenge_id) REFERENCES user_challenge (id) ) ENGINE=InnoDB; @@ -95,10 +95,10 @@ CREATE TABLE challenge_review CREATE TABLE challenge_verification ( id BIGINT NOT NULL AUTO_INCREMENT, - created_at DATETIME(6), - last_modified_at DATETIME(6), - user_challenge_id BIGINT, - content VARCHAR(255), + created_at DATETIME(6) NOT NULL, + last_modified_at DATETIME(6) NOT NULL, + user_challenge_id BIGINT NOT NULL, + content VARCHAR(255) NOT NULL, image_url VARCHAR(255), status ENUM('APPROVED', 'REJECTED', 'WAITING'), PRIMARY KEY (id), From 6dfa83aa03ef2895d498890b4ecedaec6e73e6e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=90=ED=99=8D=EC=84=9D?= <78216059+bayy1216@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:03:45 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[Feat]:=20N:M=20=EC=A4=91=EA=B0=84=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=20UNIQUE=20=EC=A0=9C=EC=95=BD=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=94=EA=B0=80=20(#17)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../challengegroup/userchallenge/UserChallenge.java | 8 ++++++++ .../challengegroup/userexp/ChallengeGroupUserExp.java | 8 ++++++++ .../app/src/main/resources/db/migration/V1__init.sql | 2 ++ 3 files changed, 18 insertions(+) diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java index 8fd7426..77c5ace 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java @@ -24,6 +24,14 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Builder +@Table( + uniqueConstraints = { + @UniqueConstraint( + name = "user_challenge_unique", + columnNames = {"challenge_id", "user_id"} + ) + } +) public class UserChallenge extends BaseTimeEntity { @Id diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java index 12fc64e..86554d9 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userexp/ChallengeGroupUserExp.java @@ -10,6 +10,14 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Builder +@Table( + uniqueConstraints = { + @UniqueConstraint( + name = "challenge_group_user_exp_unique", + columnNames = {"challenge_group_id", "user_id"} + ) + } +) public class ChallengeGroupUserExp { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; diff --git a/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql b/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql index 3c75ce1..ad430af 100644 --- a/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql +++ b/zzansuni-api-server/app/src/main/resources/db/migration/V1__init.sql @@ -62,6 +62,7 @@ CREATE TABLE challenge_group_user_exp challenge_group_id BIGINT NOT NULL, user_id BIGINT NOT NULL, PRIMARY KEY (id), + CONSTRAINT UK_challenge_group_user_exp_challenge_group_user UNIQUE (challenge_group_id, user_id), CONSTRAINT FK_challenge_group_user_exp_challenge_group FOREIGN KEY (challenge_group_id) REFERENCES challenge_group (id), CONSTRAINT FK_challenge_group_user_exp_users FOREIGN KEY (user_id) REFERENCES users (id) ) ENGINE=InnoDB; @@ -75,6 +76,7 @@ CREATE TABLE user_challenge user_id BIGINT NOT NULL, status ENUM('FAIL', 'PROCEEDING', 'SUCCESS') NOT NULL, PRIMARY KEY (id), + CONSTRAINT UK_user_challenge_challenge_user UNIQUE (challenge_id, user_id), CONSTRAINT FK_user_challenge_challenge FOREIGN KEY (challenge_id) REFERENCES challenge (id), CONSTRAINT FK_user_challenge_users FOREIGN KEY (user_id) REFERENCES users (id) ) ENGINE=InnoDB;