HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA ĐA PHƯƠNG TIEN
ĐÈ TÀI:
“XÂY DUNG WEBSITE QUANG BA VA ĐẶT TOUR
DU LICH SỬ DUNG REACTJS VÀ NESTJS” Giang viên hướng dan: TS TRAN QUY NAM
Sinh viên thực hiện: TRAN THIEN HAI
D19PTDPT2019 - 2023
ĐẠI HỌC CHÍNH QUY
HÀ NỘI - 2023
Trang 3HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIÊN THONG CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
KHOA ĐA PHƯƠNG TIỆN Độc lập - Tự do - Hạnh phúc
DE TÀI DO AN TOT NGHIỆP ĐẠI HỌC
Họ và tên sinh viên: Trần Thiện Hải
Lớp: DI9PTDPT Khoá: 2019-2023
Ngành đào tạo: Công Nghệ Đa Phương Tiện
Hệ đào tạo: Đại học chính quy
1 _ Tên đồ án/khoá luận tốt nghiệp: Xây dựng website quảng bá và đặt tour du lịch
sử dụng ReactJS và NestJS.
2 Lý do chọn dé tài:
Sau một thời kỳ dài chịu ảnh hưởng của dịch bệnh, thị trường du lịch Việt
Nam đã dan dan phát triển trở lại và có nhiều sự thay đổi đáng kể Người dân có nhu cầu đi du lịch trở lại ngay một nhiều hơn, vì vậy việc quảng bá du lịch và đặt tour trực tuyến ngày càng trở nên quan trọng, và để đáp ứng điều này, việc xây dựng một trang web là hoàn toàn cần thiết.
ReactJs và NestJs, là hai công nghệ tiên tiến và phổ biến hiện nay trong phát triển web, mang lại sự linh hoạt và hiệu suất Đề tải "Xây dựng website quảng bá và đặt tour du lich sử dụng ReactJs và NestJs" không chỉ đơn thuần là
một đề tài tốt nghiệp mà còn là cơ hội để bản thân em áp dụng những kiến thức mới
và sáng tạo trong một lĩnh vực đang trên đà phát triển mạnh mẽ, đóng góp vào sự
tiện lợi và linh hoạt của ngành du lịch trong thời đại SỐ.
Trang web quảng bá và đặt tour du lịch sẽ không chỉ giúp người dùng dễ
dàng tìm kiếm và lựa chọn tour phù hợp mà còn mở ra một công thông tin rộng lớn
về các điểm đến, trải nghiệm du lịch, các sự kiện đặc sac, Việc quan ly thong tin các tour, các điểm đến, dem lại cho người dùng những thông tin đầy đủ, chính xác và hữu ích nhất, giúp người dùng lựa chọn được tour du lịch hợp lý là những mục
tiêu mà em tin rằng dự án này có thể đạt được một cách hiệu quả.
Chính vì vậy, em đã lựa chọn đề tài “Xây dựng website quảng bá và đặt
tour du lich sử dụng ReactJS và NestJS” Website sẽ có các chức năng như quảng
bá các địa điểm du lịch nổi tiếng, tìm kiếm tour du lịch phù hợp với nhu cau, đặt
tour trực tuyến, quản lý các tour du lịch, các điểm đến, các câm nang du lịch, da
dạng và hữu ich với người dùng.
Trang 43 Nội dung chính của đồ án:
Đồ án được chia làm các chương như sau:
Chương 1: Tổng quan về đề tài
Chương 2: Cơ sở lý thuyết
Chương 3: Phân tích và thiết kế hệ thống
Chương 4: Xây dựng đề tài
4 Ngày giao đề tài: 05/10/2023
5 Ngày nộp quyển: 15/12/2023
GIẢNG VIÊN HƯỚNG DẪN SINH VIÊN THỰC HIỆN
(Ký, ghi rõ họ tên) (Ky, ghi rõ họ tên)
TRƯỞNG KHOA
(Ký, ghỉ rõ họ tên)
Trang 5Đồ án tốt nghiệp Đại học
LỜI CẢM ƠN
Được học tập và nghiên cứu tại khoa Da phương tiện — Học viện Công nghệ Bưu
chính Viễn thông, em đã được trải nghiệm trong môi trường đào tạo tốt và nhận
được sự chỉ dạy nhiệt tình của các thầy, các cô trong khoa.
Trước hết, em xin được bày tỏ lòng biết ơn và gửi lời cảm ơn chân thành đến thầy Trần Quý Nam đã dạy cho em có được những kiến thức vững chắc, tận tình chỉ bảo, nhắc nhở và hướng dẫn em trong suốt quá trình làm đồ án tốt nghiệp.
Với lòng biết ơn sâu sắc nhất, em xin gửi đến quý thầy cô Khoa Đa phương tiện đã truyền đạt vốn kiến thức quý báu cho chúng em trong suốt thời gian học tập tại trường Nhờ có những lời hướng dẫn, dạy bảo của các thầy cô nên đề tài nghiên cứu
của em mới có thê hoàn thiện tốt đẹp.
Trong quá trình nghiên cứu của mình, mặc dù được sự hướng dẫn rất nhiệt tình, tận tâm của thầy Trần Quý Nam cùng với sự nỗ lực của cá nhân nhưng cũng không thể tránh được những thiếu sót Em rất mong nhận được sự cảm thông và những góp ý từ quý Thay, Cô và các bạn dé dé tài được hoàn thiện hơn.
Em xin chân thành cảm ơn!
Hà Nội, ngày 12 tháng 12 năm 2023
Sinh viên thực hiện
Trân Thiện Hải
Trần Thiện Hải - BI9DCPT071 i
Trang 6Đồ án tốt nghiệp Đại học
MỤC LỤC
CHƯƠNG 1 TONG QUAN VE ĐÈ TAL 5c ccccccxersreresree |
1.1 Bối cảnh và mục tiêu -:Sc 2t 3E E3E153212E55555513111121111515511111 11515111 1EEE xe 1
Bo nẽ 1
1.1.2 Lý do chọn dé tai o.cccececccccccccsssscssescsscssssessesesecsesessessssececstsvssseseeeees | 1.2 Đối tượng và phạm Vi đề tài ¿+ Ss+S SE 12EEE15121E2121711121 111.1 tre | 1.2.1 Đối tượng mà đề tài hướng tới -:- + sec E2 2ErEerxrkeree I 1.2.2 Phạm vi của đề tai oe eeseeeccsseesssecsssessssecessecessseesneeesnneeenneeesneeesneeesneee 2 1.3 Cấu trúc đồ án +: 22x22 2221221122111 re 3 1.4 Kết luận chương 2-2252 22t 2E 2E1221221121122127121121121121121212112 1e re 4 CHƯƠNG 2 CƠ SỞ LÝ THUYÊT 2-2222 222++222E+2EE+2EESExzrxerkrerrree 5 2.1 HTML, CSS LG 2111 HS v1 S11 1H TH 1H kg KH kh 52.1.1 Html ( HyperText Markup Language) -++++s+ 52.1.2 CSS (Cascading Style Sheets) Là nh re 5
2.5.2 Đặc điỂm ose eeceeeecsseecsssesesnecessseesseeessncssnscesnscessseessneesnneessneeesteesnneessees 8 2.5.3 Một vai framework hỗ tTỢ ¿- ¿+ + St ‡EEEEEE11111111111 1111111111 ce2 8
Trang 72.9.1 Khái nIỆm - + 11 S19 9v TT TH nhu TH HH Hư 20
2.9.2 Tính năng hỗ trợ cho NestJS -¿- 2-5252 5222+2xczzxrrzrsree 20
Phê 21
2.10.2 Tinh năng hỗ trợ cho NestS c.ccccccsccsescsscsessesesessesesessssesssseseseeeees 21
CHUONG 3 PHAN TÍCH VA THIET KE HE THONG - 23
3.1 Khảo sát, phân tích sản phẩm, luồng sử dung của người dùng - 23
3.1.1 Mục tiêu của sản phẩm 2-52 2+2 E2 21211121 te 23
3.1.2 Kiến trúc hệ thống -¿- 2-2 ©52+2E+2E22E2E12E2EE212121 2121223 ze 23 3.1.3 Danh sách các chức năng của hệ thống - 2 ¿©5z+s+2x+sze: 25 3.1.4 Danh sách các đối tượng quản lý 2 +2x+E+xe£zxzxzxzreree 25 3.1.5 Phân tích luồng sử dụng chính của người dùng -: 25
3.2 Phân tích, thiết kế hệ thống -¿- 2-2 2 S9‡EEEEEEEE2EEEEE2EEE121EE1711 22x cE 26 Ea a ä-3 26
3.2.2 SC€TIATIO - Ghế 29
3.2.3 Lược đồ tuần tự -.::-52+:222xt22 t2 tri 38
CHƯƠNG 4 XÂY DỰNG DE TÀI 2-2252 21 E12 2E12212711211221 E11 xe 46
4.1 Xây dựng Fronf-End - - - + 1 211332111211 1191 1111111 1110111011801 101 g1 kg 46
4.1.1 Kiến thức chung được sử dụng ¿+ 2 sx+EsEczxzxerererrrees 46
4.1.2 Cau trúc frontend -¿+-s+2x+2xt2E12EE221211221271121121121 211.2 re 46
4.1.4 Các trang ø1ao dIỆNn - - Sc 3n S2 TH HH TH ng tre 534.2 Xây dựng cơ sở đữ GU oo ee ee eeceescceeeeeneceeeeeeeeeneeceseeeeeeeeeeeeeeeeeseeeeneeeees 66
4.2.1 Các trường thuộc tính của đối tượng - ¿2 2+cecs+xsrxerees 66
Trần Thiện Hai - BI9DCPT071 1H
Trang 8Đồ án tốt nghiệp Đại học
4.2.2 Quan hệ giữa các đối tượng ¿- Sc tt E2 rrưyt 69
4.3 Xây dung Back-End - c1 2c 11 1112111111111 1111101110 1118011 1H 11c kg 70
4.3.1 Kiến thức chung được sử dụng -¿- + secs+xeEsrzxerzxerees 70 4.3.2 Các object và cau trúc chung ¿5c s+E‡Ex2EeEzEeEerzrereeg 70
ôn? 2n 72
TONG KET ĐÈ TÀI 55 2552 2222222221222 122 22 ri 77
TÀI LIEU THAM KHẢO 2-22 2 SE2E22EE£EE22E12E127171121127171711 21121 79
Trần Thiện Hải - BI9DCPT071 1V
Trang 9Hình 2.4 Giao diện Swagger cùng các API của ứng dung NestJs 22
Hình 3.1 Sơ đồ luồng sử dụng chính của người dùng -2-©5¿5¿5s¿ 26
Hình 4.1 Cau trúc front-end - +: + s+SE+S22EE2E2E2E121217171717121211 21 ce 46
Hình 4.2 Giao diện thanh Header - - (<< << EE E121 E18 E£222333133 1 ke 47Hình 4.3 Giao diện thanh Footer c2 2222211111 1111113 1£ £Erkkeeess 48
Hình 4.4 Giao diện thé tour - . 2211332222111 181 125531111111 ke rrrre 48
Hình 4.5 Giao diện thẻ điểm đến -222c22ttrr 49
Hình 4.6 Giao diện thẻ tin tức du lịch 5-2555 2222222222332 x+ 50Hình 4.7 Giao diện đăng nhập - ¿2 2c 132211321111 11511 1111111581111 xeE 33
Hình 4.8 Giao diện đăng Ky - - - G0 0121111221111 1110111110111 g1 11k ng và 33
Hình 4.9 Giao diện quên mật khẩu - 5 St St St t1 SE5E5E1111151511151111 111115111 xe 54 Hình 4.10 Giao điện khôi phục mật khẩu cccccccccccsessesseesesssssesseesteseesssessesseseees 55
Hình 4.12 Giao diện trang chủ - - S0 3221121111511 1 91111119 11111 kg kg kg 56
Hình 4.14 Giao diện trang chủ - 2c 3S 1121112131111 1111111119111 11k kg krg 56Hình 4.15 Giao diện trang chủ - - c 2S 112111231111 111111111911 1H vn kh 57
Hình 4.16 Giao diện trang loại tOUT - - 6 2c 2222312113311, 57
Hình 4.17 Giao diện trang loại tour . 5 S2 2321112313111 EEEEExre 58
Hình 4.18 Giao điện bộ loc sắp XẾp ¿- 5-52 St E2 2121112121211 11 1121 te 58 Hình 4.19 Giao diện trang chỉ tiẾt tOuT ¿+ 2-5 +x+EE+E£EE+E£EEEEEEEEErErkerereree 59 Hình 4.20 Giao diện trang chỉ tiẾt tOU :- 2-52 ©5222222++EEEEzEeEtzxrxerszee 59 Hình 4.21 Giao diện trang chi tiết điểm đến 5- 2-52 Ss+E+E£E2E£EzEzEerree 60 Hình 4.22 Giao diện trang điểm đến 2-2 5¿©222EE+EEt2EE22EE2E2222221223 2x 60
Hình 4.23 Giao diện trang tin tức du Lich c5 5 32-1 2S krserrerrersrvee 61Hình 4.24 Giao diện trang đặt tour c2 3S 111212 11 1 1x re 62
Hình 4.25 Giao diện hồ sơ người dùng -:- 2 2SE+EE2EE2EE2E2EEErEerrerkrex 62
Hình 4.26 Giao diện nút thanh toán Paypal - ¿ 5 +22 3+ *+kEssseerrrsesse 63Hình 4.27 Giao diện đăng nhập Paypal . - Sc 3+ 3112 3xx xykserveg 64
Trần Thiện Hải - BI9DCPT071 V
Trang 10Đồ án tốt nghiệp Đại học
Hình 4.28 Giao diện tài khoản khách hàng trừ tiền - 5-2 +cz+s+£ecs2 64
Hình 4.29 Giao diện tài khoản người bán tour nhận Cs sec 65
Hình 4.30 Bảng cơ sở dữ liệu User - 2 22c 332111211311 115151115111 k2 66Hình 4.31 Bảng cơ sở dữ liệu TOUT- c2 22c 33211122 E%5EEEEEEereervke 67Hình 4.32 Bảng cơ sở dữ liệu Tour Type cccccccccscccesecesecesseeseceseeesseeesseeeensaes 68
Hình 4.33 Bảng cơ sở dữ liệu Destination - - sành nhiệt 68
Hình 4.34 Cau trúc chung của các object Back-end ¿-5scccscsczxzxe2 70
Hình 4.35 Cấu trúc của object TOUF 2:22 + 2x2E22E++EE£E+2EE2EEzEzxerxzre 71
Hinh 4.36 API Xac thue an 72
Hình 4.37 API về Users - 555cc t2 treo 74 Hình 4.38 API về Tours -csc- 22 222 treo 74
Hình 4.39 API về Destinations -¿- 2-52 2222E22E2E2221271211212121121 2121 xe 75 Hình 4.40 API về Tour Types -¿- 2-52 S22S22E22E12E12121715E12171111E1 1E re 75 Hình 4.41 API vỀ Invoices 2-52 52522522S22E22E2E2121212121212117121 211121 xe 76
Hình 4.42 API về TravelTips 2-2 2s ‡EÉEEEEEEEEEE121121121121171 11111 xe 76
Trần Thiện Hải - BI9DCPT071 vi
Trang 11Scenario 3.3 Quên mật khâu và khôi phục mật khâu - ¿2= s+s+s+ 30
Scenario 3.5 Sửa thông tin cá nhân - - 2 3221332111311 rErkkrree 31
Scenario 3.6 Xem danh sách các tour ni bật ở trang chủ -s-cs=s 32
Scenario 3.7 Xem danh sách các tour theo loại tour - 555555 c s55 32
Scenario 3.8 Xem danh sách các điểm đến - 2-52 +s+E£E2E£E£E2EeExzkrrees 32
Scenario 3.9 Lọc và tìm kiếm điểm đến - ¿+ +s+E+EvEEEEEEEEEEEEE+EsEsEErrrrres 33 Scenario 3.10 Xem chỉ tiết một điểm đến -¿-5: 2c 2ct2Eterrisrerrerrree 33
Scenario 3.11 Xem danh sách các tin tỨC -c 23c 3 1S xxssssreesres 33
Scenario 3.12 Lọc và tìm kiếm tin tỨC c- xxx +EEEEEEEEEEEEEeEEEkrkrrrrxrkeree 34 Scenario 3.13 Xem chỉ tiết một tin tức ¿:©:+¿2c2+2£xxtrxrtrrrrsrrrrrrrrres 34
Scenario 3.14 Lọc tour du lich - + 2< 1332222111111 1 1E 293111 sec 34
Scenario 3.15 Xem chi tiết một tour du lịch -¿-s- + x+E+ESt+E+EEEzEeErxsrresrez 35
Scenario 3.16 Dat tour du lịch _ ¿2-2 1E 22221111 E 2311 EEEkrrerreeeeeeses 35
Scenario 3.17 Thanh toán tour băng Paypal -2- 2 s5 eEE+E+EeEerrxrxreres 36
Scenario 3.18 Xem các tour đã đặt - - - S2 2221111122511 11111111111 re 36
Scenario 3.19 Thêm mới tour, loại tour, điểm đến, tin tức - s5: 37
Scenario 3.20 Chỉnh sửa tour, loại tour, điểm đến, tin tức :-:-scs=ssss2 37 Scenario 3.21 Xóa tour, loại tour, điểm đến, tin tức -. -:cs+c+z+Eszseszsscsz 38
Scenario 3.22 Xác nhận tinh trạng thanh toán . - 25 +2 sssrsseerres 38Sequence 3.1 Dang KY eee eee aa 39Sequence 3.2 Đăng mhap - - 2113321111191 11391 1111911111011 1E ng ng re 39
Sequence 3.3 Quên mật khâu - - 2-2 + ES+E£EE2EEEEEEE2EEEEEEEEEE1211111 11 EExe, 40 Sequence 3.4 Khôi phục mật khâu 2-22 2 ++2++E+£++E++E+zxzxvzxrrxerves 40
Sequence 3.5 Chỉnh sửa thông tin cá nhân - s5 S11 Esvrưy 41
Sequence 3.6 Xem danh sach tour, điểm đến, tin tức -:cccscessssssssrsez 4I
Trần Thiện Hải - BI9DCPT071 vii
Trang 12Đô án tốt nghiệp Đại học
Sequence 3.7 Lọc và tìm kiếm tour, điểm đến, tin tức -¿-:cscscscsrerrs 42
Sequence 3.8 Xem chi tiết tour, điểm đến, tin tlhe ¿-:-2+x+xvcvEvrrszeserers 42
Sequence 3.9 Đặt fOUT - -.- L1 111111 1111911110 111901 1n 11H nHvv rre 43
Sequence 3.11 Thêm mới tour, loại tour, điểm đến, tin tức - 44
Sequence 3.12 Chỉnh sửa tour, loại tour, điểm đến, tin tức -. cccccsscs 44
Sequence 3.13 Xóa tour, loại tour, điểm đến, tin tức -:-.cccccesessxsesrsres 45
Sequence 3.14 Xác nhận tình trạng thanh toán ¿+ 5-5 ++*‡+++sssx+++seexss 45
Trần Thiện Hải - BI9DCPT071 viii
Trang 13Do an tol nghiep Đại hoc
MO DAU
Trong khuôn khổ của đồ án tốt nghiệp, bản thân em với những kiến thức sẵn có từ
trường lớp, từ những bài tập, dự án cá nhân đã hoàn thành, cùng với việc trau dồi,
tìm hiểu học hỏi thêm kiến thức về lập trình web, và với sự tư vấn, hướng dẫn tận tình từ thầy Trần Quý Nam, em đã đưa ra quyết định làm đề tài đồ án “Xây dựng
website đặt tour du lịch sử dụng ReactJS và NestJS” Nội dung đồ án gồm co: CHUONG 1: TONG QUAN VE DE TAI
Chương này giới thiệu tong quan, mô ta về dé tài bao gồm tên dé tài, mục tiêu, đối tượng đề tài hướng đến, cấu trúc của đề tài.
CHƯƠNG 2: CƠ SỞ LÝ THUYET
Chương 2 sẽ đi vào tìm hiểu các khái niệm, các cơ sở lý thuyết về các công nghệ, kiến thức chung được sử dụng trong đề tài.
CHUONG 3: PHAN TÍCH VÀ THIET KE HE THONG
Phân tích và thiết kế hệ thống Chương nay mô ta về hệ thống của dé tai, các chức năng và các đối tượng cần quản lý, xây dựng các biểu đồ usecase, biểu đồ lớp,
biêu do tuân tự cho các chức năng đó, mô tả vê cơ sở dữ liệu database được sửdụng.
CHƯƠNG 4: XÂY DỰNG ĐÈ TÀI
Xây dựng đề tài Chương này trình bày việc xây dựng website cả về frontend và backend, xây dựng các giao diện, các chức năng, kết nối giữa giao diện, API và
Trần Thiện Hải - BI9DCPT071
Trang 14Đồ an tôi nghiệp Đại học Chương T Tong quan ve de tal
CHUONG 1 TONG QUAN VE DE TAI
1.1 Bối cảnh và mục tiêu 1.1.1 Tên đề tài
Tên đề tài đồ án: Xây dựng website đặt tour du lịch sử dụng ReactJS và NestJS.
1.1.2 Lý do chọn đề tài
Sau một thời kỳ dai chịu ảnh hưởng của dịch bệnh, thị trường du lịch Việt
Nam đã dan dan phát triển trở lại và có nhiều sự thay đôi đáng ké Người dân có nhu cầu đi du lịch trở lại ngay một nhiều hơn, vì vậy việc quảng bá du lịch và đặt tour trực tuyến ngày càng trở nên quan trọng, và để đáp ứng điều này, việc xây dựng một trang web là hoàn toàn cần thiết.
ReactJs và NestJs, là hai công nghệ tiên tiến và phổ biến hiện nay trong phát triển web, mang lại sự linh hoạt và hiệu suất Đề tài "Xây dựng website quảng bá và đặt tour du lich sử dụng ReactJs và NestJs" không chỉ đơn thuần là một đề tải tốt nghiệp mà còn là cơ hội để bản thân em áp dụng những kiến thức mới và sáng tạo trong một lĩnh vực đang trên đà phát triển mạnh mẽ, đóng góp vào sự tiện lợi và linh hoạt của ngành du lịch trong thời đại SỐ.
Trang web quảng bá và đặt tour du lịch sẽ không chỉ giúp người dùng dễ
dàng tìm kiếm và lựa chọn tour phù hợp mà còn mở ra một công thông tin rộng lớn
về các điểm đến, trải nghiệm du lịch, các sự kiện đặc sắc, Việc quản lý thông tin
các tour, các điểm đến, đem lại cho người dùng những thông tin đầy đủ, chính xác
và hữu ích nhất, giúp người dùng lựa chọn được tour du lịch hợp lý là những mục
tiêu mà em tin rằng dự án này có thể đạt được một cách hiệu quả.
Chính vì vậy, em đã lựa chọn đề tài “Xây dựng website quảng ba và đặt
tour du lịch sử dụng ReactJS và NestJS” Website sẽ có các chức năng như quảng
bá các địa điểm du lịch nỗi tiếng, tìm kiếm tour du lịch phù hợp với nhu cau, đặt tour trực tuyến,quản lý các tour du lịch, các điểm đến, các câm nang du lich, đa
dạng và hữu ích với người dùng.
1.2 Đối tượng và phạm vi đề tài
1.2.1 Đối tượng mà đề tài hướng tới
Đối tượng chính mà đề tài này hướng tới bao gồm cả người sử dụng có nhu
cầu du lịch và những nhà cung cấp dịch vụ du lịch Cụ thể, những đối tượng chính bao gồm:
- _ Du khách và Người dùng cuối:
+ Những người muốn tìm kiếm thông tin về các địa điểm du lịch, các tour hấp dẫn và thông tin liên quan.
+ Những người muốn đặt tour du lịch một cách thuận tiện và nhanh chóng
qua trang web.
Trần Thiện Hải - BI9DCPT071 1
Trang 15+ Người dùng cuỗi có nhu cau tìm kiếm và đặt tour trực tuyên một cách dé
Nhà cung cấp dịch vụ du lịch:
+ Nhà cung cấp dịch vụ muốn quản lý thông tin tour, giá cả, và khả dụng
của tour của họ một cách hiệu quả mình thông qua một nền tảng trực tuyến.
+ Cần một giao diện dé sử dung dé cập nhật va quản lý thông tin về các
tour và địa điểm du lịch.
Quản trị viên hệ thống:
+ Người quản trị hệ thống muốn có khả năng kiểm soát và giám sát toàn bộ
hệ thống, dam bảo tính 6n định va bảo mật của trang web.
+ Cần một giao diện quản trị để quản lý người dùng, theo dõi hoạt động và
thống kê liên quan đến sự sử dụng trang web.
Tóm lại, đê tài này nhăm đáp ứng nhu câu đa dạng của cả người dùng cá
nhân và doanh nghiệp trong việc tìm kiếm, quảng bá và đặt tour du lịch một cách
thuận tiện và hiệu qua qua giao diện sử dung ReactJS và NestJS.
1.2.2 Phạm vi của đề tài
Trong đề tài này, bản thân em sử dụng những kiến thức đã học, đã tìm hiểu, tích lũy được dé xây dựng một website quảng bá và đặt tour du lịch, sử dụng công nghệ ReactJS cho phan front-end và NestJS cho phan back-end Dưới đây là các
điêm cụ thê vê phạm vi của đê tài:
Giao diện Người Dùng (Front-end):
+ Công nghệ sử dụng: ReactJS — một framework phát triển frontend phố
biến, với nhiều điểm nổi trội như sự linh hoạt, dé sử dụng, hiệu suất cao, sử dụng component dé chia nhỏ giao diện thành từng phan riêng biệt dé quan
ly và xử lý, cùng với cộng đồng và tài liệu hỗ trợ lớn, là một sự lựa chọn tốt
dé phát triển front-end cho việc xây dựng một trang web nồi bat va hap dẫn
cho việc quảng bá và đặt tour du lịch.
+ Phát triển giao diện website người dùng thân thiện, linh hoạt và dễ sử
dụng cho máy tính.
+ Hiển thi thông tin chi tiết về các địa điểm du lich, các tour du lich,
+ Tích hợp chức năng tìm kiếm và lọc dé người dùng có thé dé dàng tìm kiếm thông tin mong muốn.
Trần Thiện Hải - BI9DCPT071 2
Trang 16+ Công nghệ sử dụng: NestJs — một trong những framework NodeJS phát
triển back end mạnh mẽ nhất hiện nay, VỚI Các điểm mạnh như sử dụng TypeScript, các tính năng mạnh mẽ như Modularity ( Cấu trúc modulized
giúp mã nguồn có tổ chức, dé bảo trì, tái sử dung), Dependency Injection
( tạo mã linh hoạt và dễ kiểm thử) hay Decorators ( đánh dấu các thành phần của ứng dụng, giảm độ phức tạp của mã nguon) là một sự lựa chọn tốt
cho việc xây dung back-end cho website quảng bá và đặt tour du lịch thông
qua việc phân chia rõ ràng các đối tượng quản ký và chức năng, đặc biệt là khi kết hợp với ReactJS.
+ Xây dựng một hệ thống quản lý tour và đặt tour dé dàng, linh hoạt.
+ Tích hợp phương thức thanh toán ảo cho người dùng khi đặt tour.
+ Phát triển một giao điện quan trị cho người quản trị hệ thống dé giám sát
và quản lý toàn bộ trang web Hỗ trợ đăng tải hình ảnh, mô tả, giá cả, và
các thông tin khác liên quan đến các địa điểm và tour.
- Môi trường sử dụng: Website quảng bá và đặt tour du lịch mà em xây dựng
được sử dụng trên tất cả trình duyệt website hỗ trợ trên máy tính như Chrome, Cốc cốc, Microsoft Edge, Safari, Firefox,
- Phan tích thiết kế hệ thống: quá trình phân tích thiết kế hệ thống là qua trình quan trọng trước giai đoạn triển khai đối với mỗi một hệ thống, ứng
dụng, bao gồm giai đoạn nghiên cứu, phân tích các chức năng, các đối tượng cần quản lý, xác định, vẽ lên được sơ đồ hoạt động của của chức
- Công nghệ triển khai và cài đặt hệ thống: những công nghệ dùng dé thực thi và triển khai hệ thống, những thư viện sử dụng hay ngôn ngữ, phương pháp lập trình sẽ được nghiên cứu cụ thé về ưu nhược điểm và lý do sử
- Kiém thử hệ thống: kiểm tra về giao diện, chức năng của hệ thống dé đảm bảo giao diện thân thiện đối với người dùng, cũng như chức năng hoạt động tốt, không lỗi.
1.3 Cấu trúc đồ án
Như vậy, sau khi phân tích được phạm vi nghiên cứu của đồ án thì đồ án được
chia làm các chương như sau:
Chương 1: Tông quan về dé tài Chương này giới thiệu tông quan, mô tả vê đê tàibao gôm tên dé tai, mục tiêu, đôi tượng đê tài hướng đên, câu trúc của dé tài.
Chương 2: Cơ sở lý thuyết Chương này sẽ đi vào tìm hiểu các khái niệm, các cơ sở lý thuyết về các công nghệ, kiến thức chung được sử dụng trong đề tài.
Tran Thiện Hải - BI9DCPT071 3
Trang 17Đồ án tốt nghiệp Đại học Chương 1 Tổng quan về dé tài
Chương 3: Phân tích và thiết kế hệ thống Chương này mô tả về hệ thống của đề tài, các chức năng và các đối tượng cần quản lý, xây dựng các biểu đồ usecase, biểu đồ lớp, biểu đồ tuần tự cho các chức năng đó, mô tả về co sở dữ liệu database
được sử dụng.
Chương 4: Xây dựng dé tài Chương này trình bày việc xây dựng website cả về
frontend và backend, xây dựng các giao diện, các chức năng, kết nối giữa giao
diện, API va database.
1.4 Kết luận chương
Chương đầu tiên của đồ án giới thiệu tổng quát về đề tài, đưa ra mục tiêu,
phạm vi cụ thể của đề tài, cũng như từng bước trong quá trình thực hiện đề tài, đây là
phần được coi như kim chỉ nam trong quá trình phát triển một website, xác địch
hướng đi của đề tài này.
Tom lại, “website quảng ba va đặt tour du lịch sử dung ReactJS và NestJS”
mà em xây dựng trong đề tài này có các chức năng như quảng bá các địa điểm du
lịch nỗi tiếng, tìm kiếm tour du lịch phù hợp với nhu cầu, đặt tour trực tuyến, quản
lý các tour du lịch, các điểm đến, các cảm nang du lịch, đa dạng và hữu ích với
người dùng Tuy nhiên, do thời gian, kiến thức, kinh nghiệm của bản thân còn có
hạn, nên cách thức và quá trình xây dựng website còn gặp nhiều vấn đề, khó khăn, chưa thực sự quá tốt.
Tiếp theo đây, chương 2 sẽ đi vào phần cơ sở lý thuyết, trình bày về các khái
niệm, các kiến thức, công nghệ mà bản thân em đã chọn lựa dé xay dung nén dé tai
Tran Thiện Hai - BI9DCPT071 4
Trang 18Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
CHƯƠNG 2 CƠ SỞ LÝ THUYET
2.1 HTML, CSS
2.1.1 Html ( Hyper Text Markup Language)
HTML là một ngôn ngữ đánh dấu được sử dụng dé tạo và cấu trúc nội dung
của trang web Nó không phải là một ngôn ngữ lập trình, mà thay vào đó là một
ngôn ngữ đánh dau dùng đề định dang và hiển thị thông tin trên trình duyệt HTML
sử dụng các thẻ và phần tử để xác định cấu trúc của trang, bao gồm tiêu đề, đoạn văn bản, hình ảnh, liên kết, biểu mẫu và nhiều phần khác.
2.1.2 CSS (Cascading Style Sheets)
CSS là ngôn ngữ được sử dung dé định dang và tao kiểu cho các trang web va
tài ligu HTML Nó cho phép bạn điều chỉnh mau sắc, kích thước, khoảng cách, vị trí
và nhiều yếu tô giao diện khác của các phan tử HTML CSS sử dụng các quy tắc, các thuộc tinh và các giá trị dé thay đổi diện mạo của các phan tử trong trang.
Nhìn chung:
HTML: Sử dung dé xác định cấu trúc và nội dung của trang web Nó sử dụng thẻ và phần tử để tạo các phần trên trang như tiêu đề, đoạn văn bản, hình ảnh, liên kết,
CSS: Sử dụng để tạo kiểu và định dạng cho trang web Nó sử dụng các quy
tắc và thuộc tinh dé điều chỉnh màu sắc, kích thước, vị trí, và các yếu tố khác của các phần tử trong trang.
Bằng cách sử dụng HTML và CSS cùng nhau, chúng ta có thê tạo ra các trang
web đẹp mắt, có cấu trúc rõ ràng và đễ dàng tùy chỉnh giao diện.
2.2 Javascript
2.2.1 Khái niệm
Javascript chính là một ngôn ngữ lập trình web rất phổ biến ngày nay.
Javascript được tích hợp đồng thời nhúng vào HTML để hỗ trợ cho website trở nên
sống động hơn bang cách thực hiện các thay đổi trang thái và tương tác người dùng mà không cần tải lại trang.
2.2.2 Vai trò
Vai trò của JavaScript trong lập trình web:
- _ Tương tác trực tiếp với HTML/CSS: JavaScript cho phép thay đối nội dung
và giao diện của trang web mà không cần phải tải lại toàn bộ trang Điều
này tạo ra trải nghiệm người dùng mượt mà và nhanh chóng.
- Tuong tác người dùng: JavaScript được sử dụng dé xử lý sự kiện từ người
dùng như click, hover, và input Điều này giúp tạo ra trang web đáp ứng và
tương tác, cung cấp trải nghiệm người dùng tốt hơn.
Trang 19Tran Thiện Hải - BI9DCPT071 5Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
- _ Giao tiếp máy chủ: JavaScript cho phép truyền dữ liệu giữa trình duyệt và
máy chủ mà không làm tải lại trang Sử dụng AJAX (AsynchronousJavaScript and XML) hoặc các phương thức như Fetch API, JavaScriptgiúp tạo ra ứng dụng web linh hoạt và nhanh chóng.
Trong lập trình ReactJS, JavaScript đóng một vai trò quan trọng như ngôn ngữ
chính dé xây dựng các thành phan và quan lý trạng thái của ứng dụng ReactJS sử
dụng JavaScript dé tạo các thành phan tái sử dung và xây dựng giao diện người dùng
hiệu quả.
2.2.3 Ưu điểm
Ưu điểm của JavaScript:
- Kha năng chạy trên mọi trình duyệt: JavaScript là ngôn ngữ có thé chạy
trên mọi trình duyệt hiện đại, giúp đảm bảo tính tương thích và mở rộng
của ứng dụng web.
- Cong đồng lớn và hỗ trợ mạnh mẽ: Sự phổ biến của JavaScript đã tạo ra một cộng đồng lập trình đông đảo Có nhiều thư viện, framework và tài
nguyên học tập giúp hỗ trợ và phát triển nhanh chóng các dự án.
- Cu pháp dé đọc và hiểu: JavaScript có cú pháp gần gũi với nhiều ngôn ngữ
lập trình khác, giúp cho việc đọc và hiểu mã nguồn dé dang hơn.
- _ Xử lý bất đồng bộ thông qua Promise và Async/Await: Điều này giúp quan
ly mã nguồn không đồng bộ một cách hiệu qua, giảm thiêu callback hell và
tăng tính nhất quán của mã nguồn.
- _ Tích hợp tốt với nhiều công nghệ khác nhau: JavaScript có thé tích hợp dễ
dàng với các công nghệ khác như APIs, thư viện bên ngoài và các
framework, tạo ra môi trường phát triển đa dạng và linh hoạt.
2.3 Axios
Axios là một thư viện JavaScript được sử dụng phô biến để thực hiện các yêu cầu HTTP từ trình duyệt hoặc môi trường Node.js Thường thì Axios được sử dụng dé
gửi các yêu cầu AJAX và tương tác với các API.
Với Axios, chúng ta có thể thực hiện các loại yêu cầu HTTP như GET, POST,
PUT, PATCH, DELETE và các phương thức khác dé làm việc với dữ liệu Nó cung
cấp các phương thức đơn giản để gửi yêu cầu và nhận phản hồi từ máy chủ, và cung
cấp cú pháp dễ hiéu và linh hoạt dé xử lý dữ liệu được trả về từ API.
Cài đặt: npm install axios
Sử dụng axios dé thực hiện yêu cầu lấy data:
import axios from 'axios’;
axios.get(‘https://api.example.com/data')
Trang 20Trin Thien Hal — BIODCPTO nt
Đồ án tốt nghiệp Dai hoc Chương 2 Cơ sở lý thuyết
2.4 Ant Design
Hinh 2.1 Ant Design
Ant Design là một bộ thư viện giao diện người dung (UI) được phat triển bởi
Ant Group Nó cung cấp các thành phan giao diện và hệ thống thiết kế có san dé xây dựng các ứng dụng web chuyên nghiệp và hấp dẫn Ant Design giúp tiết kiệm thời gian và công sức trong việc tao giao diện và cung cấp một giao diện đồng nhất và hài
hòa cho ứng dụng của chúng ta.Cài đặt: npm install antd
Sử dụng các thành phan: Ant Design cung cấp nhiều thành phan giao diện như nút, biểu mẫu, bảng, menu, tab, v.v Chúng ta có thể import và sử dụng các thành
phần này trong ứng dụng của mình Ví dụ:
Import { Button, Input } from “antd”;
Ant Design không chỉ cung cấp các thành phần cơ bản mà còn giúp bạn xây dựng các giao diện ứng dụng hap dẫn với các hệ thống bố cục, mẫu thiết kế và hướng
dẫn sử dụng.
2.5 Front-end
2.5.1 Khái niệm
Frontend là phần của một ứng dụng web mà người dùng trực tiếp tương tác và nhìn thấy Nó giống như cánh cửa và cửa số của ngôi nhà web - nơi mà mọi người giao tiếp và trải nghiệm Frontend thường được xây dựng bằng HTML, CSS, và JavaScript HTML định nghĩa cấu trúc của trang web, CSS xác định giao diện và kiểu
dáng, và JavaScript thêm chức năng tương tác.
Trang 21Trần Thiện Hải - B19DCPT071 7Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
2.5.2 Đặc điểm
Một vài điểm quan trọng về front-end:
- Frameworks và Thư Viện: Có nhiều frameworks như React, Angular, hoặc
Vue.js giúp phát triển frontend hiệu quả hơn bang cách cung cấp cau trúc và công cụ
sẵn có.
- Responsive Design: Frontend cần linh hoạt để hiển thị trên nhiều thiết bị và
kích thước màn hình khác nhau Điều này gọi là thiết kế đáp ứng.
- Giao Diện Người Dùng (UI): Điều này bao gồm mọi thứ từ cách các phần tử được sắp xếp trên trang đến cách chúng phản ứng khi người dùng tương tác.
- Tương Tác Thông Minh: Frontend giúp xây dựng trải nghiệm tương tác
mượt mà và thú vị, từ việc kiểm soát form đến tải đữ liệu động mà không cần phải tải
lại trang.
- Ajax (Asynchronous JavaScript and XML): Cho phép gửi và nhận dữ liệu từ
máy chủ mà không cần phải làm mới trang, tăng trải nghiệm người dùng.
- Đa Dạng và Đa Phương Tiện: Hiển thị nội dung đa dạng như văn bản, hình ảnh, video, và âm thanh một cách hấp dẫn.
2.5.3 Một vài framework hỗ trợ
a Angular
Angular là một framework front-end do Google phát triển Nó có một cộng đồng mạnh mẽ và cung cấp một cách tiếp cận đầy đủ cho phát triển ứng dụng web.
Mô hình two-way data binding của Angular giúp tự động cập nhật giao diện khi dữ
liệu thay đổi.
Đặc điểm nỗi bật:
- Full-Featured: Angular là một framework đầy đủ, cung cấp đầy đủ mọi thứ để xây dựng một ứng dụng web, bao gồm routing, dependency injection, forms handling, và nhiều tính năng tích hợp sẵn.
- Two-way Data Binding: Cung cấp two-way data binding giữa model và view, giúp tự động cập nhật giao diện khi dữ liệu thay đôi và ngược lại.
- TypeScript: Angular sử dụng TypeScript, giúp kiểm tra lỗi tại giai đoạn phát
triển và tăng tính bảo mật.
- Modular Architecture: Angular sử dụng kiến trúc modular, giúp tăng khả
năng bảo trì và phát trién ứng dụng lớn.
Trang 22Tran Thiện Hải - B19DCPTO71 8D6 an tot nghiép Dai hoc Chuong 2 Co sé ly thuyét
b VueJS
Vue.js là một framework linh hoạt va dé hoc Với cú pháp gần gũi với HTML, Vue.js thích hợp cho cả những người mới bắt đầu Nó có khả năng tích hợp gradualmente vao dự án hiện tai và sử dụng mô hình reactivity để theo dõi và tự
động cập nhật trạng thái.
Đặc điểm nồi bật:
- Simplicity and Flexibility: Vue.js được biết đến với cú pháp đơn giản và dễ
học Nó cho phép tích hợp gradualmente vào dự án hiện tại và có khả năng linh hoạt
- Reactivity: Sử dụng mô hình reactivity dé theo dõi và tự động cập nhật trang
thái, giúp quản lý trạng thái ứng dụng dễ dàng.
- Component-Based: Vue.Js cũng hướng tới mô hình component-based, giúp quản
ly mã nguồn và tăng khả năng tái sử dụng.
c NextJS
Next.js là một framework ReactJS để xây dựng ứng dụng web tĩnh hoặc
động Nó giúp tối ưu hóa hiệu suất và tăng khả năng tìm kiếm của trang web thông qua việc tạo ra các trang tĩnh tại thời điểm build.
Đặc điểm nồi bật:
- Server-side Rendering (SSR) và Pre-rendering: Next.js hỗ trợ SSR và
pre-rendering, giúp tăng tốc độ tải trang và cải thiện trải nghiệm người dùng.
- Routing Tốt: Cung cấp hệ thống routing mạnh mẽ và tốt, giúp quản lý các
trang và URL dễ dàng.
- Static Site Generation (SSG): Cho phép tạo ra các trang web tĩnh tại thời
điểm build, giảm độ phức tạp của server và tăng khả năng mở rộng.
d NuxtJS
Nuxt.js là phiên bản Vue.js của Next.js Nó tối ưu hóa việc xây dựng ứng dụng Vue.js và cung cấp các tính năng như pre-rendering và server-side rendering.
Đặc điểm nỗi bật:
- SSR va SSG cho Vue.js: Nuxt.js mở rộng khả năng của Vue.js với SSR và
SSG, tối ưu hóa hiệu suất và SEO.
- Convention over Configuration: Sử dụng nguyên tac "Convention overConfiguration" đê giảm việc cau hình va tang toc qua trình phat triên.
- Plugin System: Cung cấp hệ thống plugin giúp tích hợp các tính năng bổ
sung vào dự án một cách dễ dàng.
Trang 23Tran Thiện Hải - BI9DCPT071 9Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
- Virtual DOM và Hiệu Suất: Sử dụng Virtual DOM để tối ưu hóa hiệu suất,
giúp giảm thời gian load trang và tạo trải nghiệm người dùng mượt mà.
- Community Lớn va Ecosystem Mạnh Mé: Có một cộng đồng lớn, day đủ tài
nguyên học và nhiều thư viện hỗ trợ Ecosystem của React bao gồm nhiều công cụ giúp phát triển ứng dụng một cách nhanh chóng.
2.6 ReactJS
2.6.1 Tổng quan
Khái niệm:
ReactJS là một thư viện JavaScript mã nguồn mở, được phát triển bởi
Facebook, giúp xây dựng giao diện người dùng động và tương tác trên các ứng dụng
Nó tập trung vào việc xây dựng các thành phan (components) tái sử dụng va
quản lý trạng thái (state) của ứng dụng một cách hiệu quả.Thay vì làm việc trên toàn
ứng dụng web, ReactJS cho phép các nhà phát triển có thé phá vỡ giao diện người dùng phức tạp một cách thuận lợi thành các thành phần đơn giản.
Đặc điểm nỗi bật của ReactJS so với các framework front-end khác:
- Thư viện Component Reusable: React cho phép bạn xây dựng các thành
phan (components) có thé tái sử dụng Điều này giúp tối ưu hóa mã nguồn, giảm độ
phức tạp va tăng khả năng bao trì.
- Virtual DOM: React sử dụng Virtual DOM để tối ưu hóa hiệu suất Thay vì cập nhật toàn bộ DOM mỗi khi có thay đổi, React chỉ cập nhật những phần cần thiết Điều này giúp giảm tải cho trình duyệt và tăng tốc độ hién thị trang.
- One-way Data Binding: Dữ liệu chuyên động một chiều từ cha đến con, giúp
quản lý trạng thái (state) dễ dàng và tránh tình trạng xung đột.
Trang 24Tran Thiện Hải - BI9DCPT071 10Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
- Thư viện Hỗ trợ Mạnh Mé: Có một cộng đồng lớn và phong phú, hỗ trợ bởi nhiều thư viện và công cụ bên thứ ba như Redux, React Router, Jest, va nhiều công
cụ khác.
Điểm mạnh của React.js dễ thấy nhất là phan Component:
- React.js chia nhỏ các phần của trang thành từng phan riêng biệt dé xử lý, gọi
là component, giúp dễ quan lý, dé sử dụng ở nhiều nơi.
- Mỗi khi dữ liệu được cập nhật mới, thay vì thay đổi nguyên trang, thì React.js sẽ giúp thay đổi chi component liên quan, việc nay sẽ tối ưu rất nhiều thời
gian làm mới dtr liệu.
- Đặc biệt là hầu hết các component thường dùng đã được phát triển và chia
sẻ, chỉ cần cài đặt và sử dụng.
=> Kết luận: Dựa trên tính chất của đề tài "Xây dựng website quảng bá và đặt tour du lịch," ReactJS có thé coi là sự lựa chọn phù hợp để xây dựng front-end cho
dé tài Sự linh hoạt, dé sử dụng, hiệu suất cao, vả cộng đồng hỗ trợ đông đảo của
ReactJS hoàn toàn có thé giúp xây dựng một trang web nỗi bật và hấp dẫn cho việc
quảng bá và đặt tour du lịch.
2.6.2 Componenfs
Trong ReactJS, components (các thành phan) là các khối xây dựng độc lập và
tái sử dụng của giao diện người dùng Chúng được coi như các khối xây dựng riêng
biệt, có thé chứa HTML, JSX, CSS, va logic JavaScript.
React thúc đây phương pháp phân chia giao diện thành các thành phan nhỏ
hơn, dé quan ly hơn, giúp mã nguồn trở nên dé đọc và bảo trì hơn Mỗi component
có thê chứa trạng thái (state) và nhận các giá trị đầu vào từ props.
Cách đơn giản dé viết 1 component trong React là viết 1 JavaScript function.
2.6.3 State
State trong React là một phan quan trong của mỗi component, cho phép lưu
trữ và theo dõi các dữ liệu có thé thay đổi trong suốt thời gian khi ứng dụng hoạt động Nó giữ những thông tin mà giao diện cần hiển thị và phản ánh những thay đồi người dùng tạo ra Khi state thay đôi, React sẽ tự động cập nhật giao diện để phản
ánh những thay đổi đó mà không cần phải thao tác thủ công State hoạt động như bộ "não" giúp ứng dụng có thé tương tác và thay đổi theo thời gian.
2.6.4 Các sự kiện và xử lý sự kiện- Các Sự Kiện (Events) Trong React:
React hỗ trợ hầu hết các sự kiện HTML thông qua cú pháp tương tự Một số sự kiện phổ biến bao gồm onClick, onChange, onSubmit, onMouseOver, và nhiéu su
tên khác.
Trang 25Tran Thiện Hải - B19DCPTO71 11D6 an tot nghiép Dai hoc Chuong 2 Co sé ly thuyét
- Xu Ly Su Kién (Handling Events):
Truyén hàm xử lý sự kiện: Truyền một hàm xử lý sự kiện cho thuộc tính tương ứng của thành phần Hàm này sẽ được gọi khi sự kiện diễn ra.
Truyền tham số vào hàm xử lý sự kiện: Đôi khi chúng ta cần truyền thêm thông tin cụ thé vào hàm xử lý sự kiện Dé làm điều này, chúng ta cần bọc hàm xử lý
sự kiện bên trong một hàm khác.2.6.5 React Router
React Router là một thư viện bên thứ ba cho React được sử dung dé quản lý việc điều hướng và chuyền đổi giữa các trang (routes) trong ứng dụng React Nó cho phép tạo các liên kết, định tuyến, và quản lý trạng thái điều hướng trong ứng dụng
Cài dat React Router : npm install react-router-dom
Cac khai niém quan trong lién quan dén React Router:
- BrowserRouter: BrowserRouter là một thành phan cung cấp bởi React Router dé bọc toàn bộ ứng dụng Nó sử dụng HTMLS history API dé đảm bảo URL thay đổi khi bạn điều hướng qua các trang.
- Route là một thành phan dé xác định cách hiển thị nội dung dựa trên URL Mỗi Route sẽ kiểm tra xem URL hiện tại có khớp với định tuyến nào hay không và hiền thị nội dung tương ứng Một Route thường có 2 thuộc tính: path=" " xác định đường dẫn mà định tuyến sẽ được kích hoạt khi URL hiện tại khớp với nó; component={ }: xác định component mà sẽ được hiển
thị khi định tuyến được kích hoạt.
- URL Parameters: Dùng để định tuyến đến các URL có tham sé bằng cách sử dụng dấu hai chấm (:) Ví dụ:
<Route path="/blog/:id" component={BlogDetail} />
Trong vi dụ này, :id là một tham số động Khi URL trùng khớp với định tuyến
nay, React Router sẽ truyền tham số id vào thành phần BlogDetail.
Link: Link là một thành phần để tạo liên kết điều hướng trong ứng dụng Nó thay thé thẻ <a> thông thường và không làm tải lại trang khi nhấn vào.
2.6.6 Hooks
Hooks là một tính năng cua React phiên bản 16.8 trở lên, cho phép sử dụngtrạng thái và các tính năng của React như vòng đời và hành vi của class components
trong các functional components Điêu này giúp việc viết code trở nên dễ dàng hơn,dé đọc hơn và dé kiểm tra hơn.
Một số hooks quan trọng trong React: useState, useEffect, useContext,
Trang 26Trần Thiện Hải - B19DCPTO071 12Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
Trong dé tai này, em sử dụng 3 hooks chính là useState, useEffect và
- useState: useState cho phep su dung va quan ly trang thai trong functionalcomponents Nó trả về một cặp giá trị: trang thái hiện tai và một ham décập nhật trạng thái đó.
- useEffect: useEffect được sử dụng để thực hiện các tác vụ liên quan đến
vòng đời của component (component lifecycle) trong functional
components Điều nay bao gồm việc thực hiện các tác vu sau khi
component đã được render hoặc trước khi component bi hủy bỏ.
- useParams: được sử dung để trích xuất các tham số từ đường link URL.
Khi sử dụng React Router dé tạo các đường dẫn động với tham số, ví dụ
như /users/:id, thì useParams sẽ giúp trích xuất giá trị của tham số id từ
2.6.7 React Icons
“react-icons" là một tap hợp các biểu tượng vector hỗ trợ trong React Nó cho phép chúng ta sử dụng các biểu tượng phổ biến từ nhiều thư viện biểu tượng khác nhau mà không cần phải tạo các hình ảnh hoặc thẻ SVG riêng lẻ Thư viện này giúp tăng hiệu suất ứng dụng và tiết kiệm thời gian trong việc tạo giao diện.
Cài đặt: npm install react-icons
Import react-icons: Chúng ta có thể import các biểu tượng từ thư viện
"react-icons" và sử dụng chúng trong mã nguồn Ví du: import biểu tượng hình máy bay và
sử dụng nó trong component:
import { BsAirplane } from "react-icons/bs"2.7 Back-end
2.7.1 Khai niém
Backend là phần của một ứng dụng chịu trách nhiệm xử ly logic, lưu trữ dữ liệu và tương tác với cơ sở đữ liệu Nó thường là phần "đăng sau" của một trang web hoặc ứng dụng di động mà người dùng không thấy được, nhưng đóng vai trò quan trọng trong việc duy trì chức năng của hệ thống.
2.7.2 Đặc điểm
Một vài điểm quan trọng về back-end:
- Xử ly Logic: Backend thực hiện logic kinh doanh của ứng dụng, xác định
cách dữ liệu nên được xử lý và trả về cho người dùng.
- Quản lý Dữ liệu: Nó tương tác với cơ sở dữ liệu để lưu trữ và truy xuất thông
Trang 27Tran Thiện Hải - BI9DCPT071 13Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
- Bao mat: Backend chịu trách nhiệm đảm bảo rằng dữ liệu được xử lý và lưu trữ an toàn, đồng thời quản lý quyền truy cập.
- Xử lý yêu cầu từ Frontend: Backend nhận các yêu cầu từ phía frontend (giao
diện người dùng) và trả về đữ liệu hoặc thông báo tương ứng 2.7.3 Một vài framework hỗ trợ
a Django
Django là một framework Python mạnh mẽ được thiết kế dé tao ra ứng dụng web nhanh chóng và linh hoạt Nó tuân thủ nguyên tắc "batteries-included," đi kèm với nhiều tính năng tích hợp sẵn.
Đặc Điểm:
- Mô hình ORM mạnh mẽ giúp tương tác với cơ sở dit liệu.- Hệ thống admin
san có giúp quản lý dữ liệu dé dàng.
- URL routing và middleware giúp kiểm soát quy trình xử lý yêu cầu.
b ExpressJS
Express.Js là một framework backend cho Node.Js, tập trung vào việc xây
dựng ứng dụng web và API một cách đơn giản và linh hoạt.
Đặc Điểm:
- Middleware giúp xử lý yêu cầu và phản hồi.
- Routing linh hoạt cho phép xác định các endpoint của ứng dung.
- Hỗ trợ mô hình MVC thông qua các thư viện bên ngoài.
c Spring Boot (Java)
Spring Boot là một phan của hệ sinh thái Spring Framework, được thiết kế dé tạo ra ứng dụng Java nhanh chóng với cau hình mặc định.
Đặc Điểm:
- Tích hợp sẵn với Spring, giúp quản ly dependencies và cau hình một cách dé dàng - Hé trợ mô hình MVC và cung cấp RESTful API thông qua Spring MVC.
- Spring Boot Starter giúp khởi tạo dự án nhanh chóng với các cau hình mặc định.
d Laravel (PHP)
Laravel là một framework PHP mà mục tiêu là tối giản hóa quá trình phát triển và mang lại trải nghiệm dé sử dụng cho lập trình viên.
Trang 28Tran Thiện Hải - BI9DCPT071 14
Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
Đặc Điêm:
- Mô hình MVC được tích hợp sẵn, giúp tạo ra các ứng dụng có cấu trúc rõ
- Eloquent ORM giúp tương tác với cơ sở dữ liệu một cách thuận lợi.
- Artisan Console giúp thực hiện các công việc như tao migration, seeding dữ
liệu một cách dễ dàng.
e NestJS
NestJS là một framework mã nguồn mở để phát triển ứng dụng server-side (backend applications) bằng ngôn ngữ TypeScript hoặc JavaScript Nó được xây dựng trên cơ sở của Node.js và sử dụng các khái niệm từ TypeScript để tạo ra một môi trường phát triển hiện đại và mạnh mẽ cho việc xây dựng các ứng dụng web và
Đặc điêm:
- TypeScript Everywhere: NestJS sử dung TypeScript, giúp tạo ra mã nguồn dễ đọc, kiểm soát lỗi trước khi chạy, và hỗ trợ autocompletion mạnh mẽ.
- Modularity: Mã nguồn NestJS có thé được tô chức thành các module nhỏ, giúp quản lý mã nguồn dễ dàng và tái sử dụng.
- Dependency Injection: NestJS sử dung Dependency Injection dé quản lý và
tổ chức mã nguồn Điều nay giúp giảm sự phụ thuộc và làm cho mã nguồn linh hoạt
- Middleware và Interceptors: Middleware giúp xử lý yêu cầu và phản hồi
trước khi chúng đến các endpoint Interceptors cho phép thực hiện các tác vụ trung
tâm như logging.
- ORM (TypeORM): NestJS tích hợp tốt với TypeORM, một ORM mạnh mẽ
cho TypeScript/JavaScript Giúp quan lý cơ sở dữ liệu một cách thuận lợi.
- Testing: NestJS cung cấp bộ testing tích hợp sẵn, giúp kiểm thử ứng dụng
một cách hiệu quả.2.8 NestJS
2.8.1 Tổng quan
NestJS là một framework Node.JS cho phép xây dựng ứng dụng phía server.
NestJS là sự kết hợp bởi OOP(Object Oriented Programming), FP(Functional
Programming), FRP(Functional Reactive Programming) Nest mở rộng các
framework Node.js như Express hay Fastify dé bổ sung thêm nhiều module hay thu
^ x ^ ~ A
"ho ‘a e L) mo irame Q m ON _mo fabbhaYe,
TypeScript và rat linh hoạt dé xây dựng các hệ thống backend.
Trang 29Tran Thiện Hải - BI9DCPT071 15Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
Đặc điểm nỗi bat của NestJS so với các framework front-end khác:
- TypeScript Integration: Với TypeScript, NestJS cung cấp kiểu dir liệu tinh,
giúp giảm lỗi và tăng tính dự đoán trong quá trình phát triển.
- Thiết kế theo hướng đối tượng (OOP): NestJS sử dụng các nguyên tắc OOP giúp tạo ra mã nguồn có tổ chức, dé bảo trì và mở rộng.
- Cau trúc Mô-đun và Dependency Injection: NestJS sử dụng cấu trúc mô-đun giúp phân chia ứng dụng thành các thành phan độc lập Dependency injection giúp
quản lý và tái sử dụng mã nguồn một cách hiệu quả.
- Middleware và Pipes: NestJS hỗ trợ middleware và pipes, giúp kiểm soát các
yêu cầu và xử lý dữ liệu trước khi chúng đến tay các controller Điều này làm tăng
tính linh hoạt của ứng dụng.
- Mạnh mẽ với GraphQL và REST API: NestJS hỗ trợ cả GraphQL và REST
API, giúp chọn lựa theo yêu cầu của dự án.
Điểm mạnh của NestJS dễ thấy nhất là sự kết hợp linh hoạt giữa TypeScript và cấu trúc của nó, cùng với các tính năng mạnh mẽ như Modularity ( Cấu trúc
modulized giúp mã nguồn có tô chức, dé bảo trì, tái sử dung), Dependency Injection
( tạo mã linh hoạt va dé kiểm thử) hay Decorators ( đánh dau các thành phan của ứng dụng, giảm độ phức tạp của mã nguồn).
=> Kết luận: Nhìn chung với những điểm mạnh như sử dụng TypeScript,
OOP, cấu trúc mô-đun và sự hỗ trợ đa dạng cho GraphQL và REST API, NestJS là
một sự lựa chọn tốt cho việc xây dựng website quảng bá và đặt tour du lịch thông
qua việc phân chia rõ ràng các đối tượng quản ký và chức năng, đặc biệt là khi kết
hợp với ReactJS.
Trang 30Trần Thiện Hải — B19DCPT071 16
Đồ án tốt nghiệp Dai học Chương 2 Cơ sở lý thuyết
2.8.2 Các thành phần
Trong NestJS, có một số thành phần chính quan trọng như sau:
- Modules: Modules là các đơn vị tổ chức mã nguồn trong NestJS Mỗi ứng dụng NestJS chứa ít nhất một module gốc (root module), va module này có thé chứa các module con Modules giúp tao ra cau trúc tổ chức rõ ràng và cho phép bạn quan ly các phụ thuộc giữa các thành phan.
- Controllers: Controllers là thành phần chịu trách nhiệm xử lý yêu cầu và phản hồi từ client Chúng định tuyến các yêu cầu đến các phương thức tương ứng trong service và xử lý logic nghiệp vu Controllers sử dung decorator dé xác định các
endpoint và định dang dtr liệu.
- Providers: Providers là các thành phần cung cấp dịch vụ trong NestJS Chúng có thé là services, repositories, gateways hoặc các thành phần khác cần thiết để xử lý logic nghiệp vu Providers được chia sẻ và sử dụng trong controllers,
services và các thành phần khác của ứng dụng.
- Services: Services là thành phần thực hiện logic nghiệp vụ của ứng dụng.
Chúng thường gắn liền với một module và sử dụng providers dé thực hiện các tác vụ
cụ thê Services thường được sử dụng trong controllers để xử lý logic nghiệp vụ phức
- Middleware: Middleware là các hàm trung gian được thực thi trước hoặc sau
khi yêu cầu di qua controller Chúng có khả năng thay đổi yêu cầu hoặc phản hồi,
thực hiện các xử lý chung hoặc áp dụng các chính sách bảo mật.2.8.3 TypeORM
Khái niệm
TypeORM là một ORM (Object-Relational Mapping) được sử dụng phô biến
trong NestJS dé tương tác với cơ sở dit liệu Với TypeORM, chúng ta có thé định
nghĩa các entity, tao migrations, tao repository và thực hiện các truy van dit liệu phức tạp TypeORM hỗ trợ nhiều tính năng và tích hợp tốt với TypeScript, giúp xây dựng
ứng dụng NestJS mạnh mẽ và linh hoạt.
Cài đặt: npm install @nestjs/typeorm
Các thành phần, tính năng hỗ trợ cho NestJS
TypeORM có một số thành phần và tính năng có thể hỗ trợ tốt cho NestJS:
- Entity: Trong TypeORM, Entity là một đại diện cho một bang trong cơ sở
dữ liệu Mỗi entity tương ứng với một bảng và các cột trong bảng đó Chúng ta có
thé tao ra các class trong NestJS và đánh dấu chúng là @Entity để định nghĩa các
entity.
Trang 31Tran Thiện Hải - BI9DCPT071 17
Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
- Migrations: Migrations là một tính năng quan trọng trong TypeORM cho
phép duy trì phiên ban cơ sở dit liệu Khi có thay đổi trong schema (bảng, cột, quan hệ, ), chúng ta có thé tạo ra migrations dé thực hiện các thay đổi này trong cơ sở dữ liệu một cách kiểm soát TypeORM cung cấp các câu lệnh để tạo, chạy và hủy
- Repository: Repository là một thành phan quan trọng trong TypeORM dé thực hiện các thao tác truy van dữ liệu Repository cung cấp các phương thức dé tạo, đọc, cập nhật và xóa dữ liệu từ cơ sở dữ liệu Chúng ta có thể tạo ra các repository trong NestJS dé tương tác với các entity và thực hiện các thao tác truy van dữ liệu.
- Kết nối với cơ sở dữ liệu: TypeORM hỗ trợ nhiều loại cơ sở đữ liệu như MySQL, PostgreSQL, SQLite, MSSQL, Chúng ta có thé cau hình kết nối với cơ
sở dit liệu trong file cau hình của NestJS (vi dụ: ormconfig.json) băng cách chỉ định loại cơ sở dt liệu, thông tin kết nối, và các tùy chọn khác.
- Query Builder: Query Builder là một tính năng của TypeORM cho phép xây
dựng các câu truy van dir liệu bằng cách sử dụng phương thức và cú pháp dé đọc Query Builder cho phép chúng ta thực hiện các truy vấn phức tạp và điều kiện lọc dữ
liệu một cách linh hoạt.
- Các quan hệ giữa các Entity: TypeORM hỗ trợ quan hệ giữa các Entity, bao
gồm quan hệ một-một (one-to-one), một-nhiều (one-to-many), nhiều-một
(many-to-one) và nhiéu-nhiéu (many-to-many) Bằng cách sử dung decorators như
@ManyToOne, @OneToMany và @ManyToMany, chúng ta có thé thiết lập và quản
ly quan hệ giữa các Entity trong ứng dụng NestJS của minh.
- Tích hợp với TypeScript: TypeORM được thiết kế dé tương thích tốt với
TypeScript, cho phép sử dụng các lợi ích của kiểu dữ liệu tĩnh và các tính năng của
TypeScript trong quá trình phát triển ứng dụng NestJS TypeORM sử dụng các
decorators dé đánh dấu các trường, quan hệ và phương thức trong các Entity, giúp
kiểm tra kiểu dữ liệu và tạo ra mã tĩnh.
2.8.4 Nodemailer
Khái niệm
Nodemailer là một thư viện trong Node.js giúp gửi email một cách dễ dàng.
Điều này có thể được sử dụng trong NestJS để thực hiện các tác vụ liên quan đến
email như xác nhận đăng ky, đặt lai mật khẩu, và các tình huống khác.
Cài đặt: npm install nodemailer
Trang 32Tran Thiện Hải - BI9DCPT071 18
Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
Đặc điềm
- Nodemailer ho trợ nhiêu dịch vụ email và cung cap các tùy chon mở rộngcho việc tương tác với chúng.
- Dễ dàng tích hợp với các dịch vụ như Gmail, SendGrid, hay các máy chủ
SMTP tự lưu trữ.
Tính năng hỗ trợ cho NestJS
Mục đích chính của việc tích hợp Nodemailer trong NestJS là dé quản lý việc
gửi email trong ứng dụng Điều này có thể bao gồm việc gửi email xác nhận khi
người dùng đăng ký, thông báo quên mật khẩu, hoặc các tác vụ khác liên quan đến
gửi email trong ứng dụng của bạn.
2.8.5 Berypt
Khái niệm
Bcrypt là một thuật toán hashing được sử dụng dé bảo vệ mật khẩu Hashing
là quá trình biến đổi một chuỗi ký tự thành một giá tri cố định, không thể đảo ngược.
Berypt thường được sử dụng dé lưu trữ mật khẩu một cách an toàn hơn so với các
phương pháp hashing khác như MDS hoặc SHA-1.Cài đặt: npm install bcrypt
Đặc điểm
Đặc điểm chính của Berypt là khả năng làm chậm quá trình hashing thông qua
việc thực hiện nhiều lượt hashing, điều này làm tăng độ khó cho việc tấn công
Tính năng hỗ trợ cho NestJS
Mục đích chính của việc sử dung Berypt trong NestJS là bảo vệ mật khẩu
người dùng Khi người dùng đăng ký hoặc cập nhật mật khẩu, mật khâu của họ sẽ
được hash bằng Berypt trước khi lưu vào cơ sở dit liệu Khi kiểm tra đăng nhập,
Bcrypt được sử dụng để so sánh mật khẩu đã nhập với mật khẩu đã được hash trong
cơ sở đữ liệu.
2.8.6 Passport và JWTKhái niệm
Passport là một middleware authentication cho Node.js, được sử dụng rộng rãi
trong các ứng dụng Express và NestJS Nó giúp quản lý quá trình xác thực người
Trang 33Trần Thiện Hải - B19DCPT071 19
Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
JWT (JSON Web Token) là một tiêu chuẩn mở dé tao ra một cách an toàn dé
truyền thông tin giữa hai bên dưới dạng JSON Trong ngữ cảnh của xác thực người
dùng, JWT thường được sử dụng dé tao token khi người dùng đăng nhập thành công Token này sau đó được gửi với mỗi yêu cau từ client đến server dé chứng thực người
Đặc điểm của Passport là khả năng tích hợp dé dang với các chiến lược xác
thực khác nhau, cũng như cung cấp cơ sở ha tang dé quản lý quá trình đăng nhập và
xác thực.
JWT có đặc điểm chính là kích thước nhỏ, dễ parse, và có thể chứa các thông tin tùy chỉnh Token nay có thé được ký và xác thực dé đảm bảo tính toàn vẹn của nó.
Tính năng hỗ trợ cho NestJS
Mục đích của việc sử dung Passport và JWT trong NestJS là xây dựng một hệ
thống xác thực an toàn và linh hoạt Passport giúp quản lý các chiến lược xác thực, trong khi JWT cung cấp một cách an toàn để chứng thực và xác nhận danh tính của
người dùng một cách hiệu quả.2.9 TypeScript
2.9.1 Khái niệm
TypeScript là một ngôn ngữ kịch ban (script) mã nguồn mở do Microsoft phát triển, kế thừa từ nền tang của JavaScript và bô sung khả năng làm việc với các kiêu dữ liệu tĩnh (static type) TypeScript có thé sử dụng dé phát triển các ứng dụng chạy
ở cả client-side (Angular2) và server-side (NodeJS) TypeScript sử dụng tat cả các
tính năng của của ES6 như classes, modules.
NestJS sử dụng TypeScript làm ngôn ngữ chính dé phát triển ứng dụng Với TypeScript, NestJS cung cap các lợi ich của kiểu đữ liệu tĩnh và định kiểu mạnh, giúp giảm thiểu lỗi trong quá trình phát triển, cung cấp trợ giúp tự động và cung cấp tài liệu chi tiết về mã nguồn.
2.9.2 Tính năng hỗ trợ cho NestJS
Trang 34từ các trình biên dịch va IDEs Trong NestJS, việc sử dụng TypeScript giúp tạo ra mãnguôn rõ ràng, dé đọc và dê bao trì.
Tran Thiện Hải - BI9DCPT071 20Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
- Type Inference: TypeScript có khả năng suy luận kiểu tự động Khi sử dụng NestJS,
TypeScript sẽ tự động suy ra kiểu đữ liệu cho các đối tượng, phương thức, tham SỐ, và giá trị trả về Điều này giúp giảm việc lặp lại khi định kiểu và tăng tính nhất quán
của mã nguồn.
- Object-oriented Programming (OOP) Features: TypeScript hỗ trợ các tính năng của
lập trình hướng đối tượng như classes, inheritance, interfaces, abstract classes và
access modifiers Trong NestJS, chúng ta có thé sử dung các tính năng này dé xây dựng module, controllers, services và các thành phần khác theo mô hình OOP, tạo ra mã nguồn có cau trúc rõ ràng và dé bảo trì.
- Compile-time Type Checking: TypeScript kiểm tra kiêu di liệu tại thời gian biên dịch, giúp phát hiện và báo lỗi các lỗi kiểu dữ liệu trước khi chạy ứng dụng Điều này giúp giảm số lượng lỗi thời gian chạy và tăng tính ôn định của ứng dụng.
- Type Annotations va Interfaces: TypeScript cho phép định kiểu cho biến, tham sé, đối tượng và giá trị trả về bằng cách sử dụng type annotations hoặc interfaces Trong
NestJS, việc sử dung type annotations và interfaces giúp dam bao tính nhất quán và kiểm soát dữ liệu khi làm việc với các DTO, models, controllers và services.
2.10 Swagger
2.10.1 Khái niệm
Swagger là một công cụ phát triển API và tài liệu API tự động Nó cho phép tạo và hiển thi tài liệu API đưới dang trang web tương tác, giúp tăng tính tương tác và hiểu rõ hơn về các endpoint, tham số, phản hồi và các tài nguyên được hỗ trợ bởi
2.10.2 Tính năng hỗ trợ cho NestJS
+ Tao tài liệu API tự động: Swagger cho phép tạo tài liệu API tự động dựa trên mã
nguồn của ứng dụng Nó thu thập thông tin về các endpoint, các tham số, các phản hồi và các tài nguyên liên quan dé tao ra tài liệu chi tiết về API.
+ Hiển thị tài liệu API tương tác: Swagger UI cung cấp một giao diện tương tác cho
tài liệu API Nó giúp người dùng hiểu rõ hơn về các endpoint, các tham số, các phản
hồi và các tài nguyên được hỗ trợ bởi API Người dùng có thé thử nghiệm và gửi yêu
cầu API trực tiếp từ giao diện này.
+ Hỗ trợ định dạng mô ta API: Swagger hỗ trợ các định dang mô ta API phô biến
như OpenAPI Specification (OAS) và JSON Schema Điều này giúp dé dang chia sẻ
và sử dung tai liệu API với các công cụ khác nhau.
Trang 35+ Hỗ trợ kiếm thử API: Swagger UI cung cap khả năng thử nghiệm và kiểm tra API
trực tiêp từ giao diện Người dùng có thê gửi yêu cau API và xem các phản hôi được
trả về Điều này giúp trong việc kiểm tra và xác nhận tính chính xác của API.
Trần Thiện Hải - B19DCPT071 21Đồ án tốt nghiệp Đại học Chương 2 Cơ sở lý thuyết
+ Tích hợp dé dàng: Swagger tích hợp tốt với các framework phát triển web phố
biến như NestJS, Express, và Node.js Nó cung cấp các thư viện và trình phân tích
mã nguồn dé sinh tài liệu API tự động từ mã nguồn ứng dụng.
{+ swagger nntp:/petstore swagger io/v2/swagger json es
Trang 36Trần Thiện Hải — B19DCPTO71 22
Đồ án tốt nghiệp Đại học Chương 3 Phân tích và thiết kế hệ thống
CHUONG 3 PHAN TÍCH VA THIẾT KE HỆ THONG
3.1 Khảo sát, phân tích sản phẩm, luồng sử dung của người dùng
3.1.1 Mục tiêu của sản phẩm
- Mang đến cho người dung một website đặt tour du lịch với giao diện thân
thiện và đầy đủ các chức năng cơ bản cần thiết phải có
- Tăng trải nghiệm cho người dùng, đặc biệt là trong quá trình tìm kiếm
tour, đặt tour
- Cung cấp cho người dùng các dữ liệu, thông tin về du lịch một cách đầy đủ, chính xác va thực tế
3.1.2 Kiến trúc hệ thống
a Mô hình kiến trúc Client — Server
Hệ thống của em sử dụng mô hình kiến trúc Client — Server Đây là một mô
hình giao tiếp phổ biến giữa các máy tính, gồm một máy chủ (Server) và nhiều
máy khách (Client) kết nối với nhau Máy chủ xử lý yêu cầu từ các máy khách và trả về kết quả tương ứng Điều này giúp tăng tính ổn định, bảo mật va quản lý trong hệ thống Mỗi bên có một vai trò rõ ràng: máy chủ cung cấp dịch vụ hoặc tài nguyên, trong khi máy khách yêu cầu và sử dụng chúng.
Ưu điểm của mô hình kiến trúc này là các truy cập được bảo mật, giúp cho
việc chia sẻ dữ liệu dễ dàng hơn khi ở xa, không phụ thuộc và công nghệ, ngônngữ lập trình, bảo trì dé dàng.
Nhược điểm lớn nhất của mô hình kiến trúc này là sức chịu tải của server
khi có quá nhiều yêu cầu từ nhiều máy khách
- Server: Bao gồm cơ sở dữ liệu và hệ thống cung cấp api được cung cấp
- Client: Giao điện người dùng được xây dựng và các chức năng thé hiện
trên giao diện.
b Phương thức giao tiếp giữa Client — Server
Phương thức giao tiếp giữa Client và Server là cách mà thông tin và yêu cầu được truyền tải giữa hai bên trong kiến trúc Client-Server Hệ thống của em sử dụng phương thức giao tiếp thông qua Web API (Application Programming
V 7
a VU 4 °
liệu), PUT (cập nhật dữ liệu), DELETE (xóa dir liệu), cho phép client va server dễ
Trang 37dàng giao tiếp, trao đổi thông tin, dir liệu được web api trả lại ở dạng JSON
(Javascript Object Notation) thông qua giao thức HTTPS hoặc HTTP.
Trần Thiện Hải — B19DCPT071 23
Đồ án tốt nghiệp Đại học Chương 3 Phân tích và thiết kế hệ thống
Cụ thé trong dé tài "Xây dựng website quảng bá và đặt tour du lich sử dung
ReactJS và NestJS" của em, giao tiếp giữa Client (ReactJS) và Server (NestJS)
sử dụng các công nghệ phé biến cho phương thức giao tiếp giữa Client — Server
như sau:
- RESTful API: Sử dụng RESTful API để xây dựng các endpoint cho việc
quảng bá và đặt tour du lịch Chăng hạn:
+ GET /tours: Lay danh sách các tour
+ GET /tours/:tourld: Lay thông tin chỉ tiết của một tour cụ thé
+ POST /tours: Tạo mới một tour
+ PUT /tours/:tourld: Cập nhật thông tin của một tour
+ DELETE /tours/:tourld: Xóa một tour
- Quản lý Trạng Thái (State Management): Sử dụng Redux va Context API
dé quan lý trang thai của ứng dụng, đặc biệt là khi tương tác với dữ liệu từ
API Khi dữ liệu từ API được nhận, cập nhật trạng thái dé render lại giao
dién nguoi dung.
- Giao Tiếp với Server: Sử dung Axios dé gửi yêu cầu HTTP đến các API
endpoint trên server Xử ly dữ liệu nhận được từ server và cập nhật trang
thái để render lại giao diện.
- API va Endpoint: Xây dựng các API endpoint sử dụng NestJS dé cung cấp dữ liệu và chức năng cho frontend Chang han Endpoint như /api/tours sẽ trả về danh sách các tour.
- Middleware và Logger: Sử dụng middleware dé xử lý yêu cau, ví dụ như xác thực người dùng Logger middleware để ghi log thông tin về các yêu cầu và phản hồi.
- Bảo Mật: Xác thực người dung, sử dung token hoặc session dé dam bảo
chỉ người dùng được ủy quyền mới có thể truy cập các API.
- Truy Cập Cơ Sở Dữ Liệu: Sử dung ORM (ObJect-Relational Mapping)
trong NestJS dé tương tác với cơ sở dữ liệu, ví dụ như TypeORM.
- Docker: Sử dụng Docker đê đóng gói ứng dụng cùng với mọi phụ thuộc
và triển khai đễ dàng trên nhiều môi trường.
Trang 38Tran Thiện Hải - BI9DCPT071 24Đồ án tốt nghiệp Đại học Chương 3 Phân tích và thiết kế hệ thống
3.1.3 Danh sách các chức năng của hệ thống
Đối với Admin:
- Xem, thêm, sửa, xóa các tour, điểm đến, tin tức du lịch
- Xem danh sách các tour du lịch người dùng đặt
- Xem danh sách các người dùng
- Xem số liệu thống kê Đối với người dùng:
- Đăng nhập, đăng xuất, đăng ký
- Quên và khôi phục mật khâu băng mã OTP
- Xem trang chủ, trang loại tour, trang chỉ tiết từng tour, trang điểm đến,
trang tin tức,
- Lọc tour, tìm kiếm điểm đến, tin tức
- Quản lý thông tin cá nhân- Đặt tour
- Xem tour đã đặt
3.1.4 Danh sách các đối tượng quản lý
- Người dùng ( tên, email, mật khẩu, số điện thoại, địa chỉ, )
- Loại tour ( tour miền Bắc, miền Nam, châu Âu, ) - Tour ( tên, giá, lịch trinh, thời gian, điểm đến )
- Điểm đến ( tên, mô tả, )
- Tin tức du lịch
- Đơn đặt tour
Trang 39Tran Thiện Hải - BI9DCPT071 25
Đồ án tốt nghiệp Đại học Chương 3 Phân tích và thiết kế hệ thống
3.1.5 Phân tích luồng sử dụng chính của người dùng
hệ thông bao lỗi
thành công Xem danh sách
chưa có tải khoản
hệ thông báo lỗi
dat tour
kiểm tra va điện cácthông tin cần thiết
thành công
Theo dõi tinh Xác nhận đặt tour Xem chỉ tiết tourtrang tour đã đặt
hệ thông báo lỗi
Hình 3.1 Sơ đồ luồng sử dụng chính của người dùng
3.2 Phân tích, thiết kế hệ thong
3.2.1 Sơ đồ usecase
a Sơ đồ usecase tông quan
Trang 40Xem danh sách
Xem dach sách tour, tour, điểm đãn, tinđiểm đến, tin tức tức, người dùng
Đồ án tốt nghiệp Đại học Chương 3 Phân tích và thiết kế hệ thống
b Sơ đồ usecase về tài khoản
Đăng nhập
Người dùng Admin
Usecase 3.2 Tài khoản
c Sơ đồ usecase về tour