Đặc biệt cảm ơn anh Lê Ry Gút và anh Nguyễn Thiện Hải đã nhiệt tình hướng dẫn, chỉ bảo, hỗ trợ em trong quá trình thực tập; Cảm ơn anh Nguyễn Thiện Hải đã trainning cho em về TypeORM, và
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
BACKEND DEVELOPER VỚI NESTJS
Công ty thực tập : Công ty Cổ Phần TGL Solutions
Người phụ trách : Lê Ry Gút
Thực tập sinh : Trương Hoàng Nam
TP Hồ Chí Minh, tháng 12 năm 2020
Trang 2LỜI MỞ ĐẦU
Ngày nay, Internet là một phần không thế thiếu trong đời sống của chúng ta Từ giải trí, mua sắm, học tập, báo chí, đều có mặt trên internet Đặc biệt hơn, trong năm vừa qua, thế giới đối mặt với một thách thức mới mang tên Corona Đại dịch Corona, càng khiến cho chúng ta cần phải số hóa, sử dụng internet để trao đổi thông tin nhiều hơn Với nhu cầu đó, internet nói chung, và website nói riêng đều ngày càng phát triển để đáp ứng những nhu cầu của người dùng
Sau ba năm học tập ở trường, với mong muốn có thêm kinh nghiệm thực tế, và học hỏi ở môi trường doanh nghiệp Vậy nên, em đã quyết định đi thực tập tại Công ty Cổ phẩn TGL Solutions - đây là một môi trường hiện đại, cởi mở, giúp em trau dồi các kiến thức khi là thực tập sinh
Trang 3LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty Cổ Phần TGL Solutions đã tạo điều kiện cho em có
cơ hội được thực tập tại công ty
Trong thời qua, nhờ sự chỉ dẫn nhiệt tình của anh chị trainer, em đã tiếp thu được những kiến thức hiểu rõ hơn về cách vận hành một website và cách xây dựng, viết code, đến cả deploy một trang web thực tế Chân thành cảm ơn các anh chị trong nhóm trainer đã bỏ ra nhiều thời gian,công sức để hướng dẫn chúng em hoàn thành đợt thực tập này
Đặc biệt cảm ơn anh Lê Ry Gút và anh Nguyễn Thiện Hải đã nhiệt tình hướng dẫn, chỉ bảo, hỗ trợ em trong quá trình thực tập; Cảm ơn anh Nguyễn Thiện Hải đã trainning cho em về TypeORM, và NestJS; Cảm ơn anh Lê Ry Gút đã giúp em hòa nhập vào công trường trong công ty; Cảm ơn anh Trần Hoàng Sơn và anh Nguyễn Xuân Nghiêm đã giúp đỡ em trong quá trình làm việc
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều kiện em làm bài báo cáo này
Trương Hoàng Nam Tp.HCM, ngày 28 tháng 12 năm 2020
Trang 4NHẬN XÉT CỦA KHOA
Trang 5
MỤC LỤC
Chương 1: Giới thiệu công ty thực tập 6
1 Giới thiệu công ty Cổ Phần TGL Solutions 6
2 Sản phẩm của công ty 6
Chương 2: Nội dung thực tập 7
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty cài đặt phần mềm, môi trường 7
2 Nghiên cứu kỹ thuật 7
2.1 Các công cụ làm việc 7
2.2 Tìm hiểu ngôn ngữ TypeScript 8
2.3 Tìm hiểu NestJS, GraphQL và TypeORM 8
2.3.1 Tìm hiểu NestJS 8
2.3.2 Tìm hiểu GraphQL 9
2.3.3 Tìm hiểu về TypeORM 9
3 Thực hiện project 10
4 Lịch làm việc 10
Chương 3: Chi tiết về Project 12
3.1 Giới thiệu về dự án 12
3.1.1 Mục đích 12
3.1.2 Một số API chính phục vụ cho hệ thống 12
3.2 Thực hiện 13
3.2.1 Người thực hiện 13
3.2.2 Quá trình thực hiện 14
Giai đoạn tìm hiểu dự án 14
Giai đoạn phát triển 14
Kết quả 14
TỔNG KẾT 15
TÀI LIỆU THAM KHẢO 16
NestJS 16
TypeORM 16
GraphQL 16
Trang 6Chương 1: Giới thiệu công ty thực tập
1 Giới thiệu công ty Cổ Phần TGL Solutions
Công ty cổ phần TGL Solutions được thành lập năm 2019, là công ty đang hợp tác với công ty skyACE của Nhật Bản để tạo ra những sản phẩm, dịch vụ mới
Với ba phương châm Speed, Smart và Simple Solutions, công ty luôn đưa ra sản phẩm nhanh chóng và thông minh đến khách hàng Đáp ứng các như cầu của khách hàng
Công ty tạo ra một môi trường tư duy làm việc trẻ, năng động sáng tạo và khuyến khích thế mạng của bản thân Đây là một môi trường đang để rèn luyện, học hỏi và làm việc
2 Sản phẩm của công ty
Công ty Cổ phần TGL Solutions đưa ra những sản phẩm dựa trên yêu cầu của khách hàng, trong số đó, những sản phẩm thuộc vào các mảng như website, app mobile, AR
Một số sản phẩm có thể kể đến như: Shuho System, Rebate King, Doboku-Uo, Dental Clinic, Mirai Ichi, Mail Management System,…
Trang 7Chương 2: Nội dung thực tập
Trong đợt thực tập lần này, để biết thêm về những công nghệ mới, em đã xin thực tập tại
vị trí backend developer với công nghệ sử dụng là NestJS
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty cài đặt phần mềm, môi trường.
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ài đặt công cụ làm việc.
Đượ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, quy trình làm việc, cách thức tổ chức của công ty
Thực tập sinh đượ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, các quy định cần phải tuân thủ, cách sử dụng các công cụ trong quá trình làm việc…
Cuối cùng, thực tập sinh cài đặt các môi trường cần thiết cho quá trình thực tập, như Git, SourceTree, Microsoft Team
Kết quả : Hiểu về công ty Cổ phần TGL Solutions, quá trình thành lập và phát triển Biết
về quy trình làm việc Biết thêm về các công cụ mới
2 Nghiên cứu kỹ thuật
2.1 Các công cụ làm việc
Thời gian : 1 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, anh supervisor đã giới thiệu các công cụ và cách sử dụng các công cụ trong quá trình làm việc, trong số đó có thể kể đến là: Gitlab - đây là một Version Control System dùng để quản lý source code khi phát triển dự án theo team; SourceTree là một phần mềm hữu ích cho phép thao tác với git thông qua giao diện; Visual Studio Code và một số extention hữu ích có trên Visual Studio Code; Microsoft Team - dùng để trao đổi, lên lạc giữa mọi người trong công ty
Trang 8Thực hiện : Thực hành sử dụng các phần mềm đã nêu trên.
Kết quả : Sử dụng được các công cụ nêu trên.
2.2 Tìm hiểu ngôn ngữ TypeScript
Thời gian : 4 ngày
Nội dung : Tìm hiểu ngôn ngữ TypeScript.
- Sự khác nhau giữa TypeScript và JavaScript
TypeScript là một dự án mã nguồn mở do Microsoft phát triển, đây được xem là phiên bản nâng cao của JavaScript TypeScript đưa lập trình hướng đối tượng, bổ sung các tùy chọn kiểu tĩnh cho JavaScript Và TypeScript có cú pháp tường minh hơn JavaScript, nó giúp cho việc code và đọc code trở nên dễ dàng hơn
- Cách biên dịch code TypeScript thành JavaScript
Về cơ bản, code TypeScript sẽ được biên dịch thành code JavaScript trước khi chạy TSC là dùng để biên dịch code TypeScript thành JavaScript
- Các kiểu dữ liệu trong TypeScript
Các biến, tham số hay giá trị trả về của một hàm được viết tường minh thông qua các kiểu dữ liệu được định sẵn trong TypeScript như: string, number, boolean, array, enum, void
- Lập trình hướng đối tượng trong TypeScript:
Hướng đối tượng cũng là một điểm mạnh trong TypeScript Trước đó JavaScript chỉ cho lập trình hàm, TypeScript đã bổ sung các khái niệm OOP trong cho JavaScript như: Kế thừa, đóng gói, constructor, abstract class, interface,
Thực hiện :
- Tìm hiểu ngôn ngữ TypeScript dưới sự chỉ dẫn của anh supervisor, với nền tàng JavaScript đã có sẵn từ trước
- Báo cáo tìm hiểu
Kết quả :
- Biết về ngôn ngữ TypeScript
2.3 Tìm hiểu NestJS, GraphQL và TypeORM
2.3.1 Tìm hiểu NestJS
Thời gian: 6 ngày
Trang 9Nội dung: Tìm hiểu Framework NestJS
- “A progressive Node.js framework for building efficient, reliable and scalable server-side applications.” đây là một Framework Node.js tiến bộ để xây dựng ứng dụng phía máy chủ một cách hiệu quả, đáng tin cậy và dễ dàng mở rộng
- Với NestJS chúng ta có thể viết bằng Javascript hoặc Typescript, ngôn ngữ mặc định là Typescript
Thực hiện:
- Tìm hiểu Framework NestJS Cách cài đặt NestJS, cách khởi tạo một project với NestJS
- Tìm hiểu cấu trúc source trong NestJS, mỗi service được viết như một module
Thực hiện:
- Tạo thử project mới bằng NestJS
- Viết mototj module trong NestJS, kiểm tra các API xem đã trả về đúng dữ liệu
Kết quả:
- Có kiến thức về NestJS
- Có thể xây dựng ứng dụng phía backend với NestJS
2.3.2 Tìm hiểu GraphQL
Thời gian: 3 ngày
Nội dung: Tìm hiểu GraphQL
- Là ngôn ngữ truy vấn dữ liệu cho API
- GraphQL khác với Restful API ở chỗ chúng ta có thể tùy chỉnh những biến trả về Điều này giúp giảm kích thước payload bằng cách loại bỏ những field không cần thiết khi trả data về
- Cách cấu hình GraphQL trong ứng dụng NestJS
Thực hiện:
- Tìm hiểu GraphQL dưới sự chỉ dẫn của anh Supervisor
- Cấu hình GraphQL vào trong ứng dụng NestJS
- Thực hành viết 1 API đơn giản với NestJS sử dụng GraphQL
Kết quả:
- Có kiến thức về GraphQL
- Có thể cấu hình GraphQL trong ứng dụng NestJS
2.3.3 Tìm hiểu về TypeORM
Thời gian: 2 ngày
Nội dung: Tìm hiểu về TypeORM
Trang 10- TypeORM là một ORM có thể chạy trên NodeJS, React Native, Browser, và có thể sử dụng Typesript hoặc Javascript để viết code TypeORM hỗ trợ rất nhiều loại cơ sở dữ liệu quan hệ như: MySQL, Oracle, SQL Server, Postgres, ngoài ra, nó còn có hỗ trợ NoSQL là MongoDB
- Đây là một ORM cho các ứng dụng Node.js cực kỳ mạnh mẽ Nó giúp cho quá trình phát triển nhanh hơn
Thực hiện:
- Cấu hình TypeORM vào ứng dụng NestJS
- Thực hành kết nối đến Oracle Database và tạo schema bằng kỹ thuật code first
- Tạo migration khi thực hiện thay đổi trên code
Kết quả:
- Có kiến thức cơ bản về TypeORM
- Tạo được các schema, tạo quan hệ giữa các thực thể
- Có kiến thức về Migration trong TypeORM
3 Thực hiện project
Sau một tháng tìm hiểu về các công nghệ, sinh viên đã có kiến thức cơ bản về NestJS, GraphQL, TypeORM và một số kiến thức khác được tích lũy trong thời gian này Thời gian tiếp theo, sinh viên được tham gia vào một dự án thực tế của công ty tên là Questionnaire App
4 Lịch làm việc
Tuần Công việc Người hướng 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 Lê Ry Gút, anh Nguyễn Thiện Hải
2 - Tìm hiểu ngôn ngữTypeScript Anh Lê Ry Gút,Anh Nguyễn Thiện
Hải
3 - TìmNestJS. hiểu về Anh Lê Ry Gút,Anh Nguyễn Thiện
Trang 114 - TìmGraphQLhiểu vềvà
TypeORM
Anh Nguyễn Thiện Hải
5
- Tìm hiểu dự án
Questionnaire
- Tìm hiểu về server
và các deploy lên
server
Anh Nguyễn Xuân Nghiêm, anh Trần Hoàng Sơn
6
- Tìm hiểu về kiểm
thử API với
Postman
- Tìm hiểu về chứng
thực bằng token với
JWT
- Viết module auth
questionnaire
- Kiểm thử module
auth
Anh Nguyễn Xuân Nghiêm, anh Trần Hoàng Sơn
7
- Viết module maker
cho dự án
- Kiểm thử module
maker
Anh Nguyễn Xuân Nghiêm, anh Trần Hoàng Sơn
8
- Viết module
product cho dự án
Subscription trong
GraphQL
- Làm chức năng
realtime voting
Anh Nguyễn Xuân Nghiêm, anh Trần Hoàng Sơn
9
- Làm chức năng
thống kê
- Kiểm tra lại toàn bộ
chức năng
Anh Nguyễn Xuân Nghiêm
10 - Deploy backend dựán Anh Nguyễn XuânNghiêm, anh
Nguyễn Thiện Hải
Trang 12Chương 3: Chi tiết về Project.
3.1 Giới thiệu về dự án.
Đầu tiên, Questionnaire App là một dự án thực tế của công ty Đây là một website cho phép người dùng có thể bình chọn sản phẩm mà mình yêu thích.
Questionnaire sử dụng framework NestJS để viết backend Các API được viết dưới dạng GraphQL APIs.
3.1.1 Mục đích
Questionnaire App cho phép người dùng bình chọn sản phẩm mà họ yêu thích trong hội chợ Mirai Ichi Từ những bình chọn này, các nhà cung cấp sản phẩm có thể phân tích để đưa ra những chiến lược kinh doanh phù hợp với doanh nghiệp của mình.
3.1.2 Một số API chính phục vụ cho hệ thống
API login
- Cho phép người dùng đang nhập vào hệ thống bằng cách chứng thực JWT token.
APIs Maker:
- Với API createMaker, quản trị viên có thể thêm một nhà cung cấp vào hệ thống.
- Với API updateMaker, quản trị viên có thể update một nhà cung cấp có trong hệ thống.
- Với API deleteMaker, quản trị viên có thể xóa một nhà cung cấp ra khỏi hệ thống.
- Với API makers, quản trị viên có thể lấy ra danh sách nhà cung cấp có trong hệ thống
- Với API makerById, quản trị viên có thể lấy ra nhà cung cấp bằng Id.
APIs Product
- Với API createProducts, quản trị viên thêm sản phẩm vào hệ thống
- Với API updateProducts, quản trị viên có thể chỉnh sửa thông tin sản phẩm có trong hệ thống
- Với API deleteProduct, quản trị viên có thể xóa sản phẩm ra khỏi hệ thống
- Với API productById, quản trị viên có thể lấy sản phẩm bằng Id sản phẩm
- Với API products, quản trị viên có thể lấy tất cả sản phẩm có trong hệ thống
Trang 13- Với API productByEventId, người dùng có thể xem các sản phẩm có trong sự kiện đang diễn ra
APIs Event
- Với API createEvent, quản trị viên có thể tạo một sự kiện mới.
- Với API updateEvent, quản trị viên có thể chỉnh sửa thông tin của một sự kiện.
- Với API deleteEvent, quản trị viên có thể xóa một sự kiện.
- Với API addProductsIntoEvetn, quản trị viên có thể thêm các sản phẩm vào sự kiện cho khách hàng bình chọn.
- Với API events, quản trị viên có thể lấy được danh sách các sự kiện.
- Với API listEvent, người dùng có thể xem được các sự kiện đang diễn ra.
APIs Vote
- Với API vote, người dùng có thể bình chọn sản phẩm mình yêu thích
- Với API voted, quản trị viên có thể xem biết được sản phẩm được vote API này cho phép quản trị viên nhận xem được sản phẩm nào được voted, ngay trong thời gian thực
3.2 Thực hiện
3.2.1 Người thực hiện.
- Phát triển API cho Questionnaire App: thực tập sinh Trương Hoàng Nam cùng với anh Nguyễn Thiện Hải.
Trang 14- Phối hợp cùng team frontend gồm anh Nguyễn Xuân Nghiêm và anh Trần Hoàng Sơn.
3.2.2 Quá trình thực hiện
Giai đoạn tìm hiểu dự án
- Tìm hiểu yêu cầu dự án.
- Trao đổi với anh supervisor và team frontend để thống nhất về công nghệ.
Kết quả:
- Thống nhất sự dụng ReactJS để viết frontend, và backend xây dựng bằng framework NestJS.
Giai đoạn phát triển
- Developer xem các tài liệu liên quan để tìm hiểu dự án.
- Team backend và frontend phối hợp với nhau để phát triển Khi có bất kỳ vấn đề nào, đưa vấn đề đó ra trao đổi và thảo luận Liên lạc với phía khách hàng để chốt các phương
án đưa ra.
- Sau khi developer hoàn thành công việc, QC sẽ thực hiện phần test để kiểm tra sản phẩm Nếu có bất kỳ sai sót nào thì trao đổi với nhóm developer và khách hàng để giải quyết.
Kết quả
- Hoàn thành các công việc được giao đúng thời hạn.
Trang 15TỔNG KẾT
Như vậy, trong vòng hơn hai tháng, em đã học hỏi và trãi nghiệm được nhiều thứ bổ ích Công ty đã giúp em học được các công nghệ hot hiện nay là NestJS, GraphQL, biết tổ chức làm việc nhóm, trao đổi, giúp đỡ nhau trong công việc Bên cạnh đó, em còn học được tác phong, trách nhiệm đối với nhiệm vụ được giao Những kiến thức và kinh nghiệm em tích lũy được trong thời gian qua vô cùng quý giá đối với bản thân
Chân thành cảm ơn sự giúp đỡ của các anh chị nhóm trainer, đặc biệt là anh Nguyễn Thiện Hải, anh Lê Ry Good, anh Nguyễn Xuân Nghiêm và anh Trần Hoàng Sơn
Em cũng xin cảm ơn quý thầy cô khoa Công nghệ Phần mềm đã dạy bảo, cung cấp cho
em những kiến thức nền tảng để có thể tham gia khóa thực tập của công ty Một lần nữa
em xin chân thành cảm ơn
Trang 16TÀI LIỆU THAM KHẢO NestJS
https://nestjs.com
TypeORM
https://typeorm.io/#/
GraphQL
https://graphql.org/