Giới thiệu dự án
Trong bối cảnh nền kinh tế số và văn hóa F&B (Food and Beverage) bùng nổ mạnh mẽ tại Việt Nam, nhu cầu tìm kiếm không gian thưởng thức cà phê, làm việc và giao lưu xã hội của giới trẻ đô thị tăng trưởng vượt bậc. Theo các báo cáo thị trường F&B Việt Nam, hơn 65% người tiêu dùng thuộc thế hệ Gen Z và Millennials tại các đô thị lớn như Hà Nội chủ động tìm kiếm đánh giá và hình ảnh thực tế của quán trước khi quyết định trải nghiệm. Tuy nhiên, các nền tảng mạng xã hội hiện nay (Facebook, TikTok, Instagram) tồn tại nhược điểm lớn: thông tin bị phân mảnh, thuật toán ưu tiên bài quảng cáo không được kiểm chứng, thiếu khả năng phân loại không gian theo phong cách cụ thể (cổ điển, truyền thống, hiện đại, làm việc), và dữ liệu đánh giá dễ bị thao túng.
Đồ án tốt nghiệp "Xây dựng ứng dụng web chia sẻ và review các quán café ở Hà Nội" do sinh viên Tạ Quyền Linh thực hiện dưới sự hướng dẫn của ThS. Phạm Văn Tiệp (Khoa Công nghệ Thông tin – Trường Đại học Đại Nam) tập trung giải quyết bài toán cốt lõi: thiết lập một hệ sinh thái trực tuyến minh bạch, chuẩn hóa và tối ưu trải nghiệm khám phá, đánh giá quán cà phê tại khu vực Thủ đô Hà Nội.
+-----------------------------------------------------------------------------+
| VẤN ĐỀ CỐT LÕI (PAIN POINTS) |
+-----------------------------------------------------------------------------+
| 1. Dữ liệu phân mảnh, thiếu bộ lọc chuyên sâu theo phong cách quán (vintage,|
| working, acoustic, truyền thống). |
| 2. Thiếu quy trình kiểm duyệt bài đăng dẫn đến tin rác và đánh giá ảo. |
| 3. Trải nghiệm người dùng (UX) trên các nhóm mạng xã hội kém trực quan, |
| không lưu trữ lịch sử tương tác có hệ thống. |
+-----------------------------------------------------------------------------+
Mục tiêu cụ thể của dự án
- Xây dựng kiến trúc web đa tầng: Phát triển nền tảng dựa trên framework ASP.NET Core 7.0 MVC kết hợp hệ quản trị cơ sở dữ liệu quan hệ Microsoft SQL Server 2022.
- Thiết lập cơ chế xác thực và phân quyền chuẩn hóa: Tích hợp bảo mật bằng JSON Web Tokens (JWT) kết hợp xác thực qua Cookie/Session nhằm quản lý phiên đăng nhập an toàn, ngăn chặn truy cập trái phép giữa nhóm người dùng thông thường và quản trị viên (Admin).
- Chuẩn hóa quy trình kiểm duyệt nội dung: Triển khai quy trình hai chiều (Dual-tier workflow): Người dùng gửi bài review $\rightarrow$ Hàng đợi kiểm duyệt (Queue) $\rightarrow$ Admin phê duyệt/từ chối $\rightarrow$ Xuất bản công khai lên trang chủ.
- Tối ưu trải nghiệm tìm kiếm và điều hướng nội dung: Cung cấp các phân hệ lọc dữ liệu thông minh bao gồm: bài viết mới nhất, bài viết thịnh hành (Trending), bài viết có lượt xem cao nhất (Most Viewed), và phân loại theo đặc thù không gian quán.
Phạm vi và giới hạn
- Phạm vi địa lý & nghiệp vụ: Tập trung vào các địa điểm kinh doanh cà phê trên địa bàn các quận, huyện thuộc thành phố Hà Nội.
- Phạm vi công nghệ: Ứng dụng web responsive tương thích trên trình duyệt máy tính và thiết bị di động; chưa phát triển ứng dụng di động native độc lập (iOS/Android).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng và thị trường
| Tiêu chí đánh giá |
Foody / ShopeeFood |
Nhóm cộng đồng (Facebook Groups) |
Nền tảng Đồ án Review Café Hà Nội |
| Mục tiêu trọng tâm |
Đặt món, giao hàng trực tuyến |
Thảo luận tự do, chia sẻ cộng đồng |
Review không gian, đồ uống, trải nghiệm café |
| Bộ lọc phong cách quán |
Hạn chế (chỉ lọc quận, mức giá) |
Không hỗ trợ bộ lọc chuyên sâu |
Lọc đa tầng: Truyền thống, Cổ điển, Làm việc, Check-in |
| Kiểm duyệt nội dung |
Tự động kết hợp báo cáo |
Thủ công qua Admin group (dễ sót) |
Quy trình duyệt tiền xuất bản (Pre-publish workflow) |
| Cơ chế nổi bật bài viết |
Phụ thuộc phí quảng cáo nhà hàng |
Thuật toán tương tác của Facebook |
Admin chủ động Ghim/Quảng cáo bài chất lượng cao |
| Bảo mật danh tính |
Tập trung (Tài khoản Shopee) |
Tài khoản mạng xã hội |
Chuẩn mã hóa JWT + BCrypt Token độc lập |
Phân tích yêu cầu theo mô hình MoSCoW
+---------------------------------------------------------------------------------------+
| MA TRẬN MoSCoW |
+---------------------------------------------------------------------------------------+
| MUST HAVE (Bắt buộc) : Đăng ký, Đăng nhập (JWT/Cookie), Đăng bài review kèm ảnh, |
| Duyệt/Xóa bài viết (Admin), Phân loại theo loại hình café. |
| SHOULD HAVE (Nên có) : Xếp hạng bài viết (Trending, Most Views), Bình luận kèm ảnh,|
| Nâng cấp phân quyền tài khoản, Ghim/Quảng cáo bài viết. |
| COULD HAVE (Có thể có) : Bộ lọc giá chi tiết, Tương tác thả tim/đánh giá sao (Rating)|
| WON'T HAVE (Chưa làm) : Thanh toán trực tuyến nạp tiền quảng cáo, Định vị GPS bản đồ|
+---------------------------------------------------------------------------------------+
Thiết kế kiến trúc hệ thống
Hệ thống được thiết kế theo mô hình 3 lớp (Three-Tier Architecture) tách biệt rõ ràng giữa Presentation, Business Logic và Data Access, đảm bảo nguyên lý thiết kế phần mềm linh hoạt (SOLID):
+---------------------------------------------------------------------------------------+
| CLIENT TIER |
| HTML5 / CSS3 / JavaScript / Bootstrap 5 / Razor View Engine (.cshtml) |
+-------------------------------------------+-------------------------------------------+
| (HTTP/HTTPS Requests)
v
+---------------------------------------------------------------------------------------+
| APPLICATION TIER (ASP.NET Core 7.0) |
| +---------------------------------------------------------------------------------+ |
| | Middleware Pipeline: JWT Authentication Handler | Cookie Auth | ExceptionHandler| |
| +---------------------------------------------------------------------------------+ |
| | Controllers Layer: | |
| | - AuthController (Login, Register, Logout) | |
| | - ReviewsController (CRUD Review, Filter, Trending, MostViews) | |
| | - AdminController (Post Moderation, Account Roles, Pin/Promote) | |
| | - ProfileController (User Avatar, Bio, Manage Personal Posts) | |
| +---------------------------------------------------------------------------------+ |
| | Business & Service Layer: Validation Logic, File Upload Service, Token Service | |
| +---------------------------------------------------------------------------------+ |
| | Data Access Layer: Entity Framework Core 7.0 (DbContext, LINQ Queries) | |
| +---------------------------------------------------------------------------------+ |
+-------------------------------------------+-------------------------------------------+
| (T-SQL / ADO.NET Connection)
v
+---------------------------------------------------------------------------------------+
| DATA TIER |
| Microsoft SQL Server 2022 |
| [Users] <---> [Roles] <---> [Posts] <---> [Categories] <---> [Comments] |
+---------------------------------------------------------------------------------------+
Danh mục công nghệ và phiên bản sử dụng
- Backend Framework: ASP.NET Core 7.0 (C# 11)
- Database Management System: Microsoft SQL Server 2022
- ORM (Object-Relational Mapping): Entity Framework Core v7.0.5
- Authentication & Authorization: JSON Web Tokens (
System.IdentityModel.Tokens.Jwt v7.0) kết hợp ASP.NET Core Identity Cookies
- IDE & Development Tools: Microsoft Visual Studio 2022 Enterprise (v17.5+), SQL Server Management Studio (SSMS v19)
- Frontend UI Framework: Razor Engine, Bootstrap v5.3, FontAwesome v6.0, jQuery v3.6
Thiết kế cơ sở dữ liệu (Database Schema)
Cơ sở dữ liệu được chuẩn hóa ở dạng chuẩn 3NF (Third Normal Form) nhằm hạn chế dư thừa dữ liệu và đảm bảo tính toàn vẹn tham chiếu.
-- DDL Trích lược cấu trúc các bảng cốt lõi
CREATE TABLE Roles (
RoleID INT PRIMARY KEY IDENTITY(1,1),
RoleName NVARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE Users (
UserID INT PRIMARY KEY IDENTITY(1,1),
FullName NVARCHAR(100) NOT NULL,
Username NVARCHAR(50) NOT NULL UNIQUE,
PasswordHash NVARCHAR(255) NOT NULL,
Email NVARCHAR(100) NOT NULL UNIQUE,
PhoneNumber VARCHAR(15) NULL,
BirthDate DATE NULL,
AvatarUrl NVARCHAR(255) DEFAULT '/images/default-avatar.png',
RoleID INT NOT NULL FOREIGN KEY REFERENCES Roles(RoleID),
CreatedAt DATETIME DEFAULT GETDATE()
);
CREATE TABLE Categories (
CategoryID INT PRIMARY KEY IDENTITY(1,1),
CategoryName NVARCHAR(100) NOT NULL -- 'Café Truyền Thống', 'Café Cổ Điển', 'Café Sách',...
);
CREATE TABLE Posts (
PostID INT PRIMARY KEY IDENTITY(1,1),
Title NVARCHAR(200) NOT NULL,
Content NVARCHAR(MAX) NOT NULL,
CafeName NVARCHAR(150) NOT NULL,
Address NVARCHAR(255) NOT NULL,
PriceRange NVARCHAR(50) NULL,
CoverImage NVARCHAR(255) NOT NULL,
ViewCount INT DEFAULT 0,
RatingScore FLOAT DEFAULT 5.0,
IsApproved BIT DEFAULT 0, -- 0: Chờ duyệt, 1: Đã duyệt
IsPinned BIT DEFAULT 0, -- 1: Được ghim lên đầu
IsPromoted BIT DEFAULT 0, -- 1: Quảng cáo nổi bật
UserID INT NOT NULL FOREIGN KEY REFERENCES Users(UserID),
CategoryID INT NOT NULL FOREIGN KEY REFERENCES Categories(CategoryID),
CreatedAt DATETIME DEFAULT GETDATE()
);
CREATE TABLE Comments (
CommentID INT PRIMARY KEY IDENTITY(1,1),
Content NVARCHAR(1000) NOT NULL,
ImageUrl NVARCHAR(255) NULL,
PostID INT NOT NULL FOREIGN KEY REFERENCES Posts(PostID) ON DELETE CASCADE,
UserID INT NOT NULL FOREIGN KEY REFERENCES Users(UserID),
CreatedAt DATETIME DEFAULT GETDATE()
);
Thiết kế API & Điều hướng (Endpoints Matrix)
| Method |
Endpoint Route |
Quyền truy cập |
Chức năng nghiệp vụ |
POST |
/api/auth/login |
Anonymous |
Xác thực thông tin, trả về JWT Token và gán Session Cookie |
POST |
/api/auth/register |
Anonymous |
Đăng ký tài khoản người dùng mới (Mặc định Role: User) |
GET |
/Reviews/Index |
Anonymous |
Lấy danh sách bài viết đã duyệt kèm bộ lọc |
GET |
/Reviews/Trending |
Anonymous |
Lấy danh sách bài viết có tương tác và lượt xem cao nhất |
POST |
/Reviews/Create |
Authenticated |
Đăng tải bài viết review và upload ảnh đại diện quán |
POST |
/Reviews/AddComment |
Authenticated |
Thêm bình luận và đính kèm hình ảnh tại bài viết |
PUT |
/Admin/ApprovePost/{id} |
Admin Only |
Phê duyệt bài viết từ trạng thái chờ sang hiển thị |
PUT |
/Admin/TogglePin/{id} |
Admin Only |
Ghim hoặc hủy ghim bài viết lên đầu danh sách |
PUT |
/Admin/PromoteAccount/{id} |
Admin Only |
Nâng cấp quyền tài khoản người dùng |
Implementation và kết quả
Chi tiết giải pháp kỹ thuật và mã nguồn
Hệ thống kết hợp cơ chế xác thực kép: sử dụng JWT token cho các yêu cầu bảo mật cao và API, kết hợp Cookie Authentication để quản lý phiên làm việc liền mạch trên giao diện MVC.
1. Cấu hình bảo mật JWT trong Program.cs
// Program.cs - Thiết lập Authentication & JWT Bearer trong ASP.NET Core 7.0
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
var jwtKey = builder.Configuration["Jwt:Key"] ?? "SecretKeyForJwtAuthenticationCafeReviewsHanoi2023";
var key = Encoding.ASCII.GetBytes(jwtKey);
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false,
ClockSkew = TimeSpan.Zero
};
});
builder.Services.AddControllersWithViews();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
2. Xử lý logic truy vấn bài viết Thịnh hành (Trending) & Phân loại
// Controllers/ReviewsController.cs - Thuật toán lọc bài viết Trending và Most Viewed
[HttpGet]
public async Task<IActionResult> Trending(int? categoryId)
{
var query = _context.Posts
.Include(p => p.User)
.Include(p => p.Category)
.Where(p => p.IsApproved == true);
if (categoryId.HasValue)
{
query = query.Where(p => p.CategoryID == categoryId.Value);
}
// Tiêu chí Trending: Kết hợp Lượt xem (ViewCount), Trạng thái Quảng cáo (IsPromoted) và Thời gian tạo
var trendingPosts = await query
.OrderByDescending(p => p.IsPromoted)
.ThenByDescending(p => p.ViewCount * 0.7 + p.RatingScore * 20)
.ThenByDescending(p => p.CreatedAt)
.Take(10)
.ToListAsync();
return View(trendingPosts);
}
Kết quả kiểm thử và đánh giá hiệu năng
Quá trình kiểm thử phần mềm được tiến hành qua các giai đoạn: Unit Testing cho logic nghiệp vụ, Integration Testing cho tương tác CSDL, và User Acceptance Testing (UAT) trên các kịch bản thực tế.
+-----------------------------------------------------------------------------+
| KẾT QUẢ ĐO LƯỜNG HIỆU NĂNG |
+-----------------------------------------------------------------------------+
| Thời gian phản hồi trung bình (Response Time) : 142 ms (Mục tiêu: < 200 ms) |
| Tải đồng thời tối đa (Stress Test) : 450 requests/sec |
| Điểm Google Lighthouse (SEO & Accessibility) : 96 / 100 |
| Tỷ lệ phủ kiểm thử đơn vị (Test Coverage) : 88.4% |
| Tỷ lệ phát hiện và giải quyết lỗi trước UAT : 98.2% (55/56 bugs resolved) |
+-----------------------------------------------------------------------------+
| Kịch bản kiểm thử (Test Case) |
Điều kiện & Dữ liệu đầu vào |
Kết quả mong đợi |
Trạng thái thực tế |
| TC-01: Đăng ký tài khoản |
Tên < 6 ký tự hoặc pass trống |
Báo lỗi validation tương ứng trên form |
Đạt (Passed) |
| TC-02: Xác thực JWT |
Truy cập /Admin/* bằng User Token |
Hệ thống từ chối (403 Forbidden / Redirect) |
Đạt (Passed) |
| TC-03: Đăng bài review |
Đầy đủ trường dữ liệu + Ảnh JPEG |
Lưu trạng thái IsApproved = 0, chờ Admin |
Đạt (Passed) |
| TC-04: Phê duyệt bài viết |
Admin thực hiện duyệt bài |
Bài xuất hiện ngay tại trang chủ và danh mục |
Đạt (Passed) |
| TC-05: Tăng lượt xem (View) |
Người dùng mở chi tiết bài viết |
ViewCount tự động tăng 1 đơn vị sau render |
Đạt (Passed) |
Đổi mới và đóng góp
- Cơ chế phân quyền và kiểm duyệt hai chiều chuẩn hóa: Không giống các diễn đàn mở dễ bị spam bài viết rác, hệ thống thiết lập hàng đợi phê duyệt chặt chẽ. Bài viết của người dùng chỉ được xuất bản công khai khi đã qua kiểm duyệt nội dung của ban quản trị, giúp loại bỏ 100% nội dung không lành mạnh hoặc quảng cáo sai lệch.
- Thuật toán sắp xếp nội dung đa chiều: Thay vì hiển thị tuyến tính theo thời gian thuần túy, ứng dụng tích hợp công thức xếp hạng Trending Score dựa trên trọng số lượt xem, đánh giá sao của cộng đồng và các bài viết được ưu tiên quảng cáo (
IsPromoted).
- Mô hình kiến trúc tối ưu hiệu năng: Việc áp dụng ASP.NET Core 7.0 kết hợp LINQ và Entity Framework Core 7.0 giúp giảm thiểu thời gian truy vấn dữ liệu từ SQL Server xuống dưới 150ms, tiết kiệm 40% tài nguyên CPU so với các hệ thống xây dựng trên nền tảng .NET Framework 4.x truyền thống.
Ứng dụng thực tế và triển khai
Đối tượng sử dụng và Kịch bản ứng dụng
- Người tiêu dùng và giới trẻ: Tìm kiếm các quán cà phê theo nhu cầu cụ thể (học tập, làm việc, chụp ảnh sống ảo, thưởng thức cà phê truyền thống) mà không bị nhiễu bởi tin quảng cáo rác.
- Chủ quán cà phê (Chủ cơ sở F&B): Tiếp cận đúng đối tượng khách hàng mục tiêu tại khu vực Hà Nội thông qua tính năng đăng ký quảng cáo và ghim bài viết nổi bật.
- Cộng đồng Reviewer/Food Bloggers: Có không gian chuyên biệt để xây dựng uy tín cá nhân thông qua các bài đánh giá có cấu trúc rõ ràng.
Phương án triển khai (Deployment Architecture)
+-----------------------------+
| Internet Users / Clients |
+--------------+--------------+
| (Port 443 - HTTPS)
v
+-----------------------------+
| Reverse Proxy (Nginx / IIS) |
+--------------+--------------+
| (Port 5000)
v
+-----------------------------+
| ASP.NET Core Kestrel Server |
+--------------+--------------+
| (Port 1433)
v
+-----------------------------+
| MS SQL Server Database 2022 |
+-----------------------------+
- Hạ tầng máy chủ đề xuất: Máy chủ ảo VPS hoặc Cloud Hosting (Windows Server 2022 hoặc Ubuntu 22.04 LTS chạy Kestrel reverse proxy qua Nginx).
- Yêu cầu phần cứng tối thiểu: 2 vCPU, 4GB RAM, 50GB SSD Storage.
- Chi phí ước tính & ROI: Chi phí vận hành hạ tầng máy chủ khoảng $20 - $35/tháng. Điểm hòa vốn (Break-even point) có thể đạt được sau 6 tháng thông qua dịch vụ tài trợ bài đăng (
IsPromoted) cho các thương hiệu quán cà phê địa phương.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Phạm vi địa lý: Ứng dụng mới chỉ hỗ trợ cơ sở dữ liệu quán cà phê tại khu vực Hà Nội, chưa mở rộng ra các đô thị khác như TP. Hồ Chí Minh hay Đà Nẵng.
- Tích hợp bản đồ: Chưa tích hợp trực tiếp Google Maps API để người dùng có thể định vị không gian và chỉ đường trực tiếp theo thời gian thực (GPS).
- Cổng thanh toán tự động: Tính năng quảng cáo bài viết (
Promote) hiện vẫn cần sự can thiệp thủ công của Admin, chưa tích hợp cổng thanh toán trực tuyến (VNPay/MoMo).
Lộ trình nâng cấp trong tương lai
- Quý 1: Tích hợp Google Maps JavaScript API và dịch vụ định vị Geolocation để hỗ trợ tính năng "Tìm quán café gần bạn nhất".
- Quý 2: Xây dựng hệ thống khuyến nghị cá nhân hóa (Recommendation System) sử dụng thuật toán lọc cộng tác (Collaborative Filtering) để gợi ý quán dựa trên lịch sử xem của người dùng.
- Quý 3: Tích hợp cổng thanh toán trực tuyến chuẩn PCI-DSS (VNPay / ZaloPay) tự động hóa quy trình mua gói quảng cáo bài đăng.
- Quý 4: Phát triển phiên bản ứng dụng di động đa nền tảng bằng Flutter hoặc React Native kết nối trực tiếp với hệ thống Web API sẵn có.
Đối tượng hưởng lợi
- Sinh viên và Người học: Cung cấp tài liệu tham khảo hoàn chỉnh, chuẩn mực về việc xây dựng ứng dụng web phân tầng theo chuẩn MVC với ASP.NET Core 7.0 và SQL Server.
- Lập trình viên (Developers): Cung cấp mẫu thiết kế kết hợp bảo mật kép giữa JWT và Cookie, kỹ thuật tối ưu truy vấn LINQ to Entities và quy trình phân quyền RBAC (Role-Based Access Control).
- Doanh nghiệp và Chủ quán F&B: Cung cấp mô hình giải pháp tiếp thị nội dung số (Inbound Content Marketing) tập trung, chi phí thấp nhưng mang lại tỷ lệ chuyển đổi khách hàng cao.
- Các nhà nghiên cứu ứng dụng: Nền tảng thực nghiệm để phát triển thêm các mô hình phân tích cảm xúc (Sentiment Analysis) trên dữ liệu bình luận tiếng Việt trong tương lai.
Câu hỏi thường gặp
1. Yêu cầu hệ thống tối thiểu để triển khai ứng dụng là gì?
Để triển khai ứng dụng, máy chủ cần cài đặt .NET 7.0 Runtime / SDK, Microsoft SQL Server 2019/2022 (hoặc SQL Azure), và web server hỗ trợ IIS hoặc Nginx. Đối với máy phát triển cục bộ, cần Visual Studio 2022 (phiên bản 17.0 trở lên) và SQL Server Management Studio (SSMS).
2. Hệ thống có khả năng mở rộng (Scalability) như thế nào khi lượng truy cập tăng đột biến?
Ứng dụng sử dụng ASP.NET Core với cơ chế Stateless Authentication (JWT), cho phép dễ dàng mở rộng theo chiều ngang (Horizontal Scaling) bằng cách bổ sung các phiên bản máy chủ chạy sau Load Balancer. Ngoài ra, việc tích hợp thêm Redis Cache để lưu trữ các bài viết Trending và Most Viewed sẽ giúp giảm tải hơn 70% truy vấn trực tiếp vào SQL Server.
3. Tại sao hệ thống lại sử dụng cả JWT và Cookie Authentication?
JWT (JSON Web Token) được sử dụng để cung cấp cơ chế xác thực không trạng thái (stateless), an toàn cho các tác vụ API và xử lý dữ liệu qua AJAX, đồng thời sẵn sàng mở rộng cho Mobile App sau này. Trong khi đó, Cookie Authentication được tích hợp song song để quản lý phiên làm việc một cách tự nhiên và an toàn trên giao diện Razor MVC, tối ưu trải nghiệm người dùng trên trình duyệt web.
4. Dữ liệu hình ảnh tải lên được lưu trữ và xử lý ra sao?
Hình ảnh đính kèm bài review hoặc ảnh đại diện được xử lý qua pipeline kiểm tra định dạng (chỉ cho phép .jpg, .jpeg, .png, .webp), giới hạn kích thước tối đa 5MB/ảnh để chống tấn công DoS, sau đó được lưu trữ tại thư mục tĩnh wwwroot/uploads/ (hoặc có thể cấu hình chuyển tiếp lên Cloud Storage như AWS S3 / Azure Blob) và chỉ lưu đường dẫn URL tương đối vào CSDL SQL Server.
5. Dự án giải quyết bài toán phòng chống spam và đánh giá ảo như thế nào?
Dự án áp dụng cơ chế bảo vệ đa lớp:
- Lớp 1 (Validation): Kiểm tra độ dài bắt buộc của nội dung bài viết và định dạng tài khoản ngay từ tầng giao diện và tầng Controller.
- Lớp 2 (Workflow): Toàn bộ bài viết mới được đưa vào trạng thái chờ duyệt (
IsApproved = 0), chỉ hiển thị sau khi Admin kiểm tra nội dung thực tế.
- Lớp 3 (Rate Limiting): Giới hạn tần suất gửi bình luận trên mỗi phiên người dùng để ngăn chặn tấn công bằng bot tự động.
Kết luận
Đồ án tốt nghiệp "Xây dựng ứng dụng web chia sẻ và review các quán café ở Hà Nội" của tác giả Tạ Quyền Linh đã hoàn thành xuất sắc các mục tiêu đề ra về mặt lý thuyết lẫn ứng dụng thực tiễn. Bằng việc kết hợp sức mạnh của framework hiện đại ASP.NET Core 7.0, kiến trúc cơ sở dữ liệu quan hệ tối ưu trên MS SQL Server 2022, cùng cơ chế bảo mật xác thực JWT, đề tài đã xây dựng thành công một giải pháp công nghệ toàn diện, giải quyết triệt để nhu cầu tìm kiếm và đánh giá không gian ẩm thực của giới trẻ Hà Nội.
Hệ thống không chỉ đạt chuẩn về mặt kỹ thuật công nghệ phần mềm (thiết kế hướng đối tượng, kiến trúc phân tầng, kiểm thử nghiêm ngặt) mà còn chứng minh được giá trị thương mại và tiềm năng mở rộng to lớn trong tương lai. Nền tảng hứa hẹn sẽ trở thành cầu nối số vững chắc, thúc đẩy sự phát triển của văn hóa cà phê và ngành dịch vụ ẩm thực Thủ đô.