member-stores-open-cardbuckle-card-functions-of-management-software - tu vi ngay
Bối cảnh yêu cầu
Một khách hàng có thể sở hữu nhiều thẻ.
Mỗi thẻ có thể liên kết với nhiều dịch vụ khác nhau.
Trong bảng liên kết giữa thẻ và dịch vụ, có trường hợp ghi nhận số lần sử dụng. Thẻ được phân loại thành hai dạng: thẻ theo giờ (time card) và thẻ theo lượt (usage card). Thẻ theo lượt sẽ đi kèm với số lần sử dụng cụ thể, trong khi đó, thẻ theo giờ bao gồm các loại như thẻ năm, thẻ quý hoặc thẻ tháng.
Lưu trữ dữ liệu
Thẻ được liên kết với khách hàng thông qua bảng mới là client_card, nơi mỗi bản ghi đại diện cho một thẻ riêng biệt của khách hàng.
Thông tin về thẻ và dịch vụ sẽ được sao chép vào dữ liệu phát hành thẻ để đảm bảo rằng ngay cả khi thông tin gốc thay đổi, dữ liệu lưu trữ vẫn chính xác. Ngoài ra, bảng liên kết cũng cần chứa thời gian phát hành thẻ, hạn sử dụng và thời gian cập nhật gần nhất.
Thiết kế trường dữ liệu
Các trường dữ liệu từ bảng thẻ gốc sẽ được sao chép sang bảng client_card. Để thuận tiện cho việc thống kê sau này, ID của thẻ gốc cũng nên được giữ lại.
Vì một thẻ có thể chứa nhiều dịch vụ, danh sách dịch vụ sẽ được chuyển đổi thành định dạng JSON và lưu trữ dưới dạng một trường duy nhất trong bảng client_card. Bên cạnh đó, ID của từng dịch vụ cũng cần được giữ lại.
Trường JSON này cũng cần ghi nhận số lần sử dụng còn lại của từng dịch vụ. Do tần suất trừ điểm không quá cao, logic xử lý có thể thực hiện trực tiếp ở tầng Go mà không cần phụ thuộc vào cơ sở dữ liệu.
Cần thêm các trường như thời gian phát hành thẻ và ngày hết hạn của thẻ. Đối với MySQL, kiểu dữ liệu DATE là phù hợp nhất, và trong Go, kiểu string có thể được sử dụng để tương thích. Cần kiểm tra kỹ lưỡng trường hợp các giá trị này trống.
Tra cứu thông tin thẻ đã phát hành của thành viên
Khi gửi ID thành viên, hệ thống sẽ truy vấn thông tin thẻ đã phát hành. Sử dụng cấu trúc mô hình thành viên với việc preload bảng liên kết sẽ giúp tối ưu hóa quá trình này.
Tính năng trừ điểm thẻ
Gửi 789bey các thông số bao gồm ID thành viên, ID thẻ, ID dịch vụ và số lần sử dụng (có thể bao gồm nhiều loại tiêu dùng), hệ thống sẽ thực hiện trừ điểm.
Trong trường hợp phức tạp hơn, cần xác quay hu nhận xem có nên hỗ trợ trừ điểm trên nhiều thẻ cùng lúc hoặc liên quan đến nhiều dịch vụ hay không. Nếu muốn đơn giản hóa quy trình, có thể áp dụng cấu trúc sau:
[Thẻ ID, Dịch vụ ID, Số lần sử dụng]
Ngay cả đối với thẻ theo giờ, quá trình trừ điểm vẫn cần được thực hiện để lưu lại lịch sử tiêu dùng. Lịch sử tu vi ngay tiêu dùng cần có thêm một loại giao dịch mới là "trừ điểm".