Skip to content

Commit

Permalink
feat/VIC-837-Admin-can-create-and-edit-team
Browse files Browse the repository at this point in the history
  • Loading branch information
adnanalicic committed Jul 24, 2022
1 parent ec4ec8c commit 1640fef
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 55 deletions.
144 changes: 100 additions & 44 deletions services/appointmentService.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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:
Expand Down Expand Up @@ -430,7 +422,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/CalcomWebhook'
$ref: '#/components/schemas/CalcomWebhookInput'
required: true
responses:
'200':
Expand All @@ -445,8 +437,7 @@ components:
type: object
properties:
id:
type: integer
format: int32
type: long
example: 1
userId:
type: integer
Expand All @@ -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:
Expand Down Expand Up @@ -682,7 +684,7 @@ components:
type: boolean
role:
type: string
CalcomWebhook:
CalcomWebhookInput:
type: object
properties:
triggerEvent:
Expand Down Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;


/**
Expand Down Expand Up @@ -120,6 +119,7 @@ public ResponseEntity<Void> setConsultantAgencies(String consultantId,
consultantAdminFacade.filterAgencyListForCreation(consultantId, agencyList);
consultantAdminFacade.prepareConsultantAgencyRelation(consultantId, agencyList);
consultantAdminFacade.completeConsultantAgencyAssigment(consultantId, agencyList);
appointmentService.syncAgencies(consultantId, agencyList);
return ResponseEntity.ok().build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<CreateConsultantAgencyDTO> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -270,6 +274,8 @@ public void setConsultantAgenciesShouldReturnOkWhenRequiredParamsAreGiven() thro
.prepareConsultantAgencyRelation(any(), anyList());
verify(consultantAdminFacade)
.completeConsultantAgencyAssigment(any(), anyList());
verify(this.appointmentService)
.syncAgencies(any(), anyList());
}

@Test
Expand Down

0 comments on commit 1640fef

Please sign in to comment.