Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi langganan pengguna?

Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi langganan pengguna?

WBOY
WBOYasal
2023-11-01 13:36:35682semak imbas

Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi langganan pengguna?

Go pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi langganan pengguna?

Pengenalan:
Memandangkan permintaan orang ramai terhadap pemakanan sihat meningkat, semakin ramai orang memilih untuk menikmati makanan berkualiti tinggi di rumah. Perkhidmatan memasak dari pintu ke pintu muncul mengikut kehendak masa, memberikan pengguna pengalaman makan yang mudah, sihat dan lazat. Dalam proses membangunkan sistem memasak dari pintu ke pintu, fungsi langganan pengguna adalah keperluan penting. Artikel ini akan mengambil bahasa Go sebagai contoh untuk memperkenalkan cara melaksanakan fungsi langganan pengguna dan memberikan contoh kod khusus.

1. Analisis keperluan
Sebelum melaksanakan fungsi langganan pengguna, kami perlu menjelaskan keperluan terlebih dahulu. Fungsi langganan pengguna terutamanya merangkumi aspek berikut:

  1. Pendaftaran dan log masuk pengguna: Pengguna perlu mendaftar dan log masuk untuk menggunakan fungsi langganan.
  2. Pakej langganan: Pengguna boleh memilih untuk melanggan pakej yang berbeza, setiap pakej mengandungi hidangan yang berbeza.
  3. Pengurusan pesanan: Pengguna boleh melihat pakej yang dilanggan, mengubah suai kandungan langganan atau membatalkan langganan.
  4. Pemprosesan pembayaran: Pengguna perlu menyelesaikan operasi pembayaran sebelum mereka berjaya melanggan hidangan.
  5. Pemberitahuan tolak: Sistem perlu menghantar pemberitahuan seperti langganan yang berjaya, pengubahsuaian langganan dan pembatalan langganan kepada pengguna.

2. Reka bentuk pangkalan data
Sebelum melaksanakan fungsi langganan pengguna, kita perlu mereka bentuk struktur pangkalan data yang sepadan untuk menyimpan maklumat seperti pengguna, pakej, pesanan, dll. Berikut ialah contoh reka bentuk pangkalan data yang mudah:

  1. Jadual pengguna (pengguna):

    • id: ID pengguna#🎜 🎜 #
    • nama pengguna: nama pengguna
    • kata laluan: kata laluan
    • email: e-mel
    #🎜#
  2. #🎜🎜🎜 Jadual pakej (pakej):
  3. id: ID Pakej
    • nama: Nama pakej
    • harga: Harga pakej#🎜 🎜
    • deskripsi: Penerangan pakej
    Pesanan:
  4. 🎜: ID Pesanan

    user_id: ID pengguna (kunci asing)
    • package_id: ID pakej (kunci asing)
    • subscribe_date: tarikh langganan
    • #🎜_🎜 status langganan (0-tidak berbayar, 1-berbayar)
    • 3 Pelaksanaan kod
    • Seterusnya, Kami akan menggunakan bahasa Go untuk melaksanakan kod khusus untuk fungsi langganan pengguna. Pertama, kita perlu menggunakan rangka kerja web Go (seperti Gin) untuk membina aplikasi sebelah pelayan.
Pendaftaran pengguna dan log masuk:

Pendaftaran pengguna dan fungsi log masuk boleh menggunakan JWT (Json Web Token) untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran. Berikut ialah contoh kod mudah:

// 注册
func Signup(c *gin.Context) {
    // 获取注册表单参数
    var user User
    if err := c.ShouldBindJSON(&user); err != nil {
        // 处理参数错误
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    // 存储用户信息到数据库
    err := db.Create(&user).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"message": "注册成功"})
}

// 登录
func Login(c *gin.Context) {
    // 获取登录表单参数
    var userReq UserReq
    if err := c.ShouldBindJSON(&userReq); err != nil {
        // 处理参数错误
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    // 验证用户信息是否正确
    var user User
    err := db.Where("username = ? AND password = ?", userReq.Username, userReq.Password).First(&user).Error
    if err != nil {
        c.JSON(http.StatusUnauthorized, gin.H{"error": "用户名或密码错误"})
        return
    }

    // 生成JWT并返回给客户端
    token, err := generateToken(user.ID)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"token": token})
}
  1. Pengurusan pakej:
    Pakej boleh ditambah, dipadam, diubah suai dan disemak melalui pangkalan data. Berikut ialah contoh kod mudah:
// 获取套餐列表
func GetPackages(c *gin.Context) {
    var packages []Package
    err := db.Find(&packages).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"packages": packages})
}

// 添加套餐
func AddPackage(c *gin.Context) {
    var package Package
    if err := c.ShouldBindJSON(&package); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    err := db.Create(&package).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"message": "添加套餐成功"})
}

// 修改套餐
func UpdatePackage(c *gin.Context) {
    packageID := c.Param("id")
    var package Package
    if err := db.Where("id = ?", packageID).First(&package).Error; err != nil {
        c.JSON(http.StatusNotFound, gin.H{"error": "套餐不存在"})
        return
    }

    var newPackage Package
    if err := c.ShouldBindJSON(&newPackage); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    package.Name = newPackage.Name
    package.Price = newPackage.Price
    package.Description = newPackage.Description

    err := db.Save(&package).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"message": "修改套餐成功"})
}

// 删除套餐
func DeletePackage(c *gin.Context) {
    packageID := c.Param("id")
    var package Package
    if err := db.Where("id = ?", packageID).First(&package).Error; err != nil {
        c.JSON(http.StatusNotFound, gin.H{"error": "套餐不存在"})
        return
    }

    err := db.Delete(&package).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"message": "删除套餐成功"})
}
  1. Pengurusan pesanan:
    Fungsi pengurusan pesanan terutamanya termasuk operasi seperti melanggan pakej, melihat pesanan dan membatalkan pesanan. Berikut ialah contoh kod mudah:
// 订阅套餐
func SubscribePackage(c *gin.Context) {
    userID := getUserIDFromToken(c)

    // 获取订阅表单参数
    var order OrderReq
    if err := c.ShouldBindJSON(&order); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    // 验证套餐是否存在
    var package Package
    if err := db.Where("id = ?", order.PackageID).First(&package).Error; err != nil {
        c.JSON(http.StatusNotFound, gin.H{"error": "套餐不存在"})
        return
    }

    // 创建订单
    order := Order{
        UserID: userID,
        PackageID: order.PackageID,
        SubscribeDate: time.Now(),
        SubscribeStatus: 0,  // 未支付状态
    }
    err := db.Create(&order).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"message": "订阅成功"})
}

// 查看订单
func GetOrders(c *gin.Context) {
    userID := getUserIDFromToken(c)

    var orders []Order
    err := db.Where("user_id = ?", userID).Find(&orders).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"orders": orders})
}

// 取消订单
func CancelOrder(c *gin.Context) {
    userID := getUserIDFromToken(c)
    orderID := c.Param("id")

    var order Order
    if err := db.Where("id = ? AND user_id = ?", orderID, userID).First(&order).Error; err != nil {
        c.JSON(http.StatusNotFound, gin.H{"error": "订单不存在"})
        return
    }

    err := db.Delete(&order).Error
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"message": "取消订单成功"})
}
    Kod di atas hanyalah contoh mudah Dalam projek sebenar, pengendalian ralat yang berkaitan, pengelogan dan sebagainya juga perlu dipertimbangkan. Pelaksanaan kod khusus boleh dikembangkan dan diselaraskan mengikut keperluan sebenar.

  1. Ringkasan:
  2. Fungsi langganan pengguna ialah bahagian yang sangat penting dalam sistem memasak dari pintu ke pintu Artikel ini mengambil bahasa Go sebagai contoh untuk memperkenalkan cara menggunakan bahasa Go untuk membangunkan fungsi langganan pengguna, dan menyediakan contoh kod khusus. Melalui contoh kod di atas, kita boleh memahami dengan lebih baik cara mereka bentuk dan melaksanakan fungsi langganan pengguna, dan menggunakannya dengan lebih cekap dalam pembangunan projek sebenar. Pada masa yang sama, kami juga perlu melaksanakan pengembangan dan pengoptimuman yang sepadan berdasarkan keperluan perniagaan tertentu.

Atas ialah kandungan terperinci Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi langganan pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn