Sistema 1: E-commerce Microservices Platform
Objetivos
Aprender conceitos de backend, frontend e DevOps desenvolvendo um sistema full-stack.
- Microservices, containerization, REST APIs, SQL/NoSQL databases, message queues, system design.
- Github Actions, Project Management
Descrição técnica do projeto
Overview: Build a small e-commerce platform with services such as:
- Product Catalog: Uses a NoSQL database (e.g., MongoDB) to store product information.
- Order Management: Uses SQL (e.g., PostgreSQL) to store orders and transactions.
- User Service: Handles authentication (JWT) and user profiles.
- Notification Service: Sends emails or SMS using message queues (e.g., RabbitMQ or Kafka).
Tasks for the mentee:
- Deploy microservices using Docker.
- Set up message queues to notify users of successful orders.
- Integrate SQL for order management and NoSQL for the product catalog.
- Introduce API gateways for communication between services.
Semana 1
Tarefa
- Implementar serviço de produtos (API em Django Rest Framework, CRUD, banco de dados NoSQL)
Teoria
- SQL vs NoSQL
- API Gateway vs Load Balancer
- A simple guide to configure Nginx as an API Gateway
- Docker curriculum
- Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software
Semana 2
Tarefa
- Acessar o console do MongoDB localmente e brincar fazendo queries.
- Implementar frontend de produtos (projeto React, CRUD usando a api criada na primeira semana)
- Usar docker para toda a aplicação (container para o serviço de produtos, pro frontend, pro banco de dados)
Teoria
- CAP Theorem Simplified
- ACID Databases
- ACID vs BASE
- Normalização em banco de dados
- Dockerfile vs. Docker Compose: What You Should Know
- 10 Core Concepts You Need to Know About React
- Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software
Semana 3
Tarefa
- Acessar o console do MongoDB localmente e brincar fazendo queries.
- Usar docker para toda a aplicação (container para o serviço de produtos, pro frontend, pro banco de dados)
- Criar (backend e frontend) order management service
- Com docker, backend em FastAPI, PostgreSQL como banco de dados.
Teoria
- Database Types
- 7 must-know strategies to scale your database
- Locust load testing
- Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software
Semana 4
Tarefa
- Fazer load-testing da aplicação localmente
- Usar docker para toda a aplicação (container para o serviço de produtos, pro frontend, pro banco de dados)
Teoria
- Selecting a React Component Library, the Strategic Way
- What I Wish Someone Told Me About Postgres
- How Amazon Scaled E-commerce Shopping Cart Data Infrastructure
- Everything You NEED to KNOW About Web Applications
Semana 5
Tarefa
- Consertar docker
- Montar layout do site (usando alguma component library do react e/ou tailwind)
Teoria
- From laid off to hired: A Software Engineer’s guide
- Good software development habits
- 7 Mindsets That Are Slowing Down Your Career Growth
Sistema 2: AWS - Site estático
Semana 6
Tarefa
- Deployar um site estático na AWS
Teoria
Sistema 3: Task Management Application
High-Level Overview
This project is a task management application designed to allow users to manage their daily tasks with features like adding, updating, deleting, and categorizing tasks. Each task can have a title, description, priority, deadline, and tags (e.g., “work,” “personal”). Users will also be able to mark tasks as completed and filter tasks by category, deadline, or priority.
The system should be implemented using Python for the backend, React for the frontend, and deployed to AWS. It will focus on SOLID principles, proper API design, NoSQL database usage, and design patterns for maintainable and scalable code.
Core Functionalities
User Authentication
- Register, login, and logout features using AWS Cognito.
- Secure the API with authentication tokens (JWT).
Task Management
- Add new tasks with details (title, description, priority, deadline, tags).
- Update or delete existing tasks.
- Mark tasks as completed.
- List tasks with filtering and sorting options (e.g., by priority, deadline, or tags).
Tags Management
- Allow users to define and assign tags for better categorization.
Task Insights
- Provide a summary of task statistics, such as the number of completed tasks and pending tasks grouped by priority or deadline.
High-Level Architecture
Frontend (React)
- UI Framework: Use Material-UI or Tailwind CSS for styling.
- State Management: Use Context API or Redux for state management.
Features:
- A dashboard for managing tasks.
- Forms for adding/updating tasks.
- Filtering and sorting options for tasks.
- Authentication pages (login/register).
Backend (Python)
- Framework: Use FastAPI for a clean and simple API.
- Database: Use MongoDB (hosted on AWS DocumentDB) for storing tasks, users, and tags.
Features:
- RESTful APIs for CRUD operations.
- Input validation and error handling.
- Modularized codebase adhering to SOLID principles.
AWS Deployment
- Backend: Deploy as a containerized service using AWS ECS.
- Frontend: Host the React app on AWS S3 and use CloudFront for CDN.
- Database: Use AWS DocumentDB (MongoDB).
- Authentication: Manage using AWS Cognito.
Focus on SOLID Principles
- Single Responsibility: Separate concerns into services: authentication, task management, and tags.
- Open/Closed Principle: Design services and models to allow extensions without modifying the existing codebase.
- Liskov Substitution: Use interfaces or abstract classes where necessary (e.g., for repository pattern).
- ** Interface Segregation**: Keep APIs focused on single responsibilities (e.g., task endpoints don’t handle user-related operations).
- ** Dependency Inversion**: Use dependency injection for database access, allowing for easier testing and mocking.
Design Patterns
- Repository Pattern: Abstract MongoDB operations into a repository to separate database logic from business logic.
- Factory Pattern: Use factories for creating tasks or tags with default values and validations.
- Strategy Pattern: Implement sorting and filtering using interchangeable strategies.
AWS Services
- AWS ECS: Host the Python backend as a containerized service.
- AWS S3 + CloudFront: Serve the React frontend.
- AWS Cognito: Manage user authentication.
- AWS DocumentDB: Store tasks and tags in a MongoDB-compatible NoSQL database.
- AWS CloudWatch: Monitor logs and system performance.
- AWS IAM: Secure access to AWS resources.
Semana 7
Teoria
- Linux Commands Every DevOps Engineer Must Know
- Big O Notation
- SOLID: The First 5 Principles of Object Oriented Design
- Design Patterns in Python
Tarefa
Task 1: Project Setup Goal: Set up the foundational structure for both the backend and frontend projects.
Backend (Python):
Initialize a Python project using FastAPI or Flask. Set up a virtual environment and install essential packages (fastapi, uvicorn, pymongo). Create a basic API endpoint (/health) to verify the backend is running. Write Dockerfile and configure for containerization.
Frontend (React):
Initialize a React project using create-react-app. Set up project structure (components, pages, utils). Create a basic homepage with a “Hello, World” message.
Testing:
Verify the frontend connects to the backend API.
Referenced in
- No backlinks found