class ReservationService {

  public function calculateTotal()
  {
      return $this->pricingService
          ->applySeasonModifier()
          ->applyDiscountRules()
          ->applyChannelCommission()
          ->applyTaxes()
          ->buildInvoice();
  }

}

// Domain rules evolve
// architecture decisions matter
// complexity grows over time

Back to FullStack Developer in MisterPlan

Electronic Lock Integrations

Development of integrations with multiple smart lock providers used by hotels and short-term rental accommodations. The system allows automated guest access management by generating and distributing temporary access credentials linked to reservations.

7

lock providers integrated

+3000

locks managed

+250

accommodations connected

Access abstraction model

Different providers expose completely different ways of granting access to a lock: numeric codes, temporary links, eKeys, mobile app permissions or provider-specific tokens.

To handle this variability, the system introduces an abstract domain entity called Key . This entity represents a generic access credential independently of the underlying provider implementation.

Each integration adapts its provider-specific access mechanism to this domain abstraction, allowing the system to support new providers and access types without changing the core domain logic.

Access provisioning workflow

The module supports two different integration strategies depending on the capabilities of the lock provider.

  • Direct lock mapping: Our system maps a room to one or more locks and generates access credentials directly through the provider API.
  • Room synchronization: Our system maps our room with the room entity in the provider system and sends reservation information. The provider then generates the required access credentials for all locks associated with that room.

Technical highlights

  • Integrations with TTLock, Nuki, Tesa, Yacan, Padword, Omnitec and Akiles
  • Domain-driven abstraction for access credentials
  • Decoupled architecture supporting multiple providers
  • Event-driven processes to ensure consistency across distributed systems