Skip to content

Commit

Permalink
Merge pull request #180 from swyp3-babpool/develop
Browse files Browse the repository at this point in the history
release: Develop merge into main
  • Loading branch information
proHyundo authored Jul 22, 2024
2 parents c399960 + 071a32b commit f4b2d77
Show file tree
Hide file tree
Showing 135 changed files with 4,103 additions and 1,198 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/github-actions-server.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Spring Boot Gradle CICD (version 0.1.9)
name: Spring Boot Gradle CICD (version 0.2.0)

on:
push:
Expand Down
9 changes: 8 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ dependencies {
implementation 'com.mysql:mysql-connector-j'
implementation group: 'org.bgee.log4jdbc-log4j2', name:'log4jdbc-log4j2-jdbc4.1', version: '1.16'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.3'
// implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.3' // Not working with Mac Silicon
implementation group: 'com.github.codemonstur', name: 'embedded-redis', version: '1.4.3'
runtimeOnly 'io.netty:netty-resolver-dns-native-macos:4.1.104.Final:osx-aarch_64'

/* JWT */
implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
Expand All @@ -56,6 +58,9 @@ dependencies {
/* UUID */
implementation 'com.fasterxml.uuid:java-uuid-generator:4.3.0'

/* TSID */
implementation 'com.github.f4b6a3:tsid-creator:5.2.6'

/* AWS */
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

Expand All @@ -77,6 +82,8 @@ dependencies {
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
testImplementation 'com.h2database:h2'

/* Swagger */
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'

}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.swyp3.babpool.domain.appointment.api;

import com.swyp3.babpool.domain.appointment.api.request.AppointmentAcceptRequest;
import com.swyp3.babpool.domain.appointment.api.request.AppointmentCreateRequest;
import com.swyp3.babpool.domain.appointment.api.request.AppointmentRejectRequest;
import com.swyp3.babpool.domain.appointment.application.AppointmentService;
import com.swyp3.babpool.domain.appointment.api.request.AppointmentCreateRequest;
import com.swyp3.babpool.domain.appointment.application.response.*;
import com.swyp3.babpool.domain.appointment.application.response.appointmentdetail.AppointmentDetailResponse;
import com.swyp3.babpool.domain.facade.ProfilePossibleDateTimeFacade;
import com.swyp3.babpool.global.common.response.ApiResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Positive;
Expand All @@ -23,15 +24,30 @@
public class AppointmentApi {

private final AppointmentService appointmentService;
private final ProfilePossibleDateTimeFacade profilePossibleDateTimeFacade;

// /**
// * λ°₯μ•½ μš”μ²­ API
// * @deprecated [2024.07.12] λ™μ‹œμ„± 처리λ₯Ό μœ„ν•œ λ²„μ „μœΌλ‘œ λŒ€μ²΄
// */
// @Deprecated
// @PostMapping("/api/deprecated/appointment")
// public ApiResponse<AppointmentCreateResponse> makeAppointment(@RequestAttribute(value = "userId", required = false) Long userId,
// @RequestBody @Valid AppointmentCreateRequestDeprecated appointmentCreateRequestDeprecated) {
// appointmentCreateRequestDeprecated.setRequesterUserId(userId);
// return ApiResponse.ok(appointmentService.makeAppointment(appointmentCreateRequestDeprecated));
// }

/**
* λ°₯μ•½ μš”μ²­ API
* λ°₯μ•½ μš”μ²­ API : λ™μ‹œμ„± 처리λ₯Ό μœ„ν•œ 버전
*/
@PostMapping("/api/appointment")
public ApiResponse<AppointmentCreateResponse> makeAppointment(@RequestAttribute(value = "userId", required = false) Long userId,
@RequestBody @Valid AppointmentCreateRequest appointmentCreateRequest) {
appointmentCreateRequest.setRequesterUserId(userId);
return ApiResponse.ok(appointmentService.makeAppointment(appointmentCreateRequest));
public ApiResponse<AppointmentCreateResponse> createAppointment(@RequestAttribute(value = "userId", required = false) Long userId,
@RequestBody @Validated AppointmentCreateRequest appointmentCreateRequest) {
appointmentCreateRequest.setSenderUserId(userId);
appointmentCreateRequest.setReceiverUserId(
profilePossibleDateTimeFacade.getUserIdByProfileId(appointmentCreateRequest.getTargetProfileId()));
return ApiResponse.ok(appointmentService.makeAppointmentResolveConcurrency(appointmentCreateRequest));
}

/**
Expand Down Expand Up @@ -67,12 +83,12 @@ public ApiResponse<List<AppointmentHistoryRefuseResponse>> getRefusedAppointment
}

/**
* νŠΉμ • ν”„λ‘œν•„ μΉ΄λ“œκ°€ ν™œμ„±ν™” ν•΄λ‘”, λ°₯μ•½ κ°€λŠ₯ν•œ possibleTimeId와 식별값에 λ”°λ₯Έ λ‚ μ§œ 및 μ‹œκ°„ 쑰회 API
* @param profileId ν”„λ‘œν•„ 식별값
* λ°₯μ•½ 거절 μ‚¬μœ  쑰회 API
*/
@GetMapping("/api/appointment/{profileId}/datetime")
public ApiResponse<List<AppointmentPossibleDateTimeResponse>> getAppointmentPossibleDateTime(@PathVariable @Positive(message = "Must be positive") Long profileId) {
return ApiResponse.ok(appointmentService.getAppointmentPossibleDateTime(profileId));
@GetMapping("/api/appointment/refuse/{appointmentId}")
public ApiResponse<AppointmentRefuseDetailResponse> getRefuseAppointmentDetail(@RequestAttribute(value="userId", required = false) Long userId,
@PathVariable("appointmentId") Long appointmentId){
return ApiResponse.ok(appointmentService.getRefuseAppointmentDetail(userId, appointmentId));
}

/**
Expand Down Expand Up @@ -112,12 +128,5 @@ public ApiResponse<AppointmentCancelResponse> cancelAppointment(@RequestAttribut
return ApiResponse.ok(appointmentService.cancelAppointmentRequested(userId,appointmentId));
}

/**
* λ°₯μ•½ 거절 μ‚¬μœ  쑰회 API
*/
@GetMapping("/api/appointment/refuse/{appointmentId}")
public ApiResponse<AppointmentRefuseDetailResponse> getRefuseAppointmentDetail(@RequestAttribute(value="userId", required = false) Long userId,
@PathVariable("appointmentId") Long appointmentId){
return ApiResponse.ok(appointmentService.getRefuseAppointmentDetail(userId,appointmentId));
}

}
Original file line number Diff line number Diff line change
@@ -1,57 +1,72 @@
package com.swyp3.babpool.domain.appointment.api.request;

import com.swyp3.babpool.domain.appointment.domain.Appointment;
import com.swyp3.babpool.domain.appointment.domain.AppointmentStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.*;
import lombok.*;


import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Positive;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.List;
import java.time.LocalDateTime;

@ToString
@Getter
@NoArgsConstructor
public class AppointmentCreateRequest {

private Long appointmentId; // Not include in request body
private Long requesterUserId; // Not include in request body
private Long receiverUserId; // Not include in request body
@Schema(description = "λ°₯μ•½ 식별 κ°’", example = "null", nullable = true)
@Setter
@Null
private Long appointmentId;

@Schema(description = "λ°₯μ•½ μ†‘μ‹ μž 식별 κ°’", example = "null", nullable = true)
@Setter
@Null
private Long senderUserId;

@Schema(description = "λ°₯μ•½ μˆ˜μ‹ μž 식별 κ°’", example = "null", nullable = true)
@Setter
@Null
private Long receiverUserId;

@Schema(description = "λ°₯μ•½ μˆ˜μ‹ μž ν”„λ‘œν•„ 식별 κ°’", example = "222222222222222222")
@Positive(message = "μš”μ²­ λŒ€μƒ ν”„λ‘œν•„ 식별 값이 μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.")
private Long targetProfileId;
@NotEmpty(message = "κ°€λŠ₯ν•œ μ‹œκ°„ λ¦¬μŠ€νŠΈκ°€ λΉ„μ–΄μžˆμŠ΅λ‹ˆλ‹€.")
private List<Long> possibleTimeIdList;

@Schema(description = "일정 식별 κ°’", example = "null", nullable = true)
@Setter
@Null
private Long possibleDateTimeId;

@Schema(description = "κ°€λŠ₯ν•œ 일정 κ°’", example = "2024-07-12T03:00:00")
@NotNull(message = "κ°€λŠ₯ν•œ 일정 값이 λΉ„μ–΄μžˆμŠ΅λ‹ˆλ‹€.")
private LocalDateTime possibleDateTime;

@Schema(description = "질문 λ‚΄μš©", example = "λ°₯μ•½ κ°€λŠ₯ν•œκ°€μš”?")
@NotBlank(message = "질문 λ‚΄μš©μ΄ λΉ„μ–΄μžˆμŠ΅λ‹ˆλ‹€.")
private String questionContents;
private Long appointmentRequestId; // Not include in request body
private String appointmentContent;

@Builder
public AppointmentCreateRequest(Long appointmentId, Long requesterUserId, Long receiverUserId, Long targetProfileId, List<Long> possibleTimeIdList, String questionContents, Long appointmentRequestId) {
public AppointmentCreateRequest(Long appointmentId, Long senderUserId, Long receiverUserId, Long targetProfileId, Long possibleDateTimeId, LocalDateTime possibleDateTime, String appointmentContent) {
this.appointmentId = appointmentId;
this.requesterUserId = requesterUserId;
this.senderUserId = senderUserId;
this.receiverUserId = receiverUserId;
this.targetProfileId = targetProfileId;
this.possibleTimeIdList = possibleTimeIdList;
this.questionContents = questionContents;
this.appointmentRequestId = appointmentRequestId;
}

public void setAppointmentId(Long appointmentId) {
this.appointmentId = appointmentId;
}

public void setRequesterUserId(Long userId) {
this.requesterUserId = userId;
this.possibleDateTimeId = possibleDateTimeId;
this.possibleDateTime = possibleDateTime;
this.appointmentContent = appointmentContent;
}

public void setReceiverUserId(Long targetReceiverUserId) {
this.receiverUserId = targetReceiverUserId;
public Appointment toEntity() {
return Appointment.builder()
.appointmentId(appointmentId)
.appointmentSenderId(senderUserId)
.appointmentReceiverId(receiverUserId)
.possibleDateTimeId(possibleDateTimeId)
.appointmentStatus(AppointmentStatus.WAITING)
.appointmentContent(appointmentContent)
.appointmentCreateDate(LocalDateTime.now())
.appointmentModifyDate(LocalDateTime.now())
.build();
}

public void setAppointmentRequestId(Long appointmentRequestId) {
this.appointmentRequestId = appointmentRequestId;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
package com.swyp3.babpool.domain.appointment.api.request;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Null;
import lombok.Builder;
import lombok.Getter;

@Getter
public class AppointmentRejectRequest {
@Null
private Long rejectId;
@NotNull(message = "appointmentIdλŠ” ν•„μˆ˜ κ°’μž…λ‹ˆλ‹€.")
private Long appointmentId;
@NotEmpty(message = "거절 λ©”μ‹œμ§€λŠ” ν•„μˆ˜ κ°’μž…λ‹ˆλ‹€.")
private String rejectMessage;

@Builder
public AppointmentRejectRequest(Long rejectId, Long appointmentId, String rejectMessage) {
this.rejectId = rejectId;
this.appointmentId = appointmentId;
this.rejectMessage = rejectMessage;
}

public void setRejectId(Long rejectId) {
this.rejectId = rejectId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import com.swyp3.babpool.domain.appointment.api.request.AppointmentRejectRequest;
import com.swyp3.babpool.domain.appointment.application.response.*;
import com.swyp3.babpool.domain.appointment.application.response.appointmentdetail.AppointmentDetailResponse;
import com.swyp3.babpool.domain.appointment.domain.AppointmentStatus;

import java.util.List;

public interface AppointmentService {
AppointmentCreateResponse makeAppointment(AppointmentCreateRequest appointmentCreateRequest);

AppointmentCreateResponse makeAppointmentResolveConcurrency(AppointmentCreateRequest appointmentCreateRequest);

List<AppointmentSendResponse> getSendAppointmentList(Long userId);

Expand All @@ -19,7 +21,7 @@ public interface AppointmentService {

List<AppointmentHistoryRefuseResponse> getRefusedAppointmentList(Long userId);

List<AppointmentPossibleDateTimeResponse> getAppointmentPossibleDateTime(Long profileId);
// List<AppointmentPossibleDateTimeResponse> getAppointmentPossibleDateTime(Long profileId);

AppointmentRejectResponse rejectAppointment(AppointmentRejectRequest appointmentRejectRequest, Long userId);

Expand All @@ -30,4 +32,8 @@ public interface AppointmentService {
AppointmentCancelResponse cancelAppointmentRequested(Long userId, Long appointmentId);

AppointmentRefuseDetailResponse getRefuseAppointmentDetail(Long userId, Long appointmentId);

int updateAppointmentStatusTo(AppointmentStatus appointmentStatus, Long appointmentId);

Long getAppointmentSenderId(Long targetAppointmentId);
}
Loading

0 comments on commit f4b2d77

Please sign in to comment.