ResourceBookingUseCases

Struct ResourceBookingUseCases 

Source
pub struct ResourceBookingUseCases { /* private fields */ }
Expand description

Use cases for resource booking operations

Orchestrates business logic for community space bookings with conflict detection, owner name enrichment, and authorization checks.

Implementations§

Source§

impl ResourceBookingUseCases

Source

pub fn new( booking_repo: Arc<dyn ResourceBookingRepository>, owner_repo: Arc<dyn OwnerRepository>, ) -> Self

Source

pub async fn create_booking( &self, booked_by: Uuid, dto: CreateResourceBookingDto, ) -> Result<ResourceBookingResponseDto, String>

Create a new resource booking with conflict detection

§Steps
  1. Create booking entity (validates business rules)
  2. Check for conflicts (overlapping bookings for same resource)
  3. Persist booking
  4. Enrich response with owner name
§Authorization
  • Any authenticated owner can create bookings
Source

pub async fn get_booking( &self, booking_id: Uuid, ) -> Result<ResourceBookingResponseDto, String>

Get booking by ID with owner name enrichment

Source

pub async fn list_building_bookings( &self, building_id: Uuid, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List all bookings for a building

Source

pub async fn list_by_resource_type( &self, building_id: Uuid, resource_type: ResourceType, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List bookings by building and resource type

Source

pub async fn list_by_resource( &self, building_id: Uuid, resource_type: ResourceType, resource_name: String, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List bookings for a specific resource (building + type + name)

Source

pub async fn list_user_bookings( &self, user_id: Uuid, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List bookings by user (owner who made the booking)

Source

pub async fn list_user_bookings_by_status( &self, user_id: Uuid, status: BookingStatus, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List bookings by user and status

Source

pub async fn list_building_bookings_by_status( &self, building_id: Uuid, status: BookingStatus, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List bookings by building and status

Source

pub async fn list_upcoming_bookings( &self, building_id: Uuid, limit: Option<i64>, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List upcoming bookings (future, confirmed or pending)

Source

pub async fn list_active_bookings( &self, building_id: Uuid, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List active bookings (currently in progress)

Source

pub async fn list_past_bookings( &self, building_id: Uuid, limit: Option<i64>, ) -> Result<Vec<ResourceBookingResponseDto>, String>

List past bookings

Source

pub async fn update_booking( &self, booking_id: Uuid, updater_id: Uuid, dto: UpdateResourceBookingDto, ) -> Result<ResourceBookingResponseDto, String>

Update booking details (resource_name, notes)

Time changes require cancellation and rebooking to ensure conflict detection.

§Authorization
  • Only booking owner can update their booking
Source

pub async fn cancel_booking( &self, booking_id: Uuid, canceller_id: Uuid, ) -> Result<ResourceBookingResponseDto, String>

Cancel a booking

§Authorization
  • Only booking owner can cancel their booking
Source

pub async fn complete_booking( &self, booking_id: Uuid, ) -> Result<ResourceBookingResponseDto, String>

Complete a booking (typically auto-called after end_time)

§Authorization
  • Admin only (for manual completion)
Source

pub async fn mark_no_show( &self, booking_id: Uuid, ) -> Result<ResourceBookingResponseDto, String>

Mark booking as no-show

§Authorization
  • Admin only
Source

pub async fn confirm_booking( &self, booking_id: Uuid, ) -> Result<ResourceBookingResponseDto, String>

Confirm a pending booking

§Authorization
  • Admin only (for approval workflow)
Source

pub async fn delete_booking( &self, booking_id: Uuid, deleter_id: Uuid, ) -> Result<(), String>

Delete a booking

§Authorization
  • Only booking owner can delete their booking
  • Or admin for any booking
Source

pub async fn check_conflicts( &self, building_id: Uuid, resource_type: ResourceType, resource_name: String, start_time: DateTime<Utc>, end_time: DateTime<Utc>, exclude_booking_id: Option<Uuid>, ) -> Result<Vec<ResourceBookingResponseDto>, String>

Check for booking conflicts

Useful for frontend to preview conflicts before creating booking.

Returns list of conflicting bookings with owner names.

Source

pub async fn get_statistics( &self, building_id: Uuid, ) -> Result<BookingStatisticsDto, String>

Get booking statistics for a building

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Chain<T> for T

§

fn len(&self) -> usize

The number of items that this chain link consists of.
§

fn append_to(self, v: &mut Vec<T>)

Append the elements in this link to the chain.
§

impl<T> Fake for T

§

fn fake<U>(&self) -> U
where Self: FakeBase<U>,

§

fn fake_with_rng<U, R>(&self, rng: &mut R) -> U
where R: Rng + ?Sized, Self: FakeBase<U>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,