”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 ChatGPT 构建订单处理服务(贡献努力)并已完成

使用 ChatGPT 构建订单处理服务(贡献努力)并已完成

发布于2024-11-06
浏览:234

Building an Orders Processing Service with ChatGPT (contribute  efforts) and Finished in ays

人工智能为改变和提高我的日常工作效率做出了贡献

作为一名开发人员,当您的时间有限时,构建订单处理服务有时会让人感到不知所措。然而,借助 ChatGPT 等人工智能驱动的开发工具的强大功能,您可以通过生成代码、设计实体和逐步解决问题来显着加快流程。在本文中,我将向您介绍如何使用 ChatGPT 在短短 2 天 内构建功能齐全的订单处理服务,从收集需求到完成。

老实说,对于不同的小任务有很多小线程和提示,我无法将它们总结成一个完整的项目,但总的来说......它帮助了我 70 - 80%。另外,这里是一些原始代码,经过我审阅,可能是手工修改过的,所以你可能在我分享的github上找不到这个功能。

第一天:了解要求和设置

第 1 步:收集并明确需求

我做的第一件事就是列出该服务所需的核心功能。以下是我需要的主要功能:

  1. 用户注册:允许用户使用手机号码和地址注册。
  2. 特许经营位置搜索:使客户能够查看和查找附近的咖啡特许经营店。
  3. 下订单:客户可以从菜单中下单包含多个项目。
  4. 队列管理:跟踪客户在队列中的位置并提供预期等待时间。
  5. 取消订单:顾客可以随时退出队列并取消订单。

第 2 步:使用 ChatGPT 生成 API 端点

我请求 ChatGPT 帮助我设计满足需求的 API 结构。这是我使用的第一个提示的示例:

迅速的:

使用 Spring Boot 为用户注册系统创建 API 端点,用户可以在其中使用姓名、手机号码和地址进行注册。

结果: ChatGPT 生成了几个端点:

  • POST /users/register:注册新用户。
  • GET /franchises/nearby:根据纬度和经度查找附近的咖啡特许经营店。
  • POST /orders: 下单包含多个商品。
  • GET /orders/{orderId}/queue-position:检查用户在队列中的位置。
  • DELETE /orders/{orderId}: 取消订单并退出队列。

第 3 步:实体设计

对于订单处理服务,我们需要 User、Franchise、Order、Queue 和 OrderItem 实体。我使用 ChatGPT 来定义这些具有必要字段的实体。

迅速的:

设计系统的用户实体。用户可以拥有手机号码、地址和角色(如客户)。

结果: ChatGPT 使用 JPA 提供了一个简单的用户实体:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID id;

    @Column(nullable = false, unique = true)
    private String username;
    @Column(nullable = false)
    private String password;
    private String mobileNumber;
    private String address;
    private UserRole role; // CUSTOMER, ADMIN
}

我对特许经营、订单和队列实体重复了此过程。

第 2 天:实施业务逻辑

第四步:下单逻辑

一旦设置了基本的 API 和实体,我就开始实施下单的业务逻辑。这是该服务的关键部分,因为它需要处理菜单中的多个项目并管理队列位置。

迅速的:

实现对多个商品下订单的逻辑,其中每个商品都链接到特许经营中的特定菜单。

结果: ChatGPT 指导我设计了一个 OrderService 来处理这个问题。这是实现的一部分:

public Order createOrder(UUID customerId, UUID franchiseId, List items) {
    Order order = new Order();
    order.setCustomer(userRepository.findById(customerId).orElseThrow());
    order.setFranchise(franchiseRepository.findById(franchiseId).orElseThrow());

    List orderItems = items.stream()
        .map(itemDto -> new OrderItem(menuItemRepository.findById(itemDto.getMenuItemId()), itemDto.getQuantity()))
        .collect(Collectors.toList());
    order.setItems(orderItems);
    order.setQueuePosition(findQueuePositionForFranchise(franchiseId));
    return orderRepository.save(order);
}

第5步:队列管理

接下来,我请 ChatGPT 帮助我设计将客户放入队列并跟踪其位置的逻辑。

迅速的:

咖啡加盟系统中如何计算订单的排队位置和等待时间?

结果: ChatGPT 建议创建一个 QueueService 来跟踪订单并根据时间戳为其分配位置。我的实现如下:

public int findQueuePositionForFranchise(UUID franchiseId) {
    List queue = customerQueueRepository.findAllByFranchiseId(franchiseId);
    return queue.size()   1;
}

它还提供了根据平均订单处理时间估计等待时间的指导。

第 6 步:取消订单

最后,我实现了允许客户取消订单并退出队列的逻辑:

public void cancelOrder(UUID orderId) {
    Order order = orderRepository.findById(orderId).orElseThrow();
    queueService.removeFromQueue(order.getQueue().getId(), order.getId());
    orderRepository.delete(order);
}

完成项目

到第 2 天结束时,我获得了功能齐全的服务,使客户能够:

  • 使用手机号码和地址注册。
  • 查看附近的特许经营店。
  • 从菜单中选择多个项目下订单。
  • 查看他们的排队位置和等待时间。
  • 随时取消订单。

要点

  • 利用人工智能执行日常任务:ChatGPT 加快了重复性任务的速度,例如设计 API、生成样板代码和实现常见业务逻辑模式。
  • 分而治之:通过将项目分解为小的、可管理的任务(例如用户注册、队列管理和下订单),我能够按顺序实现每个功能。
  • 人工智能辅助学习:虽然ChatGPT提供了大量代码,但我仍然需要了解底层逻辑并根据我的项目需求进行调整,这是一次很棒的学习体验。
  • 实时调试:ChatGPT 帮助我解决了实时问题,指导我解决实施过程中遇到的错误和异常,使项目保持在正轨上。

我还有几个步骤来创建文档、使用 Liquidbase 并让 chatGPT 生成示例数据以便于测试。

结论

在 2 天内为一家咖啡店建立一个订单处理系统可能听起来令人畏惧,但在人工智能的帮助下,这是可以实现的。 ChatGPT 就像编码助手一样,帮助我将抽象需求快速转化为工作系统。虽然人工智能可以提供基础,但改进和定制代码仍然是一项基本技能。这个项目教会了我如何在不失去对开发过程的控制的情况下最大限度地发挥人工智能工具的价值。

按照我采取的步骤,您可以加快自己的项目速度并专注于解决更高级别的问题,而将常规代码生成和指导留给 AI。

完整源码Github

版本声明 本文转载于:https://dev.to/jackynote/building-an-orders-processing-service-with-chatgpt-contribute-70-80-efforts-and-finished-in-2-days-3klf?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 网页抓取 - 有趣!
    网页抓取 - 有趣!
    一个很酷的术语: CRON = 按指定时间间隔自动安排任务的编程技术 网络什么? 在研究项目等时,我们通常会从各个网站编写信息 - 无论是日记/Excel/文档等。 我们正在抓取网络并手动提取数据。 网络抓取正在自动化这一过程。 例子 当在网上搜索运动鞋时,它会显示包...
    编程 发布于2024-11-06
  • 感言网格部分
    感言网格部分
    ?在学习 CSS 网格时刚刚完成了这个推荐网格部分的构建! ?网格非常适合创建结构化布局。 ?现场演示:https://courageous-chebakia-b55f43.netlify.app/ ? GitHub:https://github.com/khanimran17/Testimonia...
    编程 发布于2024-11-06
  • 为什么 REGISTER_GLOBALS 被认为是 PHP 中的主要安全风险?
    为什么 REGISTER_GLOBALS 被认为是 PHP 中的主要安全风险?
    REGISTER_GLOBALS 的危险REGISTER_GLOBALS 是一个 PHP 设置,它允许所有 GET 和 POST 变量在 PHP 脚本中用作全局变量。此功能可能看起来很方便,但由于潜在的安全漏洞和编码实践,强烈建议不要使用它。为什么 REGISTER_GLOBALS 不好?REGIS...
    编程 发布于2024-11-06
  • Nodemailer 概述:在 Node.js 中轻松发送电子邮件
    Nodemailer 概述:在 Node.js 中轻松发送电子邮件
    Nodemailer 是一个用于发送电子邮件的 Node.js 模块。以下是快速概述: Transporter:定义电子邮件的发送方式(通过 Gmail、自定义 SMTP 等)。 const transporter = nodemailer.createTransport({ ... }); ...
    编程 发布于2024-11-06
  • JavaScript 中的轻松错误处理:安全赋值运算符如何简化您的代码
    JavaScript 中的轻松错误处理:安全赋值运算符如何简化您的代码
    JavaScript 中的错误处理可能很混乱。将大块代码包装在 try/catch 语句中是可行的,但随着项目的增长,调试就变成了一场噩梦。幸运的是,有更好的方法。输入 安全赋值运算符 (?=) - 一种更干净、更有效的错误处理方法,使代码保持可读性并简化调试。 什么是安全赋值运算符...
    编程 发布于2024-11-06
  • Javascript 很难(有悲伤)
    Javascript 很难(有悲伤)
    这将是一个很长的阅读,但让我再说一遍。 JAVASCRIPT很难。上次我们见面时,我正在踏入 Javascript 的世界,一个眼睛明亮、充满希望的程序员踏入野生丛林,说“这能有多难?”。我错得有多离谱??事情变得更难了,我(勉强)活了下来,这是关于我的旅程的一个小混乱的故事。 变量:疯狂的开始 ...
    编程 发布于2024-11-06
  • ## 您可以在不使用 JavaScript 的情况下使用 CSS 创建饼图分段吗?
    ## 您可以在不使用 JavaScript 的情况下使用 CSS 创建饼图分段吗?
    使用 CSS 在圆中分段使用 border-radius 在 CSS 中创建圆是一种常见的做法。但是,我们可以通过分段(类似于饼图)实现类似的效果吗?本文深入研究了仅通过 HTML 和 CSS 实现此目的的方法,不包括使用 JavaScript。生成相等大小的段相等大小段的一种方法涉及生成以下内容的...
    编程 发布于2024-11-06
  • 从头开始构建一个小型矢量存储
    从头开始构建一个小型矢量存储
    With the evolving landscape of generative AI, vector databases are playing crucial role in powering generative AI applications. There are so many vect...
    编程 发布于2024-11-06
  • 如何在Chrome中使用AI实验API
    如何在Chrome中使用AI实验API
    要在 Chrome 中使用实验性 AI API,请按照以下步骤操作: 硬件要求 4GB 内存 GPU可用 至少 22GB 空间 Windows 10.11 或 macOS Ventura 或更新版本(无 Linux 规范) 尚不支持: Chrome操作系统 Chrome iOS Ch...
    编程 发布于2024-11-06
  • 评论:Adam Johnson 的《Boost Your Django DX》
    评论:Adam Johnson 的《Boost Your Django DX》
    书评很微妙。您不想破坏它,但您也想让潜在读者体验一下所期待的内容。这是提供背景和保持兴趣之间的巧妙平衡。我试图在这篇评论中达到这种平衡,为您提供足够的内容来吸引您,而不透露太多。 一个小背景故事:我第一次从 Djangonaut Space 的好朋友 Tim 那里听说这本书,并将其添加到我的阅读列表...
    编程 发布于2024-11-06
  • 如何对数组元素进行分组并组合多维数组中另一列的值?
    如何对数组元素进行分组并组合多维数组中另一列的值?
    按列对数组元素进行分组并组合另一列中的值给定一个包含两列嵌套数组的数组,任务是将基于特定列的子数组,并将每个组中另一列的值连接起来,生成一个以逗号分隔的列表。考虑以下示例数组:$array = [ ["444", "0081"], ["...
    编程 发布于2024-11-06
  • 三个新添加的例外功能
    三个新添加的例外功能
    从 JDK 7 开始,异常处理已扩展为三个新功能:自动资源管理、多重捕获和更准确的重新抛出。 多重catch允许您使用同一个catch子句捕获多个异常,避免代码重复。 要使用多重捕获,请指定由 | 分隔的异常列表。在 catch 子句中。每个参数都是隐式最终参数。 用法示例:catch(final...
    编程 发布于2024-11-06
  • 如何修复运行 ES6 代码时出现“意外的令牌导出”错误?
    如何修复运行 ES6 代码时出现“意外的令牌导出”错误?
    “排除意外的令牌导出错误”尝试在项目中执行 ES6 代码时,可能会出现“意外的令牌导出”错误。此错误表明所使用的环境不支持 ES6 模块中使用的导出关键字语法。错误详细信息以下代码片段举例说明了错误的来源: export class MyClass { constructor() { c...
    编程 发布于2024-11-06
  • 即使卸载后,VSCode 扩展也不会从文件系统中删除,我创建了一个解决方案!
    即使卸载后,VSCode 扩展也不会从文件系统中删除,我创建了一个解决方案!
    所以这是基于 vscode 的编辑器的问题。即使您卸载了扩展程序,它也会保留在文件系统中,并随着时间的推移堵塞您的系统。我创建了一个简单的解决方案。运行此 python 脚本将删除 vscode 上未安装的扩展。 它适用于 VS Code、VS Code Insiders,也适用于 VSCodiu...
    编程 发布于2024-11-06
  • 通过 GitHub Actions 按计划更新网站内容
    通过 GitHub Actions 按计划更新网站内容
    我想分享我构建一个自我可持续的内容管理系统的旅程,该系统不需要传统意义上的内容数据库。 问题 该网站的内容(博客文章和书签)存储在 Notion 数据库中: 带书签的数据库 –  Notion UI 我试图解决的问题是不必在添加每个书签后手动部署网站。最重要的是 - 保持托管尽可能便...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3