ポータブルトイレレンタル
AIエージェントで構築
ポータブルトイレレンタルバックエンド

サイト、注文、サービス & GPSのためのポータブルトイレレンタルアプリバックエンド
サイトルーティング、サービス訪問、ユニットトラッキング

生産準備完了のポータブルトイレレンタルバックエンド on Back4appは、User, Site, InventoryUnit, RentalOrder, ServiceInterval, とLocationPingを中心に構築されています。カスタムバックエンドを組み合わせることなく、配送、サービス訪問、およびGPSピンを追跡します。

重要なレンタルのポイント

このテンプレートは、ユーザー、サイト、インベントリユニット、レンタルオーダー、サービスインターバル、ロケーションピンを中心にしたポータブルトイレのレンタルバックエンドを提供します。これにより、配送担当者、所有者、および顧客が調整を保つことができます。

  1. レンタルオーダーはサイトにリンクされていますRentalOrder.site と RentalOrder.assignedUnits を使用して、各予約を適切な作業サイトとポータブルトイレユニットに結び付けます。
  2. サービス訪問は追跡可能です各ServiceIntervalをserviceCode、scheduledAt、completedAt、unit、performedBy、およびserviceNotesでモデル化します。
  3. インベントリの状態は明示されていますInventoryUnit.status と InventoryUnit.lastServicedAt は、ユニットが利用可能、配送中、清掃中、またはメンテナンス中であるかを示します。
  4. GPSピンが現場作業をサポートLocationPingはgpsLat、gpsLng、source、unit、およびドライバーアプリ、トラッカー、または配送更新のオプションの注文リンクを保存します。

概要:ポータブルトイレレンタルアプリ

返品と点検はポータブルトイレのレンタルのループを閉じます—システムは次のレンタルが始まる前に状態と責任をキャプチャする必要があります。費用はコールバックとクレジットに表示されます。Back4appのコアエンティティを使用して、ポータブルトイレのレンタルの可用性、価格フック、および履行記録を1つの統合バックエンドにエンコードします。スキーマは、ユーザー、サイト、インベントリユニット、レンタルオーダー、サービスインターバル、および認証とレンタルワークフロー機能を備えたLocationPingをカバーしています。お好みのフロントエンドを接続して、迅速に出荷してください。

最適:

ポータブルトイレのレンタル業務サービスデスクおよび配送アプリ現場クルーのルート追跡在庫可視化ツール顧客予約ポータルレンタル製品にBaaSを選択するチーム

このポータブルトイレレンタルバックエンドはどのように構成されていますか

ポータブルトイレレンタルで新入社員のオンボーディングに部族的知識が必要な場合、あなたは単一の障害点から1つの出発を遂げています。

ハブは役割に基づくユーザー記録、ユニットの割り当てとステータス追跡、サービス間隔ログの言語を一貫して保ち、製品、オペレーション、エンジニアリングが「記録」と言うとき、同じ意味になります。

ポータブルトイレレンタルのコア機能

このハブのすべてのテクノロジーカードは、User、Site、InventoryUnit、RentalOrder、ServiceInterval、およびLocationPingを使用して同じポータブルトイレレンタルスキーマを採用しています。

役割ベースのユーザー記録

ユーザーはディスパッチャー、所有者、または顧客のアクセスのために、ユーザー名、電子メール、パスワード、役割を保存します。

ユニットの割り当てとステータスの追跡

InventoryUnitはunitTag、unitType、status、currentSite、およびownerをリンクします。

サービス間隔ログ

ServiceIntervalはserviceCode、scheduledAt、completedAt、status、unit、およびperformedByを保存します。

GPS位置情報のピン

LocationPingはpingedAt、gpsLat、gpsLng、source、unit、およびorderを保持します。

サイトとレンタル調整

サイトとRentalOrderは作業現場、連絡先、および割り当てられたポータブルトイレユニットを保持します。

Back4appでポータブルトイレレンタルバックエンドを構築する理由は?

Back4appはレンタル、ルート、およびサービスのプリミティブを提供し、あなたのチームはインフラストラクチャではなく、配送と現場作業に集中できるようにします。

  • サイトと注文記録はリンクされたままに保たれます: サイト、RentalOrder、InventoryUnitは、それぞれの作業場所、予約、および資産割り当てを一つのトレイルで管理します。
  • サービスログは構造化されています: ServiceIntervalはserviceCode、scheduledAt、completedAt、serviceNotes、performedBy、および影響を受けたユニットをキャプチャします。
  • 在庫は最新の状態に保たれます: InventoryUnitは、ユニットが利用可能、発送中、清掃中、またはメンテナンス中であるかを示し、Live Queriesはデスクに情報を提供します。

すべてのプラットフォームにわたる1つのバックエンド契約でレンタル操作を迅速に構築および反復します。

ポータブルトイレレンタルの利点

ルート、サービス作業、および在庫を整然と保つためのレンタルバックエンド。

迅速な派遣決定

ルートデータを最初から組み立てるのではなく、Site、RentalOrder、およびInventoryUnitを使用します。

明確なサービスの責任

ServiceInterval、serviceCode、およびperformedByを使用して、各インターバルを誰がいつ完了したかを示します。

顧客更新は一貫性を保つ

User、Site.contactName、およびSite.contactPhoneを正しいレンタル注文に結び付けて保持します。

在庫管理は明示的です

InventoryUnit.statusおよびlastServicedAtにより、利用可能、派遣中、清掃中、またはメンテナンス中のユニットをフラグ付けしやすくなります。

位置情報に基づく操作

LocationPing.gpsLatとgpsLngは、クルーがユニットの配達先やサービス提供先を確認するのに役立ちます。

AIブートストラップワークフロー

1つの構造化されたプロンプトで、バックエンドの足場と統合ガイダンスを迅速に生成します。

ポータブルトイレレンタルアプリの準備はできましたか?

Back4app AIエージェントにポータブルトイレレンタルのバックエンドの足場を作成させ、Site、InventoryUnit、RentalOrder、ServiceInterval、LocationPingのフローを1つのプロンプトから生成します。

無料でスタート — 月あたり50のAIエージェントプロンプト、クレジットカードは不要

ポータブルレンタルテクノロジースタック

このポータブルトイレレンタルバックエンドテンプレートに含まれるすべて。

フロントエンド
13+ テクノロジー
バックエンド
Back4app
データベース
MongoDB
認証
組み込みの認証 + セッション
API
REST と GraphQL
リアルタイム
Live Queries

レンタルスキーママップ

ポータブルトイレレンタルバックエンドスキーマのエンティティリレーションシップモデル。

図のソースを表示
Mermaid
erDiagram
    User ||--o{ Site : "customer"
    User ||--o{ InventoryUnit : "owner"
    User ||--o{ RentalOrder : "customer"
    User ||--o{ ServiceInterval : "performedBy"
    User ||--o{ LocationPing : "capturedBy"
    Site ||--o{ InventoryUnit : "currentSite"
    Site ||--o{ RentalOrder : "site"
    InventoryUnit ||--o{ RentalOrder : "assignedUnits"
    InventoryUnit ||--o{ ServiceInterval : "unit"
    InventoryUnit ||--o{ LocationPing : "unit"
    RentalOrder ||--o{ ServiceInterval : "order"
    RentalOrder ||--o{ LocationPing : "order"

    User {
        String objectId PK
        String username
        String email
        String password
        String role
        Date createdAt
        Date updatedAt
    }

    Site {
        String objectId PK
        String siteCode
        String name
        String address
        Number gpsLat
        Number gpsLng
        String contactName
        String contactPhone
        String customerId FK
        Date createdAt
        Date updatedAt
    }

    InventoryUnit {
        String objectId PK
        String unitTag
        String unitType
        String status
        Date lastServicedAt
        String currentSiteId FK
        String ownerId FK
        Date createdAt
        Date updatedAt
    }

    RentalOrder {
        String objectId PK
        String orderNumber
        String status
        Date startDate
        Date endDate
        String siteId FK
        Array assignedUnits
        String customerId FK
        Number serviceIntervalDays
        String notes
        Date createdAt
        Date updatedAt
    }

    ServiceInterval {
        String objectId PK
        String serviceCode
        Date scheduledAt
        Date completedAt
        String status
        String orderId FK
        String unitId FK
        String serviceNotes
        String performedById FK
        Date createdAt
        Date updatedAt
    }

    LocationPing {
        String objectId PK
        Date pingedAt
        Number gpsLat
        Number gpsLng
        String source
        String unitId FK
        String orderId FK
        String capturedById FK
        Date createdAt
        Date updatedAt
    }

ディスパッチ統合フロー

サインイン、レンタル注文の照会、在庫単位の割り当て、サービス間隔の記録、およびロケーションピングのキャプチャの典型的なランタイムフロー。

図のソースを表示
Mermaid
sequenceDiagram
  participant User
  participant App as Portable Toilet Rental App
  participant Back4app as Back4app Cloud

  User->>App: Sign in as dispatcher, owner, or customer
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  User->>App: Open rental dashboard
  App->>Back4app: GET /classes/RentalOrder?include=site,assignedUnits
  Back4app-->>App: RentalOrder list

  User->>App: Add or assign a portable toilet unit
  App->>Back4app: POST /classes/InventoryUnit or PUT /classes/RentalOrder
  Back4app-->>App: InventoryUnit saved

  User->>App: Record a service interval or GPS ping
  App->>Back4app: POST /classes/ServiceInterval or POST /classes/LocationPing
  Back4app-->>App: Visit and location tracked

  App->>Back4app: Live query updates for status changes
  Back4app-->>App: Updated order, service, and inventory status

レンタルフィールドガイド

ポータブルトイレレンタルスキーマ内のすべてのクラスの完全なフィールドレベル参照。

フィールドタイプ説明必須
objectIdStringAuto-generated unique identifier自動
usernameStringUser login name
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole of the user (e.g., dispatcher, owner, customer)
createdAtDateAuto-generated creation timestamp自動
updatedAtDateAuto-generated last-update timestamp自動

7 フィールドが User にあります

レンタルデータのアクセス制御

ACLおよびCLP戦略がユーザー、サイト、注文、サービス訪問、位置情報のピンをどのように保護するか。

顧客アカウントのコントロール

顧客のみが自分のユーザーフィールドを更新し、割り当てられたサイト、レンタル注文、サービス間隔、位置情報ピンデータを表示できます。

サービスと在庫の整合性

許可されたスタッフのみがServiceIntervalおよびLocationPingレコードを作成でき、資産所有者のみがInventoryUnitのステータスを管理できます。

スコープ付きルートアクセス

フィールドクルーや顧客向けビューのために、現在の派遣プランに関連付けられたSite、RentalOrder、およびInventoryUnit行への読み取りを制限します。

JSONスキーマ

Back4appにコピーするための生のJSONスキーマ定義、または実装参照として使用できます。

JSON
{
  "classes": [
    {
      "className": "User",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "role": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Site",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "siteCode": {
          "type": "String",
          "required": true
        },
        "name": {
          "type": "String",
          "required": true
        },
        "address": {
          "type": "String",
          "required": true
        },
        "gpsLat": {
          "type": "Number",
          "required": true
        },
        "gpsLng": {
          "type": "Number",
          "required": true
        },
        "contactName": {
          "type": "String",
          "required": false
        },
        "contactPhone": {
          "type": "String",
          "required": false
        },
        "customer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "InventoryUnit",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "unitTag": {
          "type": "String",
          "required": true
        },
        "unitType": {
          "type": "String",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "lastServicedAt": {
          "type": "Date",
          "required": false
        },
        "currentSite": {
          "type": "Pointer",
          "required": false,
          "targetClass": "Site"
        },
        "owner": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "RentalOrder",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "orderNumber": {
          "type": "String",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "startDate": {
          "type": "Date",
          "required": true
        },
        "endDate": {
          "type": "Date",
          "required": false
        },
        "site": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Site"
        },
        "assignedUnits": {
          "type": "Array",
          "required": true,
          "targetClass": "InventoryUnit"
        },
        "customer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "serviceIntervalDays": {
          "type": "Number",
          "required": true
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "ServiceInterval",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "serviceCode": {
          "type": "String",
          "required": true
        },
        "scheduledAt": {
          "type": "Date",
          "required": true
        },
        "completedAt": {
          "type": "Date",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "order": {
          "type": "Pointer",
          "required": true,
          "targetClass": "RentalOrder"
        },
        "unit": {
          "type": "Pointer",
          "required": true,
          "targetClass": "InventoryUnit"
        },
        "serviceNotes": {
          "type": "String",
          "required": false
        },
        "performedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "LocationPing",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "pingedAt": {
          "type": "Date",
          "required": true
        },
        "gpsLat": {
          "type": "Number",
          "required": true
        },
        "gpsLng": {
          "type": "Number",
          "required": true
        },
        "source": {
          "type": "String",
          "required": true
        },
        "unit": {
          "type": "Pointer",
          "required": true,
          "targetClass": "InventoryUnit"
        },
        "order": {
          "type": "Pointer",
          "required": false,
          "targetClass": "RentalOrder"
        },
        "capturedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

AIエージェントで構築

このテンプレートからフロントエンド、バックエンド、認証、およびSite、InventoryUnit、RentalOrder、ServiceIntervalおよびLocationPingフローを含む実際のポータブルトイレレンタルアプリを生成するためにBack4app AIエージェントを使用します。

Back4app AIエージェント
構築の準備ができました
この正確なスキーマと動作を使用して、Back4app上に安全なポータブルトイレレンタルアプリのバックエンドを作成します。

スキーマ:
1. ユーザー(Back4appの組み込みを使用):ユーザー名、メール、パスワード、役割; objectId、createdAt、updatedAt(システム)。
2. サイト:siteCode、名前、住所、gpsLat、gpsLng、連絡先名、連絡先電話、顧客(ユーザーへのポインタ); objectId、createdAt、updatedAt(システム)。
3. 在庫ユニット:unitTag、unitType、ステータス、最終サービス日時、currentSite(サイトへのポインタ)、owner(ユーザーへのポインタ); objectId、createdAt、updatedAt(システム)。
4. レンタルオーダー:orderNumber、ステータス、開始日、終了日、site(サイトへのポインタ)、assignedUnits(Pointer<InventoryUnit>の配列)、顧客(ユーザーへのポインタ)、serviceIntervalDays、メモ; objectId、createdAt、updatedAt(システム)。
5. サービス間隔:serviceCode、scheduledAt、completedAt、ステータス、order(RentalOrderへのポインタ)、unit(InventoryUnitへのポインタ)、serviceNotes、performedBy(ユーザーへのポインタ); objectId、createdAt、updatedAt(システム)。
6. ロケーションピング:pingedAt、gpsLat、gpsLng、source、unit(InventoryUnitへのポインタ)、order(RentalOrderへのポインタ、オプション)、capturedBy(ユーザーへのポインタ); objectId、createdAt、updatedAt(システム)。

セキュリティ:
- 顧客は自分のサイト、レンタルオーダー、サービス間隔、ロケーションピングのエントリのみを表示できます。
- ディスパッチャーはサービス間隔のレコードを作成および更新し、ロケーションピングデータをキャプチャできます。
- アセットオーナーは在庫ユニットのステータスを管理し、オーダーの割り当てを表示できます。
- 役割が承認されていない限り、ロケーションおよび顧客の連絡先フィールドは非公開に保つ必要があります。

認証:
- サインアップ、ログイン、ログアウト。

動作:
- レンタルオーダーのリスト作成、サイトの作成、在庫ユニットの割り当て、サービス間隔のスケジュール、GPSピングの記録。
- ディスパッチおよび顧客の可視性のために在庫ステータスとサービス履歴を正確に保つ。

提供:
- レンタルデスクのスタッフ、アセットオーナー、およびポータブルトイレサービスを予約する顧客のためのスキーマ、CLP、ACL、およびフロントエンドフローを持つBack4appアプリ。

以下のボタンを押して、このテンプレートプロンプトが事前に入力されたエージェントを開いてください。

これは技術接尾辞のない基本的なプロンプトです。生成されたフロントエンドスタックは後で調整できます。

数分でデプロイ月に50回の無料プロンプトクレジットカードは不要

APIサンドボックス

ポータブルトイレレンタルスキーマに対してRESTとGraphQLエンドポイントを試してください。レスポンスはモックデータを使用しており、Back4appアカウントは必要ありません。

プレイグラウンドを読み込んでいます…

このテンプレートと同じスキーマを使用しています。

スタックを選択

各カードを展開して、選択したスタックで Site、InventoryUnit、および RentalOrder を統合する方法を確認してください。

Flutter ポータブルトイレレンタルバックエンド

React ポータブルトイレレンタルバックエンド

React ネイティブ ポータブルトイレレンタルバックエンド

Next.js ポータブルトイレレンタルバックエンド

JavaScript ポータブルトイレレンタルバックエンド

Android ポータブルトイレレンタルバックエンド

iOS ポータブルトイレレンタルバックエンド

Vue ポータブルトイレレンタルバックエンド

Angular ポータブルトイレレンタルバックエンド

GraphQL ポータブルトイレレンタルバックエンド

REST API ポータブルトイレレンタルバックエンド

PHP ポータブルトイレレンタルバックエンド

.NET ポータブルトイレレンタルバックエンド

すべての技術で得られるもの

すべてのスタックは同じポータブルトイレレンタルのバックエンドスキーマとAPI契約を使用します。

統一されたレンタルデータ構造

ユーザー、サイト、InventoryUnit、RentalOrder、ServiceInterval、および LocationPing を一貫したスキーマで管理します。

レンタルのサービスインターバルログ

各クリーンアウト、再補充、検査を同じ ServiceInterval モデルで記録します。

GPS 対応の位置追跡

LocationPing の緯度と経度を正しい InventoryUnit と RentalOrder に紐付けます。

ポータブルユニットの在庫管理

在庫、メンテナンス、出荷のための status と lastServicedAt フィールドを定義します。

REST/GraphQL レンタル用 API

注文およびサービスフローのために柔軟なエンドポイントを持つモバイルおよびウェブクライアントと統合します。

拡張可能なオペレーションアーキテクチャ

基本モデルを壊すことなく、後で配信アラート、検査写真、または請求クラスを追加します。

ポータブルレンタルスタック比較

すべてのサポートされている技術にわたるセットアップ速度、SDKスタイル、AIサポートを比較します。

フレームワークセットアップ時間レンタル利益SDKタイプAIサポート
約5分レンタルデスクとフィールドクルースクリーンのための単一のコードベース。タイプSDKフル
5分未満ユニットの可用性とサービスログのための高速ウェブダッシュボード。入力されたSDKフル
約3~7分現場訪問と検査のためのクロスプラットフォームモバイルアプリ。入力されたSDKフル
迅速(5分)設定レンタル運営のためのサーバーレンダリングディスパッチポータル。入力されたSDKフル
約3~5分軽量ウェブ統合による予約とサービス画面。入力されたSDKフル
約5分ドライバーおよびルート更新のためのネイティブ Android アプリ。タイプされたSDKフル
5分未満サイト訪問と配達確認のためのネイティブ iOS アプリ。タイプされたSDKフル
約3~7分サービスと在庫ボードのための React 的ウェブUI。タイプされたSDKフル
迅速な(5分)セットアップ派遣およびレンタル管理のためのエンタープライズWebアプリ。入力されたSDKフル
2分未満ネストされたサイトおよびサービスクエリのための柔軟なGraphQL API。GraphQL APIフル
迅速な(2分)セットアップ予約およびルート更新のためのREST API統合。REST APIフル
~3分レンタルデスクのワークフローのためのサーバーサイド PHP バックエンド。REST APIフル
約3~7分配信および在庫操作のための .NET バックエンド。タイプされたSDKフル

セットアップ時間は、このテンプレートスキーマを使用してプロジェクトのブートストラップから最初のInventoryUnit、RentalOrder、ServiceInterval、またはLocationPingクエリまでの期待される期間を反映します。

ポータブルレンタルに関する質問

このテンプレートを使ってポータブルトイレレンタルバックエンドを構築する際の一般的な質問。

2つ目の場所に拡大する際に、ポータブルトイレレンタル業者が最初にどの問題を解決すべきですか?
どのポータブルトイレレンタルイベントが顧客通知を自動的にトリガーすべきですか?
このポータブルトイレレンタルバックエンドは、マルチサイト在庫と中央集権的な価格設定ルールにスケールしますか?
Flutterでユニットとサービス訪問を表示するにはどうすればいいですか?
Next.jsでGPSピンを管理するにはどうすればいいですか?
React Nativeはオフラインで在庫ステータスをキャッシュできますか?
承認されていないユニットの編集を防ぐにはどうすればいいですか?
Androidでポータブルトイレの利用可能性を示す最良の方法は何ですか?

世界中の開発者から信頼されています

Back4app テンプレートを使って、携帯トイレレンタル製品をより早く出荷するチームに参加しましょう。

G2 Users Love Us Badge

携帯トイレレンタルアプリを構築する準備はできていますか?

数分で携帯トイレレンタルプロジェクトを開始。クレジットカードは不要です。

テクノロジーを選択