Đặc biệt, lời cảm ơn sâu sắc của em xin gửi tới công ty cổ phần Acexis, công ty đã tạođiều kiện cho em được thực tập và tham gia vào hoạt động của công ty để có thêm kiến thứccũng nh
Trang 1KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
FULLSTACK NESTJS & REACTJS
TP Hồ Chí Minh, tháng 07 năm 2020
Trang 2Trong thời đại công nghệ số hiện nay thì các ngôn ngữ lập trình Web chính là nền tảng
và chìa khóa của mọi hoạt động Một số ngôn ngữ lập trình web đã đời từ rất lâu, lúc đầu chỉ
là xây dựng những website thông tin cơ bản ở dạng văn bản cho cá nhân và doanh nghiệp.Với sự phát triển của khoa học kỹ thuật và nhu cầu ngày càng tăng những trang web đượchình thành với sự tương tác cao Theo thời gian nhiều công nghệ xây dựng website lần lượt rađời gần như hoàn hảo
Javascript đã và đang dần trở nên phổ biến, đi kèm với nó là rất nhiều sự thay đổi, khiến cho
bộ mặt của ngành phát triển web trở nên lung linh hơn Javascript bây giờ đã xuất hiện trên cảserver-side và cả mobile app, cùng với sức mạnh của nó ở client-side vốn dĩ đã rất mạnh mẽ,tạo nên một xu hướng mới, trào lưu mới trong lập trình
Việc phát triển Web đã có bước thay đổi đáng kể trong vài năm qua ReactJs và NestJs là mộttrong những mã nguồn mở mạnh mẽ có thể giúp lập trình viên mới tiếp cận nắm bắt được ýtưởng và dễ dàng phát triển được một website hoàn chỉnh Công ty cổ phần Acexis là công tychuyên về giải pháp công nghệ thông tin ứng dụng cho lĩnh vực Tự động hóa và Y tế Vớimong muốn được đóng góp sức mình, sử dụng kiến thức đã học để phục vụ cuộc sống, đónggóp cho lĩnh vực y tế Việt Nam nên em đã quyết định thử sức và gắn bó tại công ty cổ phầnAcexis
Trang 3LỜI CẢM ƠN
Để hoàn thành được đồ án này, trước tiên, em xin gửi lời cảm ơn chân thành đến toànthể giảng viên Trường Đại học Công nghệ Thông tin nói chung, các thầy cô trong Khoa Côngnghệ Phần mềm nói riêng đã tận tâm truyền đạt kiến thức, kinh nghiệm, chỉ dạy tận tình chochúng em từ những ngày đầu bước chân vào trường
Đặc biệt, lời cảm ơn sâu sắc của em xin gửi tới công ty cổ phần Acexis, công ty đã tạođiều kiện cho em được thực tập và tham gia vào hoạt động của công ty để có thêm kiến thứccũng như hoàn thành tốt được chương trình thực tập và em cũng xin cảm ơn tới anh TrầnTùng Dương, người đã đồng hành cùng em trong suốt kỳ thực tập qua Được sự hướng dẫntrực tiếp của anh cùng với sự tận tâm chỉ bảo, luôn theo sát và hỗ trợ hết lòng, gắn bó trongtừng chặng đường nhỏ trong khoảng thời gian này để giúp cho em hoàn thành tốt đồ án lầnnày
Cuối cùng, em cũng gửi lời cảm ơn tới thầy cô, anh chị, bạn bè trong Khoa Công nghệPhần mềm đã nhiệt tình hướng dẫn, góp ý về những thiếu sót cũng như chia sẻ những kinhnghiệm, tài liệu trong quá trình làm đồ án này cũng như trong suốt thời gian em học tập tạitrường
Đặng Minh Tiến
TP HCM, ngày 25 tháng 7 năm 2020
Trang 4NHẬN XÉT CỦA KHOA
Trang 5
MỤC LỤC
MỤC LỤC 5
Chương 1: Giới thiệu công ty thực tập 7
1 Giới thiệu công ty 7
2 Sản phẩm công ty 7
Chương 2: Nội dung thực tập 8
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 8
2 Nghiên cứu kỹ thuật 8
i Các công cụ làm việc 8
ii Tìm hiểu về javascript, html, css cơ bản 9
iii Rèn luyện tư duy giải thuật 9
iv Phát triển backend bằng nestjs 10
v Sử dụng API graphql kết hợp nestjs để xây dựng ứng dụng backend với cơ sở dữ liệu MongoDB 11
vi Phát triển frontend bằng reactjs và các thư viện hỗ trợ 11
3 Thực hiện project 11
4 Lịch làm việc 13
Chương 3: Chi tiết project 15
1 Giới thiệu về project 15
2 Thực hiện 15
2.1 Quản lý chi nhánh 16
vii Chức năng quản lý đơn vị cung cấp phần cơm 17
viii Chức năng quản lý món ăn 18
ix Chức năng quản lý thực đơn 18
x Chức năng đặt cơm 21
3 Kế hoạch 21
TÀI LIỆU THAM KHẢO 23
TỔNG KẾT 24
Trang 7Chương 1: Giới thiệu công ty thực tập
1 Giới thiệu công ty
Acexis là một công ty tư vấn chuyển đổi phần mềm, phần cứng và chuyển đổi kỹthuật số có trụ sở tại thành phố Hồ Chí Minh, Đà Nẵng và Nha Trang
Công ty cổ phần Acexis được thành lập vào năm 2018 với tư cách là một nhóm cácchuyên gia, nhà tích hợp hệ thống và là nhà phát triển ứng dụng đa ngành, Acexis hiện
là một nhóm chuyên gia về di động, web, dữ liệu và hệ thống nhúng với kinh nghiệmsâu rộng về thị trường phát triển phần mềm kinh doanh Là đối tác đáng tin cậy chocác công ty SME và MNC Việt Nam Acexis là công ty chuyên về giải pháp công nghệthông tin ứng dụng cho lĩnh vực Tự động hóa và Y tế
2 Sản phẩm công ty
• Phần mềm quản lý nhà thuốc INRX: Giải pháp quản lý phân phối và bán hàng cho các
công ty dược phẩm
• Phần mềm MD Conference: Giải pháp họp, tổ chức hội nghị trực tuyến.
• Phần mềm HRM: Quản lý nhân sự, KPI, tính lương doanh nghiệp
• Giải pháp nhà thông minh
• SPIROMETER & ACESPIRO APP: Giải pháp theo dõi sức khỏe, phổi của bạn được
quản lý thông qua ứng dụng di động
• Máy đo huyết áp
• Máy đo độ ẩm và nhiệt độ kỹ thuật số
Cùng các sản phẩm giải pháp khác đang được công ty phát triển …
Trang 8Chương 2: Nội dung thực tập
Đợt thực tập nhằm mục đích giúp sinh viên thực tập được đào tạo toàn diện về lậptrình web fullstack dựa trên nestjs và reactjs, đồng thời rèn luyện những kỹ năng mềm nhưlàm việc nhóm, thuyết trình, giao tiếp Tại công ty, sinh viên có cơ hội được học tập, khámphá và làm việc trong một môi trường phát triển phần mềm chuyên nghiệp
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian: 1 ngày
Nội dung: Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triển (như đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức của công ty.
Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm từ 8h30 sáng đến 18h từ thứ 2 đến thứ 6, các quy định cần phải tuân thủ, cách sử dụng email trong công việc…
Kết quả: Hiểu thêm về công ty Acexis, tầm nhìn nhìn sứ mệnh phát triển của
công ty Có thêm các kỹ năng về việc sử dụng email trong công việc, làm việc có kế hoạch, có kỷ luật, có trách nhiệm hơn.
2 Nghiên cứu kỹ thuật
Thời gian: 2 ngày
Nội dung: Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc.
Trong thời gian này, supervisor đã hướng dẫn thực tập sinh tìm hiểu về các công cụ sẽ giúp ích cho trong công việc sau này Một số phần mềm trong
số đó như VSCode – là một IDE phổ biến với lập trình viên Gitlab - công cụ
Trang 9quản lý code Hệ điều hành ubuntu – giúp xác thực nhanh bằng ssh key và hỗ trợ tốt nhất cho công việc.
Thực hiện: Thực hành sử dụng các công cụ trên.
Kết quả: Lập trình sử dụng các công cụ miễn phí, giúp dễ dàng kết hợp các
công cụ với nhau, sử dụng thành thạo gitlab và hệ điều hành ubuntu.
Thời gian: 10 ngày (2 tuần)
Nội dung: Được training về javascript, html, css cơ bản, những kiến thức quan
trọng cho việc phát triển giao diện website đồng thời rèn luyện được ngôn ngữ JS
- Học các thẻ, cấu trúc của một trang HTML
- Biết cách sử dụng CSS để làm đẹp giao diện
- Học cú pháp JS cơ bản
- Các kiến thức cơ bản về cú pháp, chức năng các lệnh trong javascript Nắmđược cách sử dụng map, foreach, filter, sort, reduce…
- Học các khóa training tại freecodecamp
- Hoàn thành các project trong 30 day vanilla js coding challenge
Thực hiện:
- Tham gia đầy đủ các buổi training của công ty
- Làm các bài thực hành, kiểm tra về kiến thức đã học
- Thực hiện bài test 2 tuần với kết quả 19/20đ (Sử dụng js, html, css thuần để giảiquyết các bài toán, game trong 1 ngày)
Kết quả:
- Nâng cao kỹ năng lập trình với ngôn ngữ javascript
- Có được những kiến thức quan trọng để bắt đầu học nestjs và reactjs
- Ngoài ra còn được biết thêm một số quy tắc trong việc viết code sao cho đúngchuẩn, dễ đọc, dễ hiểu
Thời gian: 10 ngày (2 tuần)
Nội dung: Sử dụng javascript để rèn luyện giải thuật và kỹ năng code
- Thực tập sinh được rèn luyện giải thuật và kỹ năng code tại codesignal
- Sử dụng thành thạo map, foreach, filter, sort, reduce…
- Áp dụng được các giải thuật: đồ thị, xử lý bit, regex, quay lui, cây…
Trang 10- Tham gia đầy đủ các buổi training của công ty.
- Làm các bài thực hành, kiểm tra về kiến thức đã học
- Được hệ thống chấm điểm trực tuyến và được review bởi người hướng dẫn trựctiếp hằng ngày
Kết quả:
- Nâng cao kỹ năng lập trình với ngôn ngữ javascript
- Rèn luyện và nâng cao được tư duy giải thuật
- Rèn luyện kỹ năng vấn đáp giải thuật với người hướng dẫn
Thời gian: 2 ngày
Nội dung: Tìm hiểu và sử dụng nestjs
Thực hiện:
- Tham gia đầy đủ các buổi training của công ty
- Làm các bài thực hành về nestjs đơn giản để biết cách ứng dụng
Kết quả:
- Hiểu biết được nestjs là gì, có thể triển khai đơn giản về một ví dụ nestjs
Trang 11v Sử dụng API graphql kết hợp nestjs để xây dựng ứng dụng backend với cơ sở dữ liệu MongoDB
Thời gian: 3 ngày
Nội dung:
- Tìm hiểu về graphql và biết cách triển khai graphql trong nestjs
- Nắm được ý tưởng và cách sử dụng jsonwebtoken để authenticate
- Hiểu về tiêu chí của một ứng dụng sử dụng NoSQL
- Biết cách sử dụng MongoDB và TypeORM để hỗ trợ tốt nhất
Thực hiện:
- Tham gia đầy đủ các buổi training của công ty
- Làm các bài thực hành CRUD cơ bản theo bộ tài liệu training của công ty vềGraphQL
Kết quả:
- Hiểu về graphql, so sánh được mức độ tiện lợi của graphql so với API restful
- Biết cách biết backend nestjs và sử dụng GraphQL
Thời gian: 5 ngày (1 tuần)
Nội dung: Tìm hiểu về reactjs, thực hành xây dựng app CRUD đơn giản ứng dụng
graphql và các thư viện hỗ trợ của nestjs
- Biết cách cài đặt một dự án ReactJs mới
- Sử dụng thư viện Ant Design
- Hiểu và nắm rõ được vòng đời component trong ReactJs
- Hiểu về router trong ReactJs
- Tích hợp được Apolo Client, HOC trong reactjs để sử dụng API GraphQL
- Biết sử dụng i18n để triển khai app đa ngôn ngữ
- Biết cách sử dụng các công cụ react tools để quản lý hiệu suất ứng dụng tốt hơn
Thực hiện:
- Tham gia đầy đủ các buổi training của công ty
Kết quả:
- Đạt được các mục tiêu đặt ra như trên
- Có đủ kiến thức để tự phát triển một website hoàn chỉnh
3 Thực hiện project
Sau một tháng rưỡi được training từ cơ bản như HTML, CSS, Javascript thuần, trảiqua các bài test đánh giá khả năng, cho đến được rèn luyện tư duy giải thuật và đượctraining công nghệ chính để phục vụ công việc như ReactJS, NestJs kết hợp GraphQL
Trang 12hiện một project về phần mềm đặt cơm cho doanh nghiệp sử dụng các công nghệ nóitrên để thực hiện.
Đây là project cuối cùng của khóa training và sát với công việc thực tế, mỗi thực tậpsinh sẽ được cung cấp tài liệu phân tích, được Leader của Project LunchApp (đang sửdụng thực tế trong công ty) theo dõi và đánh giá kết thực tập sinh
Toàn bộ kết quả làm bài của thực tập sinh sẽ được chạy qua cypress test để kiểm tratính đúng đắn
Chi tiết Project sẽ được nói ở phần sau
Trang 134 Lịch làm việc
dẫn
Mức độ hoàn thành
Nhận xét của người hướng dẫn
1 - Tìm hiểu về công ty,
cách tổ chức của công ty
- Làm quen với các công
cụ làm việc trong công ty
Anh Trần Tùng Dương (Trưởng phòngcông nghệ)
Hoàn thànhtốt
Nắm vững được cácyêu cầu được giao
Biết cách sử dụng
JS, HTML, CSS cănbản
Hoàn thànhtốt
Hoàn thành tốt cácproject training cănbản
3, 4 - Rèn luyện tư duy giải
thuật tại codesignal
- Báo cáo kết quả hằng
ngày và được review bởi
sếp
Anh Trần Tùng Dương
Hoàn thànhtốt
Hoàn thành tốt cácproblem trên codesignal
Hoàn thànhtốt
Học công nghệ mớinhanh
Nắm được các yêucầu cơ bản
Trang 14reactjs và các thư viện hỗ
trợ
Chin Chin tốt được vòng đời, các
triển khai cáccomponent
Sử dụng tốt các thưviện
7 - Thực hiện project thực
tập sau kết thúc training
Anh Trịnh Chin ChinAnh Trần Tùng Dương
Hoàn thànhtốt
Hoàn thành projectnhanh, kỹ và đạtđiểm đánh giá tốt
Hoàn thànhtốt
Đạt kết quả test 15/20 (frontend +backend) xếp hạng 2/17 người tham gia
Trang 15Chương 3: Chi tiết project
1 Giới thiệu về project
Phần mềm được chọn trong project thực tập lần này là “Phần mềm đặt cơmLunchApp”
Tại doanh nghiệp, do nhu cầu phục vụ cơm trưa hằng ngày cho nhân viên mà các công
ty cần biết được số lượng phần cơm và món ăn gì, để tiến hành đặt hàng ở đơn vị phục vụcơm Công ty cổ phần Acexis là một trong những doanh nghiệp như vậy Với 3 chi nhánhlàm việc tại Đà Nẵng, Nha Trang, TP Hồ Chí Minh, bộ phận quản lý có nhu cầu xây dựngphần mềm đặt cơm cho toàn bộ công ty, dễ tính toán, thống kê, và thuận tiện làm việc vớiđơn vị cung cấp phần cơm
Tuy nhiên ở mức độ phần mềm dành cho việc kiểm tra kỹ năng của thực tập sinh Nênchỉ thực hiện các yêu cầu chức năng như: Quản lý chi nhánh, quản lý món ăn, quản lýthực đơn, quản lý đơn vị cung cấp thức ăn, quản lý đặt cơm dành cho nhân viên (có sửdụng công nghệ pubsub realtime data)
2 Thực hiện
Mỗi thực tập sinh sẽ cùng thực hiện một đề tài gồm đầy đủ các chức năng như trên để
dễ dàng có được những đánh giá phản ánh đúng nhất về kỹ năng của thực tập sinh tích lũyđược
Sau khi hoàn thành project, sản phẩm của thực tập sinh sẽ được review, chấm testcypress và được so sánh với bản LunchApp chính thức đang được sử dụng của công ty.Dưới đây là các kết quả đạt được do em hoàn thiện sản phẩm:
Trang 162.1 Quản lý chi nhánh
- Mô tả: Đây là chức năng cho phép thêm, xóa, sửa và xem thông tin các chi
nhánh của doanh nghiệp
Trang 17vii Chức năng quản lý đơn vị cung cấp phần cơm
- Mô tả: Đây là chức năng cho phép thêm, xóa, sửa và xem thông tin nhà cung cấp
thực phẩm Ở TP Hồ Chí Minh một doanh nghiệp có thể có nhiều chi nhánh tại khuvực này, Chính vì thế chức năng này cho phép gán nhà cung cấp với cả 1 hoặc nhiềuchi nhánh
- Đây là nội dung kiểm tra thực tập sinh có thể xây dựng được chức năng sử dụngmối quan hệ 1-N hay không
Trang 18viii Chức năng quản lý món ăn
- Mô tả: Chức năng quản lý món ăn của một nhà cung cấp thực phẩm.
ix Chức năng quản lý thực đơn
Trang 19- Người quản lý có thể chọn shop cơm cho từng site và có thể giới hạn được khảnăng đáp ứng số lượng tối đa của một món ăn.
- Ở Cùng một thời điểm, mỗi chi nhánh chỉ được công khai 1 menu duy nhất
- Khi người quản lý công khai một menu, nhân viên có thể tiến hành đặt cơm vàngười quản lý muốn chốt số lượng phần cơm sẽ khóa menu (những người dùng khácsẽ không thể cập nhật nữa) và tiến hành xuất báo cáo để gửi sang đơn vị cung cấp
(Hình ảnh: Menu được công khai sẽ được kí hiệu bằng dấu tick)
Trang 20(Hình ảnh: Menu chưa công khai, có thể điều chỉnh số lượng tối đa các món ăn)
Trang 21(Hình ảnh: Menu đã công khai và không thể điều chỉnh gì nữa)
x Chức năng đặt cơm
- Mô tả: Đây là chức năng đặt cơm có sử dụng kỹ thật realtime data để dữ liệu được
truyền tải thời gian thực, người dùng có thể theo dõi số lượng món ăn còn lại dễ dàng để cóthể chọn
- Đây là task kiểm tra kỹ năng thực tập sinh có nắm được kỹ năng làm ứng dụng realtimedata hay không Và cũng là chức năng có mối quan hệ N-N giữa các entity
3 Kế hoạch
Theo kế hoạch project này được làm trong khoảng 1 tuần rưỡi, tuy nhiên với tốc độtrung bình, em có thể hoàn thành 5 chức năng trong vòng 1 tuần bao gồm cả việc fix cácbug và vượt qua các test cypress trong lần đầu tiên chấm
Dưới đây là kết quả review của người phụ trách project sau khi đánh giá tổng quan cácbạn thực tập sinh