1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khóa luận develop transport management system and integrate document lookup regulations in logistics system administration

132 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

VIETNAM NATIONAL UNIVERSITY, HO CHI MINH CITY UNIVERSITY OF INFORMATION TECHNOLOGY FACULTY OF SOFTWARE ENGINEERING LE HOANG THINH VO DUC TRUNG HIEU GRADUATION THESIS DEVELOP TRANSPORT MANAGEMENT SYSTEM AND INTEGRATE DOCUMENT LOOKUP REGULATIONS IN LOGISTICS SYSTEM ADMINISTRATION ENGINEER IN SOFTWARE ENGINEERING HO CHI MINH CITY , 2023 VIETNAM NATIONAL UNIVERSITY HO CHI MINH CITY UNIVERSITY OF INFORMATION TECHNOLOGY FACULTY OF SOFTWARE ENGINEERING LE HOANG THINH - 19520285 VO DUC TRUNG HIEU - 19521515 GRADUATION THESIS DEVELOP TRANSPORT MANAGEMENT SYSTEM AND INTEGRATE DOCUMENT LOOKUP REGULATIONS IN LOGISTICS SYSTEM ADMINISTRATION ENGINEER OF SOFTWARE ENGINEERING INSTRUCTORS NGUYEN TRINH DONG HO CHI MINH CITY , 2023 GRADUATION THESIS MARKING COMMITTEE INFORMATION Graduation thesis judging committee, established under Decision No day of the Rector of the University of Information Technology ACKNOWLEDGMENTS We would like to express our sincere thanks to the lecturers of the University of Information Technology, especially the teachers of the Faculty of Software Engineering for facilitating and helping us complete this thesis First, we would like to sincerely thank the TS instructor Nguyen Trinh Dong for his dedicated help, orientation of thinking, direction of projects as well as scientific way of working These are very valuable suggestions not only in the process of implementing this subject project but also as a luggage for us to continue in the learning process and career development path in the future We would like to sincerely thank the reviewing lecturer for taking the time to support feedback and criticism so that we can draw valuable and better experiences in building and developing applications as well as in the graduation thesis At the same time, we would like to express our sincere thanks to the Committee of the Graduation Thesis Defense for providing valuable questions and suggestions that assisted us in finding the problem and assisting in the development of a better project In the process of making this project, we are not immune to errors, we look forward to receiving the guidance and suggestions of teachers to make the project more complete Thank you very much I wish you all the best to always accompany you Ho Chi Minh City, 20 June 2023 Student LE HOANG THINH VO DUC TRUNG HIEU TABLE OF CONTENTS Table of Contents Chapter GENERAL INTRODUCTION 14 1.1 Reason to choose the topic 14 1.2 Goal 15 1.3 Scope 15 1.3.1 Environmental range 15 1.3.2 Range of functions 16 1.4 Objects of use 16 1.5 Implementation methods 16 1.6 Technology platform 17 1.7 Expected results 17 1.8 Production 17 1.9 Development direction of the topic 18 1.10 Thesis structure 18 Chapter BACKGROUND 20 2.1 Technology used 20 2.1.1 Programming languages .20 2.1.2 Framework 23 2.1.3 Databases 25 2.1.4 Deploy 26 Chapter SYSTEM ANALYSIS AND DESIGN 29 3.1 3.1.1 System design 29 Use case view 29 3.1.2 Detailed use case specification .35 3.1.3 Process view 54 3.1.4 Deployment View 82 3.1.5 Implementation view 83 3.1.6 Data view 87 3.2 User interface 88 3.2.1 Web Apps for Transportation Managers 88 3.2.2 Android apps for drivers .101 3.2.3 Web application for tenant managers 115 Chapter Multi tenant management system 119 4.1 System analysis 125 4.2 Components and services 125 4.2.1 A single tenant infrastructure .125 4.2.2 Multi-tenant implementation system 131 PICTURE BIBLIOGRAPHY Figure 3-1 Use case diagram on the transportation manager's side 30 Figure 3-2 Use case diagram on the driver's side 31 Figure 3-3 Multi tenant system management side diagram 32 Figure 3-4 Sequential scheme "Login" 54 Figure 3-5 Sequential diagram "View all drivers" 55 Figure 3-6 Sequential scheme "Create a driver" 56 Figure 3-7 Sequential scheme "Search for drivers" 58 Figure 3-8 Sequential diagram "Update driver status" 58 Figure 3-9 Sequential diagram "View all products" 59 Figure 3-10 Sequential scheme "Search for products" 60 Figure 3-11 Sequential scheme "Creation of products" 61 Figure 3-12 Sequential diagram "View all delivery and receiving locations" 62 Figure 3-13 Sequential diagram "Search for delivery and receiving locations" 63 Figure 3-14 Sequential diagram "Create delivery and receiving locations" 64 Figure 3-15 Sequential diagram "View all routes" 65 Figure 3-16 Sequential diagram "Search for routes" 66 Figure 3-17 Sequential diagram "Create route" 67 Figure 3-18 Sequential diagram "View all transport" 68 Figure 3-19 Sequential diagram "Search for transport" 69 Figure 3-20 Sequential diagram "Creating a means of transport" 70 Figure 3-21 Sequential diagram "View all transport orders" 71 Figure 3-22 Sequential diagram "Search for transport orders" 72 Figure 3-23 Sequential diagram "Create transport order" 73 Figure 3-24 Operation diagram "Login" 74 Figure 3-25 Operation diagram "Create T" 75 Figure 3-26 Operation diagram "Search T" 76 Figure 3-27 Operation diagram "View all T" 77 Figure 3-28 "Select a route for an order" operation diagram 78 Figure 3-29 Operation diagram "Deliver orders to drivers" 79 Figure 3-30 Operation diagram "Order confirmation on the driver's side" 80 Figure 3-31 Operation diagram "Confirm transport status" 81 Figure 3-32 Package diagram (Services related to transportation operations)82 Figure 3-33 Android Application Architecture 84 Figure 3-34 Spring Boot application architecture 86 Figure 3-35 Entity-relationship diagram 87 Figure 3-36 Sign-in screen for transportation managers 88 Figure 3-37 Home screen (statistics) 89 Figure 3-38 Order list screen 90 Figure 3-39 Order creation screen (select list of products) 90 Figure 3-40 Order creation screen (select route) 91 Figure 3-41 Order creation screen (add order information) 91 Figure 3-42 Order detail screen 92 Figure 3-43 Commodity list screen 93 Figure 3-44 New commodity type creation screen 93 Figure 3-45 Commodity display (details) 94 Figure 3-46 Screen of the list of delivery and receiving locations 94 Figure 3-47 Screen to create a new delivery and receiving location 95 Figure 3-48 Delivery and receiving location screen (details) 96 Figure 3-49 Vehicle listing screen 96 Figure 3-50 Transport creation screen 97 Figure 3-51 Transport Vehicle Monitor (details) 98 Figure 3-52 Organization list screen 99 Figure 3-53 Organization creation screen 99 Figure 3-54 Organization screen (details) 100 Figure 3-55 Login Screen 101 Figure 3-56 Reset password screen 102 Figure 3-57 Vehicle pairing screen 103 Figure 3-58 Drawer screen 104 Figure 3-59 History screen 105 Figure 3-60 Choose date dialog 106 Figure 3-61 Account setting screen 107 Figure 3-62 Change password screen 108 Figure 3-63 Upcoming job screen 109 Figure 3-64 Next job screen 110 Figure 3-65 To pick up location screen 111 Figure 3-66 To pick up location (with map) screen 112 Figure 3-67 Location warning dialog 113 Figure 3-68 End work screen 114 Figure 3-69 Login screen (for tenant manager) 115 Figure 3-70 tenant list screen 116 Figure 3-71 New tenant creation screen 116 Figure 3-72 Tenant screen (details) 117 TABLE CATALOGUE Table 3-1 Functional specification "Login for transport management" 36 Table 3-2 Functional specification "Registration for transport management" 37 Table -3 Functional specification "Manage employees" 38 Table 3-4 Functional specification "Driver management" 39 Table 3-5 Functional specification "Management of delivery and receiving locations" 40 Table 3-6 Functional specification "Manage garages" 41 Table 3-7 Functional specification "Manage routes" 42 Table 3-8 Functional specification "Products management" 43 Table 3-9 Functional specification "Manage vehicles" 44 Table 3-10 Functional specification "Transport Order Management" 45 Table 3-11 Functional specification "View transport statistics" 46 Table 3-12 Functional specification "Login for drivers" 47 Table 3-13 Functional specification "Select orders for drivers" 47 Table 3-14 Functional specification "Change shipping status" 48 Table 3-15 Functional specification "Confirm vehicle’s status" 49 Table 3-16 Functional specification "View order history" 49 Table 3-17 Functional specification "Login for tenant management" 50 Table 3-18 Functional specification "View tenant list" 51 Table 3-19 Functional specification "Create tenant" 52 Table 3-20 Functional specification "View tenant information" 52 Table 3-21 Functional specification "Update tenant status" 53 118 Chapter Multi tenant management system 4.1 Introduction 4.1.1 Definition A multi-tenant system is an architecture that enables a single instance of an application or software to serve multiple clients or tenants simultaneously In this system, each tenant operates within their own isolated and independent environment, ensuring data privacy and resource separation Multi-tenancy has gained significant popularity in recent years due to its ability to efficiently utilize resources, reduce costs, and provide scalability and customization options Multi-tenancy refers to the architectural approach where a software application serves multiple clients or tenants using a shared infrastructure Tenants can be individual users, departments within an organization, or even separate organizations Each tenant has its own dedicated space and resources within the system, ensuring data isolation and security Here are the benefit of using multi-tenant system: • Cost Efficiency: By sharing infrastructure and resources, multi-tenant systems offer significant cost savings compared to maintaining separate single-tenant systems Tenants can enjoy the benefits of a feature-rich system without the burden of individual infrastructure costs • Scalability: Multi-tenant systems are designed to handle the growing needs of multiple tenants With efficient resource allocation and shared infrastructure, scaling the system to accommodate an increasing number of tenants becomes easier and more cost-effective • Customization and Personalization: Multi-tenant systems allow for varying levels of customization and personalization to meet the unique requirements of each tenant Customizations can range from simple branding and user interface modifications to more complex functionality adaptations, providing a tailored experience for each tenant • Efficient Resource Utilization: By sharing resources such as servers, databases, and infrastructure components, multi-tenant systems optimize resource utilization This leads to better efficiency in terms of hardware and software, reducing the overall environmental impact • Simplified Maintenance and Updates: With a single instance of the application serving multiple tenants, system maintenance, updates, and bug fixes become more streamlined Changes can be applied to the 119 shared infrastructure, minimizing downtime and reducing the effort required for maintenance activities 4.1.2 Types of multi tenant system Choosing the appropriate type of multi-tenancy depends on factors such as the level of data isolation required, customization needs, scalability requirements, and resource utilization goals It's important to consider these factors when designing and implementing a multi-tenant system It's worth noting that these types of multi-tenancy are not mutually exclusive, and hybrid approaches can also be implemented based on specific use cases For example, a system may employ database-level multi-tenancy for resource efficiency and schema-level multi-tenancy for enhanced customization options Understanding the different types of multi-tenancy helps in making informed decisions when designing and implementing a multi-tenant system In the following sections, we will explore the key components and considerations associated with multi-tenant architectures to ensure successful implementation and operation Multi-tenancy can be implemented in different ways depending on the level of isolation and customization required for each tenant Here are the common types of multi-tenancy: 4.1.2.1 Database-Level Multi-Tenancy A single database instance is shared among multiple tenants Each tenant has their own schema or namespace within the database, which provides data isolation Tables or records are typically tagged with a tenant identifier to ensure separation and access control This type of multi-tenancy allows for efficient resource utilization but may have limitations in terms of customization and scalability 120 4.1.2.2 Schema-Level Multi-Tenancy Each tenant has its own dedicated schema within the database Tenants share the same database instance but have separate schemas for their data This provides a higher level of isolation compared to database-level multi-tenancy Each tenant can have its own tables, views, and stored procedures, allowing for more customization Schema-level multi-tenancy provides a good balance between resource sharing and customization options 4.1.2.3 Application-Level Multi-Tenancy Multiple tenants share a single instance of the application Each tenant has their own isolated and independent space within the application Tenant-specific configurations, user interfaces, and workflows can be implemented Data for each tenant is usually stored in a shared database or separate databases Application-level multi-tenancy offers the highest level of customization and flexibility for each tenant but may require more resources 4.1.3 Key components Each of these components plays a crucial role in the successful operation of a multi-tenant system It is important to design and implement these components carefully, considering the specific requirements of tenants and the overall system objectives A well-designed multi-tenant system consists of several key components that work together to provide efficient and secure service to multiple tenants Here are the essential components: 4.1.3.1 Tenant Management • Tenant management component handles the registration, provisioning, and onboarding of new tenants into the system • It includes features such as tenant creation, user management, access control, and tenant-specific configurations • Tenant management ensures that each tenant has their own isolated environment and appropriate access rights 121 4.1.3.2 Data Isolation • Data isolation is a critical component in multi-tenant systems to ensure the privacy and security of tenant data • Mechanisms like database partitioning, schema separation, or virtualization techniques are used to keep tenant data isolated from each other • Robust access controls and encryption techniques should be implemented to prevent unauthorized access to tenant data 4.1.3.3 Security • Security is of paramount importance in a multi-tenant system to protect tenant data, applications, and infrastructure • It involves implementing strong authentication and authorization mechanisms to ensure that tenants can access only their own data • Additional security measures, such as encryption of data at rest and in transit, intrusion detection systems, and regular security audits, should be in place 4.1.3.4 Scalability • Scalability is crucial to handle the growing number of tenants and their increasing demands in a multi-tenant system • Horizontal and vertical scaling techniques can be employed to ensure that the system can handle the load and performance requirements • Technologies like load balancers, auto-scaling, and distributed computing can be utilized to achieve scalability 4.1.3.5 Customization • Customization is an important aspect of multi-tenant systems as it allows tenants to personalize the system according to their specific needs • The system should provide features such as tenant-specific configurations, branding, workflows, and user interface customization • A flexible architecture and extensibility options enable tenants to tailor the system to their requirements without affecting other tenants 122 4.1.3.6 Tenant Communication and Support • A multi-tenant system should include mechanisms for efficient communication and support between the system administrators and tenants • Features like notifications, messaging, help desks, and knowledge bases can be integrated to facilitate tenant communication and provide timely support 4.1.4 Tenant Isolation It's important to note that achieving tenant isolation requires a combination of technical measures, secure coding practices, and operational controls Each of these measures should be carefully implemented and regularly audited to maintain the integrity and privacy of tenant data Tenant isolation is a critical aspect of a multi-tenant system as it ensures the privacy, security, and independence of each tenant within a shared infrastructure The goal is to prevent unauthorized access to tenant data and resources Here are some key considerations for achieving effective tenant isolation 4.1.4.1 Database Partitioning • Partitioning the database is a common technique to achieve data isolation in a multi-tenant system • Each tenant's data is stored in separate partitions or schemas within the database • Partitioning can be done based on a unique identifier for each tenant, such as a tenant ID • This approach allows for efficient management and retrieval of tenantspecific data 4.1.4.2 Virtualization or Containerization • Virtualization technologies like virtual machines (VMs) or containerization platforms (e.g., Docker) can provide strong isolation between tenants • Each tenant's application and its dependencies can be encapsulated within a dedicated virtual machine or container 123 • This approach ensures that tenant resources are completely isolated, including CPU, memory, and network 4.1.4.3 Resource Quotas and Limits • Implementing resource quotas and limits helps prevent any single tenant from consuming an unfair share of system resources • Quotas can be set on CPU, memory, storage, network bandwidth, or other resource dimensions • Monitoring and enforcing these quotas ensure that tenants operate within their allocated limits, promoting fair resource utilization 4.1.4.4 Access Control and Authentication • Robust access control mechanisms should be implemented to enforce tenant isolation • Each tenant should have its own set of authentication credentials and access rights • Implementing role-based access control (RBAC) or similar techniques ensures that tenants can access only their own data and resources 4.1.4.5 Data Encryption and Privacy • Encrypting tenant data at rest and in transit adds an extra layer of security and privacy • Implementing encryption algorithms and protocols safeguards tenant data from unauthorized access, even if the infrastructure is compromised • Secure key management practices should be followed to protect encryption keys 4.1.4.6 Logging and Auditing • Logging and auditing mechanisms play a vital role in ensuring tenant isolation and security • By logging all relevant activities and events within the system, it becomes possible to detect and investigate any potential breaches or unauthorized access attempts • Regularly reviewing audit logs helps in identifying and mitigating security risks 124 4.2 System analysis 4.3 Components and services 4.3.1 A single tenant infrastructure 4.3.1.1 Front-end The robust and feature-rich web administration application use the React.js framework to develop To ensure seamless deployment and scalability, we have 125 containerized the application using Docker, allowing for consistent and efficient deployment across various environments By leveraging Docker's containerization technology, the application is encapsulated within a portable and isolated container, ensuring its dependencies and configurations are well-contained and reproducible This approach not only streamlines the deployment process but also enables easy scaling and management of the application, making it highly adaptable to changing user demands and traffic fluctuations Once containerized, the application is deployed onto a server infrastructure, leveraging the power of server resources to handle user requests and provide optimal performance This deployment setup enables efficient resource utilization and ensures the application is accessible to users seamlessly Overall, the combination of React.js, Docker containerization, and server deployment empowers the web administration application to deliver a reliable, scalable, and userfriendly experience For the driver app, by leveraging the extensive array of tools, libraries, and APIs provided by the Android framework, we have incorporated advanced functionalities to enable drivers to efficiently navigate and complete their tasks with utmost precision and efficiency To ensure the application's performance, reliability, and scalability, we have adhered to industry best practices and thoroughly tested it across multiple devices, screen sizes, and Android versions By leveraging the power of the Android framework, our driver application serves as a robust and indispensable tool, revolutionizing the way drivers operate, enhancing their productivity, and ultimately elevating the overall efficiency and effectiveness of our transportation services 4.3.1.2 Back-end All the transportation business services cannot be called directly via a public subnet Instead, we set up a API Gateway using Kong, which offers several benefits in the context of building and managing APIs such as: • Request Routing and Load Balancing: Kong acts as a centralized entry point for our API requests It allows us to define routing rules to direct incoming requests to the appropriate services or microservices based on 126 criteria like URL paths, headers, or methods Kong also provides load balancing capabilities to distribute traffic across multiple back-end services, improving performance and scalability • Authentication and Authorization: Kong supports various authentication mechanisms, such as API keys, JWT (JSON Web Tokens), OAuth, and more It enables us to authenticate and authorize API requests, ensuring that only authorized clients can access our APIs • Scalability and High Availability: Kong is designed to handle high volumes of traffic and provides scalability and high availability options It can be deployed in a clustered setup, where multiple Kong instances work together to handle traffic and share configurations This allows us to scale horizontally and ensure resilience and fault tolerance for our API gateway All the transportation business services are wrapped by an Auto Scaling Group App Tier, which will allows us to automatically adjust the number of instances in a group based on defined conditions We can ensure that our application can handle varying levels of traffic and maintain high availability by automatically adjusting the number of instances based on demand This helps optimize resource utilization, improve application performance, and enhance the overall scalability and reliability of our AWS infrastructure The transportation business contains these components: • Auth service (FastAPI): In charge of authenticate and authorize user, request to the other services in the system must be intercepted and forward to this service to ensure endpoint security • User service (NestJs): In charge of handling users data (admin/driver) • Job service (SpringBoot): In charge of handling orders data • Product service (SpringBoot): In charge of handling products data • Location service (SpringBoot): In charge of handling delivery and receiving locations data • Route service (SpringBoot): In charge of handling delivery route data • Transportation service (SpringBoot): In charge of handling vehicles data • Organization service (SpringBoot): In charge of handling organizations data • Billing service (SpringBoot): In charge of handling billing and payment data • Healthcheck service (SpringBoot): In charge of handling vehicle’s status data 127 All of these components will be containerized with Docker, which will package applications and their dependencies together, also make it easy for adapting the microservice 4.3.1.3 Database In our system, we use two most popular database type: SQL (using PostgreSQL) and NoSQL (using MongoDB) PostgreSQL is an open-source relational database management system (RDBMS) known for its advanced features, extensibility, and ACID compliance It follows the SQL standard and is widely used for applications that require structured data and strict data integrity PostgreSQL supports advanced data types, indexing techniques, concurrency control, and offers a wide range of features for efficient data management PostgreSQL is used to implement these following services: Job, Billing, Healthcheck It will communicate with these service via PSQL Driver, which is a software component or library that allows applications to connect to and interact with a PostgreSQL database It provides an interface for developers to execute SQL queries, manage database connections, and handle data retrieval and manipulation On the other hand, MongoDB is a popular open-source NoSQL database known for its flexible schema design and scalability It stores data in a JSON-like document format, making it suitable for unstructured or semi-structured data MongoDB provides horizontal scalability, high availability, and automatic sharding, allowing for distributed data storage and efficient scaling It offers features like flexible querying, dynamic schemas, and supports rich data structures like embedded documents and arrays MongoDB is used to implement these following services: Auth, User, Product, Location, Route, Transportation, Organization It will communicate with these service via MongoDB Node.js Driver, which is a native driver that allows developers to interact with MongoDB databases from a Node.js environment It provides a set of 128 APIs and functionality to perform various operations on MongoDB, including data retrieval, manipulation, and aggregation 4.3.1.4 Third-party integration cloud (a) Email service When a tenant is created/activated/suspended, an email will be sent to the tenant owner to notify them about the tenant’s status This event require us to implement an email service that allows users to send, receive, and email messages It must provides the necessary infrastructure and features to handle the transmission, delivery, storage, and organization of emails In addition, an email service is a indispensable service if we want to implement an CRM system in the future (b) Google Map service Google Maps is a comprehensive mapping and location-based service provided by Google It offers a wide range of features and functionalities to help users navigate, explore, and discover places across the globe Because of the map-related business, we consider Google Maps service as the best solution for us when it comes to the price and time of implementation Here are the services that we integrated to our system: • Directions API: The Directions API is a service provided by Google Maps that allows developers to calculate and display directions for different modes of transportation (driving, walking, cycling, and public transit) It provides detailed step-by-step instructions, distance, duration, and estimated arrival times • Distance Matrix API: The Distance Matrix API provides developers with travel distance and duration between multiple origins and destinations It allows users to calculate the travel time and distance for various transportation modes, enabling applications to optimize routes or estimate delivery times • Geocoding API: The Geocoding API allows developers to convert addresses or place names into geographic coordinates (latitude and longitude) and vice versa It enables applications to geographically locate places, perform address validation, and find nearby locations based on coordinates 129 • Maps JavaScript API: The Maps JavaScript API enables developers to embed Google Maps into web applications It provides a JavaScript interface for creating interactive maps, adding markers, overlays, and customizing map appearance It also allows for handling user interactions, such as panning, zooming, and capturing map events • Maps SDK for Android: The Maps SDK for Android is a library provided by Google that allows developers to integrate interactive maps into Android applications It provides access to various features, including displaying maps, adding markers, customizing map styles, and utilizing location services for real-time positioning • Places API: The Places API allows developers to access a database of places and points of interest It provides information about businesses, landmarks, addresses, and more With the Places API, developers can search for places, retrieve details about specific locations, and display them on maps or in application interfaces (c) Firebase Cloud Storage Firebase is a comprehensive mobile and web application development platform offered by Google It provides a wide range of services, including cloud storage, to help developers build and deploy scalable and feature-rich applications Firebase Cloud Storage is a cloud-based storage solution specifically designed for storing and serving user-generated content such as images, videos, and other files 130 4.3.2 Multi-tenant implementation system Like other single tenant instance, we use NAT Gateway to allows resources within a private subnet in a Virtual Private Cloud (VPC) to access the internet or other AWS services while remaining hidden from external networks It acts as a middleman between the private subnet and the internet, translating the private IP addresses of resources to a public IP address The web tenancy admin site is used by technical admin to manage tenants, it will send the requests to the Tenant service, and then use Terraform to manipulate the infrastructure, which is an open-source infrastructure as code (IaC) tool developed by HashiCorp It enables developers and operations teams to define, manage, and provision infrastructure resources across various cloud providers and platforms in a declarative manner 131 BIBLIOGRAPHY [1] Spring, "Spring Boot Reference Documentation," 1 2012 [Online] Available: https://docs.spring.io/springboot/docs/current/reference/htmlsingle/ [2] NestJs, "Hello, nest!," 1 2017 [Online] Available: https://nestjs.com/ [3] Tiangolo, "FastAPI," [Online] Available: https://fastapi.tiangolo.com/ [4] HashiCorp, "Terraform," [Online] Available: https://developer.hashicorp.com/terraform/docs [5] Google, "Android," [Online] Available: https://developer.android.com/docs [6] Meta, "ReactJs," [Online] Available: https://react.dev/ [7] Docker, "Docker Docs," [Online] Available: https://docs.docker.com/ 132

Ngày đăng: 04/09/2023, 20:52

Xem thêm:

w