可攜式廁所租賃
使用 AI 代理建立
可攜式廁所租賃後端

可攜式廁所租賃應用程式後端,包含網站、訂單、服務和 GPS
網站路由、服務訪問和單位追蹤

一個生產就緒的 可攜式廁所租賃後端 在 Back4app 的核心是 用戶網站庫存單位租賃訂單服務間隔位置回報。追蹤發送、服務訪問和 GPS 回報,無需拼湊自定義後端。

主要租賃要點

此模板為您提供一個以使用者、站點、庫存單位、租賃訂單、服務間隔和地點訊號為中心的便攜式廁所租賃後端,以便派遣員、擁有者和客戶保持一致。

  1. 租賃訂單與站點保持連結使用 RentalOrder.site 和 RentalOrder.assignedUnits 使每個預訂與正確的工作站點和便攜式廁所單位相連。
  2. 服務訪問是可追蹤的使用 serviceCode、scheduledAt、completedAt、unit、performedBy 和 serviceNotes 模型每個 ServiceInterval。
  3. 庫存狀態是明確的InventoryUnit.status 和 InventoryUnit.lastServicedAt 顯示單位是否可用、已派遣、清潔或維護。
  4. GPS 鳴叫支援現場工作LocationPing 儲存 gpsLat、gpsLng、source、unit 和可選的訂單連結,用於司機應用、追蹤器或調度更新。

概述:可攜式廁所租賃應用

退貨和檢查在可攜式廁所租賃中關閉循環 — 系統應在下一次租賃開始之前捕獲條件和責任。成本將會在回調和信用中出現。使用 Back4app 上的核心實體來編碼可攜式廁所租賃的可用性、價格鉤和實現記錄,形成一個整體後端。該模式涵蓋用戶、網站、庫存單元、租賃訂單、服務間隔和包含授權和租賃工作流程功能的 LocationPing。連接您首選的前端並更快發貨。

最佳用途:

可攜式廁所租賃操作服務台和調度應用現場工作團隊路線追蹤庫存可見性工具客戶預訂門戶團隊選擇 BaaS 作為租賃產品

這個可攜式廁所租賃後端是如何組織的

如果在可攜式廁所租賃中入職新員工需要部落知識,那麼您就離單點故障只有一步之遙。

這個中心保持基於角色的用戶記錄、單元分配和狀態跟踪、服務間隔日誌的語言一致,因此產品、運營和工程在說「記錄」時意味著相同的事情。

便攜式廁所租賃核心功能

此中心中的每個技術卡片都使用相同的便攜廁所租賃結構,包括 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 為您提供租賃、路徑和服務原始功能,使您的團隊能夠專注於調度和現場工作,而不是基礎設施。

  • 網站和訂單記錄保持鏈接: 網站、租賃訂單和庫存單位在同一流程中保留每個工作地點、預訂和資產分配。
  • 服務日誌是結構化的: ServiceInterval 捕捉 serviceCode、scheduledAt、completedAt、serviceNotes、performedBy,以及它觸及的單位。
  • 庫存保持最新: InventoryUnit 顯示單位是可用、已派遣、清潔中還是維護中,而 Live Queries 使辦公桌保持資訊更新。

快速構建和迭代租賃操作,通過所有平台的一個後端合同。

可攜式廁所租賃的好處

一個幫助您保持路線、服務工作和庫存一致的租賃後端。

更快的調度決策

使用 Site、RentalOrder 和 InventoryUnit,而不是從頭開始拼湊路線數據。

清晰的服務責任

使用 ServiceInterval、serviceCode 和 performedBy 來顯示每個間隔的完成者及其發生的時間。

客戶更新保持一致

保持 User、Site.contactName 和 Site.contactPhone 與正確的租賃訂單相關聯。

庫存控制明確

InventoryUnit.status 和 lastServicedAt 更容易標示可用、已派遣、清潔或維護的單位。

位置感知操作

LocationPing.gpsLat 和 gpsLng 幫助工作人員驗證單元的交付或服務位置。

AI 啟動工作流程

透過一個結構化提示快速生成後端框架和整合指導。

準備啟動您的可移動廁所租賃應用程序了嗎?

讓 Back4app AI 代理為您的可移動廁所租賃後端構建框架,並從一個提示生成 Site、InventoryUnit、RentalOrder、ServiceInterval 和 LocationPing 流程。

免費開始 — 每月 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 Schema

原始 JSON schema 定義可準備複製到 Back4app 或用作實施參考。

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 Agent 建立

使用 Back4app AI Agent 根據此模板生成一個真正的可攜式廁所租賃應用,包含前端、後端、身份驗證、以及 Site、InventoryUnit、RentalOrder、ServiceInterval 和 LocationPing 流程。

Back4app AI Agent
準備好開始建設了
在 Back4app 上根據此精確的架構和行為創建一個安全的可攜式廁所租賃應用後端。

架構:
1. 用戶(使用 Back4app 內建):用戶名,電子郵件,密碼,角色;objectId,createdAt,updatedAt(系統)。
2. 現場:siteCode,名稱,地址,gpsLat,gpsLng,聯繫人姓名,聯繫人電話,客戶(指向用戶的指針);objectId,createdAt,updatedAt(系統)。
3. 存貨單位:unitTag,unitType,狀態,最後服務於,當前現場(指向現場的指針),擁有者(指向用戶的指針);objectId,createdAt,updatedAt(系統)。
4. 租賃訂單:orderNumber,狀態,開始日期,結束日期,現場(指向現場的指針),指派單位(Pointer<InventoryUnit> 的數組),客戶(指向用戶的指針),服務間隔天數,備註;objectId,createdAt,updatedAt(系統)。
5. 服務間隔:serviceCode,安排於,完成於,狀態,訂單(指向租賃訂單的指針),單位(指向存貨單位的指針),服務備註,由誰執行(指向用戶的指針);objectId,createdAt,updatedAt(系統)。
6. 位置Ping:pingedAt,gpsLat,gpsLng,來源,單位(指向存貨單位的指針),訂單(指向租賃訂單的指針,可選),由誰捕獲(指向用戶的指針);objectId,createdAt,updatedAt(系統)。

安全性:
- 客戶只能查看自己的現場、租賃訂單、服務間隔和位置Ping條目。
- 調度員可以創建和更新服務間隔記錄並捕獲位置Ping數據。
- 資產擁有者可以管理存貨單位狀態並查看訂單指派。
- 除非角色被授權,否則保持位置和客戶聯繫人字段的私密性。

身份驗證:
- 註冊,登錄,登出。

行為:
- 列出租賃訂單,創建現場,指派存貨單位,安排服務間隔,記錄GPS pings。
- 保持存貨狀態和服務歷史的準確性,以便調度和客戶可見性。

交付:
- Back4app 應用程序,包含模式、CLPs、ACLs 和前端流程,供租賃台員工、資產擁有者和預訂可攜式廁所服務的客戶使用。

按下下面的按鈕以使用此模板提示打開代理。

這是沒有技術後綴的基本提示。您可以在之後調整生成的前端堆疊。

幾分鐘內部署每月 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 綁定。

可攜式單位的庫存控制

為庫存、維護和派送定義狀態和 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分鐘)設置用於派遣和租賃管理的企業網絡應用程序。類型化 SDK完整
少於2分鐘靈活的 GraphQL API 用於嵌套網站和服務查詢。GraphQL API完整
快速(2分鐘)設置REST API 整合用於預訂和路線更新。REST API完整
約3分鐘伺服器端 PHP 後端用於租賃櫃台工作流程。REST API完整
~3–7 分鐘.NET 後端用於調度和庫存操作。類型化 SDK完整

設置時間反映從項目啟動到使用此模板架構的第一個 InventoryUnit、RentalOrder、ServiceInterval 或 LocationPing 查詢的預期持續時間。

便攜式租賃問題

有關使用此範本構建便攜式廁所租賃後端的常見問題。

擴展到第二個位置時,便攜式廁所租賃操作員應首先儀表化什麼?
哪些便攜式廁所租賃事件應自動觸發客戶通知?
這個便攜式廁所租賃後端可以擴展到多站點庫存和集中價格規則嗎?
如何在 Flutter 中顯示單位和服務訪問?
如何在 Next.js 中管理 GPS 信號?
React 原生應用是否能離線緩存庫存狀態?
如何防止未經授權的單位編輯?
在 Android 中顯示可移動廁所可用性的最佳方法是什麼?

全球開發者信賴的選擇

加入團隊,利用 Back4app 範本更快推出可攜式廁所租賃產品

G2 Users Love Us Badge

準備好建立您的可攜式廁所租賃應用程式了嗎?

在幾分鐘內開始您的可攜式廁所租賃專案。無需信用卡。

選擇技術