Files
pos-system/services/booking-service-net/docs/vi

Booking Service

Đặt lịch hẹn và quản lý "tồn kho thời gian" cho doanh nghiệp dịch vụ.

Tổng Quan

Booking Service quản lý cuộc hẹn cho các doanh nghiệp dịch vụ như spa, salon và phòng khám. Theo dõi lịch nhân viên, lịch tài nguyên, và quản lý slot thời gian.

Tính Năng Chính

  • Lịch Nhân viên - Giờ làm việc theo nhân viên
  • Quản lý Tài nguyên - Phòng, giường, thiết bị
  • Đặt Lịch hẹn - Tìm và đặt slot thời gian
  • Thuật toán Khả dụng - Giao của lịch nhân viên + tài nguyên

Bối Cảnh Kiến Trúc

graph LR
    ORDER["📝 Order Service"] --> BOOKING["📅 Booking Service"]
    POS["POS"] --> BOOKING
    BOOKING --> MERCHANT["🏪 Merchant Service"]
    
    style BOOKING fill:#9b59b6,stroke:#7d3c98,color:#fff

Bắt Đầu Nhanh

cd services/booking-service-net
cp .env.example .env
dotnet run --project src/BookingService.API

API Endpoints

Lịch Nhân Viên

Method Endpoint Mô tả
GET /api/v1/staff/{id}/schedule Lấy lịch nhân viên
PUT /api/v1/staff/{id}/schedule Cập nhật lịch
GET /api/v1/staff/{id}/availability Lấy slot khả dụng

Tài Nguyên

Method Endpoint Mô tả
GET /api/v1/resources Danh sách tài nguyên theo shop
POST /api/v1/resources Tạo tài nguyên
PUT /api/v1/resources/{id} Cập nhật tài nguyên
GET /api/v1/resources/{id}/availability Lấy slot khả dụng

Cuộc Hẹn

Method Endpoint Mô tả
GET /api/v1/appointments Danh sách cuộc hẹn
POST /api/v1/appointments Tạo cuộc hẹn
GET /api/v1/appointments/{id} Chi tiết cuộc hẹn
PATCH /api/v1/appointments/{id}/status Cập nhật trạng thái
DELETE /api/v1/appointments/{id} Hủy cuộc hẹn

Tìm Slot

Method Endpoint Mô tả
POST /api/v1/slots/find Tìm slot khả dụng

Domain Model

StaffSchedule

public class StaffSchedule : Entity
{
    public Guid StaffId { get; private set; }
    public Guid ShopId { get; private set; }
    public DayOfWeek DayOfWeek { get; private set; }
    public TimeOnly StartTime { get; private set; }
    public TimeOnly EndTime { get; private set; }
}

Resource

public class Resource : Entity, IAggregateRoot
{
    public Guid ShopId { get; private set; }
    public string Name { get; private set; }
    public ResourceType Type { get; private set; } // Room, Bed, Equipment
    public int Capacity { get; private set; }
}

Appointment

public class Appointment : Entity, IAggregateRoot
{
    public Guid ShopId { get; private set; }
    public Guid? CustomerId { get; private set; }
    public Guid? StaffId { get; private set; }
    public Guid? ResourceId { get; private set; }
    public Guid ServiceId { get; private set; }
    public DateTime StartTime { get; private set; }
    public DateTime EndTime { get; private set; }
    public AppointmentStatus Status { get; private set; }
}

Thuật Toán Tìm Slot

Slot Khả Dụng = Lịch Nhân Viên ∩ Lịch Tài Nguyên - Cuộc Hẹn Đã Đặt
sequenceDiagram
    participant Client
    participant Booking as Booking Service
    participant DB as Database
    
    Client->>Booking: Tìm Slot (Dịch vụ, Ngày, Nhân viên?)
    Booking->>DB: Lấy Lịch Nhân Viên
    Booking->>DB: Lấy Lịch Tài Nguyên
    Booking->>DB: Lấy Cuộc Hẹn Đã Đặt
    
    Booking->>Booking: Tính Giao Tập Hợp
    Booking->>Booking: Loại Bỏ Slot Đã Đặt
    
    Booking-->>Client: Danh Sách Slot Khả Dụng

Services Liên Quan

License

Proprietary - GoodGo Platform