可移动厕所租赁
与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

这个便携式厕所租赁后台是如何组织的

如果在便携式厕所租赁中为新员工入职需要部落知识,那么您就距离单点故障只差一次离开。

中心保持基于角色的用户记录、单位分配和状态跟踪、服务间隔日志的语言一致,这样当产品、运营和工程人员说“记录”时,含义是相同的。

可移动厕所租赁核心功能

此集线器中的每个技术卡都使用相同的便携式厕所租赁架构,包括用户、现场、库存单元、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

准备好复制到 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 Agent 一起构建

使用 Back4app AI Agent 从此模板生成真正的可移动厕所租赁应用程序,包括前端、后端、认证,以及 Site、InventoryUnit、RentalOrder、ServiceInterval 和 LocationPing 流程。

Back4app AI Agent
准备好构建
在 Back4app 上创建一个安全的便携式厕所租赁应用后端,使用此确切的模式和行为。

模式:
1. 用户(使用 Back4app 内置):用户名,电子邮件,密码,角色;objectId,创建时间,更新时间(系统)。
2. 站点:站点代码,名称,地址,gpsLat,gpsLng,联系人姓名,联系人电话,客户(指向用户的指针);objectId,创建时间,更新时间(系统)。
3. 库存单元:单元标签,单元类型,状态,最后维护时间,当前站点(指向站点的指针),所有者(指向用户的指针);objectId,创建时间,更新时间(系统)。
4. 租赁订单:订单号码,状态,开始日期,结束日期,站点(指向站点的指针),分配单元(库存单元的指针数组),客户(指向用户的指针),服务间隔天数,备注;objectId,创建时间,更新时间(系统)。
5. 服务间隔:服务代码,计划时间,完成时间,状态,订单(指向租赁订单的指针),单元(指向库存单元的指针),服务备注,由(指向用户的指针)执行;objectId,创建时间,更新时间(系统)。
6. 位置签到:签到时间,gpsLat,gpsLng,来源,单元(指向库存单元的指针),订单(指向租赁订单的指针,可选),由(指向用户的指针)捕获;objectId,创建时间,更新时间(系统)。

安全性:
- 客户只能查看自己的站点、租赁订单、服务间隔和位置签到条目。
- 调度员可以创建和更新服务间隔记录,并捕获位置签到数据。
- 资产所有者可以管理库存单元状态并查看订单分配。
- 除非角色被授权,否则保持位置和客户联系字段私密。

认证:
- 注册,登录,登出。

行为:
- 列出租赁订单,创建站点,分配库存单元,调度服务间隔,并记录 GPS 签到。 
- 保持库存状态和服务历史记录的准确,以便于调度和客户可见性。

交付:
- 针对租赁台工作人员、资产所有者和预订便携式厕所服务的客户,提供具有模式、CLP、ACL 和前端流的 Back4app 应用。

按下面的按钮以打开预填充此模板提示的代理。

这是没有技术后缀的基本提示。您可以在后续调整生成的前端堆栈。

几分钟内部署每月 50 个免费提示无需信用卡

API 沙盒

尝试使用针对便携式厕所租赁架构的 REST 和 GraphQL 端点。响应使用模拟数据,无需 Back4app 帐户。

加载游乐场…

使用与此模板相同的架构。

选择您的技术栈

展开每个卡片以查看如何将站点、库存单元和租赁订单与您选择的技术栈集成。

Flutter 便携式厕所租赁后端

React 便携式厕所租赁后端

React 原生 便携式厕所租赁后端

Next.js 便携式厕所租赁后端

JavaScript 便携式厕所租赁后端

Android 便携式厕所租赁后端

iOS 便携式厕所租赁后端

Vue 便携式厕所租赁后端

Angular 便携式厕所租赁后端

GraphQL 便携式厕所租赁后端

REST API 便携式厕所租赁后端

PHP 便携式厕所租赁后端

.NET 便携式厕所租赁后端

您在每种技术中可以获得的内容

每个技术栈都使用相同的可移动厕所租赁后端架构和 API 合同。

统一的租赁数据结构

使用一致的架构管理用户、站点、库存单元、租赁订单、服务间隔和位置检测。

租赁的服务间隔日志

记录每次清理、补货和检查,使用相同的 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 互动网页用户界面,用于服务和库存面板。类型化 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查询的预期持续时间。

便携式租赁问题

关于使用此模板构建便携式厕所租赁后端的常见问题。

便携式厕所租赁运营商在扩展到第二个地点时应该首先仪器化什么?
哪些便携式厕所租赁事件应该自动触发客户通知?
这个便携式厕所租赁后端可以扩展到多场地库存和集中定价规则吗?
我如何在 Flutter 中显示单位和服务访问?
我如何在 Next.js 中管理 GPS 信号?
React Native 可以离线缓存库存状态吗?
我如何防止未经授权的单位编辑?
在 Android 上显示可移动厕所可用性的最佳方法是什么?

全球开发者信赖

加入团队,使用 Back4app 模板更快地推出便携式厕所租赁产品

G2 Users Love Us Badge

准备好构建您的便携式厕所租赁应用了吗?

在几分钟内开始您的便携式厕所租赁项目。无须信用卡。

选择技术