Đang tải... (xem toàn văn)
Công nghệ Web, là bản ngã của sự tiến bộ, khôngchỉ đáp ứng mà còn vượt qua mọi nhu cầu của con người, từ việcthương mại đến việc chia sẻ thông tin và tạo ra các trải nghiệmgiao tiếp tiên
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINKHOA CÔNG NGHỆ PHẦN MỀM
Trang 2LỜI MỞ ĐẦU
Trong thời kỳ cách mạng công nghiệp 4.0, sự bùng nổ của côngnghệ thông tin nói chung và ngành Công nghệ phần mềm nóiriêng đang định hình một bức tranh mới cho sự phát triển toàndiện của xã hội Công nghệ Web, là bản ngã của sự tiến bộ, khôngchỉ đáp ứng mà còn vượt qua mọi nhu cầu của con người, từ việcthương mại đến việc chia sẻ thông tin và tạo ra các trải nghiệmgiao tiếp tiên tiến.
Với hơn 1.5 tỷ trang web hiện tại, không có dấu hiệu nào cho thấysự giảm thiểu trong nhu cầu tạo ra những trang web mới, khiếncho thách thức của việc xây dựng một sản phẩm web đạt chấtlượng cao trở nên ngày càng phức tạp Để nổi bật trong mảng này,không chỉ về hình thức mà còn về nội dung, Full stack webdeveloper trở thành sự lựa chọn đúng đắn cho những người muốnđồng hành cùng sự đổi mới và sáng tạo trong ngành công nghiệpweb.
Sau những năm học tập tại đại học, khao khát áp dụng kiến thứcđã nắm bắt và tích lũy kinh nghiệm thực tế, quyết định tham giavào môi trường chuyên nghiệp là một bước quan trọng Công tySkydev đã được chọn là điểm đến lý tưởng, mang đến không chỉ sựchuyên sâu mà còn là cơ hội để thử thách bản thân và đưa ranhững đóng góp đáng giá trong sự phát triển không ngừng củangành công nghiệp web.
Trang 3LỜI CẢM ƠN
Em xin trân trọng gửi lời cảm ơn anh Võ Ngọc Duy đã tạo điều kiện cho em cơ hộiđược thực tập tại công ty Dù trong thời gian ngắn nhưng nhờ sự chỉ dẫn nhiệt tìnhcủa anh Duy, em đã tiếp thu những kiến thức quan trọng để có thể tham gia một dựán thực tế
Chân thành cảm ơn các anh chị trong team Backend Developer đã bỏ ra nhiều thờigian, công sức để hướng dẫn, hướng dẫn, giúp đỡ em tận tình trong khi làm quenmôi trường mới cũng như trong việc tiếp cận kiến thức công nghệ, kỹ năng lập trìnhvà tư duy sản phẩm để có thể thực hiện tốt dự án cá nhân và dự án thực tế trong thờigian qua
Em 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áo cáo này
TP HCM, tháng 12 năm 2023Trần Duy Khôi
Trang 5MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU CÔNG TY THỰC TẬP 8
1.1 Giới thiệu công ty Skydev 8
1.2 Sản phẩm công ty 9
1.2.1 Mạng xã hội Cafefinz 9
1.2.2 Kênh tin tức kinh tế, tài chính Investo 11
1.3 Lịch làm việc khi thực tập tại công ty 12
CHƯƠNG 2: NỘI DUNG THỰC TẬP 13
2.1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 13
2.2 Nghiên cứu kỹ thuật 13
Trang 7DANH MỤC HÌNH ẢNH
Hình 1.1 Logo công ty SkeDev 8
Hình 1.2 Website mạng xã hội Cafefinz 9
Trang 8CHƯƠNG 1: GIỚI THIỆU CÔNG TY THỰC TẬP1.1 Giới thiệu công ty Skydev
Hình 1.1 Logo công ty SkeDev
- Tên công ty: Công ty TNHH Skydev- Năm thành lập: 2021
- Địa chỉ: 19 Tố Hữu, Thủ Thiêm, Thành Phố Thủ Đức, Thành phố Hồ Chí
Minh, Việt Nam
- Website công ty: https://skydev.vn/
- CEO của công ty: anh Võ Ngọc Duy
- Skydev là công ty phần mềm Việt Nam luôn thấu hiểu nhu cầu của khách
hàng và thị trường Với kinh nghiệm làm việc trong lĩnh vực phát triển bất động sản và kinh doanh nước ngoài, chúng tôi giúp các đối tác/khách hàng của mình tiết kiệm thời gian, quản lý hoạt động kinh doanh của họ bằng cáchcung cấp cho họ Ứng dụng Web & Di động Hệ thống PropTech đầy đủ Sản phẩm của chúng tôi có thể hỗ trợ các nhà phát triển và đại lý bất động sản quản lý tài sản, doanh số bán hàng của họ cũng như tổ chức các sự kiện cho khách hàng của họ.
Trang 91.2 Sản phẩm công ty
1.2.1 Mạng xã hội Cafefinz
Hình 1.2 Website mạng xã hội Cafefinz
Hình 1.3 Ứng dụng di động mạng xã hội Cafefinz
Trang 10- Giới thiệu chung:
o CafeFinz được thành lập vào năm 2022 - với định hướng trở thành
diễn đàn về đầu tư và là nơi kết nối, giao lưu các nhà đầu tư Việt.
o Cafefinz tập trung và xoay quanh những nội dung, kiến tức và tin tức
về đầu tư Thêm vào đó, đây còn là nơi mà bạn có thể trình bày nhữngquan điểm cá nhân về đầu tư nói chung, và về đầu tư tài chính nói riêng.
o Bên cạnh đó, đến với diễn đàn bạn cũng có quyền tự do tạo những
chủ đề và bình luận những vấn đề về đầu tư, tham gia hỏi/đáp, tham khảo kiến thức, tham gia phân tích thị trường, các chủ đề về phân tíchthị trường nói chung.
o Cafefinz còn mang đến nhiều thông tin đầu tư với nhiều lĩnh vực và
chuyên mục khác nhau như quỹ đầu tư, bất động sản, phân tích kỹ thuật, hàng hóa, chứng khoán, vàng, dầu… Đây hứa hẹn sẽ là nơi mà nhà đầu tư có thể cập nhật ngay các xu hướng và tin tức mới nhất trênthị trường.
o CafeFinz đã và đang tích cực cải tiến hệ thống và sẽ luôn đặt mục tiêu
xây dựng nên một cộng đồng đầu tư lớn mạnh tại Việt Nam.
Trang 111.2.2 Kênh tin tức kinh tế, tài chính Investo
Hình 1.4 Website kênh tin tức Investo
- Giới thiệu chung:
o Investo là trang thông tin tổng hợp, tập trung vào các tin tức mới và
quan trọng có ảnh hưởng mạnh tới nền kinh tế toàn cầu nói chung và thị trường tài chính nói chung Nguồn thông tin của Investo luôn đượctổng hợp mỗi ngày và theo sát các vấn đề nóng hổi với mọi lĩnh vực, trải dài từ chứng khoán, ngoại hối, … tới tiền ảo, kinh tế - chính trị,
o Sức mạnh của thông tin luôn được khẳng định trong mọi ngành nghề,
và đối với một ngành đặc thù như tài chính thì việc nắm giữ được thông tin là nắm giữ được sức mạnh Nắm được xu thế và nhu cầu về một nguồn tin liên tục và đáng tin cậy, Investo được tạo ra bởi đội ngũ đầy nhiệt huyết, yêu thích sáng tạo và năng động.
o Sứ mệnh: Mục tiêu dài hạn của Investo là sẽ trở thành trang thông tin
đáng tin cậy đồng thời là nơi ghé thăm thường xuyên của cộng đồng giao dịch tài chính Ngoài ra, trong tương lai Investo cũng hướng tới việc giao lưu và trao đổi giữa tất cả nhà đầu tư và giao dịch ở mọi cấpđộ trong và ngoài nước Trở thành cầu nối để các nhà đầu tư có thể dễ
Trang 12dàng tham gia thị trường và đạt lợi nhuận cũng là một mục tiêu quan trọng của Investo.
- Một số tính năng chính:
o Xem các bài báo tin tức về kinh tế, tài chính.
o Phân loại tin tức theo từng lĩnh vực cụ thể (Điền điện tử, Vàng – Dầu,
Ngân hàng,…).
o Có những khóa học về chứng khoán, đầu tư, cổ phiếu,…
o Xem thông tin thực về giá cổ phiếu, lịch chia cổ tức,… của các công
ty trên thị trường.
1.3 Lịch làm việc khi thực tập tại công ty
- Em tham gia làm việc tại công ty bắt đầu từ ngày13/07/2023 tới 13/10/2023, các ngày làm việc trong tuần làtừ thứ 2 tới thứ 6
- Công việc hằng ngày bắt đầu từ lúc 8h30 đến 17h30 Thờigian nghỉ trưa khoảng 1 tiếng 30 phút từ 12h-13h30
- Công ty Skydev vận hành theo mô hình Agile Scrum nên sẽtổ chức Daily Meeting vào 9h30 hằng ngày Trong buổimeeting, mọi người sẽ báo cáo những công việc đã hoànthành được trong ngày hôm trước, những khó khăn và nhữngcông việc sẽ làm trong ngày hôm nay cho anh PO của team.
- Môi trường giao tiếp: tiếng Việt.
Trang 13CHƯƠNG 2: NỘI DUNG THỰC TẬP
2.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, quy trình chấmcông, họp nội bộ và khách hàng, văn hóa làm việc của công ty…Kết quả: Hiểu được cơ bản về cách hoạt động, quy trình phát triểnphầm mềm của công ty, nhiêm vụ hằng ngày và quy trình thựchiện…
2.2 Nghiên cứu kỹ thuật2.2.1 Tuần 1
o Giao tiếp, trò chuyện và tìm hiểu các thành viên khác
trong công ty.
o Nghiên cứu và tìm hiểu thêm một số kỹ thuật liên quan
khác như: Cron Job, Message Queue, Redis Cache, AWSS3…
o Làm một demo nhỏ theo yêu cầu của người hướng dẫn.
Trang 14- Kết quả:
o Nắm được tổng quan và cách áp dụng cơ bản của các
kỹ thuật trên.
o Xây dựng được một demo server các api của một ứng
dụng quản lý khu chăm sóc chó bằng frameworkNestJS, bao gồm:
Api đăng ký và đăng nhập
Api xem, thêm, xóa, sửa tài khoản cho Admin Api xem, thêm, xóa, sửa thông tin chó
Api nhận nuôi hoặc bỏ nhận nuôi chó Api xem, thêm, xóa, sửa chuồng
Api thêm chó vào chuồng hoặc cập nhật chó quachuồng khác
Api gửi mail xác nhận nhận nuôi chó Api đăng tải ảnh lên S3 của AWS
2.2.3 Tuần 3- Nội dung:
o Tìm hiểu source code của một số dự án mà công ty đã và đang làm.o Refactor lại một số chỗ trong source code Backend của dự án Investo.- Kết quả:
o Nắm được cấu trúc, cách tổ chức mã nguồn của một dự án Backend
và phong cách code của công ty.
o Một số chỗ của source code Backend của dự án Investor được refactor
lại giúp clean và có hiệu năng cao hơn.
Trang 15o Xây dựng API cho chức năng gửi mail thông báo của dự án Cafefinz
với điều kiện:
Gửi nhiều mail với nhiều nội dung khác nhau để đính kèm mãcho phép người dùng hủy đăng ký nhận mail.
Do số lượng mail gửi đi lớn nên phải set-up một RedisDatabase để đưa mail vào hàng đợi trong Redis rồi mới gửitheo từng lượt.
- Kết quả: Chức năng được hoàn thành tốt.
2.2.6 Tuần 6- Nội dung:
o Tham gia vào một dự án mới của công ty: dự án E-Commerce có tên
Rich Beauty Supply.
o Dựng source code của dự án Rich Beauty.
o Trao đổi, bàn bạc và đóng góp ý kiến trong việc xây dựng Database
cho dự án Rich Beauty Supply.
- Kết quả:
o Source code của dự án Rich Beauty Supply được dựng xong.o Database của dự án Rich Beauty Supply được tạo hoàn thành.
2.2.7 Tuần 7- Nội dung:
Trang 16o Tham gia xây dựng API cho một số module của dự án Rich Beauty
Supply như: Users, Banners, Products, Reviews,…
o Sửa một số lỗi do QC báo cáo lại.- Kết quả:
o Hoàn thành được các API cho một số module trên của dự án Rich
o Các lỗi do QC báo cáo được sửa hoàn thành.
2.2.8 Tuần 8- Nội dung:
o Xây dựng API cho các module Bookings và Booking_Payments cho
dự án Rich Beauty Supply.
o Tích hợp cổng thanh toán bằng thẻ tín dụng thông qua nhà cung cấp
dịch vụ Authorize.net
- Kết quả:
o Hoàn thành được các API cho các module trên.
o Tích hợp thành công cổng thanh toán thông qua Authorize.net và
nhận webhooks trả về mỗi khi thanh toán thành công hoặc thất bại.
2.2.9 Tuần 9- Nội dung:
o Xây dựng API cho tính năng tạo, sửa, xóa “Bài viết có dạng khảo sát”
( gồm câu hỏi, ảnh, nhiều lựa chọn và cho người dùng bình chọn,…)trong dự án Cafefinz.
o Sửa một số lỗi do QC báo cáo lại.
Trang 172.2.10 Tuần 10- Nội dung:
o Xây dựng API cho tính năng “Trang các nhân công khai” của dự án
Cafefinz, bao gồm:
Lấy thông tin cơ bản của tài khoản.
Lấy thông tin các nhóm tài khoản đã tham gia. Lấy thông tin bài viết mà tài khoản đã đăng tài. Lấy thông tin bình luận mà tài khoản đã đăng tải.
Sắp xếp bài viết và bình luận mà tải khoản đã đăng tải theomức độ tương tác.
o Tạo các API để Generate Sitemap của dự án Cafefinz phục vụ cho
o Xây dựng các API cho chức năng “Gửi hóa đơn thông
qua email” trong dự án Rich Beauty Supply.
o Xây dựng Middleware để phân quyền truy cập trong hệ
thống của dự án Rich Beauty Supply (Admin, Sale,Customer).
o Xây dựng các API giúp xuất file Excel về thông tin
khách hàng và đơn đặt hàng trong khoảng thời giannhất định.
Trang 18o Sửa một số lỗi do QC báo cáo lại.- Kết quả:
o Hoàn thành được các API cho tính năng “Gửi hóa đơn thông
qua email” trong dự án Rich Beauty Supply.
o Hoàn thành được Middleware để phân quyền truy cập trong
hệ thống của dự án Rich Beauty Supply.
o Hoàn thành các API giúp xuất file Excel về thông tin khách
hàng và đơn đặt hàng trong khoảng thời gian nhất định.
o Các lỗi do QC báo cáo được sửa hoàn thành.
2.2.12 Tuần 12- Nội dung:
o Tích hợp API từ Polygon (dịch vụ cung cấp API cho các dữ liệu về
giá cổ phiếu, thông tin tài chính, lịch chia cổ tức của các công ty trênthế giới) để đồng bộ dữ liệu trong dự án Investo, bao gồm:
Kéo dữ liệu về từ Polygon về và lưu vào Database và Airtable. Hằng ngày hoặc hằng tuần vào thời gian cố định kéo dữ liệu
(giá cổ phiếu, lịch chia cổ tức) từ Polygon để cập nhật vàoDatabase và Airtable.
Website lấy dữ liệu từ Airtable thông qua API để hiển thị.
o Sửa một số lỗi do QC báo cáo lại.- Kết quả:
o Hoàn thành được các API cho tính năng “Đồng bộ dữ liệu từ
Polygon” trong dự án Investo.
o Các lỗi do QC báo cáo được sửa hoàn thành.
Trang 192.3 Công nghệ sử dụng:2.3.1 Typescript:
- Tổng quan:
TypeScript là một ngôn ngữ lập trình mã nguồn mở được pháttriển bởi Microsoft, là một siêu set của JavaScript Nó cung cấp cáctính năng mạnh mẽ để phát triển ứng dụng JavaScript lớn và phứctạp hơn, giúp giảm rủi ro và tăng tính maintainable của mã nguồn.
Hình 2.5 Typecript
- Ưu điểm:
o Kiểu dữ liệu tĩnh (Static Typing): TypeScript sử dụng
kiểu dữ liệu tĩnh, giúp phát hiện lỗi kiểu trước khichương trình chạy, tăng tính tin cậy và dễ dàng duy trìmã nguồn.
o Tính mở rộng (Extensibility): TypeScript là một mở rộng
của JavaScript, do đó nó hỗ trợ tất cả các tính năng củaJavaScript và có thể sử dụng các thư viện JavaScripthiện có.
Trang 20o Quản lý mã nguồn (Code Organization): TypeScript hỗ
trợ module và namespace, giúp tổ chức mã nguồn mộtcách hiệu quả và làm cho mã trở nên dễ quản lý hơn.
o Hỗ trợ ES6 và ES7: TypeScript hỗ trợ các tính năng mới
từ ES6 và ES7, giúp người phát triển sử dụng nhữngtiện ích mới của JavaScript.
o Tooling tốt: TypeScript được tích hợp sẵn với nhiều IDEs
như Visual Studio Code, Sublime Text, và các công cụbuild như Webpack, giúp tăng hiệu suất làm việc.
- Nhược điểm:
o Kiểu dữ liệu tĩnh (Static Typing): TypeScript sử dụng
kiểu dữ liệu tĩnh, giúp phát hiện lỗi kiểu trước khichương trình chạy, tăng tính tin cậy và dễ dàng duy trìmã nguồn.
o Tính mở rộng (Extensibility): TypeScript là một mở rộng
của JavaScript, do đó nó hỗ trợ tất cả các tính năng củaJavaScript và có thể sử dụng các thư viện JavaScripthiện có.
o Quản lý mã nguồn (Code Organization): TypeScript hỗ
trợ module và namespace, giúp tổ chức mã nguồn mộtcách hiệu quả và làm cho mã trở nên dễ quản lý hơn.
o Hỗ trợ ES6 và ES7: TypeScript hỗ trợ các tính năng mới
từ ES6 và ES7, giúp người phát triển sử dụng nhữngtiện ích mới của JavaScript.
o Tooling tốt: TypeScript được tích hợp sẵn với nhiều IDEs
Trang 212.3.2 NestJS:- Tổng quan:
NestJS là một framework server-side (phía server) trên Node.js, được xây dựngdựa trên TypeScript và heavily được lấy cảm hứng từ Angular Nó cung cấp mộtcách hiệu quả để xây dựng ứng dụng server-side, đặc biệt là cho các ứng dụng webvà API.
Hình 2.6 NestJS
- Ưu điểm:
o Kiến trúc module hóa (Modularity): NestJS sử dụng kiến trúc module
hóa, giúp tạo ra các ứng dụng dễ dàng mở rộng và duy trì.
o Dependency Injection: NestJS hỗ trợ Dependency Injection, giúp
quản lý các thành phần và module trong ứng dụng một cách dễ dàng.
o Kiểu dữ liệu tĩnh (Static Typing): Như TypeScript, NestJS sử dụng
kiểu dữ liệu tĩnh, giúp phát hiện lỗi kiểu sớm và tăng tính đáng tin cậycủa mã nguồn.
o Middleware: Cung cấp middleware mạnh mẽ, giúp xử lý các yêu cầu
trước khi chúng được xử lý bởi các route chính.
o Support WebSockets: Hỗ trợ WebSockets cho các ứng dụng thời gian
o Testing dễ dàng: Có thư viện tích hợp sẵn cho việc kiểm thử (testing)
của ứng dụng, giúp việc kiểm thử trở nên dễ dàng hơn.
Trang 22o Hỗ trợ GraphQL và RESTful API: NestJS hỗ trợ cả GraphQL và
RESTful API, giúp lựa chọn linh hoạt cho phong cách phát triển API.
o Document Generation: Có thể tự động tạo tài liệu API thông qua
- Nhược điểm:
o Kiến trúc module hóa (Modularity): NestJS sử dụng kiến trúc module
hóa, giúp tạo ra các ứng dụng dễ dàng mở rộng và duy trì.
o Dependency Injection: NestJS hỗ trợ Dependency Injection, giúp
quản lý các thành phần và module trong ứng dụng một cách dễ dàng.
o Kiểu dữ liệu tĩnh (Static Typing): Như TypeScript, NestJS sử dụng
kiểu dữ liệu tĩnh, giúp phát hiện lỗi kiểu sớm và tăng tính đáng tin cậycủa mã nguồn.
o Middleware: Cung cấp middleware mạnh mẽ, giúp xử lý các yêu cầu
trước khi chúng được xử lý bởi các route chính.
o Support WebSockets: Hỗ trợ WebSockets cho các ứng dụng thời gian
o Testing dễ dàng: Có thư viện tích hợp sẵn cho việc kiểm thử (testing)
của ứng dụng, giúp việc kiểm thử trở nên dễ dàng hơn.
o Hỗ trợ GraphQL và RESTful API: NestJS hỗ trợ cả GraphQL và
RESTful API, giúp lựa chọn linh hoạt cho phong cách phát triển API.
o Document Generation: Có thể tự động tạo tài liệu API thông qua
2.3.3 TypeORM: