diff --git a/.gradle/8.0/checksums/checksums.lock b/.gradle/8.0/checksums/checksums.lock deleted file mode 100644 index c5d70e5..0000000 Binary files a/.gradle/8.0/checksums/checksums.lock and /dev/null differ diff --git a/.gradle/8.0/checksums/md5-checksums.bin b/.gradle/8.0/checksums/md5-checksums.bin deleted file mode 100644 index 11062ac..0000000 Binary files a/.gradle/8.0/checksums/md5-checksums.bin and /dev/null differ diff --git a/.gradle/8.0/checksums/sha1-checksums.bin b/.gradle/8.0/checksums/sha1-checksums.bin deleted file mode 100644 index 7474198..0000000 Binary files a/.gradle/8.0/checksums/sha1-checksums.bin and /dev/null differ diff --git a/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock deleted file mode 100644 index 2d49be0..0000000 Binary files a/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock and /dev/null differ diff --git a/.gradle/8.0/dependencies-accessors/gc.properties b/.gradle/8.0/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/8.0/executionHistory/executionHistory.bin b/.gradle/8.0/executionHistory/executionHistory.bin deleted file mode 100644 index 1f1eb68..0000000 Binary files a/.gradle/8.0/executionHistory/executionHistory.bin and /dev/null differ diff --git a/.gradle/8.0/executionHistory/executionHistory.lock b/.gradle/8.0/executionHistory/executionHistory.lock deleted file mode 100644 index e924805..0000000 Binary files a/.gradle/8.0/executionHistory/executionHistory.lock and /dev/null differ diff --git a/.gradle/8.0/fileChanges/last-build.bin b/.gradle/8.0/fileChanges/last-build.bin deleted file mode 100644 index f76dd23..0000000 Binary files a/.gradle/8.0/fileChanges/last-build.bin and /dev/null differ diff --git a/.gradle/8.0/fileHashes/fileHashes.bin b/.gradle/8.0/fileHashes/fileHashes.bin deleted file mode 100644 index acaa53b..0000000 Binary files a/.gradle/8.0/fileHashes/fileHashes.bin and /dev/null differ diff --git a/.gradle/8.0/fileHashes/fileHashes.lock b/.gradle/8.0/fileHashes/fileHashes.lock deleted file mode 100644 index 9256141..0000000 Binary files a/.gradle/8.0/fileHashes/fileHashes.lock and /dev/null differ diff --git a/.gradle/8.0/fileHashes/resourceHashesCache.bin b/.gradle/8.0/fileHashes/resourceHashesCache.bin deleted file mode 100644 index d06b27c..0000000 Binary files a/.gradle/8.0/fileHashes/resourceHashesCache.bin and /dev/null differ diff --git a/.gradle/8.0/gc.properties b/.gradle/8.0/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/8.10.2/checksums/checksums.lock b/.gradle/8.10.2/checksums/checksums.lock index 27d9248..334ca6b 100644 Binary files a/.gradle/8.10.2/checksums/checksums.lock and b/.gradle/8.10.2/checksums/checksums.lock differ diff --git a/.gradle/8.10.2/checksums/md5-checksums.bin b/.gradle/8.10.2/checksums/md5-checksums.bin index a99b77a..0175bf7 100644 Binary files a/.gradle/8.10.2/checksums/md5-checksums.bin and b/.gradle/8.10.2/checksums/md5-checksums.bin differ diff --git a/.gradle/8.10.2/checksums/sha1-checksums.bin b/.gradle/8.10.2/checksums/sha1-checksums.bin index ff2c426..1552b93 100644 Binary files a/.gradle/8.10.2/checksums/sha1-checksums.bin and b/.gradle/8.10.2/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock index 5b51efe..4e005a5 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.lock and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ diff --git a/build.gradle b/build.gradle index ae3f8d5..128560f 100644 --- a/build.gradle +++ b/build.gradle @@ -56,6 +56,16 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6:3.1.1.RELEASE' + + implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-security' + testImplementation 'org.springframework.security:spring-security-test' } sourceSets { diff --git a/src/main/generated/umc/spring/domain/QFoodCategory.java b/src/main/generated/umc/spring/domain/QFoodCategory.java new file mode 100644 index 0000000..1667676 --- /dev/null +++ b/src/main/generated/umc/spring/domain/QFoodCategory.java @@ -0,0 +1,50 @@ +package umc.spring.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QFoodCategory is a Querydsl query type for FoodCategory + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QFoodCategory extends EntityPathBase { + + private static final long serialVersionUID = -811463128L; + + public static final QFoodCategory foodCategory = new QFoodCategory("foodCategory"); + + public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath memberPreferList = this.createList("memberPreferList", umc.spring.domain.mapping.MemberPrefer.class, umc.spring.domain.mapping.QMemberPrefer.class, PathInits.DIRECT2); + + public final StringPath name = createString("name"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QFoodCategory(String variable) { + super(FoodCategory.class, forVariable(variable)); + } + + public QFoodCategory(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QFoodCategory(PathMetadata metadata) { + super(FoodCategory.class, metadata); + } + +} + diff --git a/src/main/generated/umc/spring/domain/QMember.java b/src/main/generated/umc/spring/domain/QMember.java index c4ab5f2..fefa672 100644 --- a/src/main/generated/umc/spring/domain/QMember.java +++ b/src/main/generated/umc/spring/domain/QMember.java @@ -24,12 +24,10 @@ public class QMember extends EntityPathBase { public final StringPath address = createString("address"); - public final DatePath birth = createDate("birth", java.time.LocalDate.class); - //inherited public final DateTimePath createdAt = _super.createdAt; - public final StringPath favoriteFood = createString("favoriteFood"); + public final StringPath email = createString("email"); public final EnumPath gender = createEnum("gender", umc.spring.domain.enums.Gender.class); @@ -37,15 +35,27 @@ public class QMember extends EntityPathBase { public final DatePath inactiveDate = createDate("inactiveDate", java.time.LocalDate.class); - public final ListPath MissionList = this.createList("MissionList", Mission.class, QMission.class, PathInits.DIRECT2); + public final ListPath memberAgreeList = this.createList("memberAgreeList", umc.spring.domain.mapping.MemberAgree.class, umc.spring.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); + + public final ListPath memberMissionList = this.createList("memberMissionList", umc.spring.domain.mapping.MemberMission.class, umc.spring.domain.mapping.QMemberMission.class, PathInits.DIRECT2); + + public final ListPath memberPreferList = this.createList("memberPreferList", umc.spring.domain.mapping.MemberPrefer.class, umc.spring.domain.mapping.QMemberPrefer.class, PathInits.DIRECT2); public final StringPath name = createString("name"); + public final StringPath password = createString("password"); + public final NumberPath point = createNumber("point", Integer.class); - public final ListPath ReviewList = this.createList("ReviewList", Review.class, QReview.class, PathInits.DIRECT2); + public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); + + public final EnumPath role = createEnum("role", umc.spring.domain.enums.Role.class); + + public final EnumPath SocialType = createEnum("SocialType", umc.spring.domain.enums.SocialType.class); + + public final StringPath specAddress = createString("specAddress"); - public final EnumPath status = createEnum("status", umc.spring.domain.enums.Status.class); + public final EnumPath status = createEnum("status", umc.spring.domain.enums.MemberStatus.class); //inherited public final DateTimePath updatedAt = _super.updatedAt; diff --git a/src/main/generated/umc/spring/domain/QMission.java b/src/main/generated/umc/spring/domain/QMission.java index adde652..ffdb84f 100644 --- a/src/main/generated/umc/spring/domain/QMission.java +++ b/src/main/generated/umc/spring/domain/QMission.java @@ -22,21 +22,25 @@ public class QMission extends EntityPathBase { public static final QMission mission = new QMission("mission"); - public final NumberPath code = createNumber("code", Integer.class); + public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); - public final StringPath content = createString("content"); + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final DatePath deadline = createDate("deadline", java.time.LocalDate.class); public final NumberPath id = createNumber("id", Long.class); - public final BooleanPath isSuccess = createBoolean("isSuccess"); + public final ListPath memberMissionList = this.createList("memberMissionList", umc.spring.domain.mapping.MemberMission.class, umc.spring.domain.mapping.QMemberMission.class, PathInits.DIRECT2); - public final QMember member; + public final StringPath missionSpec = createString("missionSpec"); - public final QRegion region; + public final NumberPath reward = createNumber("reward", Integer.class); - public final QRestaurant restaurant; + public final QStore store; - public final EnumPath status = createEnum("status", umc.spring.domain.enums.Status.class); + //inherited + public final DateTimePath updatedAt = _super.updatedAt; public QMission(String variable) { this(Mission.class, forVariable(variable), INITS); @@ -56,9 +60,7 @@ public QMission(PathMetadata metadata, PathInits inits) { public QMission(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; - this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; - this.restaurant = inits.isInitialized("restaurant") ? new QRestaurant(forProperty("restaurant"), inits.get("restaurant")) : null; + this.store = inits.isInitialized("store") ? new QStore(forProperty("store"), inits.get("store")) : null; } } diff --git a/src/main/generated/umc/spring/domain/QRegion.java b/src/main/generated/umc/spring/domain/QRegion.java index a65d4bb..1ca2dee 100644 --- a/src/main/generated/umc/spring/domain/QRegion.java +++ b/src/main/generated/umc/spring/domain/QRegion.java @@ -27,17 +27,9 @@ public class QRegion extends EntityPathBase { public final NumberPath id = createNumber("id", Long.class); - public final BooleanPath isRewarded = createBoolean("isRewarded"); - - public final ListPath MissionList = this.createList("MissionList", Mission.class, QMission.class, PathInits.DIRECT2); - public final StringPath name = createString("name"); - public final ListPath RestaurantList = this.createList("RestaurantList", Restaurant.class, QRestaurant.class, PathInits.DIRECT2); - - public final ListPath ReviewList = this.createList("ReviewList", Review.class, QReview.class, PathInits.DIRECT2); - - public final NumberPath successNumber = createNumber("successNumber", Integer.class); + public final ListPath storeList = this.createList("storeList", Store.class, QStore.class, PathInits.DIRECT2); //inherited public final DateTimePath updatedAt = _super.updatedAt; diff --git a/src/main/generated/umc/spring/domain/QReview.java b/src/main/generated/umc/spring/domain/QReview.java index 4bfc041..80c4c65 100644 --- a/src/main/generated/umc/spring/domain/QReview.java +++ b/src/main/generated/umc/spring/domain/QReview.java @@ -24,8 +24,6 @@ public class QReview extends EntityPathBase { public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); - public final StringPath content = createString("content"); - //inherited public final DateTimePath createdAt = _super.createdAt; @@ -33,11 +31,11 @@ public class QReview extends EntityPathBase { public final QMember member; - public final QRegion region; + public final NumberPath score = createNumber("score", Float.class); - public final QRestaurant restaurant; + public final QStore store; - public final NumberPath score = createNumber("score", Integer.class); + public final StringPath title = createString("title"); //inherited public final DateTimePath updatedAt = _super.updatedAt; @@ -61,8 +59,7 @@ public QReview(PathMetadata metadata, PathInits inits) { public QReview(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; - this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; - this.restaurant = inits.isInitialized("restaurant") ? new QRestaurant(forProperty("restaurant"), inits.get("restaurant")) : null; + this.store = inits.isInitialized("store") ? new QStore(forProperty("store"), inits.get("store")) : null; } } diff --git a/src/main/generated/umc/spring/domain/QRestaurant.java b/src/main/generated/umc/spring/domain/QStore.java similarity index 56% rename from src/main/generated/umc/spring/domain/QRestaurant.java rename to src/main/generated/umc/spring/domain/QStore.java index def0ec7..b983e06 100644 --- a/src/main/generated/umc/spring/domain/QRestaurant.java +++ b/src/main/generated/umc/spring/domain/QStore.java @@ -11,16 +11,16 @@ /** - * QRestaurant is a Querydsl query type for Restaurant + * QStore is a Querydsl query type for Store */ @Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QRestaurant extends EntityPathBase { +public class QStore extends EntityPathBase { - private static final long serialVersionUID = 1563043049L; + private static final long serialVersionUID = 1158464437L; private static final PathInits INITS = PathInits.DIRECT2; - public static final QRestaurant restaurant = new QRestaurant("restaurant"); + public static final QStore store = new QStore("store"); public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); @@ -31,36 +31,34 @@ public class QRestaurant extends EntityPathBase { public final NumberPath id = createNumber("id", Long.class); - public final ListPath Mission = this.createList("Mission", Mission.class, QMission.class, PathInits.DIRECT2); - public final StringPath name = createString("name"); public final QRegion region; - public final ListPath ReviewList = this.createList("ReviewList", Review.class, QReview.class, PathInits.DIRECT2); + public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); - public final NumberPath score = createNumber("score", Integer.class); + public final NumberPath score = createNumber("score", Float.class); //inherited public final DateTimePath updatedAt = _super.updatedAt; - public QRestaurant(String variable) { - this(Restaurant.class, forVariable(variable), INITS); + public QStore(String variable) { + this(Store.class, forVariable(variable), INITS); } - public QRestaurant(Path path) { + public QStore(Path path) { this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); } - public QRestaurant(PathMetadata metadata) { + public QStore(PathMetadata metadata) { this(metadata, PathInits.getFor(metadata, INITS)); } - public QRestaurant(PathMetadata metadata, PathInits inits) { - this(Restaurant.class, metadata, inits); + public QStore(PathMetadata metadata, PathInits inits) { + this(Store.class, metadata, inits); } - public QRestaurant(Class type, PathMetadata metadata, PathInits inits) { + public QStore(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; } diff --git a/src/main/generated/umc/spring/domain/QTerms.java b/src/main/generated/umc/spring/domain/QTerms.java new file mode 100644 index 0000000..ab70584 --- /dev/null +++ b/src/main/generated/umc/spring/domain/QTerms.java @@ -0,0 +1,54 @@ +package umc.spring.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QTerms is a Querydsl query type for Terms + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QTerms extends EntityPathBase { + + private static final long serialVersionUID = 1158943835L; + + public static final QTerms terms = new QTerms("terms"); + + public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); + + public final StringPath body = createString("body"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath memberAgreeList = this.createList("memberAgreeList", umc.spring.domain.mapping.MemberAgree.class, umc.spring.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); + + public final BooleanPath optional = createBoolean("optional"); + + public final StringPath title = createString("title"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QTerms(String variable) { + super(Terms.class, forVariable(variable)); + } + + public QTerms(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QTerms(PathMetadata metadata) { + super(Terms.class, metadata); + } + +} + diff --git a/src/main/generated/umc/spring/domain/mapping/QMemberAgree.java b/src/main/generated/umc/spring/domain/mapping/QMemberAgree.java new file mode 100644 index 0000000..15b7557 --- /dev/null +++ b/src/main/generated/umc/spring/domain/mapping/QMemberAgree.java @@ -0,0 +1,62 @@ +package umc.spring.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberAgree is a Querydsl query type for MemberAgree + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberAgree extends EntityPathBase { + + private static final long serialVersionUID = -2051556634L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberAgree memberAgree = new QMemberAgree("memberAgree"); + + public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final umc.spring.domain.QMember member; + + public final umc.spring.domain.QTerms terms; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberAgree(String variable) { + this(MemberAgree.class, forVariable(variable), INITS); + } + + public QMemberAgree(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberAgree(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberAgree(PathMetadata metadata, PathInits inits) { + this(MemberAgree.class, metadata, inits); + } + + public QMemberAgree(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.spring.domain.QMember(forProperty("member")) : null; + this.terms = inits.isInitialized("terms") ? new umc.spring.domain.QTerms(forProperty("terms")) : null; + } + +} + diff --git a/src/main/generated/umc/spring/domain/mapping/QMemberMission.java b/src/main/generated/umc/spring/domain/mapping/QMemberMission.java new file mode 100644 index 0000000..29da571 --- /dev/null +++ b/src/main/generated/umc/spring/domain/mapping/QMemberMission.java @@ -0,0 +1,64 @@ +package umc.spring.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberMission is a Querydsl query type for MemberMission + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberMission extends EntityPathBase { + + private static final long serialVersionUID = 1962779462L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberMission memberMission = new QMemberMission("memberMission"); + + public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final umc.spring.domain.QMember member; + + public final umc.spring.domain.QMission mission; + + public final EnumPath status = createEnum("status", umc.spring.domain.enums.MissionStatus.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberMission(String variable) { + this(MemberMission.class, forVariable(variable), INITS); + } + + public QMemberMission(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberMission(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberMission(PathMetadata metadata, PathInits inits) { + this(MemberMission.class, metadata, inits); + } + + public QMemberMission(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.spring.domain.QMember(forProperty("member")) : null; + this.mission = inits.isInitialized("mission") ? new umc.spring.domain.QMission(forProperty("mission"), inits.get("mission")) : null; + } + +} + diff --git a/src/main/generated/umc/spring/domain/mapping/QMemberPrefer.java b/src/main/generated/umc/spring/domain/mapping/QMemberPrefer.java new file mode 100644 index 0000000..19c6040 --- /dev/null +++ b/src/main/generated/umc/spring/domain/mapping/QMemberPrefer.java @@ -0,0 +1,62 @@ +package umc.spring.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberPrefer is a Querydsl query type for MemberPrefer + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberPrefer extends EntityPathBase { + + private static final long serialVersionUID = 1265463574L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberPrefer memberPrefer = new QMemberPrefer("memberPrefer"); + + public final umc.spring.domain.common.QBaseEntity _super = new umc.spring.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final umc.spring.domain.QFoodCategory foodCategory; + + public final NumberPath id = createNumber("id", Long.class); + + public final umc.spring.domain.QMember member; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberPrefer(String variable) { + this(MemberPrefer.class, forVariable(variable), INITS); + } + + public QMemberPrefer(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberPrefer(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberPrefer(PathMetadata metadata, PathInits inits) { + this(MemberPrefer.class, metadata, inits); + } + + public QMemberPrefer(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.foodCategory = inits.isInitialized("foodCategory") ? new umc.spring.domain.QFoodCategory(forProperty("foodCategory")) : null; + this.member = inits.isInitialized("member") ? new umc.spring.domain.QMember(forProperty("member")) : null; + } + +} + diff --git a/src/main/java/umc/spring/Application.java b/src/main/java/umc/spring/Application.java index 5bc54b2..dec9166 100644 --- a/src/main/java/umc/spring/Application.java +++ b/src/main/java/umc/spring/Application.java @@ -6,7 +6,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import umc.spring.service.RestaurantService.RestaurantQueryService; +import umc.spring.service.StoreService.StoreQueryService; import static org.apache.commons.lang3.BooleanUtils.forEach; @@ -21,18 +21,18 @@ public static void main(String[] args) { @Bean public CommandLineRunner run(ApplicationContext context) { return args -> { - RestaurantQueryService restaurantService = context.getBean(RestaurantQueryService.class); + StoreQueryService storeService = context.getBean(StoreQueryService.class); // 파라미터 값 설정 String name = "요아정"; - Integer score = 4; + Float score = 4.0f; // 쿼리 메서드 호출 및 쿼리 문자열과 파라미터 출력 - System.out.println("Executing findRestaurantsByNameAndScore with parameters:"); + System.out.println("Executing findStoresByNameAndScore with parameters:"); System.out.println("Name: " + name); System.out.println("Score: " + score); - restaurantService.findRestaurantsByNameAndScore(name, score) + storeService.findStoresByNameAndScore(name, score) .forEach(System.out::println); }; }; diff --git a/src/main/java/umc/spring/apiPayload/code/status/ErrorStatus.java b/src/main/java/umc/spring/apiPayload/code/status/ErrorStatus.java index a8bf955..4b10625 100644 --- a/src/main/java/umc/spring/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/umc/spring/apiPayload/code/status/ErrorStatus.java @@ -3,13 +3,11 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.http.HttpStatus; -import umc.spring.apiPayload.code.BaseCode; import umc.spring.apiPayload.code.BaseErrorCode; import umc.spring.apiPayload.code.ErrorReasonDTO; @Getter @AllArgsConstructor - public enum ErrorStatus implements BaseErrorCode { // 가장 일반적인 응답 @@ -26,9 +24,13 @@ public enum ErrorStatus implements BaseErrorCode { // 예시,,, ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."), + // 음식 카테고리 관련 에러 + FOOD_CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD4001", "음식 카테고리를 찾을 수 없습니다."), + // For test TEMP_EXCEPTION(HttpStatus.BAD_REQUEST, "TEMP4001", "이거는 테스트"); + private final HttpStatus httpStatus; private final String code; private final String message; diff --git a/src/main/java/umc/spring/apiPayload/Exception/ExceptionAdvice.java b/src/main/java/umc/spring/apiPayload/exception/ExceptionAdvice.java similarity index 99% rename from src/main/java/umc/spring/apiPayload/Exception/ExceptionAdvice.java rename to src/main/java/umc/spring/apiPayload/exception/ExceptionAdvice.java index d076a9e..6d16558 100644 --- a/src/main/java/umc/spring/apiPayload/Exception/ExceptionAdvice.java +++ b/src/main/java/umc/spring/apiPayload/exception/ExceptionAdvice.java @@ -1,4 +1,4 @@ -package umc.spring.apiPayload.Exception; +package umc.spring.apiPayload.exception; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.ConstraintViolationException; @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Optional; +@Slf4j @RestControllerAdvice(annotations = {RestController.class}) public class ExceptionAdvice extends ResponseEntityExceptionHandler { @@ -115,3 +116,4 @@ private ResponseEntity handleExceptionInternalConstraint(Exception e, Er ); } } + diff --git a/src/main/java/umc/spring/apiPayload/Exception/GeneralException.java b/src/main/java/umc/spring/apiPayload/exception/GeneralException.java similarity index 58% rename from src/main/java/umc/spring/apiPayload/Exception/GeneralException.java rename to src/main/java/umc/spring/apiPayload/exception/GeneralException.java index a55bcd6..b9f47a3 100644 --- a/src/main/java/umc/spring/apiPayload/Exception/GeneralException.java +++ b/src/main/java/umc/spring/apiPayload/exception/GeneralException.java @@ -1,17 +1,16 @@ -package umc.spring.apiPayload.Exception; +package umc.spring.apiPayload.exception; +import lombok.AllArgsConstructor; +import lombok.Getter; import umc.spring.apiPayload.code.BaseErrorCode; import umc.spring.apiPayload.code.ErrorReasonDTO; -public class GeneralException extends RuntimeException{ +@Getter +@AllArgsConstructor +public class GeneralException extends RuntimeException { private BaseErrorCode code; - public GeneralException(BaseErrorCode errorCode) { - super(errorCode.getReason().getMessage()); - this.code = errorCode; - } - public ErrorReasonDTO getErrorReason() { return this.code.getReason(); } diff --git a/src/main/java/umc/spring/apiPayload/exception/handler/FoodCategoryHandler.java b/src/main/java/umc/spring/apiPayload/exception/handler/FoodCategoryHandler.java new file mode 100644 index 0000000..54ae3f2 --- /dev/null +++ b/src/main/java/umc/spring/apiPayload/exception/handler/FoodCategoryHandler.java @@ -0,0 +1,11 @@ +package umc.spring.apiPayload.exception.handler; + +import umc.spring.apiPayload.code.BaseErrorCode; +import umc.spring.apiPayload.exception.GeneralException; + +public class FoodCategoryHandler extends GeneralException { + + public FoodCategoryHandler(BaseErrorCode errorCode) { + super(errorCode); + } +} diff --git a/src/main/java/umc/spring/apiPayload/Exception/handler/TempHandler.java b/src/main/java/umc/spring/apiPayload/exception/handler/TempHandler.java similarity index 63% rename from src/main/java/umc/spring/apiPayload/Exception/handler/TempHandler.java rename to src/main/java/umc/spring/apiPayload/exception/handler/TempHandler.java index c87628d..57c380e 100644 --- a/src/main/java/umc/spring/apiPayload/Exception/handler/TempHandler.java +++ b/src/main/java/umc/spring/apiPayload/exception/handler/TempHandler.java @@ -1,7 +1,7 @@ -package umc.spring.apiPayload.Exception.handler; +package umc.spring.apiPayload.exception.handler; -import umc.spring.apiPayload.Exception.GeneralException; import umc.spring.apiPayload.code.BaseErrorCode; +import umc.spring.apiPayload.exception.GeneralException; public class TempHandler extends GeneralException { diff --git a/src/main/java/umc/spring/config/Security/CustomOAuth2UserService.java b/src/main/java/umc/spring/config/Security/CustomOAuth2UserService.java new file mode 100644 index 0000000..5fd54bc --- /dev/null +++ b/src/main/java/umc/spring/config/Security/CustomOAuth2UserService.java @@ -0,0 +1,65 @@ +package umc.spring.config.Security; + +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.core.OAuth2AuthenticationException; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.stereotype.Service; +import umc.spring.domain.Member; +import umc.spring.domain.enums.Gender; +import umc.spring.domain.enums.Role; +import umc.spring.repository.MemberRepository; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class CustomOAuth2UserService extends DefaultOAuth2UserService { + + private final MemberRepository memberRepository; + private final PasswordEncoder passwordEncoder; + + @Override + public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { + OAuth2User oAuth2User = super.loadUser(userRequest); + + Map attributes = oAuth2User.getAttributes(); + Map properties = (Map) attributes.get("properties"); + + String nickname = (String) properties.get("nickname"); + String email = nickname + "@kakao.com"; // 임시 이메일 생성 + + // 사용자 정보 저장 또는 업데이트 + Member member = saveOrUpdateUser(email, nickname); + + // 이메일을 Principal로 사용하기 위해 attributes 수정 + Map modifiedAttributes = new HashMap<>(attributes); + modifiedAttributes.put("email", email); + + return new DefaultOAuth2User( + oAuth2User.getAuthorities(), + modifiedAttributes, + "email" // email Principal로 설정 + ); + } + + private Member saveOrUpdateUser(String email, String nickname) { + Member member = memberRepository.findByEmail(email) + .orElse(Member.builder() + .email(email) + .name(nickname) + .password(passwordEncoder.encode("OAUTH_USER_" + UUID.randomUUID())) + .gender(Gender.NONE) // 기본값 설정 + .address("소셜로그인") // 기본값 설정 + .specAddress("소셜로그인") // 기본값 설정 + .role(Role.USER) + .build()); + + return memberRepository.save(member); + } +} diff --git a/src/main/java/umc/spring/config/Security/CustomUserDetailsService.java b/src/main/java/umc/spring/config/Security/CustomUserDetailsService.java new file mode 100644 index 0000000..8040906 --- /dev/null +++ b/src/main/java/umc/spring/config/Security/CustomUserDetailsService.java @@ -0,0 +1,28 @@ +package umc.spring.config.Security; + +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import umc.spring.domain.Member; +import umc.spring.repository.MemberRepository; + +@Service +@RequiredArgsConstructor +public class CustomUserDetailsService implements UserDetailsService { + + private final MemberRepository memberRepository; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Member member = memberRepository.findByEmail(username) + .orElseThrow(() -> new UsernameNotFoundException("해당 이메일을 가진 유저가 존재하지 않습니다: " + username)); + + return org.springframework.security.core.userdetails.User + .withUsername(member.getEmail()) + .password(member.getPassword()) + .roles(member.getRole().name()) + .build(); + } +} diff --git a/src/main/java/umc/spring/config/Security/SecurityConfig.java b/src/main/java/umc/spring/config/Security/SecurityConfig.java new file mode 100644 index 0000000..21d57ac --- /dev/null +++ b/src/main/java/umc/spring/config/Security/SecurityConfig.java @@ -0,0 +1,46 @@ +package umc.spring.config.Security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +@EnableWebSecurity +@Configuration +public class SecurityConfig { + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .authorizeHttpRequests((requests) -> requests + .requestMatchers("/", "/home", "/signup", "/members/signup", "/css/**").permitAll() + .requestMatchers("/admin/**").hasRole("ADMIN") + .anyRequest().authenticated() + ) + .formLogin((form) -> form + .loginPage("/login") + .defaultSuccessUrl("/home", true) + .permitAll() + ) + .logout((logout) -> logout + .logoutUrl("/logout") + .logoutSuccessUrl("/login?logout") + .permitAll() + ) + .oauth2Login(oauth2 -> oauth2 + .loginPage("/login") + .defaultSuccessUrl("/home", true) + .permitAll() + ); + + return http.build(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/src/main/java/umc/spring/converter/MemberConverter.java b/src/main/java/umc/spring/converter/MemberConverter.java new file mode 100644 index 0000000..d852abc --- /dev/null +++ b/src/main/java/umc/spring/converter/MemberConverter.java @@ -0,0 +1,47 @@ +package umc.spring.converter; + +import umc.spring.domain.Member; +import umc.spring.domain.enums.Gender; +import umc.spring.web.dto.MemberRequestDTO; +import umc.spring.web.dto.MemberResponseDTO; + +import java.time.LocalDateTime; +import java.util.ArrayList; + +public class MemberConverter { + + public static MemberResponseDTO.JoinResultDTO toJoinResultDTO(Member member){ + return MemberResponseDTO.JoinResultDTO.builder() + .memberId(member.getId()) + .createdAt(LocalDateTime.now()) + .build(); + } + + public static Member toMember(MemberRequestDTO.JoinDto request){ + + Gender gender = null; + + switch (request.getGender()){ + case 1: + gender = Gender.MALE; + break; + case 2: + gender = Gender.FEMALE; + break; + case 3: + gender = Gender.NONE; + break; + } + + return Member.builder() + .name(request.getName()) + .email(request.getEmail()) // 추가된 코드 + .password(request.getPassword()) // 추가된 코드 + .gender(gender) + .address(request.getAddress()) + .specAddress(request.getSpecAddress()) + .role(request.getRole()) // 추가된 코드 + .memberPreferList(new ArrayList<>()) + .build(); + } +} diff --git a/src/main/java/umc/spring/converter/MemberPreferConverter.java b/src/main/java/umc/spring/converter/MemberPreferConverter.java new file mode 100644 index 0000000..28564da --- /dev/null +++ b/src/main/java/umc/spring/converter/MemberPreferConverter.java @@ -0,0 +1,20 @@ +package umc.spring.converter; + +import umc.spring.domain.FoodCategory; +import umc.spring.domain.mapping.MemberPrefer; + +import java.util.List; +import java.util.stream.Collectors; + +public class MemberPreferConverter { + + public static List toMemberPreferList(List foodCategoryList){ + + return foodCategoryList.stream() + .map(foodCategory -> + MemberPrefer.builder() + .foodCategory(foodCategory) + .build() + ).collect(Collectors.toList()); + } +} diff --git a/src/main/java/umc/spring/domain/FoodCategory.java b/src/main/java/umc/spring/domain/FoodCategory.java new file mode 100644 index 0000000..6961a0b --- /dev/null +++ b/src/main/java/umc/spring/domain/FoodCategory.java @@ -0,0 +1,29 @@ +package umc.spring.domain; + +import jakarta.persistence.*; +import lombok.*; +import umc.spring.domain.common.BaseEntity; +import umc.spring.domain.mapping.MemberMission; +import umc.spring.domain.mapping.MemberPrefer; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor + +public class FoodCategory extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 15) + private String name; + + @OneToMany(mappedBy = "foodCategory", cascade = CascadeType.ALL) + private List memberPreferList = new ArrayList<>(); +} diff --git a/src/main/java/umc/spring/domain/Member.java b/src/main/java/umc/spring/domain/Member.java index 22b2a7b..899cfab 100644 --- a/src/main/java/umc/spring/domain/Member.java +++ b/src/main/java/umc/spring/domain/Member.java @@ -2,9 +2,17 @@ import jakarta.persistence.*; import lombok.*; +import org.hibernate.annotations.ColumnDefault; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; import umc.spring.domain.common.BaseEntity; import umc.spring.domain.enums.Gender; -import umc.spring.domain.enums.Status; +import umc.spring.domain.enums.MemberStatus; +import umc.spring.domain.enums.Role; +import umc.spring.domain.enums.SocialType; +import umc.spring.domain.mapping.MemberAgree; +import umc.spring.domain.mapping.MemberMission; +import umc.spring.domain.mapping.MemberPrefer; import java.time.LocalDate; import java.util.ArrayList; @@ -15,6 +23,8 @@ @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor +@DynamicUpdate +@DynamicInsert public class Member extends BaseEntity { @Id @@ -24,30 +34,51 @@ public class Member extends BaseEntity { @Column(nullable = false, length = 20) private String name; - @Column(nullable = false, length = 20) - private LocalDate birth; - - @Column(nullable = false, length = 100) + @Column(nullable = false, length = 40) private String address; - @Column(nullable = false, length = 100) - private String favoriteFood; - - private LocalDate inactiveDate; - - private Integer point; + @Column(nullable = false, length = 40) + private String specAddress; @Enumerated(EnumType.STRING) @Column(columnDefinition = "VARCHAR(10)") private Gender gender; @Enumerated(EnumType.STRING) - @Column(columnDefinition = "VARCHAR(10) DEFAULT 'ACTIVE'") - private Status status; + @Column(columnDefinition = "VARCHAR(10)") + private SocialType SocialType; + + @Enumerated(EnumType.STRING) + @Column(columnDefinition = "VARCHAR(15) DEFAULT 'ACTIVE'") + private MemberStatus status; + + private LocalDate inactiveDate; + + @Column(nullable = false, length = 50) + private String email; + + @Column(nullable = false) + private String password; + + @Enumerated(EnumType.STRING) + private Role role; + + @ColumnDefault("0") + private Integer point; @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) - private List MissionList = new ArrayList<>(); + private List memberAgreeList = new ArrayList<>(); @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) - private List ReviewList = new ArrayList<>(); + private List memberPreferList = new ArrayList<>(); + + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) + private List reviewList = new ArrayList<>(); + + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) + private List memberMissionList = new ArrayList<>(); + + public void encodePassword(String password) { + this.password = password; + } } diff --git a/src/main/java/umc/spring/domain/Mission.java b/src/main/java/umc/spring/domain/Mission.java index 5817ee6..bf230d4 100644 --- a/src/main/java/umc/spring/domain/Mission.java +++ b/src/main/java/umc/spring/domain/Mission.java @@ -2,8 +2,10 @@ import jakarta.persistence.*; import lombok.*; -import umc.spring.domain.enums.Status; +import umc.spring.domain.common.BaseEntity; +import umc.spring.domain.mapping.MemberMission; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -12,32 +14,23 @@ @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor -public class Mission { +public class Mission extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private boolean isSuccess; + private Integer reward; - @Column(nullable = false, length = 100) - private String content; + private LocalDate deadline; - private Integer code; + @Column(nullable = false, length = 200) + private String missionSpec; - @Enumerated(EnumType.STRING) - @Column(columnDefinition = "VARCHAR(10) DEFAULT 'ACTIVE'") - private Status status; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; - @ManyToOne - @JoinColumn(name = "member_id") - private Member member; - - @ManyToOne - @JoinColumn(name = "region_id") - private Region region; - - @ManyToOne - @JoinColumn(name = "restaurant_id") - private Restaurant restaurant; + @OneToMany(mappedBy = "mission", cascade = CascadeType.ALL) + private List memberMissionList = new ArrayList<>(); } diff --git a/src/main/java/umc/spring/domain/Region.java b/src/main/java/umc/spring/domain/Region.java index 045f350..9e05d32 100644 --- a/src/main/java/umc/spring/domain/Region.java +++ b/src/main/java/umc/spring/domain/Region.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.*; import umc.spring.domain.common.BaseEntity; +import umc.spring.domain.mapping.MemberMission; import java.util.ArrayList; import java.util.List; @@ -21,16 +22,7 @@ public class Region extends BaseEntity { @Column(nullable = false, length = 20) private String name; - private Integer successNumber; - - private boolean isRewarded; - @OneToMany(mappedBy = "region", cascade = CascadeType.ALL) - private List MissionList = new ArrayList<>(); + private List storeList = new ArrayList<>(); - @OneToMany(mappedBy = "region", cascade = CascadeType.ALL) - private List ReviewList = new ArrayList<>(); - - @OneToMany(mappedBy = "region", cascade = CascadeType.ALL) - private List RestaurantList = new ArrayList<>(); } diff --git a/src/main/java/umc/spring/domain/Review.java b/src/main/java/umc/spring/domain/Review.java index 200c3e9..35be880 100644 --- a/src/main/java/umc/spring/domain/Review.java +++ b/src/main/java/umc/spring/domain/Review.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.*; import umc.spring.domain.common.BaseEntity; +import umc.spring.domain.mapping.MemberMission; import java.util.ArrayList; import java.util.List; @@ -18,20 +19,17 @@ public class Review extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private Integer score; - @Column(nullable = false, length = 200) - private String content; + private String title; + + private Float score; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; - @ManyToOne - @JoinColumn(name = "region_id") - private Region region; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; - @ManyToOne - @JoinColumn(name = "restaurant_id") - private Restaurant restaurant; } diff --git a/src/main/java/umc/spring/domain/Restaurant.java b/src/main/java/umc/spring/domain/Store.java similarity index 64% rename from src/main/java/umc/spring/domain/Restaurant.java rename to src/main/java/umc/spring/domain/Store.java index fe02510..0939595 100644 --- a/src/main/java/umc/spring/domain/Restaurant.java +++ b/src/main/java/umc/spring/domain/Store.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.*; import umc.spring.domain.common.BaseEntity; +import umc.spring.domain.mapping.MemberMission; import java.util.ArrayList; import java.util.List; @@ -12,33 +13,30 @@ @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor -public class Restaurant extends BaseEntity { +public class Store extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(nullable = false, length = 100) - private String address; - - private Integer score; - - @Column(nullable = false, length = 20) + @Column(nullable = false, length = 50) private String name; - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List ReviewList = new ArrayList<>(); + @Column(nullable = false, length = 50) + private String address; - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List Mission = new ArrayList<>(); + private Float score; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "region_id") private Region region; + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + private List reviewList = new ArrayList<>(); + @Override public String toString() { - return "Restaurant{" + + return "Store{" + "id=" + id + ", name='" + name + '\'' + ", address='" + address + '\'' + diff --git a/src/main/java/umc/spring/domain/Terms.java b/src/main/java/umc/spring/domain/Terms.java new file mode 100644 index 0000000..5c720e9 --- /dev/null +++ b/src/main/java/umc/spring/domain/Terms.java @@ -0,0 +1,32 @@ +package umc.spring.domain; + +import jakarta.persistence.*; +import lombok.*; +import umc.spring.domain.common.BaseEntity; +import umc.spring.domain.mapping.MemberAgree; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class Terms extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 20) + private String title; + + @Column(nullable = false, length = 200) + private String body; + + private Boolean optional; + + @OneToMany(mappedBy = "terms", cascade = CascadeType.ALL) + private List memberAgreeList = new ArrayList<>(); +} diff --git a/src/main/java/umc/spring/domain/enums/Gender.java b/src/main/java/umc/spring/domain/enums/Gender.java index b74c14e..e2d4745 100644 --- a/src/main/java/umc/spring/domain/enums/Gender.java +++ b/src/main/java/umc/spring/domain/enums/Gender.java @@ -1,5 +1,5 @@ package umc.spring.domain.enums; public enum Gender { - MALE, FEMALE + MALE, FEMALE, NONE } diff --git a/src/main/java/umc/spring/domain/enums/Status.java b/src/main/java/umc/spring/domain/enums/MemberStatus.java similarity index 67% rename from src/main/java/umc/spring/domain/enums/Status.java rename to src/main/java/umc/spring/domain/enums/MemberStatus.java index 7e99776..939ac6d 100644 --- a/src/main/java/umc/spring/domain/enums/Status.java +++ b/src/main/java/umc/spring/domain/enums/MemberStatus.java @@ -1,5 +1,6 @@ package umc.spring.domain.enums; -public enum Status { +public enum MemberStatus { + ACTIVE, INACTIVE } diff --git a/src/main/java/umc/spring/domain/enums/MissionStatus.java b/src/main/java/umc/spring/domain/enums/MissionStatus.java new file mode 100644 index 0000000..5c2ad91 --- /dev/null +++ b/src/main/java/umc/spring/domain/enums/MissionStatus.java @@ -0,0 +1,6 @@ +package umc.spring.domain.enums; + +public enum MissionStatus { + + CHALLENGING, COMPLETE +} diff --git a/src/main/java/umc/spring/domain/enums/Role.java b/src/main/java/umc/spring/domain/enums/Role.java new file mode 100644 index 0000000..61d3b50 --- /dev/null +++ b/src/main/java/umc/spring/domain/enums/Role.java @@ -0,0 +1,5 @@ +package umc.spring.domain.enums; + +public enum Role { + ADMIN, USER +} diff --git a/src/main/java/umc/spring/domain/enums/SocialType.java b/src/main/java/umc/spring/domain/enums/SocialType.java new file mode 100644 index 0000000..4a5e993 --- /dev/null +++ b/src/main/java/umc/spring/domain/enums/SocialType.java @@ -0,0 +1,6 @@ +package umc.spring.domain.enums; + +public enum SocialType { + + KAKAO, GOOGLE, NAVER, APPLE +} diff --git a/src/main/java/umc/spring/domain/mapping/MemberAgree.java b/src/main/java/umc/spring/domain/mapping/MemberAgree.java new file mode 100644 index 0000000..60b370b --- /dev/null +++ b/src/main/java/umc/spring/domain/mapping/MemberAgree.java @@ -0,0 +1,27 @@ +package umc.spring.domain.mapping; + +import jakarta.persistence.*; +import lombok.*; +import umc.spring.domain.Member; +import umc.spring.domain.Terms; +import umc.spring.domain.common.BaseEntity; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class MemberAgree extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "terms_id") + private Terms terms; +} diff --git a/src/main/java/umc/spring/domain/mapping/MemberMission.java b/src/main/java/umc/spring/domain/mapping/MemberMission.java new file mode 100644 index 0000000..67b6cbc --- /dev/null +++ b/src/main/java/umc/spring/domain/mapping/MemberMission.java @@ -0,0 +1,33 @@ +package umc.spring.domain.mapping; + +import jakarta.persistence.*; +import lombok.*; +import umc.spring.domain.Member; +import umc.spring.domain.Mission; +import umc.spring.domain.Terms; +import umc.spring.domain.common.BaseEntity; +import umc.spring.domain.enums.MissionStatus; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class MemberMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Enumerated(EnumType.STRING) + private MissionStatus status; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + +} diff --git a/src/main/java/umc/spring/domain/mapping/MemberPrefer.java b/src/main/java/umc/spring/domain/mapping/MemberPrefer.java new file mode 100644 index 0000000..d88ba3c --- /dev/null +++ b/src/main/java/umc/spring/domain/mapping/MemberPrefer.java @@ -0,0 +1,38 @@ +package umc.spring.domain.mapping; + +import jakarta.persistence.*; +import lombok.*; +import umc.spring.domain.FoodCategory; +import umc.spring.domain.Member; +import umc.spring.domain.common.BaseEntity; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class MemberPrefer extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "category_id") + private FoodCategory foodCategory; + + public void setMember(Member member){ + if(this.member != null) + member.getMemberPreferList().remove(this); + this.member = member; + member.getMemberPreferList().add(this); + } + + public void setFoodCategory(FoodCategory foodCategory){ + this.foodCategory = foodCategory; + } +} diff --git a/src/main/java/umc/spring/repository/FoodCategoryRepository.java b/src/main/java/umc/spring/repository/FoodCategoryRepository.java new file mode 100644 index 0000000..b75fa21 --- /dev/null +++ b/src/main/java/umc/spring/repository/FoodCategoryRepository.java @@ -0,0 +1,7 @@ +package umc.spring.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import umc.spring.domain.FoodCategory; + +public interface FoodCategoryRepository extends JpaRepository { +} diff --git a/src/main/java/umc/spring/repository/MemberRepository.java b/src/main/java/umc/spring/repository/MemberRepository.java new file mode 100644 index 0000000..8758e98 --- /dev/null +++ b/src/main/java/umc/spring/repository/MemberRepository.java @@ -0,0 +1,10 @@ +package umc.spring.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import umc.spring.domain.Member; +import java.util.Optional; + +public interface MemberRepository extends JpaRepository{ + + Optional findByEmail(String email); +} diff --git a/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepository.java b/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepository.java deleted file mode 100644 index 41035d7..0000000 --- a/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package umc.spring.repository.RestaurantRepository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import umc.spring.domain.Restaurant; - -@Repository -public interface RestaurantRepository extends JpaRepository, RestaurantRepositoryCustom{ -} diff --git a/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepositoryCustom.java b/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepositoryCustom.java deleted file mode 100644 index 0012f41..0000000 --- a/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepositoryCustom.java +++ /dev/null @@ -1,8 +0,0 @@ -package umc.spring.repository.RestaurantRepository; - - -import umc.spring.domain.Restaurant; -import java.util.List; -public interface RestaurantRepositoryCustom { - List dynamicQueryWithBooleanBuilder(String name, Integer score); -} diff --git a/src/main/java/umc/spring/repository/StoreRepository/StoreRepository.java b/src/main/java/umc/spring/repository/StoreRepository/StoreRepository.java new file mode 100644 index 0000000..38a81b8 --- /dev/null +++ b/src/main/java/umc/spring/repository/StoreRepository/StoreRepository.java @@ -0,0 +1,7 @@ +package umc.spring.repository.StoreRepository; + +import org.springframework.data.jpa.repository.JpaRepository; +import umc.spring.domain.Store; + +public interface StoreRepository extends JpaRepository, StoreRepositoryCustom { +} diff --git a/src/main/java/umc/spring/repository/StoreRepository/StoreRepositoryCustom.java b/src/main/java/umc/spring/repository/StoreRepository/StoreRepositoryCustom.java new file mode 100644 index 0000000..934730b --- /dev/null +++ b/src/main/java/umc/spring/repository/StoreRepository/StoreRepositoryCustom.java @@ -0,0 +1,9 @@ +package umc.spring.repository.StoreRepository; + +import umc.spring.domain.Store; + +import java.util.List; + +public interface StoreRepositoryCustom { + List dynamicQueryWithBooleanBuilder(String name, Float score); +} diff --git a/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepositoryImpl.java b/src/main/java/umc/spring/repository/StoreRepository/StoreRepositoryImpl.java similarity index 51% rename from src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepositoryImpl.java rename to src/main/java/umc/spring/repository/StoreRepository/StoreRepositoryImpl.java index 088d7f7..ab59094 100644 --- a/src/main/java/umc/spring/repository/RestaurantRepository/RestaurantRepositoryImpl.java +++ b/src/main/java/umc/spring/repository/StoreRepository/StoreRepositoryImpl.java @@ -1,34 +1,35 @@ -package umc.spring.repository.RestaurantRepository; +package umc.spring.repository.StoreRepository; import com.querydsl.core.BooleanBuilder; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; -import umc.spring.domain.QRestaurant; -import umc.spring.domain.Restaurant; +import umc.spring.domain.QStore; +import umc.spring.domain.Store; import java.util.List; + @Repository @RequiredArgsConstructor -public class RestaurantRepositoryImpl implements RestaurantRepositoryCustom{ +public class StoreRepositoryImpl implements StoreRepositoryCustom { private final JPAQueryFactory jpaQueryFactory; - private final QRestaurant restaurant = QRestaurant.restaurant; + private final QStore store = QStore.store; @Override - public List dynamicQueryWithBooleanBuilder(String name, Integer score) { + public List dynamicQueryWithBooleanBuilder(String name, Float score) { BooleanBuilder predicate = new BooleanBuilder(); if (name != null) { - predicate.and(restaurant.name.eq(name)); + predicate.and(store.name.eq(name)); } if (score != null) { - predicate.and(restaurant.score.goe(4.0f)); + predicate.and(store.score.goe(4.0f)); } return jpaQueryFactory - .selectFrom(restaurant) + .selectFrom(store) .where(predicate) .fetch(); } diff --git a/src/main/java/umc/spring/service/MemberService/MemberCommandService.java b/src/main/java/umc/spring/service/MemberService/MemberCommandService.java new file mode 100644 index 0000000..05a5836 --- /dev/null +++ b/src/main/java/umc/spring/service/MemberService/MemberCommandService.java @@ -0,0 +1,11 @@ +package umc.spring.service.MemberService; + +import org.springframework.stereotype.Service; +import umc.spring.domain.Member; +import umc.spring.web.dto.MemberRequestDTO; + +@Service +public interface MemberCommandService { + + Member joinMember(MemberRequestDTO.JoinDto request); +} diff --git a/src/main/java/umc/spring/service/MemberService/MemberCommandServiceImpl.java b/src/main/java/umc/spring/service/MemberService/MemberCommandServiceImpl.java new file mode 100644 index 0000000..e749c4a --- /dev/null +++ b/src/main/java/umc/spring/service/MemberService/MemberCommandServiceImpl.java @@ -0,0 +1,50 @@ +package umc.spring.service.MemberService; + +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import umc.spring.apiPayload.code.status.ErrorStatus; +import umc.spring.apiPayload.exception.handler.FoodCategoryHandler; +import umc.spring.converter.MemberConverter; +import umc.spring.converter.MemberPreferConverter; +import umc.spring.domain.FoodCategory; +import umc.spring.domain.Member; +import umc.spring.domain.mapping.MemberPrefer; +import umc.spring.repository.FoodCategoryRepository; +import umc.spring.repository.MemberRepository; +import umc.spring.web.dto.MemberRequestDTO; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class MemberCommandServiceImpl implements MemberCommandService{ + + private final MemberRepository memberRepository; + + private final FoodCategoryRepository foodCategoryRepository; + + private final PasswordEncoder passwordEncoder; + + @Override + @Transactional + public Member joinMember(MemberRequestDTO.JoinDto request) { + + Member newMember = MemberConverter.toMember(request); + + newMember.encodePassword(passwordEncoder.encode(request.getPassword())); + + List foodCategoryList = request.getPreferCategory().stream() + .map(category -> { + return foodCategoryRepository.findById(category).orElseThrow(() -> new FoodCategoryHandler(ErrorStatus.FOOD_CATEGORY_NOT_FOUND)); + }).collect(Collectors.toList()); + + List memberPreferList = MemberPreferConverter.toMemberPreferList(foodCategoryList); + + memberPreferList.forEach(memberPrefer -> {memberPrefer.setMember(newMember);}); + + return memberRepository.save(newMember); + } +} diff --git a/src/main/java/umc/spring/service/RestaurantService/RestaurantQueryService.java b/src/main/java/umc/spring/service/RestaurantService/RestaurantQueryService.java deleted file mode 100644 index 2c11d75..0000000 --- a/src/main/java/umc/spring/service/RestaurantService/RestaurantQueryService.java +++ /dev/null @@ -1,12 +0,0 @@ -package umc.spring.service.RestaurantService; - -import umc.spring.domain.Restaurant; - -import java.util.List; -import java.util.Optional; - -public interface RestaurantQueryService { - - Optional findRestaurant(Long id); - List findRestaurantsByNameAndScore(String name, Integer score); -} diff --git a/src/main/java/umc/spring/service/RestaurantService/RestaurantQueryServiceImpl.java b/src/main/java/umc/spring/service/RestaurantService/RestaurantQueryServiceImpl.java deleted file mode 100644 index 0d9291a..0000000 --- a/src/main/java/umc/spring/service/RestaurantService/RestaurantQueryServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package umc.spring.service.RestaurantService; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import umc.spring.domain.Restaurant; -import umc.spring.repository.RestaurantRepository.RestaurantRepository; - -import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Optional; - -import static umc.spring.domain.QRestaurant.restaurant; - -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class RestaurantQueryServiceImpl implements RestaurantQueryService{ - - private final RestaurantRepository restaurantRepository; - - @Override - public Optional findRestaurant(Long id) { - return restaurantRepository.findById(id); - } - - @Override - public List findRestaurantsByNameAndScore(String name, Integer score) { - List filteredRestaurants = restaurantRepository.dynamicQueryWithBooleanBuilder(name, score); - - filteredRestaurants.forEach(restaurant -> System.out.println("Restaurant: " + restaurant)); - - return filteredRestaurants; - } -} diff --git a/src/main/java/umc/spring/service/StoreService/StoreQueryService.java b/src/main/java/umc/spring/service/StoreService/StoreQueryService.java new file mode 100644 index 0000000..1534b7b --- /dev/null +++ b/src/main/java/umc/spring/service/StoreService/StoreQueryService.java @@ -0,0 +1,12 @@ +package umc.spring.service.StoreService; + +import umc.spring.domain.Store; + +import java.util.List; +import java.util.Optional; + +public interface StoreQueryService { + + Optional findStore(Long id); + List findStoresByNameAndScore(String name, Float score); +} diff --git a/src/main/java/umc/spring/service/StoreService/StoreQueryServiceImpl.java b/src/main/java/umc/spring/service/StoreService/StoreQueryServiceImpl.java new file mode 100644 index 0000000..0e4b243 --- /dev/null +++ b/src/main/java/umc/spring/service/StoreService/StoreQueryServiceImpl.java @@ -0,0 +1,32 @@ +package umc.spring.service.StoreService; + +import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import umc.spring.domain.Store; +import umc.spring.repository.StoreRepository.StoreRepository; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class StoreQueryServiceImpl implements StoreQueryService{ + + private final StoreRepository storeRepository; + + @Override + public Optional findStore(Long id) { + return storeRepository.findById(id); + } + + @Override + public List findStoresByNameAndScore(String name, Float score) { + List filteredStores = storeRepository.dynamicQueryWithBooleanBuilder(name, score); + + filteredStores.forEach(store -> System.out.println("Store: " + store)); + + return filteredStores; + } +} diff --git a/src/main/java/umc/spring/service/TempService/TempQueryServiceImpl.java b/src/main/java/umc/spring/service/TempService/TempCommandQueryImpl.java similarity index 74% rename from src/main/java/umc/spring/service/TempService/TempQueryServiceImpl.java rename to src/main/java/umc/spring/service/TempService/TempCommandQueryImpl.java index 3b38bfd..3e0ec07 100644 --- a/src/main/java/umc/spring/service/TempService/TempQueryServiceImpl.java +++ b/src/main/java/umc/spring/service/TempService/TempCommandQueryImpl.java @@ -2,12 +2,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import umc.spring.apiPayload.Exception.handler.TempHandler; import umc.spring.apiPayload.code.status.ErrorStatus; +import umc.spring.apiPayload.exception.handler.TempHandler; @Service @RequiredArgsConstructor -public class TempQueryServiceImpl implements TempQueryService { +public class TempCommandQueryImpl implements TempQueryService{ @Override public void CheckFlag(Integer flag) { diff --git a/src/main/java/umc/spring/service/TempService/TempQueryService.java b/src/main/java/umc/spring/service/TempService/TempQueryService.java index af8146c..de8e0f0 100644 --- a/src/main/java/umc/spring/service/TempService/TempQueryService.java +++ b/src/main/java/umc/spring/service/TempService/TempQueryService.java @@ -1,5 +1,6 @@ package umc.spring.service.TempService; public interface TempQueryService { + void CheckFlag(Integer flag); } diff --git a/src/main/java/umc/spring/web/controller/MemberRestController.java b/src/main/java/umc/spring/web/controller/MemberRestController.java new file mode 100644 index 0000000..dbea8dd --- /dev/null +++ b/src/main/java/umc/spring/web/controller/MemberRestController.java @@ -0,0 +1,28 @@ +package umc.spring.web.controller; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import umc.spring.apiPayload.ApiResponse; +import umc.spring.converter.MemberConverter; +import umc.spring.domain.Member; +import umc.spring.service.MemberService.MemberCommandService; +import umc.spring.web.dto.MemberRequestDTO; +import umc.spring.web.dto.MemberResponseDTO; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/members") +public class MemberRestController { + + private final MemberCommandService memberCommandService; + + @PostMapping("/") + public ApiResponse join(@RequestBody @Valid MemberRequestDTO.JoinDto request){ + Member member = memberCommandService.joinMember(request); + return ApiResponse.onSuccess(MemberConverter.toJoinResultDTO(member)); + } +} diff --git a/src/main/java/umc/spring/web/controller/MemberViewController.java b/src/main/java/umc/spring/web/controller/MemberViewController.java new file mode 100644 index 0000000..150bb88 --- /dev/null +++ b/src/main/java/umc/spring/web/controller/MemberViewController.java @@ -0,0 +1,60 @@ +package umc.spring.web.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.ui.Model; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import umc.spring.service.MemberService.MemberCommandService; +import umc.spring.web.dto.MemberRequestDTO; + +@Controller +@RequiredArgsConstructor +public class MemberViewController { + + private final MemberCommandService memberCommandService; + + @GetMapping("/login") + public String loginPage() { + return "login"; + } + + // thymeleaf 사용을 위해 일부가 변경되었습니다. + // 실제로는 8주차에서 작성한 컨트롤러와 동일하게 작성하시면 됩니다!! + @PostMapping("/members/signup") + public String joinMember(@ModelAttribute("memberJoinDto") MemberRequestDTO.JoinDto request, // 협업시에는 기존 RequestBody 어노테이션을 붙여주시면 됩니다! + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + // 뷰에 데이터 바인딩이 실패할 경우 signup 페이지를 유지합니다. + return "signup"; + } + + try { + memberCommandService.joinMember(request); + return "redirect:/login"; + } catch (Exception e) { + // 회원가입 과정에서 에러가 발생할 경우 에러 메시지를 보내고, signup 페이디를 유지합니다. + model.addAttribute("error", e.getMessage()); + return "signup"; + } + } + + @GetMapping("/signup") + public String signupPage(Model model) { + model.addAttribute("memberJoinDto", new MemberRequestDTO.JoinDto()); + return "signup"; + } + + @GetMapping("/home") + public String home() { + return "home"; + } + + @GetMapping("/admin") + public String admin() { + return "admin"; + } +} diff --git a/src/main/java/umc/spring/web/controller/TempRestController.java b/src/main/java/umc/spring/web/controller/TempRestController.java index 17bf5df..f7849fd 100644 --- a/src/main/java/umc/spring/web/controller/TempRestController.java +++ b/src/main/java/umc/spring/web/controller/TempRestController.java @@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import umc.spring.apiPayload.ApiResponse; +import umc.spring.apiPayload.code.ReasonDTO; import umc.spring.converter.TempConverter; import umc.spring.service.TempService.TempQueryService; import umc.spring.web.dto.TempResponse; @@ -23,7 +24,6 @@ public ApiResponse testAPI(){ return ApiResponse.onSuccess(TempConverter.toTempTestDTO()); } - @GetMapping("/exception") public ApiResponse exceptionAPI(@RequestParam Integer flag){ tempQueryService.CheckFlag(flag); diff --git a/src/main/java/umc/spring/web/dto/MemberRequestDTO.java b/src/main/java/umc/spring/web/dto/MemberRequestDTO.java new file mode 100644 index 0000000..677c1c9 --- /dev/null +++ b/src/main/java/umc/spring/web/dto/MemberRequestDTO.java @@ -0,0 +1,41 @@ +package umc.spring.web.dto; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.Setter; +import umc.spring.domain.enums.Role; + +import java.util.List; + +public class MemberRequestDTO { + + @Getter + @Setter + public static class JoinDto{ + @NotBlank + String name; + @NotBlank + @Email + String email; // 이메일 필드 추가 + @NotBlank + String password; // 비밀번호 필드 추가 + @NotNull + Integer gender; + @NotNull + Integer birthYear; + @NotNull + Integer birthMonth; + @NotNull + Integer birthDay; + @Size(min = 5, max = 12) + String address; + @Size(min = 5, max = 12) + String specAddress; + List preferCategory; + @NotNull + Role role; // 역할 필드 추가 + } +} diff --git a/src/main/java/umc/spring/web/dto/MemberResponseDTO.java b/src/main/java/umc/spring/web/dto/MemberResponseDTO.java new file mode 100644 index 0000000..1c8e4eb --- /dev/null +++ b/src/main/java/umc/spring/web/dto/MemberResponseDTO.java @@ -0,0 +1,20 @@ +package umc.spring.web.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +public class MemberResponseDTO { + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class JoinResultDTO{ + Long memberId; + LocalDateTime createdAt; + } +} diff --git a/src/main/java/umc/spring/web/dto/TempRequest.java b/src/main/java/umc/spring/web/dto/TempRequest.java deleted file mode 100644 index 6d3ff3f..0000000 --- a/src/main/java/umc/spring/web/dto/TempRequest.java +++ /dev/null @@ -1,6 +0,0 @@ -package umc.spring.web.dto; - -public class TempRequest { - - -} diff --git a/src/main/java/umc/spring/web/dto/classJoinDto.java b/src/main/java/umc/spring/web/dto/classJoinDto.java new file mode 100644 index 0000000..d0ea43c --- /dev/null +++ b/src/main/java/umc/spring/web/dto/classJoinDto.java @@ -0,0 +1,18 @@ +package umc.spring.web.dto; + +import lombok.Getter; + +import java.util.List; + +@Getter +public class classJoinDto { + + String name; + Integer gender; + Integer birthYear; + Integer birthMonth; + Integer birthDay; + String address; + String specAddress; + List preferCategory; +} diff --git a/src/main/resources/Application.yml b/src/main/resources/Application.yml index e4bb12f..7208437 100644 --- a/src/main/resources/Application.yml +++ b/src/main/resources/Application.yml @@ -1,7 +1,7 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/umc7th + url: jdbc:mysql://localhost:3306/study username: root password: ej318103 sql: @@ -16,4 +16,22 @@ spring: use_sql_comments: true hbm2ddl: auto: update - default_batch_fetch_size: 1000 \ No newline at end of file + default_batch_fetch_size: 1000 + security: + oauth2: + client: + registration: + kakao: + client-authentication-method: client_secret_post + client-id: { 본인 client-id } + client-secret: { 본인 client-secret} + redirect-uri: { 본인 도메인 }/login/oauth2/code/kakao + authorization-grant-type: authorization_code + scope: profile_nickname + client-name: Kakao + provider: + kakao: + authorization-uri: https://kauth.kakao.com/oauth/authorize + token-uri: https://kauth.kakao.com/oauth/token + user-info-uri: https://kapi.kakao.com/v2/user/me + user-name-attribute: id \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e4bb12f..7208437 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,7 +1,7 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/umc7th + url: jdbc:mysql://localhost:3306/study username: root password: ej318103 sql: @@ -16,4 +16,22 @@ spring: use_sql_comments: true hbm2ddl: auto: update - default_batch_fetch_size: 1000 \ No newline at end of file + default_batch_fetch_size: 1000 + security: + oauth2: + client: + registration: + kakao: + client-authentication-method: client_secret_post + client-id: { 본인 client-id } + client-secret: { 본인 client-secret} + redirect-uri: { 본인 도메인 }/login/oauth2/code/kakao + authorization-grant-type: authorization_code + scope: profile_nickname + client-name: Kakao + provider: + kakao: + authorization-uri: https://kauth.kakao.com/oauth/authorize + token-uri: https://kauth.kakao.com/oauth/token + user-info-uri: https://kapi.kakao.com/v2/user/me + user-name-attribute: id \ No newline at end of file diff --git a/src/main/resources/templates/admin.html b/src/main/resources/templates/admin.html new file mode 100644 index 0000000..55dbff1 --- /dev/null +++ b/src/main/resources/templates/admin.html @@ -0,0 +1,10 @@ + + + + Admin Page + + +

Admin Page

+

관리자만 접근할 수 있는 페이지입니다.

+ + \ No newline at end of file diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html new file mode 100644 index 0000000..529b72c --- /dev/null +++ b/src/main/resources/templates/home.html @@ -0,0 +1,17 @@ + + + + Home + + +

Welcome to Home Page!

+

+ + + +
+ +
+ \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 0000000..26a3bcd --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,30 @@ + + + + Login + + +

Login

+
+
+ + +
+
+ + +
+ +
+ +

사용자 이름 또는 비밀번호가 잘못되었습니다.

+

로그아웃되었습니다.

+ + +

계정이 없나요? Sign up

+ + +카카오로 로그인 + + + \ No newline at end of file diff --git a/src/main/resources/templates/signup.html b/src/main/resources/templates/signup.html new file mode 100644 index 0000000..ff2a177 --- /dev/null +++ b/src/main/resources/templates/signup.html @@ -0,0 +1,71 @@ + + + + 회원가입 + + + +

회원가입

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + + +
+
+
+ + +
+ +
+ + \ No newline at end of file