Add id check for booking
It now checks if sales_person_id and slot_id actually exists.
This commit is contained in:
parent
418a2944f7
commit
bc8a534353
10 changed files with 201 additions and 24 deletions
|
|
@ -8,49 +8,84 @@ use uuid::Uuid;
|
|||
|
||||
const BOOKING_SERVICE_PROCESS: &str = "booking-service";
|
||||
|
||||
pub struct BookingServiceImpl<BookingDao, PermissionService, ClockService, UuidService>
|
||||
where
|
||||
pub struct BookingServiceImpl<
|
||||
BookingDao,
|
||||
PermissionService,
|
||||
ClockService,
|
||||
UuidService,
|
||||
SalesPersonService,
|
||||
SlotService,
|
||||
> where
|
||||
BookingDao: dao::booking::BookingDao + Send + Sync,
|
||||
PermissionService: service::permission::PermissionService + Send + Sync,
|
||||
UuidService: service::uuid_service::UuidService + Send + Sync,
|
||||
ClockService: service::clock::ClockService + Send + Sync,
|
||||
SalesPersonService: service::sales_person::SalesPersonService + Send + Sync,
|
||||
SlotService: service::slot::SlotService + Send + Sync,
|
||||
{
|
||||
pub booking_dao: Arc<BookingDao>,
|
||||
pub permission_service: Arc<PermissionService>,
|
||||
pub clock_service: Arc<ClockService>,
|
||||
pub uuid_service: Arc<UuidService>,
|
||||
pub sales_person_service: Arc<SalesPersonService>,
|
||||
pub slot_service: Arc<SlotService>,
|
||||
}
|
||||
impl<BookingDao, PermissionService, ClockService, UuidService>
|
||||
BookingServiceImpl<BookingDao, PermissionService, ClockService, UuidService>
|
||||
impl<BookingDao, PermissionService, ClockService, UuidService, SalesPersonService, SlotService>
|
||||
BookingServiceImpl<
|
||||
BookingDao,
|
||||
PermissionService,
|
||||
ClockService,
|
||||
UuidService,
|
||||
SalesPersonService,
|
||||
SlotService,
|
||||
>
|
||||
where
|
||||
BookingDao: dao::booking::BookingDao + Send + Sync,
|
||||
PermissionService: service::permission::PermissionService + Send + Sync,
|
||||
UuidService: service::uuid_service::UuidService + Send + Sync,
|
||||
ClockService: service::clock::ClockService + Send + Sync,
|
||||
SalesPersonService: service::sales_person::SalesPersonService + Send + Sync,
|
||||
SlotService: service::slot::SlotService + Send + Sync,
|
||||
{
|
||||
pub fn new(
|
||||
booking_dao: Arc<BookingDao>,
|
||||
permission_service: Arc<PermissionService>,
|
||||
clock_service: Arc<ClockService>,
|
||||
uuid_service: Arc<UuidService>,
|
||||
sales_person_service: Arc<SalesPersonService>,
|
||||
slot_service: Arc<SlotService>,
|
||||
) -> Self {
|
||||
Self {
|
||||
booking_dao,
|
||||
permission_service,
|
||||
clock_service,
|
||||
uuid_service,
|
||||
sales_person_service,
|
||||
slot_service,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl<BookingDao, PermissionService, ClockService, UuidService> BookingService
|
||||
for BookingServiceImpl<BookingDao, PermissionService, ClockService, UuidService>
|
||||
impl<BookingDao, PermissionService, ClockService, UuidService, SalesPersonService, SlotService>
|
||||
BookingService
|
||||
for BookingServiceImpl<
|
||||
BookingDao,
|
||||
PermissionService,
|
||||
ClockService,
|
||||
UuidService,
|
||||
SalesPersonService,
|
||||
SlotService,
|
||||
>
|
||||
where
|
||||
BookingDao: dao::booking::BookingDao + Send + Sync,
|
||||
PermissionService: service::permission::PermissionService + Send + Sync,
|
||||
UuidService: service::uuid_service::UuidService + Send + Sync,
|
||||
ClockService: service::clock::ClockService + Send + Sync,
|
||||
SalesPersonService: service::sales_person::SalesPersonService<Context = PermissionService::Context>
|
||||
+ Send
|
||||
+ Sync,
|
||||
SlotService: service::slot::SlotService<Context = PermissionService::Context> + Send + Sync,
|
||||
{
|
||||
type Context = PermissionService::Context;
|
||||
|
||||
|
|
@ -85,7 +120,7 @@ where
|
|||
context: Self::Context,
|
||||
) -> Result<Booking, ServiceError> {
|
||||
self.permission_service
|
||||
.check_permission("hr", context)
|
||||
.check_permission("hr", context.clone())
|
||||
.await?;
|
||||
|
||||
if booking.id != Uuid::nil() {
|
||||
|
|
@ -113,6 +148,28 @@ where
|
|||
if booking.calendar_week > 53 {
|
||||
validation.push(ValidationFailureItem::InvalidValue("calendar_week".into()));
|
||||
}
|
||||
if self
|
||||
.sales_person_service
|
||||
.exists(booking.sales_person_id, context.clone())
|
||||
.await?
|
||||
== false
|
||||
{
|
||||
validation.push(ValidationFailureItem::IdDoesNotExist(
|
||||
"sales_person_id".into(),
|
||||
booking.sales_person_id,
|
||||
));
|
||||
}
|
||||
if self
|
||||
.slot_service
|
||||
.exists(booking.slot_id, context.clone())
|
||||
.await?
|
||||
== false
|
||||
{
|
||||
validation.push(ValidationFailureItem::IdDoesNotExist(
|
||||
"slot_id".into(),
|
||||
booking.slot_id,
|
||||
));
|
||||
}
|
||||
|
||||
if !validation.is_empty() {
|
||||
return Err(ServiceError::ValidationError(validation.into()));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue