Mô tả
Dự án là hệ thống quản lý đặt lịch cho spa/salon cao cấp L'Élégance Spa & Salon. Ứng dụng được thiết kế như một hệ thống hoàn chỉnh gồm nhiều cổng sử dụng theo từng vai trò: khách hàng, admin, nhân viên salon và CSKH.
Mục tiêu chính của hệ thống là giúp khách hàng đặt lịch dịch vụ dễ dàng, đồng thời giúp spa quản lý lịch hẹn, nhân viên, khách hàng, voucher, điểm thưởng, doanh thu và chăm sóc khách hàng theo thời gian thực.
Các Vai Trò Chính
Customer: khách hàng có thể xem dịch vụ, đặt lịch, quản lý hồ sơ, theo dõi lịch hẹn, điểm thưởng, voucher và chat với CSKH.
Admin: quản trị hệ thống, quản lý dịch vụ, nhân viên, lịch hẹn, khách hàng, voucher, doanh thu, chấm công và nghỉ phép.
Staff: nhân viên spa/salon, xem lịch làm việc, lịch hẹn được phân công, gửi yêu cầu nghỉ phép, cập nhật hồ sơ và đổi mật khẩu lần đầu đăng nhập.
CSKH: nhân viên chăm sóc khách hàng, nhận và phản hồi tin nhắn realtime từ khách hàng.
Tính Năng Nổi Bật
- Đặt lịch nhiều dịch vụ trong cùng một booking.
- Chọn ngày, giờ và nhân viên phù hợp theo availability thực tế.
- Tự động ẩn staff khi off duty, nghỉ phép hoặc không còn available.
- Confirm Reservation tự fill thông tin từ customer đang login.
- Booking Summary và bill cuối cùng tính đúng tổng tiền nhiều dịch vụ.
- Quản lý trạng thái appointment: pending, confirmed, completed, cancelled.
- Khi appointment completed, hệ thống cộng điểm loyalty cho khách hàng.
- Phân hạng khách hàng: Bronze, Silver, Gold, Platinum.
- Đổi voucher bằng điểm, tự động trừ điểm và đề xuất voucher đã đổi khi booking.
- Profile cho customer, admin, staff: cập nhật avatar, tên, email, phone, ngày sinh.
- Quên mật khẩu: gửi mã xác minh qua Gmail/SMTP, xác minh code rồi đổi mật khẩu.
- Staff bắt buộc đổi mật khẩu ở lần đăng nhập đầu tiên.
- Chat realtime giữa customer và CSKH.
- Floating contact widget gồm Zalo và Chat.
- Notification realtime giữa admin, staff, customer, CSKH.
- Revenue growth trend cập nhật realtime.
- Admin dashboard, CRM, staff management, attendance/leave, payroll, voucher management.
- Logo/favicon riêng cho thương hiệu, không dùng icon mặc định Angular.
Công Nghệ Sử Dụng
Frontend:
- Angular standalone components.
- TypeScript.
- Angular Signals cho state management nội bộ.
- Angular Router.
- FormsModule cho form input/update.
- Tailwind-style utility classes trong template.
- SignalR client để nhận cập nhật realtime.
Backend:
- ASP.NET Core Minimal APIs.
- Entity Framework Core.
- SQL Server.
- Repository Pattern và Service Layer.
- Dependency Injection theo interface.
- JWT Authentication.
- Role-based Authorization.
- SignalR Hub cho realtime notification và chat.
- BCrypt để hash password.
- SMTP email sender cho chức năng quên mật khẩu.
- ASP.NET Core Data Protection với persisted keys.
Kiến trúc backend:
- Endpoint chỉ gọiIService.
- Service xử lý business logic.
- Repository thao tác dữ liệu qua EF Core.
- Interface được tách theo service/repository để dễ bảo trì và mở rộng.
- SignalR service chịu trách nhiệm publish event realtime.
Realtime
Hệ thống dùng SignalR cho các luồng cập nhật tức thời:
- Admin thao tác thì staff/customer nhận cập nhật ngay.
- Staff thao tác thì admin nhận cập nhật ngay.
- CSKH nhận tin nhắn mới từ customer ngay lập tức.
- Customer nhận phản hồi chat từ CSKH không cần logout/login.
- Appointment, customer profile, voucher, dashboard, revenue trend được refresh theo event.
Hướng dẫn cài đặt
*Sau khi DOWNLOAD SOURCE liên hệ mình để lấy PASS giải nén nhé
Client
Phần client được xây dựng bằng Angular. Để chạy giao diện người dùng, trước tiên cần di chuyển vào thư mụcclient, sau đó cài đặt các package cần thiết bằngnpm install.
Sau khi cài đặt xong dependencies, chạy client bằng lệnhnpm run start. Ứng dụng frontend mặc định sẽ chạy tại địa chỉhttp://127.0.0.1:4200.
Nếu cần build bản production, có thể sử dụng lệnhnpm run build. Kết quả build sẽ được tạo trong thư mụcclient/dist.
Server
Phần server được xây dựng bằng ASP.NET Core. Trước khi chạy backend, cần kiểm tra connection string trong fileappsettings.jsonhoặcappsettings.Development.jsonđể đảm bảo server đang trỏ đúng tới SQL Server mong muốn.
Dự án hiện tại: Database được tạo tự động khi chạy server lần đầu thông quaEnsureCreated(). Ngoài ra, hệ thống còn có hàmEnsureDevSchemaAsync()để bổ sung các bảng/cột cần thiết trong quá trình phát triển, vàSeedData.InitializeAsync()để khởi tạo dữ liệu mẫu ban đầu.
Để chạy backend, di chuyển vào thư mụcservervà sử dụng lệnhdotnet run. Server mặc định sẽ chạy tại địa chỉhttp://127.0.0.1:5080.
Luồng khởi tạo database
Khi backend được chạy lần đầu, hệ thống sẽ tự thực hiện các bước sau:
- Kết nối tới SQL Server bằng connection string đã cấu hình.
- Tạo database/schema nếu chưa tồn tại thông quaEnsureCreated().
- Bổ sung các bảng hoặc cột cần thiết thông quaEnsureDevSchemaAsync().
- Seed dữ liệu mẫu như tài khoản admin, staff, customer, dịch vụ, voucher và các dữ liệu vận hành ban đầu.