PI 案件日志
使用 AI Agent 构建
私人侦探案例记录后端

私人侦探案例记录后端模板
案件文件、证据项目和账单

在 Back4app 上的生产就绪 私人侦探案例记录后端,包含案件文件、证据项目、监视记录和账单条目类。跟踪案件历史,保存证据标签,并将账单与同一文件绑定。

关键案例日志要点

此模板为您提供带有 CaseFile、EvidenceItem、SurveillanceNote 和 BillingEntry 记录的私家侦探案例日志后端,以便工作人员可以保持清晰的时间顺序文件。

  1. 逐案证据跟踪为每个项目建模 EvidenceItem,包含 evidenceTag、evidenceType、storageUrl 和 isSealed 字段。
  2. 监视笔记年代记保持 SurveillanceNote 条目与 CaseFile 关联,包含 noteTime、地点、摘要和详细信息。
  3. 客户计费记录使用 BillingEntry 记录每个 CaseFile 的小时、费率、金额、工作类型和批准人。
  4. 角色意识访问使用 ACL 和 CLP 规则限制 CaseFile、EvidenceItem 和 BillingEntry 的访问。
  5. Web 和移动 API 对等通过相同的 REST 和 GraphQL 端点提供 React、Flutter、Next.js 和本地应用。

什么是私家侦探案件日志模板?

如果私家侦探案件日志的收集混乱,那么下游的一切都会受到影响 — 前门的清晰捕获节省了后续重建的小时。清晰胜过英勇。这个模板在 Back4app 上建模了 CaseFile、EvidenceItem、SurveillanceNote 和 BillingEntry,并提供基于角色的访问,使每个私家侦探案件日志团队成员都能看到他们所拥有的管道部分。

最佳适用:

私家侦探案件管理证据记录系统监控笔记捕获工具客户端账单跟踪器MVP 发布团队选择 BaaS 进行 PI 工作流程

您在私人调查员案件日志模板中获得的内容

在私人调查员案件日志中,最困难的对话始于“哪个号码是官方的?”——这表明后端尚未具备权威性。

此处的每个技术卡片映射到相同的 CaseFile、EvidenceItem 和 SurveillanceNote 模型——选择一个堆栈而不重新谈判您的后端合同。

PI案件日志核心功能

本中心中的每张技术卡都使用相同的案件日志后端架构,包括用户、案件文件、证据项、监控笔记和账单条目。

案件文件管理

CaseFile 存储案号、客户姓名、状态、指派的调查员和计费率。

证据日志记录

EvidenceItem 链接到 CaseFile,并捕获 evidenceTag、evidenceType、storageUrl 和 isSealed。

监控笔记

监控笔记存储每个监视周期的笔记时间、地点、摘要、细节和是否需要跟进。

客户账单条目

账单条目捕获条目日期、小时、费率、金额、工作类型和批准人。

为什么选择与Back4app构建您的PI案件日志?

Back4app为您提供数据类别和访问控制,以便在团队专注于现场工作时,保持案件文件、证据、笔记和账单条目的组织。

  • CaseFile和EvidenceItem保持关联: 将每个EvidenceItem存储在CaseFile中,以便照片、收据和保管链细节保持与正确调查的关联。
  • 监视笔记时间线更易于阅读: SurveillanceNote中的noteTime字段使观察日志可以按观察时间排序,而不是依赖自由文本猜测。
  • BillingEntry与调查记录匹配: 在BillingEntry中捕获小时、费率、金额和工作类型,以将现场时间与客户账单关联。

构建一次案件日志,然后在网页、移动和调查员仪表板上重用相同的后端合同。

私人侦探案件日志的好处

一个案件日志后端,可从第一次记录起将调查笔记和账单整理在一起。

清晰的证据轨迹

EvidenceItem 记录保留 evidenceTag、evidenceType、storageUrl 和 collectedAt 信息,适用于每个项目。

可读的监控历史

与 CaseFile 相关的 SurveillanceNote 条目为您提供按时间排序的字段记录,包括位置、摘要和细节。

与案件相关的计费

BillingEntry 记录与工作来自的相同 CaseFile 相关的小时数、费率、金额和工作类型。

敏感文件的访问控制

使用 ACL 和 CLP,只有指定的调查人员可以编辑 CaseFile 或添加 EvidenceItem 行。

跨设备访问案件日志

REST 和 GraphQL APIs 允许 Web 仪表板、移动现场应用和后台计费工具读取相同的 CaseFile 数据。

快速模式重用

从用户、案件文件、证据项、监视记录和账单条目开始,而不是逐个字段构建案件记录。

准备好启动您的私人侦探案件日志吗?

让 Back4app AI代理搭建您的案件日志后端,并从一个提示中生成案件文件、证据项、监视记录和账单条目的流程。

免费开始 — 每月50个AI代理提示,无需信用卡

案件日志技术栈

此私人侦探案件日志后端模板中包含所有内容。

前端
13+技术
后端
Back4app
数据库
MongoDB
认证
内置身份验证 + 会话
API
REST 和 GraphQL
实时
Live Queries

案例ER图

用于私家侦探案件日志后端架构的实体关系模型。

查看图表源
Mermaid
erDiagram
    User ||--o{ CaseFile : "assignedInvestigator"
    User ||--o{ EvidenceItem : "collectedBy"
    User ||--o{ SurveillanceNote : "observer"
    User ||--o{ BillingEntry : "approvedBy"
    CaseFile ||--o{ EvidenceItem : "caseFile"
    CaseFile ||--o{ SurveillanceNote : "caseFile"
    CaseFile ||--o{ BillingEntry : "caseFile"

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

    CaseFile {
        String objectId PK
        String caseNumber
        String clientName
        String status
        String assignedInvestigatorId FK
        Number billingRate
        Date openedAt
        Date closedAt
        Date createdAt
        Date updatedAt
    }

    EvidenceItem {
        String objectId PK
        String caseFileId FK
        String evidenceTag
        String evidenceType
        String storageUrl
        String collectedById FK
        Date collectedAt
        String locationLabel
        Boolean isSealed
        Date createdAt
        Date updatedAt
    }

    SurveillanceNote {
        String objectId PK
        String caseFileId FK
        Date noteTime
        String observerId FK
        String location
        String summary
        String detail
        Boolean followUpNeeded
        Date createdAt
        Date updatedAt
    }

    BillingEntry {
        String objectId PK
        String caseFileId FK
        Date entryDate
        Number hours
        Number rate
        Number amount
        String workType
        String approvedById FK
        Date createdAt
        Date updatedAt
    }

案例同步流程

典型的登录、案例文件加载、证据项目上传、监控笔记创建和账单条目审查的运行流程。

查看图表源
Mermaid
sequenceDiagram
  participant User
  participant App as Private Investigator Case Log App
  participant Back4app as Back4app Cloud

  User->>App: Sign in to the case log
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  User->>App: Open today's CaseFile list
  App->>Back4app: GET /classes/CaseFile?order=-openedAt
  Back4app-->>App: CaseFile rows

  User->>App: Add an EvidenceItem or SurveillanceNote
  App->>Back4app: POST /classes/EvidenceItem or /classes/SurveillanceNote
  Back4app-->>App: Saved objectId and timestamps

  User->>App: Review BillingEntry totals for a CaseFile
  App->>Back4app: GET /classes/BillingEntry?include=caseFile
  Back4app-->>App: BillingEntry list

  App->>Back4app: Live update case activity
  Back4app-->>App: CaseFile, EvidenceItem, SurveillanceNote changes

字段字典

私人侦探案件日志模式中每个类的完整字段级参考。

字段类型描述必填项
objectIdStringAuto-generated unique identifier自动
usernameStringUser login name
emailStringUser email address
passwordStringHashed password (write-only)
roleStringStaff role such as investigator, admin, or billing
createdAtDateAuto-generated creation timestamp自动
updatedAtDateAuto-generated last-update timestamp自动

7 在 User 中的字段

案件安全性和权限

ACL和CLP策略如何保护用户、案件文件、证据项、备注和账单条目。

分配的调查员控制

只有分配的用户或案件所有者可以更新案件文件、添加证据或修改账单细节。

证据完整性检查

使用云代码验证,以便证据项行需要案件文件指针、storageUrl和 collectedBy 轨迹。

范围读取访问

限制案例笔记和账单条目仅限于处理该文件的工作人员;敏感条目不应被广泛暴露。

JSON架构

原始JSON架构定义可复制到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": "CaseFile",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "caseNumber": {
          "type": "String",
          "required": true
        },
        "clientName": {
          "type": "String",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "assignedInvestigator": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "billingRate": {
          "type": "Number",
          "required": true
        },
        "openedAt": {
          "type": "Date",
          "required": true
        },
        "closedAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "EvidenceItem",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "caseFile": {
          "type": "Pointer",
          "required": true,
          "targetClass": "CaseFile"
        },
        "evidenceTag": {
          "type": "String",
          "required": true
        },
        "evidenceType": {
          "type": "String",
          "required": true
        },
        "storageUrl": {
          "type": "String",
          "required": true
        },
        "collectedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "collectedAt": {
          "type": "Date",
          "required": true
        },
        "locationLabel": {
          "type": "String",
          "required": false
        },
        "isSealed": {
          "type": "Boolean",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "SurveillanceNote",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "caseFile": {
          "type": "Pointer",
          "required": true,
          "targetClass": "CaseFile"
        },
        "noteTime": {
          "type": "Date",
          "required": true
        },
        "observer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "location": {
          "type": "String",
          "required": true
        },
        "summary": {
          "type": "String",
          "required": true
        },
        "detail": {
          "type": "String",
          "required": true
        },
        "followUpNeeded": {
          "type": "Boolean",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "BillingEntry",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "caseFile": {
          "type": "Pointer",
          "required": true,
          "targetClass": "CaseFile"
        },
        "entryDate": {
          "type": "Date",
          "required": true
        },
        "hours": {
          "type": "Number",
          "required": true
        },
        "rate": {
          "type": "Number",
          "required": true
        },
        "amount": {
          "type": "Number",
          "required": true
        },
        "workType": {
          "type": "String",
          "required": true
        },
        "approvedBy": {
          "type": "Pointer",
          "required": false,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

与AI代理一起构建

使用Back4app AI代理从此模板生成真实的私人侦探案件记录应用,包括前端、后端、身份验证,以及CaseFile、EvidenceItem、SurveillanceNote和BillingEntry流程。

Back4app AI代理
准备建设
在Back4app上创建一个私人侦探案件日志应用程序后端,具有此确切架构和行为。

架构:
1. 用户(使用 Back4app 内置):用户名,电子邮件,密码,角色;objectId,createdAt,updatedAt(系统)。
2. 案件文件:案件编号(字符串,必填),客户名称(字符串,必填),状态(字符串,必填),指定调查员(指向用户的指针,必填),计费费率(数字,必填),开启时间(日期,必填),关闭时间(日期,可选);objectId,createdAt,updatedAt(系统)。
3. 证据项:案件文件(指向案件文件的指针,必填),证据标签(字符串,必填),证据类型(字符串,必填),存储网址(字符串,必填),收集人(指向用户的指针,必填),收集时间(日期,必填),位置标签(字符串,可选),是否密封(布尔值,必填);objectId,createdAt,updatedAt(系统)。
4. 监视备注:案件文件(指向案件文件的指针,必填),备注时间(日期,必填),观察者(指向用户的指针,必填),位置(字符串,必填),总结(字符串,必填),详细信息(字符串,必填),是否需要跟进(布尔值,必填);objectId,createdAt,updatedAt(系统)。
5. 计费条目:案件文件(指向案件文件的指针,必填),条目日期(日期,必填),小时(数字,必填),费率(数字,必填),金额(数字,必填),工作类型(字符串,必填),批准人(指向用户的指针,可选);objectId,createdAt,updatedAt(系统)。

安全性:
- 将案件文件的可见性限制为指定调查员和计费员工。
- 证据项记录只能由具有案件访问权限的员工进行写入。
- 监视备注条目必须保留时间顺序的历史。
- 计费条目总额由获得计费批准的员工进行编辑。

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

行为:
- 列出打开的案件文件,创建证据条目,添加监视备注,计算计费条目,并显示案件活动的实时更新。

交付:
- Back4app 应用程序带有架构、ACL、CLP;用于案件管理、证据记录、监视备注和客户计费的前端。

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

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

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

API沙箱

尝试使用与私人侦探案件日志架构兼容的REST和GraphQL端点。响应使用模拟数据,无需Back4app帐户。

正在加载演示环境…

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

选择您的技术

展开每个卡片以查看如何将 CaseFile、EvidenceItem 和 SurveillanceNote 与您选择的技术栈集成。

Flutter 私人侦探案例日志后台

React 私人侦探案例日志后台

React 原生 私人侦探案例日志后台

Next.js 私人侦探案例日志后台

JavaScript 私人侦探案例日志后台

Android 私人侦探案例日志后台

iOS 私人侦探案例日志后台

Vue 私人侦探案例日志后台

Angular 私人侦探案例日志后台

GraphQL 私人侦探案例日志后台

REST API 私人侦探案例日志后台

PHP 私人侦探案例日志后台

.NET 私人侦探案例日志后台

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

每个技术栈都使用相同的私家侦探案件日志后端架构和 API 合同。

统一的案件日志结构

使用一致的架构管理用户、CaseFile、EvidenceItem、SurveillanceNote 和 BillingEntry 记录。

私家侦探工作的证据记录

记录每个 EvidenceItem 的 evidenceTag、evidenceType、storageUrl 和 collectedAt。

监控笔记时间线

捕获现场工作审核的地点、摘要、细节和备注时间。

客户计费记录

按案件文件跟踪小时数、费率、金额和工作类型。

REST/GraphQL APIs用于调查。

将网络、移动和办公室工具与一个后端合同集成。

可扩展的案件工作流

随着调查过程的变化添加新的类别或字段。

私人侦探技术比较

比较所有支持技术的设置速度、SDK 风格和 AI 支持。

框架设置时间PI案件日志好处SDK 类型AI支持
大约5分钟用于移动和网页的调查员案件日志的单一代码库。输入式SDK完整版
不到5分钟快速网页仪表板用于案件文件和证据。输入式SDK完整版
大约 3–7 分钟跨平台移动应用程序,用于现场笔记和证据捕获。输入 SDK完整版
快速(5 分钟)设置为调查人员提供的服务器渲染案件管理门户。输入 SDK完整版
大约 3–5 分钟轻量级网络集成,用于 PI 日志。输入 SDK完整版
大约 5 分钟原生Android应用程序用于现场监控笔记。输入的SDK完整版
少于5分钟原生iOS应用程序用于证据记录。输入的SDK完整版
约3–7分钟Reactive网页用户界面用于案件日志审核。输入的SDK完整版
快速(5分钟)设置企业网络应用程序用于案例文件和计费。输入的SDK完整版
少于2分钟灵活的 GraphQL API 用于嵌套案例数据。GraphQL API完整版
快速(2分钟)设置REST API 集成用于 PI 案例日志。REST API完整版
约3分钟服务器端 PHP 后端用于案例文件工作流。REST API完整版
~3–7分钟.NET 背后用于调查和账单。输入SDK完整版

设置时间反映了从项目启动到使用此模板模式的第一个案件文件或证据查询的预期持续时间。

PI案件日志常见问题

关于使用此模板构建私人侦探案件日志后端的常见问题。

私家侦探案例日志团队应该如何分配职责而不泄露数据?
哪些私家侦探案例日志工作流程最受益于结构化任务而不是自由格式的笔记?
在不减慢日常工作的情况下,添加私家侦探案例日志报告字段的最佳方法是什么?
我如何使用 Flutter 运行案例文件和笔记的查询?
如何使用 Next.js Server Actions 管理私人侦探案件日志访问?
React Native 可以离线缓存案件日志吗?
如何防止未经授权的证据编辑?
在 Android 上显示可计费时间的最佳方法是什么?

全球开发者信赖

与 Back4app 模板一起加入快速交付私人侦探案件日志产品的团队

G2 Users Love Us Badge

准备好构建您的私人侦探案件日志应用程序了吗?

在几分钟内开始您的私人侦探案件日志项目。无需信用卡。

选择技术