Bối cảnh và vấn đề nghiên cứu
Đồ án tốt nghiệp "Xây dựng website bán thực phẩm chức năng sử dụng NuxtJS + Laravel" được thực hiện bởi sinh viên Tạ Mạnh Quân (lớp DCCNTT9.IT1, mã sinh viên 187480201005), dưới sự hướng dẫn của ThS. Ngô Thị Hoa tại Khoa Công nghệ thông tin, Trường Đại học Công nghệ Đông Á (Bắc Ninh, năm 2023).
Bối cảnh thực tiễn được tác giả nêu rõ xuất phát từ sự bùng nổ của mạng Internet và công nghệ thông tin, đóng vai trò nền tảng cho sự phát triển của thương mại điện tử (E-Commerce). Trong hoạt động sản xuất kinh doanh hiện đại, thương mại điện tử giúp các doanh nghiệp và cửa hàng mở rộng kênh quảng bá sản phẩm mới, tiếp cận khách hàng tiềm năng với chi phí vận hành ước tính chỉ bằng khoảng 10% so với phương thức mở cửa hàng truyền thống (không phải tốn kém chi phí thuê mặt bằng, nhân công phục vụ hay kho bãi). Thực tế công tác quản lý tại các cơ sở kinh doanh hàng hóa nói chung và các cửa hàng thời trang, bán lẻ nói riêng đang đối mặt với số lượng mặt hàng rất lớn. Nếu áp dụng biện pháp lưu trữ thủ công bằng giấy tờ, văn bản, người quản lý gặp rất nhiều khó khăn khi cần tra cứu, tìm kiếm hoặc thay đổi thông tin mặt hàng. Do đó, việc ứng dụng phần mềm quản lý và website bán hàng trực tuyến trở thành giải pháp cần thiết nhằm số hóa quy trình kinh doanh, cập nhật dữ liệu nhanh chóng và nâng cao năng suất làm việc.
Mục tiêu nghiên cứu của đồ án được phân định cụ thể như sau:
- Mục tiêu tổng quát: Hỗ trợ cá nhân, tổ chức, doanh nghiệp phát triển mô hình kinh doanh trên sàn thương mại điện tử, gia tăng doanh thu và đơn giản hóa công tác quản lý hàng hóa.
- Mục tiêu cụ thể:
- Đối với người bán: Dễ dàng kiểm tra tồn kho hàng hóa và giới thiệu sản phẩm đến phạm vi người tiêu dùng rộng rãi hơn.
- Đối với người mua: Thuận tiện tìm kiếm thông tin, xem chi tiết và đặt mua hàng hóa qua mạng mà không cần đến trực tiếp cửa hàng.
- Đối với xã hội: Thúc đẩy lưu thông hàng hóa nhanh chóng, tiết kiệm thời gian và chi phí vận chuyển.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Quy trình kinh doanh, quản lý và giới thiệu các mặt hàng thực phẩm chức năng trên hệ thống website thương mại điện tử.
- Phạm vi nghiên cứu: Triển khai trên môi trường không gian mạng Internet; phục vụ hoạt động bán lẻ của cửa hàng thông qua hệ thống website mang thương hiệu VIFF.
Nhiệm vụ đặt ra cho đề tài bao gồm việc khảo sát nghiệp vụ thực tế (quản lý tài khoản, sản phẩm, danh mục, bài viết, đơn hàng, khách hàng) và phân tích, thiết kế, cài đặt hoàn chỉnh hai phân hệ: phân hệ người dùng công cộng và phân hệ quản trị hệ thống có phân quyền truy cập.
Cơ sở lý thuyết và phương pháp
Về cơ sở lý thuyết và kiến trúc kỹ thuật, tác giả tiếp cận các khái niệm nền tảng của thương mại điện tử, các yêu cầu an toàn, bảo mật dữ liệu khách hàng và bản quyền kinh doanh. Về mặt kiến trúc phần mềm, đồ án áp dụng mô hình Model-View-Controller (MVC) với sự phân tách độc lập giữa ba thành phần:
- Model: Đảm nhận nghiệp vụ logic, phương thức xử lý và truy xuất cơ sở dữ liệu.
- View: Giao diện hiển thị và tương tác trực tiếp với người dùng.
- Controller: Tiếp nhận, điều hướng các yêu cầu từ phía người dùng và kích hoạt phương thức xử lý tương ứng.
Các công nghệ nền tảng được tác giả khảo sát và ứng dụng bao gồm:
- Ngôn ngữ lập trình PHP: Ngôn ngữ kịch bản mã nguồn mở phía máy chủ (Server-side), hỗ trợ phát triển các ứng dụng web động.
- Framework Laravel: Khung phát triển PHP mã nguồn mở theo kiến trúc MVC, hỗ trợ cơ chế modular, quản lý phụ thuộc, tích hợp sẵn dịch vụ gửi mail và các công cụ thao tác với cơ sở dữ liệu quan hệ.
- Hệ quản trị cơ sở dữ liệu MySQL: Hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) hoạt động theo mô hình Client-Server, sử dụng ngôn ngữ SQL để quản lý các bảng dữ liệu.
- Thư viện VueJS: Framework JavaScript mã nguồn mở tập trung vào tầng giao diện (View layer) do Evan You phát triển từ năm 2014, giúp xây dựng giao diện người dùng tương tác dạng ứng dụng đơn trang (SPA).
- Framework NuxtJS: Nền tảng phát triển ứng dụng dựa trên VueJS, hỗ trợ kết xuất phía máy chủ (Server-Side Rendering - SSR), tối ưu hóa công cụ tìm kiếm (SEO), cung cấp cấu trúc xử lý dữ liệu bất đồng bộ (Asynchronous Data), Middleware và Layouts.
Phương pháp nghiên cứu và phát triển hệ thống được thực hiện bằng phương pháp phân tích thiết kế hướng đối tượng thông qua ngôn ngữ mô hình hóa thống nhất UML (Unified Modeling Language). Tác giả tiến hành mô hình hóa các yêu cầu chức năng thành các biểu đồ ca sử dụng (Use Case Diagram), biểu đồ tuần tự (Sequence Diagram), biểu đồ hoạt động (Activity Diagram), biểu đồ lớp (Class Diagram) và sơ đồ quan hệ thực thể (Entity Relationship Diagram - ERD).
Nguồn dữ liệu sử dụng trong đồ án là dữ liệu khảo sát nghiệp vụ bán lẻ thực phẩm chức năng, bao gồm các cấu trúc thông tin về mặt hàng (tên, giá cả, hình ảnh, mô tả chi tiết, danh mục), bài viết tin tức, thông tin tài khoản người dùng, hồ sơ khách hàng và dữ liệu đơn đặt hàng.
Thiết kế và triển khai
Hệ thống website bán thực phẩm chức năng VIFF được thiết kế với kiến trúc phân tách rõ ràng giữa giao diện hiển thị phía khách hàng (Front-end) bằng NuxtJS/VueJS và hệ thống xử lý nghiệp vụ, API quản trị phía máy chủ (Back-end) bằng Laravel và cơ sở dữ liệu MySQL.
Hệ thống xác định hai tác nhân (Actor) chính:
- Admin (Quản trị viên): Người có toàn quyền quản lý, điều khiển mọi hoạt động của website, cập nhật dữ liệu danh mục, sản phẩm, bài viết, đơn hàng và khách hàng.
- Người dùng: Khách hàng truy cập website với các quyền hạn xem, tìm kiếm sản phẩm, quản lý giỏ hàng, thực hiện đặt hàng và thanh toán.
| Nhóm chức năng |
Tác nhân |
Các chức năng cụ thể |
| Phân hệ Website (Người dùng) |
Khách hàng |
- Xem thông tin sản phẩm chi tiết - Tìm kiếm sản phẩm theo từ khóa - Quản lý giỏ hàng (thêm, cập nhật, xóa sản phẩm) - Đặt hàng trực tuyến - Nhập thông tin thanh toán đơn hàng |
| Phân hệ Quản trị (Admin) |
Quản trị viên |
- Đăng ký, Đăng nhập, Đăng xuất tài khoản quản trị - Quản lý danh mục (Thêm mới, Chỉnh sửa, Xóa) - Quản lý bài viết (Thêm mới, Chỉnh sửa, Xóa) - Quản lý sản phẩm (Thêm mới, Chỉnh sửa, Xóa) - Quản lý đơn hàng (Xem đơn hàng, Chuyển trạng thái, Xóa) - Quản lý khách hàng (Xem chi tiết, Cập nhật thông tin, Xóa) |
Cơ sở dữ liệu của hệ thống được xây dựng trên MySQL gồm các bảng dữ liệu chính:
products: Lưu trữ thông tin sản phẩm (mã, tên, đơn giá, chi tiết, mô tả, danh mục, hình ảnh).
collections: Lưu trữ danh mục phân loại các sản phẩm thực phẩm chức năng.
posts: Quản lý các bài viết tin tức, hướng dẫn (tiêu đề, nội dung, hình ảnh minh họa).
order: Quản lý các đơn đặt hàng (mã hóa đơn, mã khách hàng, sản phẩm, số lượng, tổng giá trị, trạng thái, phương thức thanh toán).
customer / customers: Lưu trữ hồ sơ khách hàng mua hàng (mã khách hàng, họ tên, số điện thoại, email, địa chỉ thành phố).
users: Quản lý thông tin tài khoản của hệ thống (họ tên, email, mật khẩu mã hóa).
personal_access_tokens: Quản lý token xác thực quyền truy cập API.
password_resets: Lưu trữ thông tin phục vụ việc đặt lại mật khẩu người dùng.
migrations: Bảng quản lý lịch sử đồng bộ cấu trúc cơ sở dữ liệu của Laravel.
Quy trình triển khai nghiệp vụ chính: Khi người dùng đặt hàng và nhập đầy đủ thông tin thanh toán, hệ thống ghi nhận đơn vào bảng order, đồng thời tự động kích hoạt dịch vụ thư điện tử để gửi email xác nhận thông tin đơn hàng thành công trực tiếp vào hộp thư Gmail của khách hàng. Quản trị viên kiểm tra danh sách đơn đặt hàng trong giao diện quản trị và thực hiện cập nhật chuyển đổi trạng thái xử lý đơn hàng.
Nội dung chính theo từng chương
Chương 1: Tổng quan đề tài
Chương 1 thiết lập bức tranh tổng thể về lý luận và công nghệ phục vụ xây dựng hệ thống:
- Trình bày khái niệm, bản chất của thương mại điện tử (E-Commerce) và phân tích các lợi ích thiết thực đối với ba nhóm đối tượng: doanh nghiệp (tiết kiệm 90% chi phí vận hành so với cửa hàng truyền thống, mở rộng thị trường toàn cầu), người tiêu dùng (tiết kiệm thời gian, so sánh giá cả, giao hàng tận nhà) và xã hội (thúc đẩy phương thức kinh doanh số, tạo môi trường cạnh tranh hiện đại).
- Nêu rõ các yêu cầu bắt buộc trong thương mại điện tử: hạ tầng bảo mật thông tin, nhân lực chất lượng cao, xây dựng niềm tin giao dịch, an toàn dữ liệu và bảo vệ quyền lợi người tiêu dùng.
- Trình bày lý do chọn đề tài dựa trên sự bất cập của phương thức quản lý bằng sổ sách truyền thống; xác định mục tiêu tổng quát, mục tiêu cụ thể, đối tượng nghiên cứu (thực phẩm chức năng) và phạm vi nghiên cứu trên không gian mạng.
- Tổng hợp kết quả khảo sát hiện trạng 6 nhóm thực thể thông tin cần quản lý: tài khoản, sản phẩm, danh mục, bài viết, đơn hàng và khách hàng.
- Khảo sát đặc tính kỹ thuật của các công nghệ lựa chọn: ngôn ngữ PHP; framework Laravel với mô hình MVC, cơ chế đóng gói modular, tích hợp dịch vụ mail; hệ quản trị CSDL MySQL với các ưu điểm bảo mật, tốc độ cao nhưng chỉ ra các nhược điểm về độ tin cậy giao dịch phức tạp và giới hạn dung lượng truy xuất khi số bản ghi lớn; thư viện VueJS với view layer linh hoạt; framework NuxtJS với cơ chế Server-Side Rendering (SSR) hỗ trợ SEO và quản lý dữ liệu bất đồng bộ.
Chương 2: Phân tích và thiết kế hệ thống
Chương 2 là phần trọng tâm về kỹ thuật phần mềm, tập trung mô hình hóa chi tiết toàn bộ hệ thống:
- Xác định rõ vai trò của 2 tác nhân (Admin và Người dùng) thông qua Bảng 2.1 và đặc tả các chức năng trên website (Bảng 2.2) cùng các chức năng trong quản trị (Bảng 2.3).
- Xây dựng biểu đồ Use Case tổng quát và 14 bảng mô tả chi tiết ca sử dụng (từ Bảng 2.4 đến Bảng 2.17), bao gồm các Use Case: Đăng nhập, Đăng ký, Thêm/Sửa/Xóa danh mục sản phẩm, Thêm/Sửa/Xóa bài viết, Thêm/Sửa/Xóa sản phẩm, Cập nhật trạng thái đơn hàng, Xóa đơn hàng, Cập nhật thông tin khách hàng. Mỗi Use Case đều xác định đầy đủ định nghĩa, tác nhân, điều kiện tiên quyết, dòng sự kiện chính từng bước và điều kiện kết thúc.
- Thiết kế hệ thống biểu đồ tuần tự (Sequence Diagram) từ Hình 2.9 đến Hình 2.21 mô tả tương tác giữa người dùng, giao diện, bộ điều khiển và cơ sở dữ liệu cho các tác vụ đăng nhập, đăng ký, thêm/sửa/xóa danh mục, bài viết, sản phẩm và cập nhật/xóa khách hàng.
- Thiết lập hệ thống biểu đồ hoạt động (Activity Diagram) từ Hình 2.22 đến Hình 2.34 minh họa các nhánh điều kiện, luồng xử lý dữ liệu và thông báo lỗi tương ứng khi thao tác không thành công.
- Trình bày danh mục cấu trúc các bảng trong cơ sở dữ liệu quan hệ (từ Bảng 2.18 đến Bảng 2.28) và thiết lập sơ đồ quan hệ thực thể ERD tổng thể (Hình 2.36) kết nối giữa các bảng
products, order, collections, posts, users, customer.
Chương 3: Cài đặt hệ thống website bán thực phẩm chức năng VIFF
Chương 3 trình bày các kết quả thực nghiệm và triển khai cài đặt phần mềm trong thực tế:
- Hiện thực hóa các giao diện phía người dùng (từ Hình 3.1 đến Hình 3.9): Giao diện trang chủ hiển thị danh sách mặt hàng thực phẩm chức năng; giao diện xem thông tin chi tiết sản phẩm; chức năng tìm kiếm sản phẩm; giao diện quản lý giỏ hàng; form đặt hàng; giao diện thanh toán nhập thông tin giao nhận; giao diện đăng ký, đăng nhập tài khoản; đặc biệt là giao diện email xác nhận gửi tự động về hòm thư Gmail của khách hàng ngay sau khi đặt hàng thành công.
- Hiện thực hóa các giao diện quản trị (từ Hình 3.10 đến Hình 3.15): Màn hình quản lý tổng quan hệ thống; giao diện quản trị danh mục sản phẩm; giao diện quản lý các bài viết tin tức; giao diện cập nhật danh mục sản phẩm thực phẩm chức năng; giao diện quản lý chi tiết đơn đặt hàng và thay đổi trạng thái đơn; giao diện quản lý hồ sơ khách hàng.
- Trình bày cấu hình môi trường kiểm thử chức năng và các bước hướng dẫn thiết lập, cài đặt hệ thống trên máy chủ thử nghiệm.
Kết quả và đóng góp
Đồ án đã đạt được các kết quả kỹ thuật cụ thể sau quá trình phân tích và cài đặt:
- Xây dựng hoàn chỉnh website thương mại điện tử chuyên biệt cho ngành hàng thực phẩm chức năng mang tên VIFF, vận hành ổn định trên nền tảng web.
- Triển khai thành công kiến trúc kết hợp giữa NuxtJS ở phía người dùng và Laravel ở phía quản trị và dịch vụ nền. Giao diện phía người dùng đáp ứng cơ chế hiển thị nhanh, hỗ trợ Server-Side Rendering (SSR) giúp khắc phục nhược điểm về SEO của các ứng dụng VueJS thông thường.
- Thiết lập đầy đủ quy trình đặt hàng trực tuyến khép kín: Khách hàng tìm kiếm sản phẩm -> Đưa vào giỏ hàng -> Thực hiện thanh toán -> Hệ thống cập nhật cơ sở dữ liệu -> Tự động kích hoạt dịch vụ mail gửi thông báo xác nhận đến Gmail của khách hàng.
- Cung cấp bộ công cụ quản trị nội dung và nghiệp vụ toàn diện cho chủ cửa hàng với đầy đủ các thao tác Thêm, Sửa, Xóa và chuẩn hóa dữ liệu trên 5 phân hệ cốt lõi: danh mục, sản phẩm, bài viết, đơn hàng và khách hàng.
- Đóng góp so với nghiên cứu trước và giải pháp đề xuất: Đề tài đã đề xuất giải pháp số hóa toàn diện quy trình bán lẻ cho cửa hàng thực phẩm chức năng, thay thế phương pháp ghi chép sổ sách thủ công; thiết lập mô hình cơ sở dữ liệu quan hệ chặt chẽ giúp kiểm soát thông tin hàng hóa, doanh thu chính xác, giảm thiểu sai sót và nâng cao hiệu suất bán hàng.
Hạn chế và hướng nghiên cứu tiếp
Theo tự nhận định và phạm vi được tác giả trình bày trong tài liệu:
- Do điều kiện thời gian có hạn và kinh nghiệm xây dựng báo cáo của sinh viên chưa nhiều nên tài liệu và hệ thống không tránh khỏi những thiếu sót nhất định trong quá trình phân tích, trình bày.
- Về mặt công nghệ, tác giả chỉ ra các hạn chế cố hữu của công nghệ sử dụng trong đồ án: framework Laravel chưa hỗ trợ sẵn mô-đun cổng thanh toán trực tuyến chuyên dụng (hiện hệ thống mới dừng lại ở bước ghi nhận đơn đặt hàng và thông báo email); các phiên bản nâng cấp của Laravel đôi khi có thể phát sinh lỗi tương thích; hệ thống chưa cung cấp ứng dụng di động đi kèm.
- Về cơ sở dữ liệu, MySQL có dung lượng và khả năng mở rộng ở mức độ nhất định, khi khối lượng bản ghi tăng cao thì việc truy xuất dữ liệu sẽ gặp khó khăn, đòi hỏi phải áp dụng các giải pháp nâng cao như chia tải (load balancing) hoặc thiết lập bộ nhớ đệm (cache) mà đồ án chưa kịp triển khai.
- Hướng mở rộng tiếp theo được định vị dựa trên phạm vi nghiên cứu: Hoàn thiện tích hợp cổng thanh toán trực tuyến tự động; tối ưu hóa hiệu năng truy vấn và bộ nhớ đệm cho cơ sở dữ liệu khi mở rộng quy mô sản phẩm; nghiên cứu phát triển thêm phiên bản ứng dụng di động kết nối đồng bộ với hệ thống website.
Giá trị tham khảo
Đồ án tốt nghiệp này mang lại giá trị tham khảo thực tiễn và học thuật rõ ràng cho các nhóm đối tượng sau:
- Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm: Tài liệu là mẫu tham khảo trực quan, chi tiết về cấu trúc một đồ án tốt nghiệp ứng dụng công nghệ web, đặc biệt là quy trình lập tài liệu phân tích thiết kế hệ thống theo chuẩn UML (từ bảng đặc tả Use Case, luồng sự kiện chi tiết đến biểu đồ tuần tự và biểu đồ hoạt động).
- Lập trình viên đang nghiên cứu kiến trúc NuxtJS kết hợp Laravel: Đồ án minh họa giải pháp kết hợp giữa Laravel đóng vai trò Back-end API và NuxtJS đảm nhận Front-end SSR, giúp giải quyết bài toán tối ưu hóa công cụ tìm kiếm (SEO) cho các website bán hàng trực tuyến.
- Người làm đề tài thương mại điện tử quy mô vừa và nhỏ: Cung cấp thiết kế cơ sở dữ liệu mẫu gồm 11 bảng chuẩn hóa cho một website bán hàng tích hợp bài viết tin tức và gửi email thông báo tự động.
Câu hỏi thường gặp
1. Đề tài lựa chọn sự kết hợp giữa NuxtJS và Laravel dựa trên những cơ sở kỹ thuật nào?
Laravel là framework PHP phổ biến hoạt động theo mô hình MVC, có cú pháp rõ ràng, tính bảo mật cao, tốc độ xử lý nhanh, hỗ trợ cơ chế modular và tích hợp sẵn dịch vụ gửi thư điện tử. NuxtJS là framework xây dựng trên nền tảng VueJS, chuyên biệt về kết xuất phía máy chủ (Server-Side Rendering - SSR), khắc phục được nhược điểm của các ứng dụng trang đơn (SPA) thông thường, giúp tối ưu hóa công cụ tìm kiếm (SEO) cho website bán lẻ.
2. Hệ thống website thực phẩm chức năng VIFF phân quyền cho những tác nhân (Actor) nào?
Hệ thống thiết lập 2 tác nhân chính:
- Admin (Quản trị viên): Người có toàn quyền quản trị, kiểm soát mọi hoạt động của hệ thống, thực hiện các thao tác thêm, sửa, xóa dữ liệu đối với danh mục, sản phẩm, bài viết, khách hàng và cập nhật trạng thái đơn hàng.
- Người dùng: Khách truy cập website, có quyền xem danh mục, tìm kiếm thông tin sản phẩm, quản lý giỏ hàng cá nhân, tiến hành đặt hàng và gửi thông tin thanh toán.
3. Cơ sở dữ liệu của đồ án gồm những bảng chính nào và nhiệm vụ của từng bảng là gì?
Cơ sở dữ liệu MySQL của đồ án bao gồm các bảng: products (dữ liệu sản phẩm), collections (danh mục sản phẩm), posts (bài viết tin tức), order (đơn đặt hàng), customer / customers (thông tin khách mua hàng), users (tài khoản người dùng), personal_access_tokens (mã token xác thực API), password_resets (đặt lại mật khẩu) và migrations (quản lý phiên bản CSDL).
4. Sau khi khách hàng hoàn tất quy trình đặt hàng, hệ thống thực hiện phản hồi như thế nào?
Sau khi người dùng chọn mua sản phẩm, nhập thông tin giao hàng và xác nhận thanh toán, hệ thống sẽ lưu đơn hàng vào cơ sở dữ liệu và tự động kích hoạt dịch vụ mail để gửi một email xác nhận chi tiết về đơn hàng trực tiếp đến địa chỉ Gmail của khách hàng. Quản trị viên sau đó sẽ tiếp nhận đơn trong trang quản trị để chuyển đổi trạng thái xử lý.
5. Tác giả đã chỉ ra những nhược điểm gì của Laravel và MySQL trong quá trình nghiên cứu?
Tác giả đã chỉ ra rằng Laravel không hỗ trợ sẵn chức năng thanh toán trực tuyến, một số bản nâng cấp có thể phát sinh vấn đề tương thích và thường không cung cấp sự phong phú cho ứng dụng di động. Đối với MySQL, hệ thống có hạn chế về độ tin cậy trong các giao dịch phức tạp so với một số RDBMS khác, đồng thời khi số lượng bản ghi tăng trưởng lớn thì tốc độ truy xuất dữ liệu sẽ suy giảm, đòi hỏi phải áp dụng các kỹ thuật phân tải hoặc bộ nhớ đệm cache.
Kết luận
Đồ án tốt nghiệp "Xây dựng website bán thực phẩm chức năng sử dụng NuxtJS + Laravel" của sinh viên Tạ Mạnh Quân đã hoàn thành mục tiêu xây dựng một website thương mại điện tử chuyên ngành thực phẩm chức năng mang tên VIFF. Công trình phản ánh quy trình phát triển phần mềm chuẩn mực từ khâu khảo sát nghiệp vụ, phân tích thiết kế hướng đối tượng bằng chuẩn UML đến việc cài đặt giao diện thực tế và cấu hình dịch vụ gửi mail tự động. Hệ thống kết hợp hài hòa giữa năng lực quản trị dữ liệu phía máy chủ của Laravel và khả năng tối ưu hóa hiển thị, hỗ trợ SEO của NuxtJS, đóng vai trò là tài liệu tham khảo hữu ích cho sinh viên ngành Công nghệ thông tin trong các đề tài xây dựng ứng dụng web thương mại điện tử.