From 1640fef18116c127d566433b3426a438f96c8976 Mon Sep 17 00:00:00 2001 From: aalicic Date: Sun, 24 Jul 2022 16:43:05 +0200 Subject: [PATCH] feat/VIC-837-Admin-can-create-and-edit-team --- services/appointmentService.yaml | 144 ++++++++++++------ .../web/controller/UserAdminController.java | 20 +-- .../AppointmentConsultantApiClientConfig.java | 1 - .../appointment/AppointmentService.java | 18 +++ .../web/controller/UserAdminControllerIT.java | 6 + 5 files changed, 134 insertions(+), 55 deletions(-) diff --git a/services/appointmentService.yaml b/services/appointmentService.yaml index 0879df36c..c68f08fe8 100644 --- a/services/appointmentService.yaml +++ b/services/appointmentService.yaml @@ -162,6 +162,38 @@ paths: application/json: schema: $ref: '#/components/schemas/MeetingSlug' + /agencies/agencyConsultantsSync: + post: + tags: + - agency + summary: Sycronise consultant and agency data with calcom + operationId: agencyConsultantsSync + requestBody: + description: Agency object for which a team needs to be added to cal.com with consultants + content: + application/json: + schema: + $ref: '#/components/schemas/AgencyConsultantSyncRequestDTO' + required: true + responses: + '200': + description: successful operation + /agencies/agencyMasterDataSync: + post: + tags: + - agency + summary: Sycronise agency master data with team data. For example name of agency ... + operationId: agencyMasterDataSync + requestBody: + description: Agency object for which a team needs to be added to cal.com + content: + application/json: + schema: + $ref: '#/components/schemas/AgencyMasterDataSyncRequestDTO' + required: true + responses: + '200': + description: successful operation /agencies: post: tags: @@ -295,26 +327,6 @@ paths: application/json: schema: $ref: '#/components/schemas/MeetingSlug' - /askers/{askerId}/meetingSlug: - get: - tags: - - asker - summary: Get meeting booking link for an askers assigned consultant - operationId: getAskerMeetingSlug - parameters: - - name: askerId - in: path - description: ID of onber asker - required: true - schema: - type: string - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/MeetingSlug' /askers/{askerId}/bookings: get: tags: @@ -335,26 +347,6 @@ paths: application/json: schema: $ref: '#/components/schemas/ArrayOfCalcomBookings' - /askers/bookings/{bookingId}: - get: - tags: - - asker - summary: Get booking details - operationId: getBookingDetails - parameters: - - name: bookingId - in: path - description: ID of calcom booking id - required: true - schema: - type: string - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/CalcomBooking' /eventTypes/{eventTypeId}: get: tags: @@ -430,7 +422,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/CalcomWebhook' + $ref: '#/components/schemas/CalcomWebhookInput' required: true responses: '200': @@ -445,8 +437,7 @@ components: type: object properties: id: - type: integer - format: int32 + type: long example: 1 userId: type: integer @@ -468,6 +459,17 @@ components: endTime: type: string example: 2022-06-16T00:00:00.000 + rescheduleLink: + type: string + example: /consultant-slug/event-typ-slug?rescheduleUid=myUId + consultantName: + type: string + askerName: + type: string + askerId: + type: string + description: + type: string ArrayOfCalcomBookings: type: array items: @@ -682,7 +684,7 @@ components: type: boolean role: type: string - CalcomWebhook: + CalcomWebhookInput: type: object properties: triggerEvent: @@ -771,4 +773,58 @@ components: properties: user: type: string + bookingId: + type: long + isInitialAppointment: + type: boolean + CalcomSchedule: + type: object + properties: + id: + type: integer + format: int32 + userId: + type: integer + format: int32 + name: + type: string + timeZone: + type: string + CalcomAvailability: + type: object + properties: + id: + type: integer + format: int32 + days: + type: array + items: + type: integer + format: int32 + example: [1,2,3,4,5] + startTime: + type: string + example: 1970-01-01T09:00:00.000Z + endTime: + type: string + example: 1970-01-01T17:00:00.000Z + scheduleId: + type: integer + format: int32 + AgencyConsultantSyncRequestDTO: + type: object + properties: + consultantId: + type: string + agencies: + type: array + items: + type: long + AgencyMasterDataSyncRequestDTO: + type: object + properties: + id: + type: long + name: + type: string \ No newline at end of file diff --git a/src/main/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminController.java b/src/main/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminController.java index bb0fcb73c..c9df36787 100644 --- a/src/main/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminController.java +++ b/src/main/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminController.java @@ -1,16 +1,8 @@ package de.caritas.cob.userservice.api.adapters.web.controller; -import de.caritas.cob.userservice.api.adapters.web.dto.AskerResponseDTO; -import de.caritas.cob.userservice.api.adapters.web.dto.UserDTO; -import de.caritas.cob.userservice.api.adapters.web.dto.UserDataResponseDTO; -import de.caritas.cob.userservice.api.admin.facade.ConsultantAdminFacade; -import de.caritas.cob.userservice.api.admin.facade.UserAdminFacade; -import de.caritas.cob.userservice.api.admin.hallink.RootDTOBuilder; -import de.caritas.cob.userservice.api.adapters.web.dto.Sort; -import de.caritas.cob.userservice.api.admin.report.service.ViolationReportGenerator; -import de.caritas.cob.userservice.api.admin.service.session.SessionAdminService; import de.caritas.cob.userservice.api.adapters.web.dto.AgencyConsultantResponseDTO; import de.caritas.cob.userservice.api.adapters.web.dto.AgencyTypeDTO; +import de.caritas.cob.userservice.api.adapters.web.dto.AskerResponseDTO; import de.caritas.cob.userservice.api.adapters.web.dto.ConsultantAdminResponseDTO; import de.caritas.cob.userservice.api.adapters.web.dto.ConsultantAgencyResponseDTO; import de.caritas.cob.userservice.api.adapters.web.dto.ConsultantFilter; @@ -20,9 +12,15 @@ import de.caritas.cob.userservice.api.adapters.web.dto.RootDTO; import de.caritas.cob.userservice.api.adapters.web.dto.SessionAdminResultDTO; import de.caritas.cob.userservice.api.adapters.web.dto.SessionFilter; +import de.caritas.cob.userservice.api.adapters.web.dto.Sort; import de.caritas.cob.userservice.api.adapters.web.dto.UpdateAdminConsultantDTO; import de.caritas.cob.userservice.api.adapters.web.dto.ViolationDTO; -import de.caritas.cob.userservice.api.facade.userdata.AskerDataProvider; +import de.caritas.cob.userservice.api.admin.facade.ConsultantAdminFacade; +import de.caritas.cob.userservice.api.admin.facade.UserAdminFacade; +import de.caritas.cob.userservice.api.admin.hallink.RootDTOBuilder; +import de.caritas.cob.userservice.api.admin.report.service.ViolationReportGenerator; +import de.caritas.cob.userservice.api.admin.service.session.SessionAdminService; +import de.caritas.cob.userservice.api.service.appointment.AppointmentService; import de.caritas.cob.userservice.generated.api.adapters.web.controller.UseradminApi; import io.swagger.annotations.Api; import java.util.List; @@ -47,6 +45,7 @@ public class UserAdminController implements UseradminApi { private final @NonNull ViolationReportGenerator violationReportGenerator; private final @NonNull ConsultantAdminFacade consultantAdminFacade; private final @NonNull UserAdminFacade userAdminFacade; + private final @NonNull AppointmentService appointmentService; /** @@ -120,6 +119,7 @@ public ResponseEntity setConsultantAgencies(String consultantId, consultantAdminFacade.filterAgencyListForCreation(consultantId, agencyList); consultantAdminFacade.prepareConsultantAgencyRelation(consultantId, agencyList); consultantAdminFacade.completeConsultantAgencyAssigment(consultantId, agencyList); + appointmentService.syncAgencies(consultantId, agencyList); return ResponseEntity.ok().build(); } diff --git a/src/main/java/de/caritas/cob/userservice/api/config/apiclient/AppointmentConsultantApiClientConfig.java b/src/main/java/de/caritas/cob/userservice/api/config/apiclient/AppointmentConsultantApiClientConfig.java index 46e00a2ad..141831617 100644 --- a/src/main/java/de/caritas/cob/userservice/api/config/apiclient/AppointmentConsultantApiClientConfig.java +++ b/src/main/java/de/caritas/cob/userservice/api/config/apiclient/AppointmentConsultantApiClientConfig.java @@ -1,7 +1,6 @@ package de.caritas.cob.userservice.api.config.apiclient; import de.caritas.cob.userservice.appointmentservice.generated.ApiClient; -import de.caritas.cob.userservice.appointmentservice.generated.web.ConsultantApi; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/de/caritas/cob/userservice/api/service/appointment/AppointmentService.java b/src/main/java/de/caritas/cob/userservice/api/service/appointment/AppointmentService.java index 2da47972d..1a0bf1401 100644 --- a/src/main/java/de/caritas/cob/userservice/api/service/appointment/AppointmentService.java +++ b/src/main/java/de/caritas/cob/userservice/api/service/appointment/AppointmentService.java @@ -3,11 +3,16 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import de.caritas.cob.userservice.api.adapters.web.dto.ConsultantAdminResponseDTO; +import de.caritas.cob.userservice.api.adapters.web.dto.CreateConsultantAgencyDTO; import de.caritas.cob.userservice.api.port.out.IdentityClient; import de.caritas.cob.userservice.api.service.httpheader.SecurityHeaderSupplier; import de.caritas.cob.userservice.api.service.httpheader.TenantHeaderSupplier; import de.caritas.cob.userservice.appointmentservice.generated.ApiClient; +import de.caritas.cob.userservice.appointmentservice.generated.web.AgencyApi; import de.caritas.cob.userservice.appointmentservice.generated.web.ConsultantApi; +import de.caritas.cob.userservice.appointmentservice.generated.web.model.AgencyConsultantSyncRequestDTO; +import java.util.List; +import java.util.stream.Collectors; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -23,6 +28,7 @@ public class AppointmentService { private final @NonNull ConsultantApi appointmentConsultantApi; + private final @NonNull AgencyApi appointmentAgencyApi; private final @NonNull SecurityHeaderSupplier securityHeaderSupplier; private final @NonNull TenantHeaderSupplier tenantHeaderSupplier; private final @NonNull IdentityClient identityClient; @@ -102,4 +108,16 @@ private void addTechnicalUserHeaders(ApiClient apiClient) { tenantHeaderSupplier.addTenantHeader(headers); headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next())); } + + public void syncAgencies(String consultantId, List agencyList) { + if (!appointmentFeatureEnabled) { + return; + } + addTechnicalUserHeaders(this.appointmentConsultantApi.getApiClient()); + var agencies = agencyList.stream().map(el -> el.getAgencyId()).collect(Collectors.toList()); + AgencyConsultantSyncRequestDTO request = new AgencyConsultantSyncRequestDTO(); + request.setAgencies(agencies); + request.setConsultantId(consultantId); + this.appointmentAgencyApi.agencyConsultantsSync(request); + } } diff --git a/src/test/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminControllerIT.java b/src/test/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminControllerIT.java index 6220aad84..0d73d5ada 100644 --- a/src/test/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminControllerIT.java +++ b/src/test/java/de/caritas/cob/userservice/api/adapters/web/controller/UserAdminControllerIT.java @@ -25,6 +25,7 @@ import de.caritas.cob.userservice.api.admin.service.session.SessionAdminService; import de.caritas.cob.userservice.api.config.auth.RoleAuthorizationAuthorityMapper; import de.caritas.cob.userservice.api.exception.httpresponses.NoContentException; +import de.caritas.cob.userservice.api.service.appointment.AppointmentService; import java.util.ArrayList; import java.util.UUID; import org.jeasy.random.EasyRandom; @@ -90,6 +91,9 @@ public class UserAdminControllerIT { @MockBean private UserAdminFacade userAdminFacade; + @MockBean + private AppointmentService appointmentService; + @Test public void getSessions_Should_returnBadRequest_When_requiredPaginationParamsAreMissing() throws Exception { @@ -270,6 +274,8 @@ public void setConsultantAgenciesShouldReturnOkWhenRequiredParamsAreGiven() thro .prepareConsultantAgencyRelation(any(), anyList()); verify(consultantAdminFacade) .completeConsultantAgencyAssigment(any(), anyList()); + verify(this.appointmentService) + .syncAgencies(any(), anyList()); } @Test