shifty-backend/service/src/lib.rs
Simon Goller bc8a534353 Add id check for booking
It now checks if sales_person_id and slot_id actually exists.
2024-05-09 08:11:38 +02:00

66 lines
1.5 KiB
Rust

use std::sync::Arc;
use thiserror::Error;
use time::Date;
use time::Time;
use uuid::Uuid;
pub mod booking;
pub mod clock;
pub mod permission;
pub mod sales_person;
pub mod slot;
pub mod user_service;
pub mod uuid_service;
pub use permission::MockPermissionService;
pub use permission::PermissionService;
pub use permission::Privilege;
pub use permission::Role;
pub use permission::User;
#[derive(Debug, PartialEq, Eq)]
pub enum ValidationFailureItem {
ModificationNotAllowed(Arc<str>),
InvalidValue(Arc<str>),
IdDoesNotExist(Arc<str>, Uuid),
Duplicate,
}
#[derive(Debug, Error)]
pub enum ServiceError {
#[error("Database query error: {0}")]
DatabaseQueryError(#[from] dao::DaoError),
#[error("Forbidden")]
Forbidden,
#[error("Entity {0} aready exists")]
EntityAlreadyExists(Uuid),
#[error("Entity {0} not found")]
EntityNotFound(Uuid),
#[error("Entity {0} conflicts, expected version {1} but got {2}")]
EntityConflicts(Uuid, Uuid, Uuid),
#[error("Validation error: {0:?}")]
ValidationError(Arc<[ValidationFailureItem]>),
#[error("ID cannot be set on create")]
IdSetOnCreate,
#[error("Version cannot be set on create")]
VersionSetOnCreate,
#[error("Overlapping time range")]
OverlappingTimeRange,
#[error("Time order wrong. {0} must is not smaller or equal to {1}")]
TimeOrderWrong(Time, Time),
#[error("Date order wrong. {0} must is not smaller or equal to {1}")]
DateOrderWrong(Date, Date),
#[error("Internal error")]
InternalError,
}