Demo bảng đặt lịch có phát hiện trùng giờ

Mười lăm ngày lịch của một tiệm làm tóc với sáu nhân viên, nơi bộ máy phát hiện xung đột chính là sản phẩm còn mọi thứ khác chỉ là lớp vỏ quanh nó. Thời gian là số phút nguyên chứ không phải đối tượng ngày tháng, nên hai lịch hẹn chạm nhau đúng mười giờ là hợp lệ, còn chồng nhau một phút thì không.

Mở bản demo

Mở booking.taiphamsolutions.com trong tab mới. Không cần tài khoản, không cần đăng ký, và mọi thao tác của bạn đều không rời khỏi trình duyệt. Ứng dụng demo chỉ có bản tiếng Anh.

Bản demo này làm gì

Cái bảng là một ngày gồm các cột nhân viên, trên đó vẽ lịch hẹn, giờ nghỉ và ngày nghỉ. Cả ba có cùng một hình dáng, cố ý như vậy, để bộ máy chỉ có đúng một nhánh xử lý và không thể đối xử với một trong ba khác đi. Kéo một lịch hẹn thì bóng mờ đỏ lên ngay khi nó sắp va vào thứ khác, kèm tên khối đang chặn và số phút chồng lấn đếm chính xác.

Ba quyết định gánh cả sản phẩm. Thời gian là số phút nguyên tính từ mốc epoch chứ không phải một đối tượng ngày tháng, nên một điểm kết thúc bằng đúng điểm bắt đầu là chính xác và việc bám lưới không thể trôi đi. Thời gian đệm được gộp vào khoảng thời gian trước khi đem ra so sánh, rồi đúng một biểu thức nửa mở trả lời, chặt ở cả hai đầu và có chốt chặn cho khoảng rỗng. Và lệnh chặn cứng được thực thi bên trong giao dịch cơ sở dữ liệu chứ không phải ở bản xem trước, vì giữa lúc kiểm tra và lúc ghi, một tab khác đã lấy mất chỗ.

Bốn vai quyết định ai được làm gì. Nhân viên chỉ đụng được vào cột của mình, quản lý hoặc quản trị viên có thể bỏ qua một cảnh báo mềm như chạm trần giờ làm, và không một ai được vượt qua một xung đột cứng. Một nút ép đặt sẽ khiến mọi bảo đảm khác trên bảng thành có điều kiện, nên không có nút đó.

Mở bảng biên và xem cả 37 trường hợp chạy trực tiếp trong trình duyệt của bạn. Chúng chạy trên đúng bộ máy mà cái bảng đang dùng, nên không thể lệch khỏi nó.

Tính năng

Sáu nhân viên, tám dịch vụ mang theo thời gian chuẩn bị và dọn dẹp riêng, ba phòng, 24 khách hàng, và mười lăm ngày ca làm cùng lịch hẹn quanh hôm nay.

Bộ máy phát hiện xung đột

Đúng một biểu thức nửa mở trên số phút nguyên với thời gian đệm đã gộp sẵn, chạy ở bản xem trước khi kéo và chạy lại bên trong lệnh ghi.

Bảng biên

Cả 37 trường hợp biên chạy trực tiếp trong trình duyệt của bạn trên đúng bộ máy mà cái bảng đang chạy, mỗi trường hợp kèm một dòng thời gian thu nhỏ nói rõ nó chứng minh điều gì.

Những ca khó cài sẵn

Sáu lịch hẹn được đánh dấu trên bảng hôm nay: hai cái chạm nhau đúng phút, một cái bắt đầu ngay khi giờ dọn dẹp kết thúc, một lịch đã hủy nằm dưới một lịch còn sống, một giờ nghỉ, nửa ngày nghỉ phép, và một lần trùng lịch mà bộ máy sẽ không bao giờ tạo ra.

Vai và những lần từ chối

Nhân viên bị giới hạn trong cột của mình, cảnh báo mềm mà quản lý có thể bỏ qua, và một xung đột cứng không vai nào vượt được.

Quy trình khép kín, từ đầu đến cuối

Mọi bước dưới đây đều diễn ra bên trong bản demo. Không có điểm nào mà công việc rời khỏi trình duyệt rồi quay lại.

  1. Chọn một khung giờ

    Nhân viên, dịch vụ và giờ. Dịch vụ mang theo thời gian chuẩn bị và dọn dẹp của riêng nó, và từ đây chúng là một phần của khoảng thời gian.

  2. Bản xem trước trả lời

    Bóng mờ khi kéo đỏ lên ngay khi khoảng thời gian đã gộp chồng lên một khoảng khác, và bảng bên cạnh nêu tên khối chặn cùng số phút.

  3. Lệnh ghi hỏi lại lần nữa

    Khi xác nhận, giao dịch đọc lại toàn bộ hiện trạng rồi chạy đúng cái hàm mà bản xem trước đã chạy, vì một bản xem trước không thể thực thi bất cứ điều gì.

  4. Một tab thắng

    Cho hai tab tranh cùng một khung giờ thì tab thua bị từ chối vì thua giao dịch, chứ không phải vì chậm hơn.

  5. Lần từ chối cũng được ghi lại

    Mọi lần thử đều đi tới giao dịch, nên nhật ký giữ cả những lần bị từ chối lẫn những lần đặt được, và đó mới là các dòng đáng có.

  6. Đổi giờ, hoặc hủy

    Hủy một lịch hẹn đang chồng lên lịch khác vẫn được cho phép, vì một bộ máy không bao giờ được chặn đúng cái hành động gỡ được xung đột.

Cái gì là thật, cái gì thì không

Không có máy chủ nào phía sau, và chính điều đó quyết định cả hai cột. Cột trái là những phần mà ràng buộc ấy khiến chúng đáng được làm cho tử tế. Cột phải là những phần nó loại trừ.

Được xử lý thật

  • Chạm nhau đúng phút thì cho phép còn chồng nhau một phút thì từ chối, ở cả 37 điểm biên
  • Lệnh chặn cứng thực thi bên trong giao dịch, nên hai tab tranh một khung giờ chỉ tạo ra một lịch hẹn
  • Một lần hủy gỡ được chỗ chồng lấn sẵn có, thay vì bị chính quy tắc mà nó sửa từ chối
  • Tiếng Việt chuyển cột giờ sang 24 giờ, qua Intl chứ không qua một bảng chuỗi thứ hai

Cố ý không làm thật

  • Nút đổi vai không phải là xác thực. Nó chỉ minh họa hành vi khác nhau theo vai, không hơn
  • Không có xác nhận nào được gửi đi, bằng email hay tin nhắn, và không thu tiền cọc hay thanh toán
  • Không có trang đặt lịch cho khách. Đây là phía nhân viên của cái bảng
  • Dữ liệu nằm theo từng hồ sơ trình duyệt, nên hai thiết bị là hai cái bảng

Được xây dựng thế nào

Phần mô tả này thuyết phục hơn cả bản thân ứng dụng, nên nó nằm ngay trên trang thay vì trong một kho mã không ai mở được.

Công nghệ
Solid cùng router của nó, TypeScript và Vite, với IndexedDB qua idb. Một gói tĩnh duy nhất và không có máy chủ nào phía sau.
Thời gian
Số phút nguyên tính từ mốc epoch xuyên suốt, không bao giờ là đối tượng ngày tháng và không bao giờ là số thực, nên một điểm kết thúc bằng đúng điểm bắt đầu là chính xác và việc bám lưới không thể trôi.
Ranh giới
Bộ máy là một hàm thuần trên dữ liệu thuần. Bản xem trước gọi nó, giao dịch gọi lại nó sau khi đọc lại hiện trạng, và bảng biên công khai chạy đúng hàm đó, nên bản đặc tả không thể lệch khỏi phần cài đặt.
Kiểm thử
90 phép khẳng định, gồm cả 37 trường hợp biên, và một bản dựng bắt buộc hạn mức 70 KB gzip cho JavaScript và 15 KB cho CSS.

Bản demo này là bằng chứng cho dịch vụ nào

Một bản demo tồn tại để chứng minh điều gì đó trong danh sách dịch vụ, chứ không phải để tự nó gây ấn tượng. Đây là những dịch vụ mà bản demo này chứng minh.

Các bản demo khác

Mỗi bản là một loại bài toán khác nhau, và tất cả đều nằm trong menu Bản demo ở đầu trang.

Muốn một bản như thế này nhưng chạy theo quy tắc của bạn?

Bản này được làm dưới một ràng buộc mà không ai tự chọn. Bản của bạn sẽ có máy chủ, tài khoản thật, và cả những phần thực sự khó trong nghiệp vụ. Hãy cho chúng tôi biết phần mềm cần làm được gì, chúng tôi sẽ nói cần những gì để làm ra nó.

Cứ mang tới bài toán còn ngổn ngang. Đó là kiểu trao đổi chúng tôi thích nhất.