From 9b2dbaf64d18893827941ca5cfc4d23c95d7c7fe Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 12:36:14 +0900 Subject: [PATCH 01/16] =?UTF-8?q?#28=20[feat]=20Validation=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index 9e5407c3..1c23ada8 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,9 @@ dependencies { annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' + // VALIDATION + implementation 'org.springframework.boot:spring-boot-starter-validation' + // JPA & Database implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.32' From d5bf792bd4fda4daba8de06fd7f74b564cdf9158 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 12:36:49 +0900 Subject: [PATCH 02/16] =?UTF-8?q?#28=20[feat]=20=ED=9A=8C=EC=9D=98=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20Success=20=EC=83=81=ED=83=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/asap/server/exception/Success.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/asap/server/exception/Success.java b/src/main/java/com/asap/server/exception/Success.java index 7acf8f75..ed13478e 100644 --- a/src/main/java/com/asap/server/exception/Success.java +++ b/src/main/java/com/asap/server/exception/Success.java @@ -8,6 +8,11 @@ @Getter @AllArgsConstructor(access = AccessLevel.PRIVATE) public enum Success { + + /** + * 201 CREATED SUCCESS + */ + CREATE_MEETING_SUCCESS(HttpStatus.CREATED, "회의가 성공적으로 생성되었습니다.") ; private final HttpStatus httpStatus; From ba8a4e082fa6e8006df1c471ba0b63d7de896f3a Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 12:37:14 +0900 Subject: [PATCH 03/16] =?UTF-8?q?#28=20[feat]=20Meeting=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20enum=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/asap/server/domain/enums/Duration.java | 5 +++++ src/main/java/com/asap/server/domain/enums/Place.java | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 src/main/java/com/asap/server/domain/enums/Duration.java create mode 100644 src/main/java/com/asap/server/domain/enums/Place.java diff --git a/src/main/java/com/asap/server/domain/enums/Duration.java b/src/main/java/com/asap/server/domain/enums/Duration.java new file mode 100644 index 00000000..8e2465ed --- /dev/null +++ b/src/main/java/com/asap/server/domain/enums/Duration.java @@ -0,0 +1,5 @@ +package com.asap.server.domain.enums; + +public enum Duration { + HALF, HOUR, HOUR_HALF, TWO_HOUR, TWO_HOUR_HALF, THREE_HOUR +} diff --git a/src/main/java/com/asap/server/domain/enums/Place.java b/src/main/java/com/asap/server/domain/enums/Place.java new file mode 100644 index 00000000..db1a138d --- /dev/null +++ b/src/main/java/com/asap/server/domain/enums/Place.java @@ -0,0 +1,5 @@ +package com.asap.server.domain.enums; + +public enum Place { + ONLINE, OFFLINE, UNDEFINED +} From f25505070d5a0c5dc4d9fc708edfd79d1e9c890d Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 13:27:21 +0900 Subject: [PATCH 04/16] =?UTF-8?q?#28=20[fix]=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20TimeSlot=20enum=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/asap/server/domain/MeetingTime.java | 6 ++++-- src/main/java/com/asap/server/domain/PreferTime.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/asap/server/domain/MeetingTime.java b/src/main/java/com/asap/server/domain/MeetingTime.java index cc162d63..da86b75f 100644 --- a/src/main/java/com/asap/server/domain/MeetingTime.java +++ b/src/main/java/com/asap/server/domain/MeetingTime.java @@ -6,6 +6,8 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; + +import com.asap.server.domain.enums.TimeSlot; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -28,7 +30,7 @@ public class MeetingTime { @Column(nullable = false) private String dayOfWeek; @Column(nullable = false) - private String startTime; + private TimeSlot startTime; @Column(nullable = false) - private String endTime; + private TimeSlot endTime; } diff --git a/src/main/java/com/asap/server/domain/PreferTime.java b/src/main/java/com/asap/server/domain/PreferTime.java index b78edd12..128336d4 100644 --- a/src/main/java/com/asap/server/domain/PreferTime.java +++ b/src/main/java/com/asap/server/domain/PreferTime.java @@ -5,6 +5,8 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; + +import com.asap.server.domain.enums.TimeSlot; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -17,7 +19,7 @@ public class PreferTime { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) - private String startTime; + private TimeSlot startTime; @Column(nullable = false) - private String endTime; + private TimeSlot endTime; } From 27dae1e62a0c30cbdaa15f3fa556cf7ef6c4be65 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 15:45:39 +0900 Subject: [PATCH 05/16] =?UTF-8?q?#28=20[fix]=20enum=EC=97=90=20String=20fi?= =?UTF-8?q?eld=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asap/server/domain/enums/Duration.java | 18 +++++++++-- .../com/asap/server/domain/enums/Place.java | 13 +++++++- .../com/asap/server/domain/enums/Role.java | 12 ++++++- .../asap/server/domain/enums/TimeSlot.java | 31 +++++++++---------- 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/asap/server/domain/enums/Duration.java b/src/main/java/com/asap/server/domain/enums/Duration.java index 8e2465ed..e2884a2f 100644 --- a/src/main/java/com/asap/server/domain/enums/Duration.java +++ b/src/main/java/com/asap/server/domain/enums/Duration.java @@ -1,5 +1,19 @@ package com.asap.server.domain.enums; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor public enum Duration { - HALF, HOUR, HOUR_HALF, TWO_HOUR, TWO_HOUR_HALF, THREE_HOUR -} + HALF("HALF"), + HOUR("HOUR"), + HOUR_HALF("HOUR_HALF"), + TWO_HOUR("TWO_HOUR"), + TWO_HOUR_HALF("TWO_HOUR_HALF"), + THREE_HOUR("THREE_HOUR"); + + @JsonValue + @Getter + private String duration; +} \ No newline at end of file diff --git a/src/main/java/com/asap/server/domain/enums/Place.java b/src/main/java/com/asap/server/domain/enums/Place.java index db1a138d..8a531ad5 100644 --- a/src/main/java/com/asap/server/domain/enums/Place.java +++ b/src/main/java/com/asap/server/domain/enums/Place.java @@ -1,5 +1,16 @@ package com.asap.server.domain.enums; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor public enum Place { - ONLINE, OFFLINE, UNDEFINED + ONLINE("ONLINE"), + OFFLINE("OFFLINE"), + UNDEFINED("UNDEFINED"); + + @Getter + @JsonValue + private String place; } diff --git a/src/main/java/com/asap/server/domain/enums/Role.java b/src/main/java/com/asap/server/domain/enums/Role.java index bc3698df..4a61f8a1 100644 --- a/src/main/java/com/asap/server/domain/enums/Role.java +++ b/src/main/java/com/asap/server/domain/enums/Role.java @@ -1,5 +1,15 @@ package com.asap.server.domain.enums; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor public enum Role { - HOST, MEMBER + HOST("HOST"), + MEMBER("MEMBER"); + + @JsonValue + @Getter + private String role; } diff --git a/src/main/java/com/asap/server/domain/enums/TimeSlot.java b/src/main/java/com/asap/server/domain/enums/TimeSlot.java index ef2dcbc0..e6063ee0 100644 --- a/src/main/java/com/asap/server/domain/enums/TimeSlot.java +++ b/src/main/java/com/asap/server/domain/enums/TimeSlot.java @@ -1,14 +1,19 @@ package com.asap.server.domain.enums; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor public enum TimeSlot { - SLOT_6_00("6:00"), - SLOT_6_30("6:30"), - SLOT_7_00("7:00"), - SLOT_7_30("7:30"), - SLOT_8_00("8:00"), - SLOT_8_30("8:30"), - SLOT_9_00("9:00"), - SLOT_9_30("9:30"), + SLOT_6_00("06:00"), + SLOT_6_30("06:30"), + SLOT_7_00("07:00"), + SLOT_7_30("07:30"), + SLOT_8_00("08:00"), + SLOT_8_30("08:30"), + SLOT_9_00("09:00"), + SLOT_9_30("09:30"), SLOT_10_00("10:00"), SLOT_10_30("10:30"), SLOT_11_00("11:00"), @@ -39,13 +44,7 @@ public enum TimeSlot { SLOT_23_30("23:30"), SLOT_24_00("24:00"); + @JsonValue + @Getter private final String time; - - private TimeSlot(String time) { - this.time = time; - } - - public String getTime() { - return time; - } } From b1fd51c9e94458e7e2ed59e702014f8af4de89d4 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 15:46:25 +0900 Subject: [PATCH 06/16] =?UTF-8?q?#28=20[fix]=20enum=EC=97=90=20String=20fi?= =?UTF-8?q?eld=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/asap/server/domain/enums/Duration.java | 2 +- src/main/java/com/asap/server/domain/enums/Role.java | 2 +- src/main/java/com/asap/server/domain/enums/TimeSlot.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/asap/server/domain/enums/Duration.java b/src/main/java/com/asap/server/domain/enums/Duration.java index e2884a2f..166cfe7c 100644 --- a/src/main/java/com/asap/server/domain/enums/Duration.java +++ b/src/main/java/com/asap/server/domain/enums/Duration.java @@ -13,7 +13,7 @@ public enum Duration { TWO_HOUR_HALF("TWO_HOUR_HALF"), THREE_HOUR("THREE_HOUR"); - @JsonValue @Getter + @JsonValue private String duration; } \ No newline at end of file diff --git a/src/main/java/com/asap/server/domain/enums/Role.java b/src/main/java/com/asap/server/domain/enums/Role.java index 4a61f8a1..d6c4f083 100644 --- a/src/main/java/com/asap/server/domain/enums/Role.java +++ b/src/main/java/com/asap/server/domain/enums/Role.java @@ -9,7 +9,7 @@ public enum Role { HOST("HOST"), MEMBER("MEMBER"); - @JsonValue @Getter + @JsonValue private String role; } diff --git a/src/main/java/com/asap/server/domain/enums/TimeSlot.java b/src/main/java/com/asap/server/domain/enums/TimeSlot.java index e6063ee0..06c903fe 100644 --- a/src/main/java/com/asap/server/domain/enums/TimeSlot.java +++ b/src/main/java/com/asap/server/domain/enums/TimeSlot.java @@ -44,7 +44,7 @@ public enum TimeSlot { SLOT_23_30("23:30"), SLOT_24_00("24:00"); - @JsonValue @Getter + @JsonValue private final String time; } From 06969065c3a8fdc7346fbc4104a73a3d3b6cb09f Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 19:12:32 +0900 Subject: [PATCH 07/16] =?UTF-8?q?#28=20[feat]=20Entity=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20+=20newInstance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asap/server/domain/DateAvailability.java | 15 +++++++ .../java/com/asap/server/domain/Meeting.java | 44 ++++++++++++++++--- .../com/asap/server/domain/PreferTime.java | 10 +++++ .../java/com/asap/server/domain/User.java | 11 +++++ 4 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/asap/server/domain/DateAvailability.java b/src/main/java/com/asap/server/domain/DateAvailability.java index 3c0f71a3..b33a318b 100644 --- a/src/main/java/com/asap/server/domain/DateAvailability.java +++ b/src/main/java/com/asap/server/domain/DateAvailability.java @@ -26,4 +26,19 @@ public class DateAvailability { @Column(nullable = false) private String dayOfWeek; + + private DateAvailability(String month, + String day, + String dayOfWeek){ + this.month = Integer.valueOf(month).toString(); + this.day = Integer.valueOf(day).toString(); + this.dayOfWeek = dayOfWeek; + } + + public static DateAvailability newInstance(String date){ + String month = date.substring(5,7); + String day = date.substring(8,10); + String dayOfWeek = date.substring(11,14); + return new DateAvailability(month, day, dayOfWeek); + } } diff --git a/src/main/java/com/asap/server/domain/Meeting.java b/src/main/java/com/asap/server/domain/Meeting.java index 66fdb021..2f84113d 100644 --- a/src/main/java/com/asap/server/domain/Meeting.java +++ b/src/main/java/com/asap/server/domain/Meeting.java @@ -15,6 +15,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.springframework.util.Base64Utils; @Entity @Getter @@ -41,17 +42,48 @@ public class Meeting { @Column(nullable = false) private Duration duration; private String additionalInfo; - @Column(nullable = false) private String url; private String imageUrl; - @Column(nullable = false) private String month; - @Column(nullable = false) private String day; - @Column(nullable = false) private String dayOfWeek; - @Column(nullable = false) private TimeSlot startTime; - @Column(nullable = false) private TimeSlot endTime; + + private Meeting(User host, + List dateAvailabilities, + List preferTimes, + String password, + String title, + Place place, + String placeDetail, + Duration duration, + String additionalInfo + ) { + this.host = host; + this.dateAvailabilities = dateAvailabilities; + this.preferTimes = preferTimes; + this.password = password; + this.title = title; + this.place = place; + this.placeDetail = placeDetail; + this.duration = duration; + this.additionalInfo = additionalInfo; + } + + public static Meeting newInstance(User host, + List dateAvailabilities, + List preferTimes, + String password, + String title, + Place place, + String placeDetail, + Duration duration, + String additionalInfo) { + return new Meeting(host, dateAvailabilities, preferTimes, password, title, place, placeDetail, duration, additionalInfo); + } + + public void setUrl(String url){ + this.url = url; + } } diff --git a/src/main/java/com/asap/server/domain/PreferTime.java b/src/main/java/com/asap/server/domain/PreferTime.java index 128336d4..1659f140 100644 --- a/src/main/java/com/asap/server/domain/PreferTime.java +++ b/src/main/java/com/asap/server/domain/PreferTime.java @@ -11,6 +11,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -22,4 +23,13 @@ public class PreferTime { private TimeSlot startTime; @Column(nullable = false) private TimeSlot endTime; + + private PreferTime(TimeSlot startTime, TimeSlot endTime){ + this.startTime = startTime; + this.endTime = endTime; + } + + public static PreferTime newInstance(TimeSlot startTime, TimeSlot endTime){ + return new PreferTime(startTime, endTime); + } } diff --git a/src/main/java/com/asap/server/domain/User.java b/src/main/java/com/asap/server/domain/User.java index f303caa7..52c708ee 100644 --- a/src/main/java/com/asap/server/domain/User.java +++ b/src/main/java/com/asap/server/domain/User.java @@ -1,11 +1,13 @@ package com.asap.server.domain; import com.asap.server.domain.enums.Role; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; + import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -23,4 +25,13 @@ public class User { @Column(nullable = false) private Role role; + + private User(String name, Role role) { + this.name = name; + this.role = role; + } + + public static User newInstance(String name, Role role){ + return new User(name, role); + } } From e189cde1ac2945e254f167c7ced0ecf0928b0391 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 19:13:42 +0900 Subject: [PATCH 08/16] =?UTF-8?q?#28=20[feat]=20Error=20enum=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/asap/server/exception/Error.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/asap/server/exception/Error.java b/src/main/java/com/asap/server/exception/Error.java index db1aea22..ef40459f 100644 --- a/src/main/java/com/asap/server/exception/Error.java +++ b/src/main/java/com/asap/server/exception/Error.java @@ -23,6 +23,7 @@ public enum Error { * 404 NOT FOUND */ USER_NOT_FOUND_EXCEPTION(HttpStatus.NOT_FOUND, "해당 유저는 존재하지 않습니다."), + MEETING_NOT_FOUND_EXCEPTION(HttpStatus.NOT_FOUND, "해당 회의는 존재하지 않습니다."), /** * 500 INTERNAL SERVER ERROR */ From 5b57b8ef6f1ff590bedb886e7354e6efbed68c9e Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 19:14:16 +0900 Subject: [PATCH 09/16] =?UTF-8?q?#28=20[feat]=20RequestDto=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/MeetingSaveRequestDto.java | 46 +++++++++++++++++++ .../dto/request/PreferTimeSaveRequestDto.java | 15 ++++++ 2 files changed, 61 insertions(+) create mode 100644 src/main/java/com/asap/server/controller/dto/request/MeetingSaveRequestDto.java create mode 100644 src/main/java/com/asap/server/controller/dto/request/PreferTimeSaveRequestDto.java diff --git a/src/main/java/com/asap/server/controller/dto/request/MeetingSaveRequestDto.java b/src/main/java/com/asap/server/controller/dto/request/MeetingSaveRequestDto.java new file mode 100644 index 00000000..75865086 --- /dev/null +++ b/src/main/java/com/asap/server/controller/dto/request/MeetingSaveRequestDto.java @@ -0,0 +1,46 @@ +package com.asap.server.controller.dto.request; + +import com.asap.server.domain.enums.Duration; +import com.asap.server.domain.enums.Place; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +import java.util.List; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class MeetingSaveRequestDto { + + @NotBlank(message = "회의 제목이 입력되지 않았습니다.") + @Size(max = 15 , message = "제목의 최대 입력 길이(15자)를 초과했습니다.") + private String title; + + private List availableDateList; + + private List preferTimeSaveRequestDtoList; + + @NotNull(message = "회의 형식이 입력되지 않았습니다.") + private Place place; + + private String placeDetail; + + @NotNull(message = "회의 진행 시간이 입력되지 않았습니다.") + private Duration duration; + + @NotBlank(message = "방장의 이름이 입력되지 않았습니다.") + @Size(max = 8 , message = "방장 이름의 최대 입력 길이(8자)를 초과했습니다.") + private String name; + + @NotBlank(message = "회의 비밀번호가 입력되지 않았습니다.") + @Size(min = 4, message = "비밀번호의 최소 입력 길이는 4자입니다.") + @Pattern(regexp = "\\d{4,}", message = "비밀번호는 4자리 이상 숫자입니다.") + private String password; + + @Size(max = 50, message = "추가 내용의 최대 입력 길이(50자)를 초과했습니다.") + private String additionalInfo; +} diff --git a/src/main/java/com/asap/server/controller/dto/request/PreferTimeSaveRequestDto.java b/src/main/java/com/asap/server/controller/dto/request/PreferTimeSaveRequestDto.java new file mode 100644 index 00000000..354556c0 --- /dev/null +++ b/src/main/java/com/asap/server/controller/dto/request/PreferTimeSaveRequestDto.java @@ -0,0 +1,15 @@ +package com.asap.server.controller.dto.request; + +import com.asap.server.domain.enums.TimeSlot; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class PreferTimeSaveRequestDto { + + private TimeSlot startTime; + + private TimeSlot endTime; +} From 8e5d0ceb577d97dbe37acb17741e675bbd620987 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 19:14:56 +0900 Subject: [PATCH 10/16] =?UTF-8?q?#28=20[feat]=20Controller=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/controller/MeetingController.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/com/asap/server/controller/MeetingController.java diff --git a/src/main/java/com/asap/server/controller/MeetingController.java b/src/main/java/com/asap/server/controller/MeetingController.java new file mode 100644 index 00000000..73996753 --- /dev/null +++ b/src/main/java/com/asap/server/controller/MeetingController.java @@ -0,0 +1,30 @@ +package com.asap.server.controller; + +import com.asap.server.common.dto.ApiResponse; +import com.asap.server.controller.dto.request.MeetingSaveRequestDto; +import com.asap.server.controller.dto.response.MeetingSaveResponseDto; +import com.asap.server.exception.Success; +import com.asap.server.service.MeetingService; +import com.asap.server.service.UserService; +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 javax.validation.Valid; + +@RestController +@RequestMapping("/meeting") +@RequiredArgsConstructor +public class MeetingController { + private final MeetingService meetingService; + private final UserService userService; + + @PostMapping("") + public ApiResponse create(@RequestBody @Valid MeetingSaveRequestDto meetingSaveRequestDto){ + String accessToken = userService.createHost(meetingSaveRequestDto.getName()); + String uri = meetingService.create(meetingSaveRequestDto); + return ApiResponse.success(Success.CREATE_MEETING_SUCCESS, new MeetingSaveResponseDto(uri, accessToken)); + } +} From f2e7729d803968e58d6479e8669316ea91c75039 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 19:15:25 +0900 Subject: [PATCH 11/16] =?UTF-8?q?#28=20[feat]=20ResponseDto=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/MeetingSaveResponseDto.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java diff --git a/src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java b/src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java new file mode 100644 index 00000000..18be165a --- /dev/null +++ b/src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java @@ -0,0 +1,12 @@ +package com.asap.server.controller.dto.response; + +import com.asap.server.domain.enums.Role; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class MeetingSaveResponseDto { + private String url; + private String accessToken; +} \ No newline at end of file From 304c1c95142f0877201e4d3f3ef9a0178d8b2883 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 19:15:48 +0900 Subject: [PATCH 12/16] =?UTF-8?q?#28=20[feat]=20Repository=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/repository/DateAvailabilityRepository.java | 7 +++++++ .../com/asap/server/repository/MeetingRepository.java | 11 +++++++++++ .../asap/server/repository/PreferTimeRepository.java | 7 +++++++ .../com/asap/server/repository/UserRepository.java | 10 +++++++++- 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/asap/server/repository/DateAvailabilityRepository.java create mode 100644 src/main/java/com/asap/server/repository/MeetingRepository.java create mode 100644 src/main/java/com/asap/server/repository/PreferTimeRepository.java diff --git a/src/main/java/com/asap/server/repository/DateAvailabilityRepository.java b/src/main/java/com/asap/server/repository/DateAvailabilityRepository.java new file mode 100644 index 00000000..79449414 --- /dev/null +++ b/src/main/java/com/asap/server/repository/DateAvailabilityRepository.java @@ -0,0 +1,7 @@ +package com.asap.server.repository; + +import com.asap.server.domain.DateAvailability; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface DateAvailabilityRepository extends JpaRepository { +} diff --git a/src/main/java/com/asap/server/repository/MeetingRepository.java b/src/main/java/com/asap/server/repository/MeetingRepository.java new file mode 100644 index 00000000..b05f41f5 --- /dev/null +++ b/src/main/java/com/asap/server/repository/MeetingRepository.java @@ -0,0 +1,11 @@ +package com.asap.server.repository; + +import com.asap.server.domain.Meeting; +import org.springframework.data.repository.Repository; + +import java.util.Optional; + +public interface MeetingRepository extends Repository { + void save(Meeting meeting); + Optional findById(Long id); +} diff --git a/src/main/java/com/asap/server/repository/PreferTimeRepository.java b/src/main/java/com/asap/server/repository/PreferTimeRepository.java new file mode 100644 index 00000000..73d94c4e --- /dev/null +++ b/src/main/java/com/asap/server/repository/PreferTimeRepository.java @@ -0,0 +1,7 @@ +package com.asap.server.repository; + +import com.asap.server.domain.PreferTime; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PreferTimeRepository extends JpaRepository { +} diff --git a/src/main/java/com/asap/server/repository/UserRepository.java b/src/main/java/com/asap/server/repository/UserRepository.java index 5274351d..d62c4abc 100644 --- a/src/main/java/com/asap/server/repository/UserRepository.java +++ b/src/main/java/com/asap/server/repository/UserRepository.java @@ -1,4 +1,12 @@ package com.asap.server.repository; -public interface UserRepository { +import com.asap.server.domain.User; +import org.springframework.data.repository.Repository; + +import java.util.Optional; + +public interface UserRepository extends Repository { + + void save(User user); + Optional findByName(String name); } From c055a0b4d5618cf8ac5b2262d971f5c17b6e6462 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 19:16:22 +0900 Subject: [PATCH 13/16] =?UTF-8?q?#28=20[feat]=20userService,=20MeetingServ?= =?UTF-8?q?ice=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asap/server/service/MeetingService.java | 63 +++++++++++++++++++ .../com/asap/server/service/UserService.java | 21 +++++++ 2 files changed, 84 insertions(+) create mode 100644 src/main/java/com/asap/server/service/MeetingService.java diff --git a/src/main/java/com/asap/server/service/MeetingService.java b/src/main/java/com/asap/server/service/MeetingService.java new file mode 100644 index 00000000..f5b663b2 --- /dev/null +++ b/src/main/java/com/asap/server/service/MeetingService.java @@ -0,0 +1,63 @@ +package com.asap.server.service; + +import com.asap.server.controller.dto.request.MeetingSaveRequestDto; +import com.asap.server.domain.DateAvailability; +import com.asap.server.domain.Meeting; +import com.asap.server.domain.PreferTime; +import com.asap.server.domain.User; +import com.asap.server.exception.model.NotFoundException; +import com.asap.server.repository.DateAvailabilityRepository; +import com.asap.server.repository.MeetingRepository; +import com.asap.server.repository.PreferTimeRepository; +import com.asap.server.repository.UserRepository; +import com.asap.server.exception.Error; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Base64Utils; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class MeetingService { + + private final MeetingRepository meetingRepository; + private final UserRepository userRepository; + private final DateAvailabilityRepository dateAvailabilityRepository; + private final PreferTimeRepository preferTimeRepository; + + @Transactional + public String create(MeetingSaveRequestDto meetingSaveRequestDto){ + List dateAvailabilityList = meetingSaveRequestDto + .getAvailableDateList() + .stream() + .map(s -> DateAvailability.newInstance(s)) + .collect(Collectors.toList()); + dateAvailabilityRepository.saveAllAndFlush(dateAvailabilityList); + List preferTimeList = meetingSaveRequestDto + .getPreferTimeSaveRequestDtoList() + .stream() + .map(PreferTimeSaveRequestDto -> PreferTime.newInstance(PreferTimeSaveRequestDto.getStartTime(), PreferTimeSaveRequestDto.getEndTime())) + .collect(Collectors.toList()); + preferTimeRepository.saveAllAndFlush(preferTimeList); + User host = userRepository.findByName(meetingSaveRequestDto.getName()).orElseThrow(() -> new NotFoundException(Error.USER_NOT_FOUND_EXCEPTION)); + Meeting newMeeting = Meeting.newInstance( + host, + dateAvailabilityList, + preferTimeList, + meetingSaveRequestDto.getPassword(), + meetingSaveRequestDto.getTitle(), + meetingSaveRequestDto.getPlace(), + meetingSaveRequestDto.getPlaceDetail(), + meetingSaveRequestDto.getDuration(), + meetingSaveRequestDto.getAdditionalInfo()); + meetingRepository.save(newMeeting); + Meeting meeting = meetingRepository.findById(newMeeting.getId()).orElseThrow(() -> new NotFoundException(Error.MEETING_NOT_FOUND_EXCEPTION)); + meeting.setUrl(Base64Utils.encodeToUrlSafeString(meeting.getId().toString().getBytes())); + meetingRepository.save(meeting); + return newMeeting.getUrl(); + } +} diff --git a/src/main/java/com/asap/server/service/UserService.java b/src/main/java/com/asap/server/service/UserService.java index 08ea3091..bbfe8b89 100644 --- a/src/main/java/com/asap/server/service/UserService.java +++ b/src/main/java/com/asap/server/service/UserService.java @@ -1,4 +1,25 @@ package com.asap.server.service; +import com.asap.server.config.jwt.JwtService; +import com.asap.server.domain.User; +import com.asap.server.domain.enums.Role; +import com.asap.server.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + + +@Service +@RequiredArgsConstructor public class UserService { + private final UserRepository userRepository; + private final JwtService jwtService; + @Transactional + public String createHost(String name){ + User newUser = User.newInstance(name, Role.HOST); + userRepository.save(newUser); + return jwtService.issuedToken(newUser.getId().toString()); + } } From a261935298664dda53ad01fb0dd0346872f197ac Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 20:54:38 +0900 Subject: [PATCH 14/16] =?UTF-8?q?#28=20[feat]=20meetingService,=20userServ?= =?UTF-8?q?ice=20=EB=B0=98=ED=99=98=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/controller/MeetingController.java | 7 ++----- .../com/asap/server/service/MeetingService.java | 16 +++++++++------- .../com/asap/server/service/UserService.java | 4 ++-- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/asap/server/controller/MeetingController.java b/src/main/java/com/asap/server/controller/MeetingController.java index 73996753..cfa45f53 100644 --- a/src/main/java/com/asap/server/controller/MeetingController.java +++ b/src/main/java/com/asap/server/controller/MeetingController.java @@ -19,12 +19,9 @@ @RequiredArgsConstructor public class MeetingController { private final MeetingService meetingService; - private final UserService userService; @PostMapping("") - public ApiResponse create(@RequestBody @Valid MeetingSaveRequestDto meetingSaveRequestDto){ - String accessToken = userService.createHost(meetingSaveRequestDto.getName()); - String uri = meetingService.create(meetingSaveRequestDto); - return ApiResponse.success(Success.CREATE_MEETING_SUCCESS, new MeetingSaveResponseDto(uri, accessToken)); + public ApiResponse create(@RequestBody @Valid MeetingSaveRequestDto meetingSaveRequestDto){ + return ApiResponse.success(Success.CREATE_MEETING_SUCCESS, meetingService.create(meetingSaveRequestDto) ); } } diff --git a/src/main/java/com/asap/server/service/MeetingService.java b/src/main/java/com/asap/server/service/MeetingService.java index f5b663b2..0b8605f4 100644 --- a/src/main/java/com/asap/server/service/MeetingService.java +++ b/src/main/java/com/asap/server/service/MeetingService.java @@ -1,6 +1,8 @@ package com.asap.server.service; +import com.asap.server.config.jwt.JwtService; import com.asap.server.controller.dto.request.MeetingSaveRequestDto; +import com.asap.server.controller.dto.response.MeetingSaveResponseDto; import com.asap.server.domain.DateAvailability; import com.asap.server.domain.Meeting; import com.asap.server.domain.PreferTime; @@ -25,12 +27,13 @@ public class MeetingService { private final MeetingRepository meetingRepository; - private final UserRepository userRepository; + private final UserService userService; private final DateAvailabilityRepository dateAvailabilityRepository; private final PreferTimeRepository preferTimeRepository; + private final JwtService jwtService; @Transactional - public String create(MeetingSaveRequestDto meetingSaveRequestDto){ + public MeetingSaveResponseDto create(MeetingSaveRequestDto meetingSaveRequestDto){ List dateAvailabilityList = meetingSaveRequestDto .getAvailableDateList() .stream() @@ -43,7 +46,7 @@ public String create(MeetingSaveRequestDto meetingSaveRequestDto){ .map(PreferTimeSaveRequestDto -> PreferTime.newInstance(PreferTimeSaveRequestDto.getStartTime(), PreferTimeSaveRequestDto.getEndTime())) .collect(Collectors.toList()); preferTimeRepository.saveAllAndFlush(preferTimeList); - User host = userRepository.findByName(meetingSaveRequestDto.getName()).orElseThrow(() -> new NotFoundException(Error.USER_NOT_FOUND_EXCEPTION)); + User host = userService.createHost(meetingSaveRequestDto.getName()); Meeting newMeeting = Meeting.newInstance( host, dateAvailabilityList, @@ -55,9 +58,8 @@ public String create(MeetingSaveRequestDto meetingSaveRequestDto){ meetingSaveRequestDto.getDuration(), meetingSaveRequestDto.getAdditionalInfo()); meetingRepository.save(newMeeting); - Meeting meeting = meetingRepository.findById(newMeeting.getId()).orElseThrow(() -> new NotFoundException(Error.MEETING_NOT_FOUND_EXCEPTION)); - meeting.setUrl(Base64Utils.encodeToUrlSafeString(meeting.getId().toString().getBytes())); - meetingRepository.save(meeting); - return newMeeting.getUrl(); + String accessToken = jwtService.issuedToken(host.getId().toString()); + newMeeting.setUrl(Base64Utils.encodeToUrlSafeString(newMeeting.getId().toString().getBytes())); + return new MeetingSaveResponseDto(newMeeting.getUrl(), accessToken); } } diff --git a/src/main/java/com/asap/server/service/UserService.java b/src/main/java/com/asap/server/service/UserService.java index bbfe8b89..4f0164be 100644 --- a/src/main/java/com/asap/server/service/UserService.java +++ b/src/main/java/com/asap/server/service/UserService.java @@ -17,9 +17,9 @@ public class UserService { private final UserRepository userRepository; private final JwtService jwtService; @Transactional - public String createHost(String name){ + public User createHost(String name){ User newUser = User.newInstance(name, Role.HOST); userRepository.save(newUser); - return jwtService.issuedToken(newUser.getId().toString()); + return newUser; } } From 63626eb11b708524366ee2cd4f45a471e817f54a Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 21:03:50 +0900 Subject: [PATCH 15/16] =?UTF-8?q?#28=20[feat]=20=EB=AF=B8=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20import=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20jwtServic?= =?UTF-8?q?e=20=EC=88=98=EC=A0=95=20-=20role=20=ED=8E=98=EC=9D=B4=EB=A1=9C?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/asap/server/config/jwt/JwtService.java | 1 + .../java/com/asap/server/controller/MeetingController.java | 1 - .../server/controller/dto/response/MeetingSaveResponseDto.java | 1 - src/main/java/com/asap/server/service/MeetingService.java | 3 --- src/main/java/com/asap/server/service/UserService.java | 2 -- 5 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/asap/server/config/jwt/JwtService.java b/src/main/java/com/asap/server/config/jwt/JwtService.java index 65dbb6cc..e5b480af 100644 --- a/src/main/java/com/asap/server/config/jwt/JwtService.java +++ b/src/main/java/com/asap/server/config/jwt/JwtService.java @@ -37,6 +37,7 @@ public String issuedToken(String userId) { .setExpiration(new Date(now.getTime() + 24 * 60 * 60 * 1000L)); claims.put("userId",userId); + claims.put("role", "HOST"); return Jwts.builder() .setHeaderParam(Header.TYPE, Header.JWT_TYPE) diff --git a/src/main/java/com/asap/server/controller/MeetingController.java b/src/main/java/com/asap/server/controller/MeetingController.java index cfa45f53..efd576da 100644 --- a/src/main/java/com/asap/server/controller/MeetingController.java +++ b/src/main/java/com/asap/server/controller/MeetingController.java @@ -5,7 +5,6 @@ import com.asap.server.controller.dto.response.MeetingSaveResponseDto; import com.asap.server.exception.Success; import com.asap.server.service.MeetingService; -import com.asap.server.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java b/src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java index 18be165a..e50471bd 100644 --- a/src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java +++ b/src/main/java/com/asap/server/controller/dto/response/MeetingSaveResponseDto.java @@ -1,6 +1,5 @@ package com.asap.server.controller.dto.response; -import com.asap.server.domain.enums.Role; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/asap/server/service/MeetingService.java b/src/main/java/com/asap/server/service/MeetingService.java index 0b8605f4..89d28854 100644 --- a/src/main/java/com/asap/server/service/MeetingService.java +++ b/src/main/java/com/asap/server/service/MeetingService.java @@ -7,12 +7,9 @@ import com.asap.server.domain.Meeting; import com.asap.server.domain.PreferTime; import com.asap.server.domain.User; -import com.asap.server.exception.model.NotFoundException; import com.asap.server.repository.DateAvailabilityRepository; import com.asap.server.repository.MeetingRepository; import com.asap.server.repository.PreferTimeRepository; -import com.asap.server.repository.UserRepository; -import com.asap.server.exception.Error; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/asap/server/service/UserService.java b/src/main/java/com/asap/server/service/UserService.java index 4f0164be..89f11f03 100644 --- a/src/main/java/com/asap/server/service/UserService.java +++ b/src/main/java/com/asap/server/service/UserService.java @@ -1,6 +1,5 @@ package com.asap.server.service; -import com.asap.server.config.jwt.JwtService; import com.asap.server.domain.User; import com.asap.server.domain.enums.Role; import com.asap.server.repository.UserRepository; @@ -15,7 +14,6 @@ @RequiredArgsConstructor public class UserService { private final UserRepository userRepository; - private final JwtService jwtService; @Transactional public User createHost(String name){ User newUser = User.newInstance(name, Role.HOST); From 0ac49f5d71a487ec9b0fe40defe09dbca4fc92ad Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 11 Jul 2023 21:25:09 +0900 Subject: [PATCH 16/16] =?UTF-8?q?#28=20[refacor]=20@PostMapping=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/asap/server/controller/MeetingController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/asap/server/controller/MeetingController.java b/src/main/java/com/asap/server/controller/MeetingController.java index efd576da..f6f73bdd 100644 --- a/src/main/java/com/asap/server/controller/MeetingController.java +++ b/src/main/java/com/asap/server/controller/MeetingController.java @@ -19,7 +19,7 @@ public class MeetingController { private final MeetingService meetingService; - @PostMapping("") + @PostMapping public ApiResponse create(@RequestBody @Valid MeetingSaveRequestDto meetingSaveRequestDto){ return ApiResponse.success(Success.CREATE_MEETING_SUCCESS, meetingService.create(meetingSaveRequestDto) ); }