From d7032a4c9dad3332e1c4099a415c917b274880bb Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Jun 2025 13:07:01 +0900 Subject: [PATCH 01/17] [WIP] Add Spanish localisation for all markdown files (#29) * Initial plan for issue * Add Spanish translations for main README, PRD, and setup docs Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Add Spanish translations for main documentation steps 01-05 Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Translate custom-instructions files for Spanish localization Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Complete Spanish localization for all remaining markdown files Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Update ToC --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> Co-authored-by: Justin Yoo --- localisation/es-es/README.md | 106 +++++ localisation/es-es/complete/README.md | 56 +++ localisation/es-es/complete/dotnet/README.md | 35 ++ .../es-es/complete/java/socialapp/README.md | 367 ++++++++++++++++++ .../es-es/complete/javascript/README.md | 43 ++ localisation/es-es/complete/python/README.md | 292 ++++++++++++++ localisation/es-es/docs/00-setup.md | 352 +++++++++++++++++ localisation/es-es/docs/01-python.md | 119 ++++++ localisation/es-es/docs/02-javascript.md | 165 ++++++++ localisation/es-es/docs/03-java.md | 160 ++++++++ localisation/es-es/docs/04-dotnet.md | 173 +++++++++ .../es-es/docs/05-containerization.md | 182 +++++++++ localisation/es-es/docs/README.md | 12 + .../containerization/copilot-instructions.md | 34 ++ .../dotnet/copilot-instructions.md | 81 ++++ .../java/copilot-instructions.md | 92 +++++ .../javascript/copilot-instructions.md | 46 +++ .../python/copilot-instructions.md | 70 ++++ .../setup/copilot-instructions.md | 5 + localisation/es-es/dotnet/README.md | 5 + localisation/es-es/java/README.md | 5 + localisation/es-es/javascript/README.md | 5 + localisation/es-es/product-requirements.md | 148 +++++++ localisation/es-es/python/README.md | 5 + 24 files changed, 2558 insertions(+) create mode 100644 localisation/es-es/README.md create mode 100644 localisation/es-es/complete/README.md create mode 100644 localisation/es-es/complete/dotnet/README.md create mode 100644 localisation/es-es/complete/java/socialapp/README.md create mode 100644 localisation/es-es/complete/javascript/README.md create mode 100644 localisation/es-es/complete/python/README.md create mode 100644 localisation/es-es/docs/00-setup.md create mode 100644 localisation/es-es/docs/01-python.md create mode 100644 localisation/es-es/docs/02-javascript.md create mode 100644 localisation/es-es/docs/03-java.md create mode 100644 localisation/es-es/docs/04-dotnet.md create mode 100644 localisation/es-es/docs/05-containerization.md create mode 100644 localisation/es-es/docs/README.md create mode 100644 localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md create mode 100644 localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md create mode 100644 localisation/es-es/docs/custom-instructions/java/copilot-instructions.md create mode 100644 localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md create mode 100644 localisation/es-es/docs/custom-instructions/python/copilot-instructions.md create mode 100644 localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md create mode 100644 localisation/es-es/dotnet/README.md create mode 100644 localisation/es-es/java/README.md create mode 100644 localisation/es-es/javascript/README.md create mode 100644 localisation/es-es/product-requirements.md create mode 100644 localisation/es-es/python/README.md diff --git a/localisation/es-es/README.md b/localisation/es-es/README.md new file mode 100644 index 0000000..20d4b52 --- /dev/null +++ b/localisation/es-es/README.md @@ -0,0 +1,106 @@ +# Taller de Programación Vibe con GitHub Copilot + +![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) + +¡Vamos a programar con vibe usando [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) y sus características más nuevas y mejores en varios lenguajes de programación como Python, JavaScript, Java y .NET, así como hacer que las aplicaciones sean nativas de la nube mediante contenedorización! ¿Estás listo para sumergirte? + +## Contexto + +Contoso es una empresa que vende productos para varias actividades al aire libre. El departamento de marketing de Contoso quiere lanzar un sitio web de redes sociales micro para promocionar sus productos a clientes existentes y potenciales. Como su primer MVP, quieren construir rápidamente el sitio web. El departamento de TI de Contoso actualmente tiene dos desarrolladores que usan Python y JavaScript respectivamente. La fecha de lanzamiento se acerca rápidamente, así que ambos desarrolladores deben entregar la aplicación rápidamente. + +Pero aquí está la situación... + +## Objetivos del Taller + +- Construir aplicaciones usando el Modo Agente de GitHub Copilot. +- Agregar instrucciones personalizadas a GitHub Copilot para tener más control sobre GitHub Copilot. +- Agregar varios servidores MCP a GitHub Copilot para construir las aplicaciones de manera más precisa. + +## Taller en Tu Idioma + +Este material del taller está actualmente disponible en los siguientes idiomas: + +[English](../../README.md) | [Español](./README.md) | [Português](../pt-br/) | [Français](../fr-fr/) | [中文(简体)](../zh-cn/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) + +## Prerrequisitos + +Durante este taller, se recomienda altamente [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) porque no hay necesidad de preparación, excepto un navegador web. Sin embargo, si realmente necesitas usar tu máquina, asegúrate de haber instalado todo lo identificado a continuación. + +### Común + +- [Visual Studio Code](https://code.visualstudio.com/) +- Extensión VS Code [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) +- Extensión VS Code [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) +- 💥 Para usuarios de Windows 👉 [PowerShell 7](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) +- [git CLI](https://git-scm.com/downloads) +- [GitHub CLI](https://cli.github.com/) +- [Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) + +### Python + +- [pyenv](https://github.com/pyenv/pyenv) o [pyenv para Windows](https://github.com/pyenv-win/pyenv-win) +- Python 3.12+ a través de pyenv +- Gestor de paquetes `uv` (recomendado) o `pip` +- Extensión VS Code [Python](https://marketplace.visualstudio.com/items/?itemName=ms-python.python) +- Extensión VS Code [Pylance](https://marketplace.visualstudio.com/items/?itemName=ms-python.vscode-pylance) +- Extensión VS Code [Python Debugger](https://marketplace.visualstudio.com/items/?itemName=ms-python.debugpy) +- Extensión VS Code [autopep8](https://marketplace.visualstudio.com/items/?itemName=ms-python.autopep8) + +### JavaScript + +- [nvm](https://github.com/nvm-sh/nvm) o [nvm para Windows](https://github.com/coreybutler/nvm-windows) +- La última LTS de [Node.js](https://nodejs.org/) a través de nvm + +### Java + +- [SDKMAN](https://sdkman.io/) +- [OpenJDK 21](https://learn.microsoft.com/java/openjdk/download) a través de SDKMAN +- [Apache Maven](https://maven.apache.org/download.cgi) a través de SDKMAN +- [Gradle Build Tool](https://docs.gradle.org/current/userguide/installation.html) a través de SDKMAN +- [Spring Boot Initializr](https://docs.spring.io/spring-boot/cli/installation.html) a través de SDKMAN +- Extensión VS Code [Extension Pack for Java](https://marketplace.visualstudio.com/items/?itemName=vscjava.vscode-java-pack) +- Extensión VS Code [Spring Boot Extension Pack](https://marketplace.visualstudio.com/items/?itemName=vmware.vscode-boot-dev-pack) + +### .NET + +- [.NET SDK 9](https://dotnet.microsoft.com/download/dotnet/9.0) +- Extensión [VS Code C# Dev Kit](https://marketplace.visualstudio.com/items/?itemName=ms-dotnettools.csdevkit) + +## Documento de Requisitos del Producto + +Primero y principal, el lugar para comenzar es este [PRD (Documento de Requisitos del Producto)](./product-requirements.md). Este documento te dará una mejor comprensión de qué hacer y cómo hacerlo. + +## Instrucciones del Taller + +Este es un taller autodidacta siguiendo los enlaces a continuación: + +| Paso | Enlace | +|------------------------------------|----------------------------------------------------------| +| 00: Entorno de Desarrollo | [00-setup.md](./docs/00-setup.md) | +| 01: Backend Python | [01-python.md](./docs/01-python.md) | +| 02: Frontend JavaScript | [02-javascript.md](./docs/02-javascript.md) | +| 03: Migración Java desde Python | [03-java.md](./docs/03-java.md) | +| 04: Migración .NET desde JavaScript| [04-dotnet.md](./docs/04-dotnet.md) | +| 05: Contenedorización | [05-containerization.md](./docs/05-containerization.md) | + +## Ejemplos Completos + +Revisa el ejemplo completo de cada aplicación. También están programadas con vibe usando GitHub Copilot, por lo tanto, podrían no ser perfectas, y no tienes que seguir la aplicación. + +| Lenguaje | Aplicación | Ubicación | +|---------------------|-------------|---------------------------------------| +| Backend Python | FastAPI | [python](./complete/python/) | +| Frontend JavaScript | React | [javascript](./complete/javascript/) | +| Backend Java | Spring Boot | [java](./complete/java/) | +| Frontend .NET | Blazor | [dotnet](./complete/dotnet/) | +| Contenedorización | Container | [containerization](./complete/) | + +## Leer Más... + +- [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) +- [GitHub Copilot](https://docs.github.com/en/copilot/about-github-copilot/what-is-github-copilot) +- [GitHub Copilot: Modo Agente](https://code.visualstudio.com/blogs/2025/04/07/agentMode) +- [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) +- [GitHub Copilot: Instrucciones Personalizadas](https://code.visualstudio.com/docs/copilot/copilot-customization) +- [GitHub Copilot: Cambiar Modelos de IA](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) +- [Servidores MCP Curados](https://github.com/modelcontextprotocol/servers) \ No newline at end of file diff --git a/localisation/es-es/complete/README.md b/localisation/es-es/complete/README.md new file mode 100644 index 0000000..b79487f --- /dev/null +++ b/localisation/es-es/complete/README.md @@ -0,0 +1,56 @@ +# Muestras de Aplicaciones Completas + +Aquí está la lista de muestras de aplicaciones completas. Debido a que también son vibe-coded, puedes verificar cómo están construidas. + +| Aplicación | Ubicación | +|-------------|-----------------------------| +| FastAPI | [python](./python/) | +| React | [javascript](./javascript/) | +| Spring Boot | [java](./java/) | +| Blazor | [dotnet](./dotnet/) | + +## Muestra de Contenedorización + +### Prerrequisitos + +Consulta el documento [README](../README.md) para la preparación. + +### Comenzando + +1. Asegúrate de que Docker esté ejecutándose. + + ```bash + docker info + ``` + +1. Obtén la raíz del repositorio. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Navega al directorio `complete`. + + ```bash + cd $REPOSITORY_ROOT/complete + ``` + +1. Ejecuta las aplicaciones contenedorizadas. + + ```bash + docker compose up --build -d + ``` + +1. Abre un navegador web y navega a `http://localhost:3030`. +1. Verifica si la aplicación web está ejecutándose correctamente. +1. Limpia ejecutando el siguiente comando para remover las aplicaciones contenedorizadas. + + ```bash + docker compose down --rmi all + ``` \ No newline at end of file diff --git a/localisation/es-es/complete/dotnet/README.md b/localisation/es-es/complete/dotnet/README.md new file mode 100644 index 0000000..91f2111 --- /dev/null +++ b/localisation/es-es/complete/dotnet/README.md @@ -0,0 +1,35 @@ +# Muestra de Aplicación .NET + +## Prerrequisitos + +Consulta el documento [README](../../README.md) para la preparación. + +## Comenzando + +### Ejecutar Backend Spring Boot + +Usa [Muestra de Aplicación Java](../java/). + +> **NOTA**: Si usas GitHub Codespaces, asegúrate de que el puerto de la aplicación Java, `8080`, esté configurado como **público**. + +### Ejecutar Frontend Blazor + +1. Obtén la raíz del repositorio. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Ejecuta la aplicación. + + ```bash + dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp + ``` + +1. Verifica si la aplicación web está ejecutándose correctamente. \ No newline at end of file diff --git a/localisation/es-es/complete/java/socialapp/README.md b/localisation/es-es/complete/java/socialapp/README.md new file mode 100644 index 0000000..6fef9e6 --- /dev/null +++ b/localisation/es-es/complete/java/socialapp/README.md @@ -0,0 +1,367 @@ +# Muestra de Aplicación Java + +Una aplicación Spring Boot REST API integral para una plataforma de redes sociales con operaciones CRUD completas para publicaciones, comentarios y me gusta. + +## Descripción General del Proyecto + +Esta es una aplicación Spring Boot lista para producción construida con las siguientes especificaciones: + +- **Nombre del Paquete**: `com.contoso.socialapp` +- **Artifact ID**: `socialapp` +- **Group ID**: `com.contoso` +- **Tipo de Paquete**: `jar` +- **Versión de Java**: OpenJDK 21 +- **Herramienta de Construcción**: Gradle +- **Base de Datos**: SQLite (embebida) +- **Puerto**: 8080 + +### Dependencias del Proyecto + +- **Spring Boot 3.2.5**: Framework central +- **Spring Web**: Endpoints de API RESTful +- **Spring Data JPA**: Operaciones de base de datos +- **Spring Boot Actuator**: Monitoreo de aplicación +- **Spring Boot Validation**: Validación de entrada +- **SQLite**: Base de datos embebida +- **Hibernate Community Dialects**: Soporte para SQLite +- **Springdoc OpenAPI**: Documentación de API (Swagger UI) +- **Lombok**: Reducción de código repetitivo + +### Estructura del Proyecto + +```text +src/ +├── main/ +│ ├── java/ +│ │ └── com/ +│ │ └── contoso/ +│ │ └── socialapp/ +│ │ ├── SocialAppApplication.java # Clase principal de aplicación +│ │ ├── config/ +│ │ │ ├── WebConfig.java # Configuración CORS +│ │ │ └── OpenApiConfig.java # Configuración Swagger/OpenAPI +│ │ ├── controller/ +│ │ │ ├── HealthController.java # Endpoints de salud +│ │ │ ├── PostController.java # Gestión de publicaciones +│ │ │ └── CommentController.java # Gestión de comentarios y me gusta +│ │ ├── model/ +│ │ │ ├── Post.java # Entidad Post +│ │ │ ├── Comment.java # Entidad Comment +│ │ │ ├── Like.java # Entidad Like +│ │ │ └── dto/ # Objetos de Transferencia de Datos +│ │ ├── repository/ +│ │ │ ├── PostRepository.java # Acceso a datos de Post +│ │ │ ├── CommentRepository.java # Acceso a datos de Comment +│ │ │ └── LikeRepository.java # Acceso a datos de Like +│ │ └── service/ +│ │ ├── PostService.java # Lógica de negocio de Post +│ │ └── CommentService.java # Lógica de negocio de Comment +│ └── resources/ +│ ├── application.properties # Configuración de aplicación +│ └── data.sql # Datos de muestra (opcional) +└── test/ + └── java/ + └── com/ + └── contoso/ + └── socialapp/ + └── SocialAppApplicationTests.java # Pruebas de integración +``` + +## Características + +- ✅ API RESTful completa para operaciones de redes sociales +- ✅ Gestión de publicaciones (Crear, Leer, Actualizar, Eliminar) +- ✅ Sistema de comentarios con operaciones CRUD completas +- ✅ Funcionalidad de Me gusta/No me gusta +- ✅ Base de datos SQLite con JPA/Hibernate +- ✅ Documentación OpenAPI/Swagger +- ✅ CORS habilitado para localhost y GitHub Codespaces +- ✅ Configuración dinámica de URL del servidor +- ✅ Endpoints de verificación de salud +- ✅ Integración con Spring Boot Actuator +- ✅ Manejo integral de errores +- ✅ Validación de entrada con Bean Validation + +## Inicio Rápido + +### Prerrequisitos + +Consulta el documento [README](../../README.md) para la preparación. + +### 1. Configuración del Entorno + +Primero, establece la variable de entorno de `$REPOSITORY_ROOT`. + +```bash +# bash/zsh +REPOSITORY_ROOT=$(git rev-parse --show-toplevel) +``` + +```powershell +# PowerShell +$REPOSITORY_ROOT = git rev-parse --show-toplevel +``` + +Luego, navega al directorio java. + +```bash +cd $REPOSITORY_ROOT/complete/java +``` + +### 2. Construir la Aplicación + +```bash +# Hacer gradlew ejecutable (si es necesario) +chmod +x ./gradlew + +# Construir el proyecto +./gradlew build +``` + +### 3. Ejecutar la Aplicación + +```bash +# Iniciar la aplicación usando Gradle +./gradlew bootRun + +# Alternativa: Ejecutar el archivo JAR directamente +# java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar +``` + +### 4. Verificar que la Aplicación está Ejecutándose + +```bash +# Verificar endpoint de salud +curl http://localhost:8080/api/health + +# Respuesta esperada: {"status":"healthy"} +``` + +### 5. Acceder a la Documentación de API + +Abre tu navegador y navega a: + +- **Swagger UI**: [http://localhost:8080/swagger-ui.html](http://localhost:8080/swagger-ui.html) +- **OpenAPI JSON**: [http://localhost:8080/v3/api-docs](http://localhost:8080/v3/api-docs) + +## Endpoints de API + +### Salud y Bienvenida + +- `GET /api/health` - Endpoint personalizado de verificación de salud +- `GET /api/welcome` - Endpoint de mensaje de bienvenida + +### Gestión de Publicaciones + +- `GET /api/posts` - Obtener todas las publicaciones +- `GET /api/posts/{id}` - Obtener publicación específica por ID +- `POST /api/posts` - Crear una nueva publicación +- `PATCH /api/posts/{id}` - Actualizar una publicación existente +- `DELETE /api/posts/{id}` - Eliminar una publicación + +### Gestión de Comentarios + +- `GET /api/posts/{postId}/comments` - Obtener todos los comentarios para una publicación +- `GET /api/posts/{postId}/comments/{commentId}` - Obtener comentario específico +- `POST /api/posts/{postId}/comments` - Agregar un comentario a una publicación +- `PATCH /api/posts/{postId}/comments/{commentId}` - Actualizar un comentario +- `DELETE /api/posts/{postId}/comments/{commentId}` - Eliminar un comentario + +### Gestión de Me Gusta + +- `POST /api/posts/{postId}/like` - Dar me gusta a una publicación +- `DELETE /api/posts/{postId}/like` - Quitar me gusta a una publicación + +### Spring Boot Actuator + +- `GET /actuator/health` - Indicador de salud de Spring Boot +- `GET /actuator/info` - Información de la aplicación + +## Probando la API + +### Usando Ejemplos de cURL + +#### Crear una Publicación + +```bash +curl -X POST http://localhost:8080/api/posts \ + -H "Content-Type: application/json" \ + -d '{ + "title": "Mi Primera Publicación", + "content": "¡Este es el contenido de mi primera publicación!", + "authorName": "Juan Pérez" + }' +``` + +#### Obtener Todas las Publicaciones + +```bash +curl http://localhost:8080/api/posts +``` + +#### Agregar un Comentario + +```bash +curl -X POST http://localhost:8080/api/posts/1/comments \ + -H "Content-Type: application/json" \ + -d '{ + "content": "¡Excelente publicación!", + "authorName": "Ana García" + }' +``` + +#### Dar Me Gusta a una Publicación + +```bash +curl -X POST http://localhost:8080/api/posts/1/like \ + -H "Content-Type: application/json" \ + -d '{ + "userName": "juan_perez" + }' +``` + +### Usando Swagger UI + +1. Abre [http://localhost:8080/swagger-ui.html](http://localhost:8080/swagger-ui.html) +2. Explora los endpoints disponibles +3. Haz clic en "Try it out" en cualquier endpoint +4. Completa los parámetros y haz clic en "Execute" + +## Desarrollo + +### Ejecutando Pruebas + +```bash +# Ejecutar todas las pruebas +./gradlew test + +# Ejecutar con reporte de cobertura +./gradlew test jacocoTestReport + +# Ejecutar clase de prueba específica +./gradlew test --tests "SocialAppApplicationTests" +``` + +### Base de Datos + +La aplicación usa SQLite como base de datos embebida: + +- **Archivo de base de datos**: `sns_api.db` (creado automáticamente) +- **Ubicación**: Directorio raíz del proyecto +- **Esquema**: Auto-generado por Hibernate +- **Datos de muestra**: Cargados desde `data.sql` (si está presente) + +Para resetear la base de datos, simplemente elimina el archivo `sns_api.db` y reinicia la aplicación. + +## Configuración + +### Propiedades de la Aplicación + +Configuraciones clave en `application.properties`: + +```properties +# Configuraciones de Aplicación +spring.application.name=socialapp +server.port=8080 + +# Configuración de Base de Datos +spring.datasource.url=jdbc:sqlite:sns_api.db +spring.jpa.hibernate.ddl-auto=update + +# Configuración OpenAPI/Swagger +springdoc.swagger-ui.path=/swagger-ui.html +springdoc.swagger-ui.operationsSorter=method +``` + +### Configuración CORS + +La aplicación soporta tanto localhost como GitHub Codespaces: + +- **Localhost**: `http://localhost:8080` +- **GitHub Codespaces**: Auto-detectado y configurado dinámicamente + +### Detección de Entorno + +La aplicación detecta automáticamente el entorno de ejecución: + +- **Desarrollo Local**: Usa `http://localhost:8080` +- **GitHub Codespaces**: Usa `https://{codespace-name}-8080.{domain}` + +## Despliegue + +### Construyendo para Producción + +```bash +# Crear JAR de producción +./gradlew clean build + +# Ubicación del JAR +ls -la build/libs/socialapp-0.0.1-SNAPSHOT.jar +``` + +### Ejecutando en Producción + +```bash +# Ejecutar con perfil de producción +java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod + +# O con puerto personalizado +java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --server.port=8081 +``` + +## Solución de Problemas + +### Problemas Comunes + +#### Puerto Ya en Uso + +```bash +# Encontrar proceso usando puerto 8080 +lsof -i :8080 + +# Matar el proceso (reemplazar PID) +kill -9 + +# O usar un puerto diferente +./gradlew bootRun --args='--server.port=8081' +``` + +#### Fallas de Construcción + +```bash +# Limpiar y reconstruir +./gradlew clean build + +# Actualizar Gradle wrapper +./gradlew wrapper --gradle-version=8.5 +``` + +#### Problemas de Base de Datos + +```bash +# Resetear base de datos +rm sns_api.db +./gradlew bootRun +``` + +### Logs y Monitoreo + +- **Logs de aplicación**: Salida de consola al ejecutar `./gradlew bootRun` +- **Verificación de salud**: `GET /actuator/health` +- **Información de aplicación**: `GET /actuator/info` + +## Consideraciones de Seguridad + +⚠️ **Configuración de Desarrollo**: La configuración actual está optimizada para desarrollo con: + +- CORS habilitado para todos los orígenes +- Base de datos SQLite (no adecuada para escala de producción) +- Sin autenticación/autorización + +Para despliegue en producción, considera: + +- Restringir CORS a dominios específicos +- Usar PostgreSQL/MySQL en lugar de SQLite +- Implementar Spring Security para autenticación +- Agregar limitación de velocidad y sanitización de entrada +- Usar cifrado HTTPS/TLS \ No newline at end of file diff --git a/localisation/es-es/complete/javascript/README.md b/localisation/es-es/complete/javascript/README.md new file mode 100644 index 0000000..ca18ab7 --- /dev/null +++ b/localisation/es-es/complete/javascript/README.md @@ -0,0 +1,43 @@ +# Muestra de Aplicación JavaScript + +## Prerrequisitos + +Consulta el documento [README](../../README.md) para la preparación. + +## Comenzando + +### Ejecutar Backend FastAPI + +Usa [Muestra de Aplicación Python](../python/). + +> **NOTA**: Si usas GitHub Codespaces, asegúrate de que el puerto de la aplicación Python, `8000`, esté configurado como **público**. + +### Ejecutar Frontend React + +1. Obtén la raíz del repositorio. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Instala los paquetes npm. + + ```bash + cd $REPOSITORY_ROOT/complete/javascript + npm install + ``` + +1. Ejecuta la aplicación. + + ```bash + npm run dev + ``` + +1. Abre un navegador web y navega a `http://localhost:3000`. +1. Verifica si la aplicación web está ejecutándose correctamente. \ No newline at end of file diff --git a/localisation/es-es/complete/python/README.md b/localisation/es-es/complete/python/README.md new file mode 100644 index 0000000..fb6731c --- /dev/null +++ b/localisation/es-es/complete/python/README.md @@ -0,0 +1,292 @@ +# Muestra de Aplicación Python + +Una implementación completa de backend FastAPI para un Servicio Simple de Redes Sociales (SNS) que permite a los usuarios crear, recuperar, actualizar y eliminar publicaciones; agregar comentarios; y dar/quitar me gusta a las publicaciones. + +## 🏗️ Descripción General de la Arquitectura + +- **Framework**: FastAPI con Python 3.12+ +- **Base de Datos**: SQLite (`sns_api.db`) +- **Documentación de API**: Swagger UI + especificación OpenAPI 3.1 +- **CORS**: Habilitado para solicitudes de origen cruzado +- **Validación de Datos**: Modelos Pydantic con validación integral + +## 📁 Estructura del Proyecto + +```text +python/ +├── main.py # Punto de entrada de la aplicación FastAPI +├── models.py # Modelos de datos y esquemas Pydantic +├── database.py # Operaciones de base de datos SQLite +├── openapi.yaml # Especificación OpenAPI 3.0.1 +├── sns_api.db # Archivo de base de datos SQLite (auto-creado) +├── README.md # Esta documentación +└── .venv/ # Entorno virtual (creado durante la configuración) +``` + +## 🚀 Inicio Rápido + +### Prerrequisitos + +Consulta el documento [README](../../README.md) para la preparación. + +### 1. Configuración del Entorno + +Primero, establece la variable de entorno de `$REPOSITORY_ROOT`. + +```bash +# bash/zsh +REPOSITORY_ROOT=$(git rev-parse --show-toplevel) +``` + +```powershell +# PowerShell +$REPOSITORY_ROOT = git rev-parse --show-toplevel +``` + +Luego, navega al directorio python y crea un entorno virtual: + +```bash +cd $REPOSITORY_ROOT/complete/python +``` + +Crear entorno virtual + +```bash +# Usando uv (recomendado) +uv venv .venv +``` + +```bash +# Usando Python estándar (alternativo) +python -m venv .venv +``` + +### 2. Activar Entorno Virtual + +```bash +# En Linux/macOS +source .venv/bin/activate +``` + +```bash +# En Windows Command Prompt +.venv\Scripts\activate +``` + +### 3. Instalar Dependencias + +```bash +# Usando uv (recomendado) +uv pip install fastapi uvicorn python-multipart pyyaml +``` + +```bash +# Usando pip (alternativo) +pip install fastapi uvicorn python-multipart pyyaml +``` + +### 4. Copiar Especificación OpenAPI + +Copia la especificación OpenAPI del directorio padre. + +```bash +# En Linux/macOS +cp ../openapi.yaml . +``` + +```powershell +# En Windows Command Prompt +xcopy ..\openapi.yaml . +``` + +### 5. Ejecutar la Aplicación + +Iniciar el servidor de desarrollo + +```bash +uvicorn main:app --host 0.0.0.0 --port 8000 --reload +``` + +La aplicación estará disponible en: + +- **URL Base de API**: `http://localhost:8000/api/` +- **Swagger UI**: `http://localhost:8000/docs` +- **Especificación OpenAPI**: `http://localhost:8000/openapi.json` + +## 📊 Esquema de Base de Datos + +La aplicación usa SQLite con las siguientes tablas: + +### Tabla Posts + +- `id` (TEXT, PRIMARY KEY) - UUID +- `username` (TEXT, NOT NULL) - Nombre de usuario del autor +- `content` (TEXT, NOT NULL) - Contenido de la publicación +- `created_at` (TEXT, NOT NULL) - Marca de tiempo ISO +- `updated_at` (TEXT, NOT NULL) - Marca de tiempo ISO + +### Tabla Comments + +- `id` (TEXT, PRIMARY KEY) - UUID +- `post_id` (TEXT, NOT NULL) - Clave foránea a posts +- `username` (TEXT, NOT NULL) - Nombre de usuario del autor +- `content` (TEXT, NOT NULL) - Contenido del comentario +- `created_at` (TEXT, NOT NULL) - Marca de tiempo ISO +- `updated_at` (TEXT, NOT NULL) - Marca de tiempo ISO + +### Tabla Likes + +- `post_id` (TEXT, NOT NULL) - Clave foránea a posts +- `username` (TEXT, NOT NULL) - Usuario que dio me gusta +- `liked_at` (TEXT, NOT NULL) - Marca de tiempo ISO +- Clave primaria: `(post_id, username)` + +## 🔌 Endpoints de API + +### Posts + +- `GET /api/posts` - Listar todas las publicaciones +- `POST /api/posts` - Crear una nueva publicación +- `GET /api/posts/{postId}` - Obtener una publicación específica +- `PATCH /api/posts/{postId}` - Actualizar una publicación +- `DELETE /api/posts/{postId}` - Eliminar una publicación + +### Comments + +- `GET /api/posts/{postId}/comments` - Listar comentarios para una publicación +- `POST /api/posts/{postId}/comments` - Crear un comentario +- `GET /api/posts/{postId}/comments/{commentId}` - Obtener un comentario específico +- `PATCH /api/posts/{postId}/comments/{commentId}` - Actualizar un comentario +- `DELETE /api/posts/{postId}/comments/{commentId}` - Eliminar un comentario + +### Likes + +- `POST /api/posts/{postId}/likes` - Dar me gusta a una publicación +- `DELETE /api/posts/{postId}/likes?username={username}` - Quitar me gusta a una publicación + +## 🧪 Probando la API + +### Usando cURL + +#### Crear una Publicación + +```bash +curl -X POST "http://localhost:8000/api/posts" \ + -H "Content-Type: application/json" \ + -d '{"username": "john_doe", "content": "¡Hola Mundo! Esta es mi primera publicación."}' +``` + +#### Obtener Todas las Publicaciones + +```bash +curl -X GET "http://localhost:8000/api/posts" +``` + +#### Agregar un Comentario + +```bash +curl -X POST "http://localhost:8000/api/posts/{POST_ID}/comments" \ + -H "Content-Type: application/json" \ + -d '{"username": "jane_smith", "content": "¡Excelente publicación!"}' +``` + +#### Dar Me Gusta a una Publicación + +```bash +curl -X POST "http://localhost:8000/api/posts/{POST_ID}/likes" \ + -H "Content-Type: application/json" \ + -d '{"username": "alice_johnson"}' +``` + +### Usando Swagger UI + +1. Navega a `http://localhost:8000/docs` +2. Explora y prueba todos los endpoints de API de forma interactiva +3. Ve esquemas de solicitud/respuesta y ejemplos + +## 📝 Modelos de Datos + +### Modelos de Solicitud + +- `NewPostRequest`: `{username: str, content: str}` +- `UpdatePostRequest`: `{username: str, content: str}` +- `NewCommentRequest`: `{username: str, content: str}` +- `UpdateCommentRequest`: `{username: str, content: str}` +- `LikeRequest`: `{username: str}` + +### Modelos de Respuesta + +- `Post`: Objeto de publicación completo con metadatos y conteos +- `Comment`: Objeto de comentario completo con metadatos +- `LikeResponse`: Confirmación de me gusta con marca de tiempo + +## ⚙️ Configuración + +### Variables de Entorno + +La aplicación usa configuraciones por defecto pero puede ser personalizada: + +- **Base de Datos**: Archivo SQLite `sns_api.db` (auto-creado) +- **Host**: `0.0.0.0` (todas las interfaces) +- **Puerto**: `8000` +- **CORS**: Habilitado para todos los orígenes + +### Consideraciones de Producción + +Para despliegue en producción, considera: + +1. **Base de Datos**: Cambia a PostgreSQL o MySQL +2. **Variables de Entorno**: Usa para configuración sensible +3. **Seguridad**: Agrega autenticación y autorización +4. **CORS**: Restringe a dominios específicos +5. **Logging**: Implementa logging estructurado +6. **Monitoreo**: Agrega verificaciones de salud y métricas + +## 🛠️ Desarrollo + +### Organización de Archivos + +- **`main.py`**: Configuración de aplicación FastAPI, middleware y definiciones de rutas +- **`models.py`**: Modelos Pydantic para validación y serialización de datos +- **`database.py`**: Operaciones SQLite, gestión de conexiones y funciones CRUD + +### Estilo de Código + +El proyecto sigue: + +- Directrices de estilo Python PEP 8 +- Mejores prácticas de FastAPI +- Patrones de programación funcional +- Anotaciones de tipo en todo el código +- Manejo integral de errores + +### Agregando Nuevas Características + +1. Define modelos Pydantic en `models.py` +2. Agrega operaciones de base de datos en `database.py` +3. Crea endpoints de API en `main.py` +4. Actualiza la especificación OpenAPI si es necesario + +## 🐛 Solución de Problemas + +### Problemas Comunes + +1. **Puerto ya en uso**: Cambia el puerto con `--port 8001` +2. **Problemas de entorno virtual**: Recrea con `rm -rf .venv && uv venv .venv` +3. **Base de datos bloqueada**: Detén todas las instancias ejecutándose de la aplicación +4. **Errores de importación**: Asegúrate de que el entorno virtual esté activado + +### Modo Debug + +Ejecuta con logging adicional: + +```bash +uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug +``` + +## 📚 Recursos Adicionales + +- [Documentación de FastAPI](https://fastapi.tiangolo.com/) +- [Documentación de Pydantic](https://docs.pydantic.dev/) +- [Documentación de SQLite](https://sqlite.org/docs.html) +- [Especificación OpenAPI](https://swagger.io/specification/) \ No newline at end of file diff --git a/localisation/es-es/docs/00-setup.md b/localisation/es-es/docs/00-setup.md new file mode 100644 index 0000000..0da88bc --- /dev/null +++ b/localisation/es-es/docs/00-setup.md @@ -0,0 +1,352 @@ +# 00: Entorno de Desarrollo + +En este paso, estás configurando el entorno de desarrollo para el taller. + +## Prerrequisitos + +Consulta el documento [README](../README.md) para la preparación. + +## Comenzando + +- [Usar GitHub Codespaces](#usar-github-codespaces) +- [Usar Visual Studio Code](#usar-visual-studio-code) + - [Instalar PowerShell 👉 Para Usuarios de Windows](#instalar-powershell--para-usuarios-de-windows) + - [Instalar git CLI](#instalar-git-cli) + - [Instalar GitHub CLI](#instalar-github-cli) + - [Instalar Docker Desktop](#instalar-docker-desktop) + - [Instalar Visual Studio Code](#instalar-visual-studio-code) + - [Iniciar Visual Studio Code](#iniciar-visual-studio-code) + - [Configurar Servidores MCP](#configurar-servidores-mcp) +- [Verificar Modo Agente de GitHub Copilot](#verificar-modo-agente-de-github-copilot) +- [Preparar Instrucciones Personalizadas](#preparar-instrucciones-personalizadas) +- [Analizar Documento de Requisitos del Producto (PRD) y Diseñar API](#analizar-documento-de-requisitos-del-producto-prd-y-diseñar-api) + +## Usar GitHub Codespaces + +1. Observa la imagen a continuación, y sigue los pasos en el orden de hacer clic en ![imagen del botón "code"](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![imagen del botón "codespaces"](https://img.shields.io/badge/Codespaces-white) 👉 ![imagen del botón "create codespace on main"](https://img.shields.io/badge/Create_codespace_on_main-green) y crear una nueva instancia de GitHub Codespace. Puede tomar 5-10 minutos dependiendo del estado de la red. + + ![Comenzando con GitHub Codespaces](../../../docs/images/setup-01.png) + +2. Una vez que la instancia de GitHub Codespace esté lista, abre una terminal y ejecuta el siguiente comando para verificar si todo lo que necesitas ha sido instalado correctamente o no. + + ```bash + # Python + python --version + ``` + + ```bash + # Node.js + node --version + npm --version + + ``` + + ```bash + # JDK + java --version + ``` + + ```bash + # .NET SDK + dotnet --list-sdks + ``` + +3. Verifica el estado de tu repositorio. + + ```bash + git remote -v + ``` + + Deberías poder ver lo siguiente. + + ```bash + origin https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (fetch) + origin https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (push) + ``` + + Si ves algo diferente a lo anterior, elimina la instancia de GitHub Codespace y créala nuevamente. + +4. Ve a la sección [Configurar Servidores MCP](#configurar-servidores-mcp). + +**👇👇👇 En su lugar, si prefieres usar VS Code en tu máquina local, sigue las instrucciones a continuación. La sección de abajo no aplica para aquellos que usan GitHub Codespaces. 👇👇👇** + +## Usar Visual Studio Code + +### Instalar PowerShell 👉 Para Usuarios de Windows + +1. Verifica si ya has instalado PowerShell o no. + + ```bash + # Bash/Zsh + which pwsh + ``` + + ```bash + # PowerShell + Get-Command pwsh + ``` + + Si no ves la ruta del comando `pwsh`, significa que aún no has instalado PowerShell. Visita la [página de instalación de PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) y sigue las instrucciones. + +1. Verifica la versión de tu PowerShell. + + ```bash + pwsh --version + ``` + + Se recomienda `7.5.0` o superior. Si la tuya es menor que esa, visita la [página de instalación de PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) y sigue las instrucciones. + +### Instalar git CLI + +1. Verifica si ya has instalado git CLI o no. + + ```bash + # Bash/Zsh + which git + ``` + + ```bash + # PowerShell + Get-Command git + ``` + + Si no ves la ruta del comando `git`, significa que aún no has instalado git CLI. Visita la [página de instalación de git CLI](https://git-scm.com/downloads) y sigue las instrucciones. + +1. Verifica la versión de tu git CLI. + + ```bash + git --version + ``` + + Se recomienda `2.39.0` o superior. Si la tuya es menor que esa, visita la [página de instalación de git CLI](https://git-scm.com/downloads) y sigue las instrucciones. + +### Instalar GitHub CLI + +1. Verifica si ya has instalado GitHub CLI o no. + + ```bash + # Bash/Zsh + which gh + ``` + + ```bash + # PowerShell + Get-Command gh + ``` + + Si no ves la ruta del comando `gh`, significa que aún no has instalado GitHub CLI. Visita la [página de instalación de GitHub CLI](https://cli.github.com/) y sigue las instrucciones. + +1. Verifica la versión de tu GitHub CLI. + + ```bash + gh --version + ``` + + Se recomienda `2.65.0` o superior. Si la tuya es menor que esa, visita la [página de instalación de GitHub CLI](https://cli.github.com/) y sigue las instrucciones. + +1. Verifica si has iniciado sesión en GitHub o no. + + ```bash + gh auth status + ``` + + Si aún no has iniciado sesión, ejecuta `gh auth login` e inicia sesión. + +### Instalar Docker Desktop + +1. Verifica si ya has instalado Docker Desktop o no. + + ```bash + # Bash/Zsh + which docker + ``` + + ```bash + # PowerShell + Get-Command docker + ``` + + Si no ves la ruta del comando `docker`, significa que aún no has instalado Docker Desktop. Visita la [página de instalación de Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) y sigue las instrucciones. + +1. Verifica la versión de tu Docker CLI. + + ```bash + docker --version + ``` + + Se recomienda `28.0.4` o superior. Si la tuya es menor que esa, visita la [página de instalación de Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) y sigue las instrucciones. + +### Instalar Visual Studio Code + +1. Verifica si ya has instalado VS Code o no. + + ```bash + # Bash/Zsh + which code + ``` + + ```bash + # PowerShell + Get-Command code + ``` + + Si no ves la ruta del comando `code`, significa que aún no has instalado VS Code. Visita la [página de instalación de Visual Studio Code](https://code.visualstudio.com/) y sigue las instrucciones. + +1. Verifica la versión de tu VS Code. + + ```bash + code --version + ``` + + Se recomienda `1.99.0` o superior. Si la tuya es menor que esa, visita la [página de instalación de Visual Studio Code](https://code.visualstudio.com/) y sigue las instrucciones. + + > **NOTA**: Puede que no puedas ejecutar el comando `code`. En este caso, sigue [este documento](https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line) para la configuración. + +### Iniciar Visual Studio Code + +1. Crea un directorio de trabajo. +1. Ejecuta el comando para hacer fork de este repositorio y clonarlo a tu máquina local. + + ```bash + gh repo fork microsoft/github-copilot-vibe-coding-workshop --clone + ``` + +1. Navega al directorio clonado. + + ```bash + cd github-copilot-vibe-coding-workshop + ``` + +1. Ejecuta VS Code desde la terminal. + + ```bash + code . + ``` + +1. Abre una nueva terminal dentro de VS Code y ejecuta el siguiente comando para verificar el estado de tu repositorio. + + ```bash + git remote -v + ``` + + Deberías poder ver lo siguiente. Si ves `microsoft` en `origin`, deberías clonarlo nuevamente desde tu repositorio forkeado. + + ```bash + origin https://github.com//github-copilot-vibe-coding-workshop.git (fetch) + origin https://github.com//github-copilot-vibe-coding-workshop.git (push) + upstream https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (fetch) + upstream https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (push) + ``` + +1. Verifica si ambas extensiones han sido instaladas o no – [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) y [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat). + + ```bash + # Bash/Zsh + code --list-extensions | grep github.copilot + ``` + + ```powershell + # PowerShell + code --list-extensions | Select-String "github.copilot" + ``` + + Si no ves nada, significa que aún no has instalado esas extensiones. Ejecuta el siguiente comando para instalar las extensiones. + + ```bash + code --install-extension "github.copilot" --force && code --install-extension "github.copilot-chat" --force + ``` + +### Configurar Servidores MCP + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia la configuración de los servidores MCP. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/.vscode/. \ + $REPOSITORY_ROOT/.vscode/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/* ` + -Destination $REPOSITORY_ROOT/.vscode/ -Recurse -Force + ``` + +1. Abre la Paleta de Comandos presionando F1 o `Ctrl`+`Shift`+`P` en Windows o `Cmd`+`Shift`+`P` en Mac OS, y busca `MCP: List Servers`. +1. Elige `context7` y luego haz clic en `Start Server`. + +## Verificar Modo Agente de GitHub Copilot + +1. Haz clic en el ícono de GitHub Copilot en la parte superior de GitHub Codespace o VS Code y abre la ventana de GitHub Copilot. + + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si se te pide iniciar sesión o registrarte, hazlo. Es gratuito. +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot. + + ![Modo Agente de GitHub Copilot](../../../docs/images/setup-03.png) + +1. Selecciona el modelo ya sea `GPT-4.1` o `Claude Sonnet 4`. + +## Preparar Instrucciones Personalizadas + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia las instrucciones personalizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/setup/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/setup/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +## Analizar Documento de Requisitos del Producto (PRD) y Diseñar API + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Agrega [`product-requirements.md`](../product-requirements.md) a GitHub Copilot. +1. Ingresa el prompt como el siguiente para que el Agente de GitHub Copilot genere un documento OpenAPI para ti. Este documento OpenAPI será la base de toda tu aplicación. + + ```text + Aquí tienes el PRD para ti. Lee cuidadosamente todo el PRD y haz lo siguiente para mí. + + - Identifica primero todos los pasos que vas a hacer. + - Genera un documento OpenAPI en formato YAML. + - El documento OpenAPI debe capturar todos los endpoints de la API, parámetros y cargas útiles de solicitud/respuesta. + - Asume que el servidor de la API es `http://localhost:8080` y la URL base es `/api`. + - Guárdalo en el archivo `openapi.yaml` en la raíz del repositorio. + ``` + +1. Verifica que `openapi.yaml` se genere en la raíz del repositorio. +1. Haz clic en el botón `[keep]` de GitHub Copilot para tomar el archivo `openapi.yaml`. + +--- + +Bien. Has completado el paso "Entorno de Desarrollo". Vamos al [PASO 01: Desarrollo Backend Python](./01-python.md). \ No newline at end of file diff --git a/localisation/es-es/docs/01-python.md b/localisation/es-es/docs/01-python.md new file mode 100644 index 0000000..06866aa --- /dev/null +++ b/localisation/es-es/docs/01-python.md @@ -0,0 +1,119 @@ +# 01: Desarrollo Backend Python + +## Escenario + +Contoso es una empresa que vende productos para varias actividades al aire libre. El departamento de marketing de Contoso quiere lanzar un sitio web de redes sociales micro para promocionar sus productos a clientes existentes y potenciales. + +Como desarrollador Python, vas a construir una aplicación backend Python usando FastAPI. Por ahora, estás usando la característica en memoria de SQLite. + +## Prerrequisitos + +Consulta el documento [README](../README.md) para la preparación. + +## Comenzando + +- [Verificar Modo Agente de GitHub Copilot](#verificar-modo-agente-de-github-copilot) +- [Preparar Instrucciones Personalizadas](#preparar-instrucciones-personalizadas) +- [Preparar Entorno Virtual](#preparar-entorno-virtual) +- [Construir Aplicación Backend FastAPI](#construir-aplicación-backend-fastapi) + +### Verificar Modo Agente de GitHub Copilot + +1. Haz clic en el ícono de GitHub Copilot en la parte superior de GitHub Codespace o VS Code y abre la ventana de GitHub Copilot. + + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si se te pide iniciar sesión o registrarte, hazlo. Es gratuito. +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot. + + ![Modo Agente de GitHub Copilot](../../../docs/images/setup-03.png) + +1. Selecciona el modelo ya sea `GPT-4.1` o `Claude Sonnet 4`. +1. Asegúrate de haber configurado [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instrucciones Personalizadas + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia las instrucciones personalizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/python/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/python/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Entorno Virtual + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Usa un prompt como el siguiente para preparar el entorno virtual para el desarrollo de aplicaciones Python. + + ```text + Me gustaría escribir una aplicación Python. Pero antes de eso, necesito configurar un entorno virtual. Sigue las instrucciones a continuación. + + - Usa context7. + - Tu directorio de trabajo es `python`. + - Identifica primero todos los pasos que vas a hacer. + - Usa `.venv` para el entorno virtual. + - Usa `uv` como el gestor de paquetes de Python. + ``` + +### Construir Aplicación Backend FastAPI + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Agrega [`product-requirements.md`](../product-requirements.md) y [`openapi.yaml`](../openapi.yaml) a GitHub Copilot. +1. Usa un prompt como el siguiente para construir una aplicación backend FastAPI. + + ```text + Me gustaría construir una aplicación FastAPI como una API backend. Lee cuidadosamente todo el PRD y `openapi.yaml`. Luego, sigue las instrucciones a continuación. + + - Usa context7. + - Tu directorio de trabajo es `python`. + - Identifica primero todos los pasos que vas a hacer. + - Usa FastAPI como el framework de la aplicación API. + - Usa SQLite como la base de datos. + - Usa `sns_api.db` como el nombre de la base de datos SQLite. + - La base de datos siempre debe ser inicializada cuando se inicie la aplicación. + - Usa `openapi.yaml` que describe todos los endpoints y esquema de datos. + - Usa el número de puerto `8000`. + - Asegúrate de permitir CORS desde cualquier lugar. + - El punto de entrada es `main.py`. + - La aplicación API debe renderizar la página Swagger UI a través de un endpoint predeterminado. + - La aplicación API debe renderizar exactamente el mismo documento OpenAPI a través de un endpoint predeterminado. + - NO agregues nada no definido en `openapi.yaml`. + - NO modifiques nada definido en `openapi.yaml`. + ``` + +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. +1. Una vez que la aplicación esté construida, verifica si está escrita correctamente o no. + + ```text + Ejecuta la aplicación FastAPI y verifica si la aplicación se está ejecutando correctamente. También verifica que el endpoint OpenAPI renderice exactamente el mismo contenido que `openapi.yaml`. + + Si la ejecución de la aplicación falla, analiza los problemas y corrígelos. + ``` + +1. Abre un navegador web y navega a `http://localhost:8000`. +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +--- + +Bien. Has completado el paso "Python". Vamos al [PASO 02: Desarrollo Frontend JavaScript](./02-javascript.md). \ No newline at end of file diff --git a/localisation/es-es/docs/02-javascript.md b/localisation/es-es/docs/02-javascript.md new file mode 100644 index 0000000..24f7611 --- /dev/null +++ b/localisation/es-es/docs/02-javascript.md @@ -0,0 +1,165 @@ +# 02: Desarrollo Frontend JavaScript + +## Escenario + +Contoso es una empresa que vende productos para varias actividades al aire libre. El departamento de marketing de Contoso quiere lanzar un sitio web de redes sociales micro para promocionar sus productos a clientes existentes y potenciales. + +Como desarrollador JavaScript, vas a construir una aplicación frontend JavaScript usando React comunicándose con la aplicación API backend Python. + +## Prerrequisitos + +Consulta el documento [README](../README.md) para la preparación. + +## Comenzando + +- [Verificar Modo Agente de GitHub Copilot](#verificar-modo-agente-de-github-copilot) +- [Preparar Instrucciones Personalizadas](#preparar-instrucciones-personalizadas) +- [Preparar Proyecto de Aplicación](#preparar-proyecto-de-aplicación) +- [Preparar Servidor MCP Figma](#preparar-servidor-mcp-figma) +- [Generar Componentes UI desde Figma](#generar-componentes-ui-desde-figma) +- [Ejecutar Aplicación Backend FastAPI](#ejecutar-aplicación-backend-fastapi) +- [Construir Aplicación Frontend React](#construir-aplicación-frontend-react) +- [Verificar Aplicación Frontend React](#verificar-aplicación-frontend-react) + +### Verificar Modo Agente de GitHub Copilot + +1. Haz clic en el ícono de GitHub Copilot en la parte superior de GitHub Codespace o VS Code y abre la ventana de GitHub Copilot. + + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si se te pide iniciar sesión o registrarte, hazlo. Es gratuito. +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot. + + ![Modo Agente de GitHub Copilot](../../../docs/images/setup-03.png) + +1. Selecciona el modelo ya sea `GPT-4.1` o `Claude Sonnet 4`. +1. Asegúrate de haber configurado [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instrucciones Personalizadas + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia las instrucciones personalizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/javascript/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/javascript/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Proyecto de Aplicación + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Usa un prompt como el siguiente para crear un proyecto de aplicación web React. + + ```text + Me gustaría crear un andamio para una aplicación web React. Sigue las instrucciones a continuación. + + - Asegúrate de que sea la aplicación web, no la aplicación móvil. + - Tu directorio de trabajo es `javascript`. + - Identifica primero todos los pasos que vas a hacer. + - Usa ViteJS como el framework de la aplicación frontend. + - Usa configuraciones predeterminadas al inicializar el proyecto. + - Usa `SimpleSocialMediaApplication` como el nombre del proyecto al inicializar. + - Usa el número de puerto `3000`. + - Solo inicializa el proyecto. NO vayas más allá. + ``` + +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +### Preparar Servidor MCP Figma + +1. Asegúrate de haber configurado [Servidores MCP](./00-setup.md#configurar-servidores-mcp). +1. Obtén el token de acceso personal (PAT) de [Figma](https://www.figma.com/). +1. Abre la Paleta de Comandos presionando F1 o `Ctrl`+`Shift`+`P` en Windows o `Cmd`+`Shift`+`P` en Mac OS, y busca `MCP: List Servers`. +1. Elige `Framelink Figma MCP` y luego haz clic en `Start Server`. +1. Ingresa el PAT que obtuviste de Figma. + +### Generar Componentes UI desde Figma + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de estar ejecutando el servidor MCP Figma. +1. Copia la [plantilla de diseño Figma](https://www.figma.com/community/file/1495954632647006209) a tu cuenta. + + ![Página de plantilla de diseño Figma](../../../docs/images/javascript-01.png) + +1. Haz clic derecho en cada sección - `Home`, `Search`, `Post Details`, `Post Modal` y `Name Input Modal` 👉 Selecciona `Copy/Paste as` 👉 Selecciona `Copy link to selection` para obtener el enlace a cada sección. Toma nota de los cinco enlaces. + +### Ejecutar Aplicación Backend FastAPI + +1. Asegúrate de que la aplicación backend FastAPI esté funcionando. + + ```text + Ejecuta la API backend FastAPI, que se encuentra en el directorio `python`. + ``` + + > **NOTA**: Puedes usar la aplicación de muestra [`complete/python`](../complete/python/) en su lugar. + +1. Si usas GitHub Codespaces, asegúrate de que el número de puerto `8000` esté configurado como `público` en lugar de `privado`. De lo contrario, obtendrás el error `401` al acceder desde la aplicación frontend. + +### Construir Aplicación Frontend React + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Asegúrate de tener todos los enlaces de sección Figma de 5 obtenidos de la [sección anterior](#generar-componentes-ui-desde-figma). +1. Agrega [`product-requirements.md`](../product-requirements.md) y [`openapi.yaml`](../openapi.yaml) a GitHub Copilot. +1. Usa un prompt como el siguiente para construir la aplicación basada en los requisitos y el documento OpenAPI. + + ```text + Me gustaría construir una aplicación web React. Sigue las instrucciones a continuación. + + - Tu directorio de trabajo es `javascript`. + - Identifica primero todos los pasos que vas a hacer. + - Hay una aplicación API backend ejecutándose en `http://localhost:8000`. + - Usa `openapi.yaml` que describe todos los endpoints y esquema de datos. + - Usa el número de puerto `3000`. + - Crea todos los componentes UI definidos en este enlace: {{FIGMA_SECTION_LINK}}. + - NO agregues nada no relacionado con los componentes UI. + - NO agregues nada no definido en `openapi.yaml`. + - NO modifiques nada definido en `openapi.yaml`. + - Da indicación visual cuando la API backend no esté disponible o no sea alcanzable por cualquier razón. + ``` + +1. Repite cuatro veces más para los otros cuatro enlaces de diseño Figma. +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +### Verificar Aplicación Frontend React + +1. Asegúrate de que la aplicación backend FastAPI esté funcionando. + + ```text + Ejecuta la API backend FastAPI, que se encuentra en el directorio `python`. + ``` + +1. Verifica si está construida correctamente o no. + + ```text + Ejecuta la aplicación React y verifica si la aplicación se está ejecutando correctamente. + + Si la ejecución de la aplicación falla, analiza los problemas y corrígelos. + ``` + +1. Abre un navegador web y navega a `http://localhost:3000`. +1. Verifica si tanto las aplicaciones frontend como backend están funcionando correctamente. +1. Haz clic en el botón `[keep]` de GitHub Copilot para tomar los cambios. + +--- + +Bien. Has completado el paso "JavaScript". Vamos al [PASO 03: Migración Java desde Python](./03-java.md). \ No newline at end of file diff --git a/localisation/es-es/docs/03-java.md b/localisation/es-es/docs/03-java.md new file mode 100644 index 0000000..4e8f30f --- /dev/null +++ b/localisation/es-es/docs/03-java.md @@ -0,0 +1,160 @@ +# 03: Migración Java desde Python + +## Escenario + +Contoso es una empresa que vende productos para varias actividades al aire libre. El departamento de marketing de Contoso quiere lanzar un sitio web de redes sociales micro para promocionar sus productos a clientes existentes y potenciales. + +Debido a que un desarrollador Python dejó la empresa, las partes interesadas pidieron migrar la aplicación API backend Python existente a Java, usando Spring Boot. + +Ahora, como desarrollador Java, debes migrar la aplicación FastAPI existente a Spring Boot. Tienes muy poco conocimiento de Python y FastAPI, por cierto. + +## Prerrequisitos + +Consulta el documento [README](../README.md) para la preparación. + +## Comenzando + +- [Verificar Modo Agente de GitHub Copilot](#verificar-modo-agente-de-github-copilot) +- [Preparar Instrucciones Personalizadas](#preparar-instrucciones-personalizadas) +- [Preparar Proyecto Spring Boot](#preparar-proyecto-spring-boot) +- [Migrar Aplicación API FastAPI](#migrar-aplicación-api-fastapi) +- [Verificar Aplicación Backend Spring Boot](#verificar-aplicación-backend-spring-boot) + +### Verificar Modo Agente de GitHub Copilot + +1. Haz clic en el ícono de GitHub Copilot en la parte superior de GitHub Codespace o VS Code y abre la ventana de GitHub Copilot. + + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si se te pide iniciar sesión o registrarte, hazlo. Es gratuito. +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot. + + ![Modo Agente de GitHub Copilot](../../../docs/images/setup-03.png) + +1. Selecciona el modelo ya sea `GPT-4.1` o `Claude Sonnet 4`. +1. Asegúrate de haber configurado [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instrucciones Personalizadas + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia las instrucciones personalizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/java/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/java/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Proyecto Spring Boot + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Instala Spring Boot CLI. + + ```bash + sdk install springboot + ``` + +1. Usa un prompt como el siguiente para crear un andamio para un proyecto de aplicación Spring Boot. + + ```text + Me gustaría crear un andamio para una aplicación Spring Boot. Sigue las instrucciones a continuación. + + - Usa context7. + - Tu directorio de trabajo es `java`. + - Identifica primero todos los pasos que vas a hacer. + - Usa Spring Boot CLI para crear el proyecto de aplicación Spring Boot. + - Usa Gradle como el gestor de paquetes Java. + - Usa el nombre de paquete `com.contoso.socialapp`. + - Usa el ID de artefacto `socialapp`. + - Usa el ID de grupo `com.contoso`. + - Usa el tipo de paquete `jar`. + - Usa la versión OpenJDK `21`. + - Agrega dependencias - `Spring Web`, `Spring Boot Actuator` y `Lombok`. + - Usa el número de puerto `8080`. + - Asegúrate de permitir CORS desde cualquier lugar. + - Construye la aplicación Spring Boot y verifica si la aplicación se construye correctamente. + - Ejecuta esta aplicación Spring Boot y verifica si la aplicación se ejecuta correctamente. + - Si la construcción o ejecución de la aplicación falla, analiza los problemas y corrígelos. + ``` + +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +### Migrar Aplicación API FastAPI + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Agrega [`product-requirements.md`](../product-requirements.md) y [`openapi.yaml`](../openapi.yaml) a GitHub Copilot. +1. Usa un prompt como el siguiente para migrar FastAPI a Spring Boot. + + ```text + Ahora, estamos migrando la aplicación API basada en FastAPI existente a una aplicación API Spring Boot. Sigue las instrucciones a continuación para la migración. + + - Usa context7. + - La aplicación FastAPI existente se encuentra en `python`. + - Tu directorio de trabajo es `java/socialapp`. + - Identifica primero todos los pasos que vas a hacer. + - Analiza la estructura de la aplicación de la aplicación FastAPI existente. + - Migra todos los endpoints. Ambos endpoints correspondientes deben ser exactamente iguales entre sí. + - Usa SQLite como la base de datos. + - Usa `sns_api.db` como el nombre de la base de datos SQLite. + - La base de datos siempre debe ser inicializada cuando se inicie la aplicación. + - Usa `openapi.yaml` que describe todos los endpoints y esquema de datos. + - La aplicación API debe renderizar la página Swagger UI a través de un endpoint predeterminado. + - La aplicación API debe renderizar exactamente el mismo documento OpenAPI a través de un endpoint predeterminado. + - NO agregues nada no definido en `openapi.yaml`. + - NO modifiques nada definido en `openapi.yaml`. + - Si es necesario, agrega más paquetes para OpenAPI y Swagger UI. + ``` + +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. +1. Una vez que la migración haya terminado, usa un prompt como el siguiente para verificar el resultado de la migración. + + ```text + Me gustaría construir la aplicación Spring Boot. Sigue las instrucciones. + + - Usa context7. + - Construye la aplicación Spring Boot y verifica si la aplicación se construye correctamente. + - Si la construcción de la aplicación falla, analiza los problemas y corrígelos. + ``` + + > **NOTA**: + > + > - Hasta que la construcción tenga éxito, itera este paso. + > - Si la construcción sigue fallando, revisa los mensajes de error y pregúntales al Agente GitHub Copilot para resolverlos. + +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +### Verificar Aplicación Backend Spring Boot + +1. Una vez que la aplicación esté construida, verifica si está escrita correctamente o no. + + ```text + Ejecuta la aplicación Spring Boot y verifica si la aplicación se está ejecutando correctamente verificando todos los endpoints. También verifica que el endpoint OpenAPI renderice exactamente el mismo contenido que `openapi.yaml`. + + Si la ejecución de la aplicación falla, analiza los problemas y corrígelos. Usa context7. + ``` + +1. Abre un navegador web y navega a `http://localhost:8080`. +1. Haz clic en el botón ![imagen del botón "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +--- + +Bien. Has completado el paso "Java". Vamos al [PASO 04: Migración .NET desde JavaScript](./04-dotnet.md). \ No newline at end of file diff --git a/localisation/es-es/docs/04-dotnet.md b/localisation/es-es/docs/04-dotnet.md new file mode 100644 index 0000000..05f0d44 --- /dev/null +++ b/localisation/es-es/docs/04-dotnet.md @@ -0,0 +1,173 @@ +# 04: Migración .NET desde JavaScript + +## Escenario + +Contoso es una empresa que vende productos para varias actividades al aire libre. El departamento de marketing de Contoso quiere lanzar un sitio web de redes sociales micro para promocionar sus productos a clientes existentes y potenciales. + +Ya tienen una aplicación frontend escrita en JavaScript, más específicamente en React. Sin embargo, de repente, enviaron nuevos requisitos para redesarrollar la aplicación frontend usando .NET, especialmente en Blazor. + +Ahora, como desarrollador .NET, debes migrar la aplicación React existente a Blazor. Tienes muy poco conocimiento de JavaScript y React, por cierto. + +## Prerrequisitos + +Consulta el documento [README](../README.md) para la preparación. + +## Comenzando + +- [Verificar Modo Agente de GitHub Copilot](#verificar-modo-agente-de-github-copilot) +- [Preparar Instrucciones Personalizadas](#preparar-instrucciones-personalizadas) +- [Preparar Proyecto de Aplicación Web Blazor](#preparar-proyecto-de-aplicación-web-blazor) +- [Ejecutar Aplicación Backend Spring Boot](#ejecutar-aplicación-backend-spring-boot) +- [Migrar Aplicación Web React](#migrar-aplicación-web-react) +- [Verificar Aplicación Frontend Blazor](#verificar-aplicación-frontend-blazor) + +### Verificar Modo Agente de GitHub Copilot + +1. Haz clic en el ícono de GitHub Copilot en la parte superior de GitHub Codespace o VS Code y abre la ventana de GitHub Copilot. + + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si se te pide iniciar sesión o registrarte, hazlo. Es gratuito. +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot. + + ![Modo Agente de GitHub Copilot](../../../docs/images/setup-03.png) + +1. Selecciona el modelo ya sea `GPT-4.1` o `Claude Sonnet 4`. +1. Asegúrate de haber configurado [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instrucciones Personalizadas + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia las instrucciones personalizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/dotnet/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/dotnet/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Proyecto de Aplicación Web Blazor + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Usa un prompt como el siguiente para crear un andamio para un proyecto de aplicación web Blazor. + + ```text + Me gustaría crear un andamio para una aplicación web Blazor. Sigue las instrucciones a continuación. + + - Usa context7. + - Tu directorio de trabajo es `dotnet`. + - Identifica primero todos los pasos que vas a hacer. + - Muéstrame la lista de proyectos .NET relacionados con Blazor y pídeme que elija. + - Genera un proyecto Blazor. + - Usa el nombre de proyecto `Contoso.BlazorApp`. + - Actualiza `launchSettings.json` para cambiar el número de puerto a `3031` para HTTP, `43031` para HTTPS. + - Crea una solución, `ContosoWebApp`, y agrega el proyecto Blazor a esta solución. + - Construye la aplicación Blazor y verifica si la aplicación se construye correctamente. + - Ejecuta esta aplicación Blazor y verifica si la aplicación se ejecuta correctamente. + - Si la construcción o ejecución de la aplicación falla, analiza los problemas y corrígelos. + ``` + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +### Ejecutar Aplicación Backend Spring Boot + +1. Asegúrate de que la aplicación backend Spring Boot esté funcionando. + + ```text + Ejecuta la API backend Spring Boot, que se encuentra en el directorio `java`. + ``` + + > **NOTA**: Puedes usar la aplicación de muestra [`complete/java`](../complete/java/) en su lugar. + +1. Si usas GitHub Codespaces, asegúrate de que el número de puerto `8080` esté configurado como `público` en lugar de `privado`. De lo contrario, obtendrás el error `401` al acceder desde la aplicación frontend. + +### Migrar Aplicación Web React + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Asegúrate de que el servidor MCP `context7` esté funcionando. +1. Usa un prompt como el siguiente para migrar React a Blazor. + + ```text + Ahora, estamos migrando la aplicación web basada en React existente a una aplicación web Blazor. Sigue las instrucciones a continuación para la migración. + + - Usa context7. + - La aplicación React existente se encuentra en `javascript`. + - Tu directorio de trabajo es `dotnet/Contoso.BlazorApp`. + - Identifica primero todos los pasos que vas a hacer. + - Hay una aplicación API backend ejecutándose en `http://localhost:8080`. + - Analiza la estructura de la aplicación de la aplicación React existente. + - Migra todos los componentes React a los de Blazor. Ambos componentes correspondientes deben ser lo más exactamente similares entre sí como sea posible. + - Migra todos los elementos CSS necesarios de React a Blazor. + - Al migrar elementos JavaScript de React a Blazor, maximiza el uso de las características nativas de Blazor tanto como sea posible. Si tienes que usar JavaScript, usa las características JSInterop de Blazor. + - Si es necesario, agrega paquetes NuGet que sean compatibles con .NET 9. + ``` + +1. Una vez que la migración haya terminado, usa un prompt como el siguiente para verificar el resultado de la migración. + + ```text + Me gustaría construir la aplicación Blazor. Sigue las instrucciones. + + - Usa context7. + - Construye la aplicación Blazor y verifica si la aplicación se construye correctamente. + - Si la construcción de la aplicación falla, analiza los problemas y corrígelos. + ``` + + > **NOTA**: + > + > - Hasta que la construcción tenga éxito, itera este paso. + > - Si la construcción sigue fallando, revisa los mensajes de error y pregúntales al Agente GitHub Copilot para resolverlos. + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. +1. Una vez que la construcción tenga éxito, usa un prompt como el siguiente para verificar el resultado de la migración. + + ```text + Me gustaría ejecutar la aplicación Blazor. Sigue las instrucciones. + + - Usa context7. + - Ejecuta esta aplicación Blazor y verifica si la aplicación se ejecuta correctamente. + - Ignora el error de conexión de la aplicación API backend en esta etapa. + - Si la ejecución de la aplicación falla, analiza los problemas y corrígelos. + ``` + +### Verificar Aplicación Frontend Blazor + +1. Asegúrate de que la aplicación backend Spring Boot esté funcionando. + + ```text + Ejecuta la API backend Spring Boot, que se encuentra en el directorio `java`. + ``` + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. +1. Verifica si está construida correctamente o no. + + ```text + Ejecuta la aplicación Blazor y verifica si la aplicación se está ejecutando correctamente. + + Si la ejecución de la aplicación falla, analiza los problemas y corrígelos. + ``` + +1. Abre un navegador web y navega a `http://localhost:3031`. +1. Verifica si tanto las aplicaciones frontend como backend están funcionando correctamente. +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +--- + +Bien. Has completado el paso ".NET". Vamos al [PASO 05: Contenedorización](./05-containerization.md). \ No newline at end of file diff --git a/localisation/es-es/docs/05-containerization.md b/localisation/es-es/docs/05-containerization.md new file mode 100644 index 0000000..7e763a6 --- /dev/null +++ b/localisation/es-es/docs/05-containerization.md @@ -0,0 +1,182 @@ +# 05: Contenedorización + +## Escenario + +Contoso es una empresa que vende productos para varias actividades al aire libre. El departamento de marketing de Contoso quiere lanzar un sitio web de redes sociales micro para promocionar sus productos a clientes existentes y potenciales. + +Ahora tienen tanto una aplicación backend basada en Java como una aplicación frontend basada en .NET. Quieren contenedorizarlas para que puedan ser desplegadas en cualquier plataforma. + +Ahora, como ingeniero DevOps, debes contenedorizar ambas aplicaciones. + +## Prerrequisitos + +Consulta el documento [README](../README.md) para la preparación. + +## Comenzando + +- [Verificar Modo Agente de GitHub Copilot](#verificar-modo-agente-de-github-copilot) +- [Preparar Instrucciones Personalizadas](#preparar-instrucciones-personalizadas) +- [Contenedorizar Aplicación Java](#contenedorizar-aplicación-java) +- [Contenedorizar Aplicación .NET](#contenedorizar-aplicación-net) +- [Orquestar Contenedores](#orquestar-contenedores) + +### Verificar Modo Agente de GitHub Copilot + +1. Haz clic en el ícono de GitHub Copilot en la parte superior de GitHub Codespace o VS Code y abre la ventana de GitHub Copilot. + + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si se te pide iniciar sesión o registrarte, hazlo. Es gratuito. +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot. + + ![Modo Agente de GitHub Copilot](../../../docs/images/setup-03.png) + +1. Selecciona el modelo ya sea `GPT-4.1` o `Claude Sonnet 4`. +1. Asegúrate de haber configurado [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instrucciones Personalizadas + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia las instrucciones personalizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/containerization/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/containerization/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Contenedorizar Aplicación Java + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Usa un prompt como el siguiente para construir una imagen de contenedor para la aplicación Java. + + ```text + Me gustaría construir una imagen de contenedor de una aplicación Java. Sigue las instrucciones a continuación. + + - La aplicación Java se encuentra en `java`. + - Tu directorio de trabajo es la raíz del repositorio. + - Identifica primero todos los pasos que vas a hacer. + - Crea un Dockerfile, `Dockerfile.java`. + - Usa Microsoft OpenJDK 21. + - Usa el enfoque de construcción multi-etapa. + - Extrae JRE del JDK. + - Usa el número de puerto objetivo `8080` para la imagen del contenedor. + ``` + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +1. Una vez que `Dockerfile.java` esté creado, construye la imagen del contenedor con el siguiente prompt. + + ```text + Usa `Dockerfile.java` y construye una imagen de contenedor. + + - Usa `contoso-backend` como el nombre de la imagen del contenedor. + - Usa `latest` como la etiqueta de la imagen del contenedor. + - Verifica si la imagen del contenedor se construye correctamente. + - Si la construcción falla, analiza los problemas y corrígelos. + ``` + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +1. Una vez que la construcción tenga éxito, ejecuta la imagen del contenedor con el siguiente prompt. + + ```text + Usa la imagen del contenedor recién construida, ejecuta un contenedor y verifica si la aplicación se está ejecutando correctamente. + + - Usa el puerto del host `8080`. + ``` + +### Contenedorizar Aplicación .NET + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Usa un prompt como el siguiente para construir una imagen de contenedor para la aplicación .NET. + + ```text + Me gustaría construir una imagen de contenedor de una aplicación .NET. Sigue las instrucciones a continuación. + + - La aplicación .NET se encuentra en `dotnet`. + - Tu directorio de trabajo es la raíz del repositorio. + - Identifica primero todos los pasos que vas a hacer. + - Crea un Dockerfile, `Dockerfile.dotnet`. + - Usa .NET 9. + - Usa el enfoque de construcción multi-etapa. + - Usa el número de puerto objetivo `8080` para la imagen del contenedor. + ``` + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +1. Una vez que `Dockerfile.dotnet` esté creado, construye la imagen del contenedor con el siguiente prompt. + + ```text + Usa `Dockerfile.dotnet` y construye una imagen de contenedor. + + - Usa `contoso-frontend` como el nombre de la imagen del contenedor. + - Usa `latest` como la etiqueta de la imagen del contenedor. + - Verifica si la imagen del contenedor se construye correctamente. + - Si la construcción falla, analiza los problemas y corrígelos. + ``` + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +1. Una vez que la construcción tenga éxito, ejecuta la imagen del contenedor con el siguiente prompt. + + ```text + Usa la imagen del contenedor recién construida, ejecuta un contenedor y verifica si la aplicación se está ejecutando correctamente. + + - Usa el puerto del host `3030`. + ``` + +1. Asegúrate de que tanto las aplicaciones frontend como backend NO se estén comunicando entre sí porque aún no se conocen. Ejecuta el prompt como el siguiente. + + ```text + Independientemente o no, remueve ambos contenedores que están ejecutándose actualmente. + ``` + +### Orquestar Contenedores + +1. Asegúrate de estar usando el Modo Agente de GitHub Copilot con el modelo `Claude Sonnet 4` o `GPT-4.1`. +1. Usa un prompt como el siguiente para construir un archivo Docker Compose. + + ```text + Me gustaría crear un archivo Docker Compose. Sigue las instrucciones a continuación. + + - Tu directorio de trabajo es la raíz del repositorio. + - Usa `Dockerfile.java` como aplicación backend. + - Usa `Dockerfile.dotnet` como aplicación frontend. + - Crea `compose.yaml` como el archivo Docker Compose. + - Usa `contoso` como el nombre de la red. + - Usa `contoso-backend` como el nombre del contenedor de la aplicación Java. Su puerto objetivo es 8080, y el puerto del host es 8080. + - Usa `contoso-frontend` como el nombre del contenedor de la aplicación .NET. Su puerto objetivo es 8080, y el puerto del host es 3030. + - Monta el volumen para la base de datos que usa la aplicación Java, `java/socialapp/sns_api.db`. + ``` + +1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. + +1. Una vez que el archivo `compose.yaml` esté creado, ejecútalo y verifica si ambas aplicaciones se están ejecutando correctamente. + + ```text + Ahora, ejecuta el archivo Docker compose y verifica si las aplicaciones se están ejecutando correctamente. + ``` + +1. Abre un navegador web y navega a `http://localhost:3030`, y verifica si las aplicaciones están funcionando correctamente. + +--- + +¡Felicidades! 🎉 ¡Has completado todas las sesiones del taller exitosamente! \ No newline at end of file diff --git a/localisation/es-es/docs/README.md b/localisation/es-es/docs/README.md new file mode 100644 index 0000000..7d1d055 --- /dev/null +++ b/localisation/es-es/docs/README.md @@ -0,0 +1,12 @@ +# Instrucciones de Aprendizaje Autodidacta + +Aquí están los materiales de instrucción para el aprendizaje autodidacta. ¡Úsalos y construye aplicaciones! + +| Paso | Enlace | +|-------------------------------------|------------------------------------------------------| +| 00: Entorno de Desarrollo | [00-setup.md](./00-setup.md) | +| 01: Desarrollo Backend Python | [01-python.md](./01-python.md) | +| 02: Desarrollo Frontend JavaScript | [02-javascript.md](./02-javascript.md) | +| 03: Migración Java desde Python | [03-java.md](./03-java.md) | +| 04: Migración .NET desde JavaScript | [04-dotnet.md](./04-dotnet.md) | +| 05: Contenedorización | [05-containerization.md](./05-containerization.md) | \ No newline at end of file diff --git a/localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md new file mode 100644 index 0000000..634f515 --- /dev/null +++ b/localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md @@ -0,0 +1,34 @@ +# Reglas de DevOps + +Eres un ingeniero DevOps senior y un experto en contenedorización, Docker, Dockerfile, Docker Compose y Kubernetes. + +## Directrices Generales + +### Principios Básicos + +- Usa inglés para todo el código, documentación y comentarios. +- Prioriza código modular, reutilizable y escalable. +- Sigue las convenciones de nomenclatura: + - camelCase para variables, funciones y nombres de métodos. + - PascalCase para nombres de clases. + - snake_case para nombres de archivos y estructuras de directorios. + - UPPER_CASE para variables de entorno. +- Evita valores codificados directamente; usa variables de entorno o archivos de configuración. +- Aplica los principios de Infraestructura como Código (IaC) donde sea posible. +- Siempre considera el principio de menor privilegio en acceso y permisos. + +### Principios DevOps + +- Automatiza tareas repetitivas y evita intervenciones manuales. +- Escribe pipelines de CI/CD modulares y reutilizables. +- Usa aplicaciones contenedorizadas con registros seguros. +- Gestiona secretos usando Azure Key Vault u otras soluciones de gestión de secretos. +- Construye sistemas resilientes aplicando estrategias de despliegue blue-green o canary. + +## Escenarios Específicos + +### Docker y Docker Compose + +- Usa construcciones multi-etapa en Dockerfiles para optimizar el tamaño de imagen. +- Asegúrate de que los Dockerfiles sean idempotentes y puedan ser construidos múltiples veces sin efectos secundarios. +- Usa Docker Compose para entornos de desarrollo local y pruebas. \ No newline at end of file diff --git a/localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md new file mode 100644 index 0000000..ee5f843 --- /dev/null +++ b/localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md @@ -0,0 +1,81 @@ +# Reglas de Desarrollo .NET + +Eres un desarrollador senior de .NET y un experto en C#, ASP.NET Core, Minimal API, Blazor y .NET Aspire. + +## Estilo y Estructura de Código + +- Escribe código C# conciso e idiomático con ejemplos precisos. +- Sigue las convenciones y mejores prácticas de .NET y ASP.NET Core. +- Usa patrones de programación orientada a objetos y funcional según sea apropiado. +- Prefiere LINQ y expresiones lambda para operaciones de colección. +- Usa nombres descriptivos para variables y métodos (ej., 'IsUserSignedIn', 'CalculateTotal'). +- Estructura archivos según las convenciones de .NET (Controllers, Models, Services, etc.). +- Usa async/await para operaciones asíncronas siempre que sea posible para mejorar el rendimiento y la capacidad de respuesta. + +## Convenciones de Nomenclatura + +- Usa PascalCase para nombres de clases, nombres de métodos y miembros públicos. +- Usa camelCase para variables locales y campos privados. +- Usa UPPERCASE para constantes. +- Prefija nombres de interfaz con "I" (ej., 'IUserService'). + +## Uso de C# y .NET + +- Usa características de C# 10+ cuando sea apropiado (ej., tipos record, pattern matching, asignación null-coalescing). +- Aprovecha las características integradas de ASP.NET Core y middleware. +- Usa Entity Framework Core efectivamente para operaciones de base de datos. + +## Sintaxis y Formato + +- Sigue las Convenciones de Codificación de C# (https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions) +- Usa la sintaxis expresiva de C# (ej., operadores null-conditional, interpolación de cadenas) +- Usa 'var' para tipado implícito cuando el tipo es obvio. + +## Manejo de Errores y Validación + +- Usa excepciones para casos excepcionales, no para flujo de control. +- Implementa logging apropiado de errores usando el logging integrado de .NET o un logger de terceros. +- Usa Data Annotations o Fluent Validation para validación de modelos. +- Implementa middleware de manejo global de excepciones. +- Retorna códigos de estado HTTP apropiados y respuestas de error consistentes. + +## Diseño de API + +- Sigue los principios de diseño de API RESTful. +- Usa enrutamiento por atributos en controladores. +- Implementa versionado para tu API. +- Usa filtros de acción para preocupaciones transversales. + +## Optimización de Rendimiento + +- Usa programación asíncrona con async/await para operaciones vinculadas a I/O. +- Implementa estrategias de caché usando IMemoryCache o caché distribuido. +- Usa consultas LINQ eficientes y evita problemas de consulta N+1. +- Implementa paginación para conjuntos de datos grandes. + +## Convenciones Clave + +- Usa Inyección de Dependencias para bajo acoplamiento y testabilidad. +- Implementa patrón repository o usa Entity Framework Core directamente, dependiendo de la complejidad. +- Usa AutoMapper para mapeo objeto-a-objeto si es necesario. +- Implementa tareas en segundo plano usando IHostedService o BackgroundService. + +## Pruebas + +- Escribe pruebas unitarias usando xUnit, NUnit, o MSTest. +- Usa Moq o NSubstitute para simular dependencias. +- Implementa pruebas de integración para endpoints de API. + +## Seguridad + +- Usa middleware de Autenticación y Autorización. +- Implementa autenticación JWT para autenticación de API sin estado. +- Usa HTTPS y aplica SSL. +- Implementa políticas CORS apropiadas. + +## Documentación de API + +- Usa el paquete OpenAPI integrado para documentación de API. +- Proporciona comentarios XML para controladores y modelos para mejorar la documentación de Swagger. + +Sigue la documentación oficial de Microsoft y las guías de ASP.NET Core para mejores prácticas en enrutamiento, controladores, modelos y otros componentes de API. \ No newline at end of file diff --git a/localisation/es-es/docs/custom-instructions/java/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/java/copilot-instructions.md new file mode 100644 index 0000000..4b429b8 --- /dev/null +++ b/localisation/es-es/docs/custom-instructions/java/copilot-instructions.md @@ -0,0 +1,92 @@ +# Reglas de Desarrollo Java + +Eres un desarrollador senior de Java y un experto en programación Java, Spring Boot, Spring Boot CLI, Spring Framework, Maven, Gradle, JUnit, y tecnologías relacionadas con Java. + +## Estilo y Estructura de Código + +- Escribe código Java limpio, eficiente y bien documentado con ejemplos precisos de Spring Boot. +- Usa mejores prácticas y convenciones de Spring Boot a lo largo de tu código. +- Implementa patrones de diseño de API RESTful al crear servicios web. +- Usa nombres descriptivos para métodos y variables siguiendo la convención camelCase. +- Estructura aplicaciones Spring Boot: controladores, servicios, repositorios, modelos, configuraciones. + +## Especificidades de Spring Boot + +- Usa Spring Boot starters para configuración rápida de proyecto y gestión de dependencias. +- Implementa el uso apropiado de anotaciones (ej., @SpringBootApplication, @RestController, @Service). +- Utiliza las características de auto-configuración de Spring Boot efectivamente. +- Implementa manejo apropiado de excepciones usando @ControllerAdvice y @ExceptionHandler. + +## Convenciones de Nomenclatura + +- Usa PascalCase para nombres de clases (ej., UserController, OrderService). +- Usa camelCase para nombres de métodos y variables (ej., findUserById, isOrderValid). +- Usa ALL_CAPS para constantes (ej., MAX_RETRY_ATTEMPTS, DEFAULT_PAGE_SIZE). + +## Uso de Java y Spring Boot + +- Usa características de Java 17 o posterior cuando sea aplicable (ej., records, sealed classes, pattern matching). +- Aprovecha las características y mejores prácticas de Spring Boot 3.x. +- Usa Spring Data JPA para operaciones de base de datos cuando sea aplicable. +- Implementa validación apropiada usando Bean Validation (ej., @Valid, validadores personalizados). + +## Configuración y Propiedades + +- Usa application.properties o application.yml para configuración. +- Implementa configuraciones específicas de entorno usando Spring Profiles. +- Usa @ConfigurationProperties para propiedades de configuración type-safe. + +## Inyección de Dependencias e IoC + +- Usa inyección por constructor sobre inyección de campo para mejor testabilidad. +- Aprovecha el contenedor IoC de Spring para gestionar ciclos de vida de beans. + +## Pruebas + +- Escribe pruebas unitarias usando JUnit 5 y Spring Boot Test. +- Usa MockMvc para probar capas web. +- Implementa pruebas de integración usando @SpringBootTest. +- Usa @DataJpaTest para pruebas de capa de repositorio. + +## Rendimiento y Escalabilidad + +- Implementa estrategias de caché usando la abstracción Spring Cache. +- Usa procesamiento asíncrono con @Async para operaciones no bloqueantes. +- Implementa indexación apropiada de base de datos y optimización de consultas. + +## Seguridad + +- Implementa Spring Security para autenticación y autorización. +- Usa codificación apropiada de contraseñas (ej., BCrypt). +- Implementa configuración CORS cuando sea necesario. + +## Logging y Monitoreo + +- Usa SLF4J con Logback para logging. +- Implementa niveles de log apropiados (ERROR, WARN, INFO, DEBUG). +- Usa Spring Boot Actuator para monitoreo de aplicación y métricas. + +## Documentación de API + +- Usa Springdoc OpenAPI (anteriormente Swagger) para documentación de API. + +## Acceso a Datos y ORM + +- Usa Spring Data JPA para operaciones de base de datos. +- Implementa relaciones de entidades apropiadas y cascading. +- Usa migraciones de base de datos con herramientas como Flyway o Liquibase. + +## Construcción y Despliegue + +- Usa Maven o Gradle para gestión de dependencias y procesos de construcción. +- Gradle es preferido para proyectos nuevos debido a su flexibilidad y rendimiento. +- Implementa perfiles apropiados para diferentes entornos (dev, test, prod). +- Usa Docker para contenedorización si es aplicable. + +## Sigue mejores prácticas para: + +- Diseño de API RESTful (uso apropiado de métodos HTTP, códigos de estado, etc.). +- Arquitectura de microservicios (si es aplicable). +- Procesamiento asíncrono usando @Async de Spring o programación reactiva con Spring WebFlux. + +Adhiérete a los principios SOLID y mantén alta cohesión y bajo acoplamiento en el diseño de tu aplicación Spring Boot. \ No newline at end of file diff --git a/localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md new file mode 100644 index 0000000..666a872 --- /dev/null +++ b/localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md @@ -0,0 +1,46 @@ +# Reglas de Desarrollo JavaScript + +Eres un Desarrollador Front-End Senior y un Experto en ReactJS, NextJS, ViteJS, JavaScript, TypeScript, HTML, CSS y frameworks modernos de UI/UX (ej., TailwindCSS, Shadcn, Radix). + +Eres reflexivo, das respuestas matizadas, y eres brillante en el razonamiento. Proporcionas cuidadosamente respuestas precisas, fácticas y reflexivas, y eres un genio en el razonamiento. + +## Principios Clave + +- Sigue los requisitos del usuario cuidadosamente y al pie de la letra. +- Primero piensa paso a paso - describe tu plan para lo que vas a construir en pseudocódigo, escrito con gran detalle. +- Confirma, ¡luego escribe código! +- Siempre escribe código correcto, mejores prácticas, principio DRY (Don't Repeat Yourself), libre de errores, completamente funcional y operativo, también debería estar alineado con las reglas listadas abajo en las Directrices de Implementación de Código. +- Enfócate en código fácil y legible, por encima de ser performante. +- Implementa completamente toda la funcionalidad solicitada. +- NO dejes TODO's, marcadores de posición o piezas faltantes. +- ¡Asegúrate de que el código esté completo! Verifica minuciosamente que esté finalizado. +- Incluye todas las importaciones requeridas, y asegura el nombramiento apropiado de componentes clave. +- Sé conciso. Minimiza cualquier otra prosa. +- Si crees que podría no haber una respuesta correcta, dilo. +- Si no sabes la respuesta, dilo, en lugar de adivinar. + +## Entorno de Codificación + +El usuario hace preguntas sobre los siguientes lenguajes de codificación: + +- ReactJS +- NextJS +- ViteJS +- JavaScript +- TypeScript +- TailwindCSS +- HTML +- CSS + +## Directrices de Implementación de Código + +Sigue estas reglas cuando escribas código: + +- TypeScript es preferido sobre JavaScript, a menos que el usuario específicamente solicite JavaScript. +- Elige NextJS o ViteJS para el proyecto, dependiendo de los requisitos. +- Usa retornos tempranos siempre que sea posible para hacer el código más legible. +- Siempre usa clases de Tailwind para dar estilo a elementos HTML; evita usar CSS o etiquetas. +- Usa "class:" en lugar del operador ternario en etiquetas de clase siempre que sea posible. +- Usa nombres descriptivos para variables y funciones/const. Además, las funciones de eventos deberían ser nombradas con un prefijo "handle", como "handleClick" para onClick y "handleKeyDown" para onKeyDown. +- Implementa características de accesibilidad en elementos. Por ejemplo, una etiqueta debería tener tabindex="0", aria-label, on:click, y on:keydown, y atributos similares. +- Usa consts en lugar de funciones, por ejemplo, "const toggle = () =>". También, define un tipo si es posible. \ No newline at end of file diff --git a/localisation/es-es/docs/custom-instructions/python/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/python/copilot-instructions.md new file mode 100644 index 0000000..5a7f031 --- /dev/null +++ b/localisation/es-es/docs/custom-instructions/python/copilot-instructions.md @@ -0,0 +1,70 @@ +# Reglas de Desarrollo Python + +Eres un desarrollador senior de Python y un experto en Python, FastAPI, SQLite y desarrollo de API escalables. + +## Principios Clave + +- Escribe respuestas concisas y técnicas con ejemplos precisos de Python. +- Usa programación funcional y declarativa; evita las clases donde sea posible. +- Prefiere la iteración y modularización sobre la duplicación de código. +- Usa nombres de variables descriptivos con verbos auxiliares (ej., is_active, has_permission). +- Usa letras minúsculas con guiones bajos para directorios y archivos (ej., routers/user_routes.py). +- Favorece las exportaciones nombradas para rutas y funciones utilitarias. +- Usa el patrón Receive an Object, Return an Object (RORO). + +## Python/FastAPI + +- Usa def para funciones puras y async def para operaciones asíncronas. +- Usa anotaciones de tipo para todas las firmas de función. Prefiere modelos Pydantic sobre diccionarios sin procesar para validación de entrada. +- Estructura de archivo: router exportado, sub-rutas, utilidades, contenido estático, tipos (modelos, esquemas). +- Evita llaves innecesarias en declaraciones condicionales. +- Para declaraciones de una línea en condicionales, omite las llaves. +- Usa sintaxis concisa de una línea para declaraciones condicionales simples (ej., if condition: do_something()). + +## Manejo de Errores y Validación + +- Prioriza el manejo de errores y casos extremos: + - Maneja errores y casos extremos al principio de las funciones. + - Usa retornos tempranos para condiciones de error para evitar declaraciones if profundamente anidadas. + - Coloca el camino feliz al final de la función para mejorar la legibilidad. + - Evita declaraciones else innecesarias; usa el patrón if-return en su lugar. + - Usa cláusulas de guardia para manejar precondiciones y estados inválidos temprano. + - Implementa logging de errores apropiado y mensajes de error amigables para el usuario. + - Usa tipos de error personalizados o fábricas de error para manejo consistente de errores. + +## Dependencias + +- FastAPI +- Pydantic v2 +- Librerías de base de datos asíncronas como asyncpg o aiomysql +- SQLAlchemy 2.0 (si usas características ORM) + +## Directrices Específicas de FastAPI + +- Usa componentes funcionales (funciones simples) y modelos Pydantic para validación de entrada y esquemas de respuesta. +- Usa definiciones de ruta declarativas con anotaciones claras de tipo de retorno. +- Usa def para operaciones síncronas y async def para asíncronas. +- Minimiza @app.on_event("startup") y @app.on_event("shutdown"); prefiere manejadores de contexto lifespan para gestionar eventos de inicio y cierre. +- Usa middleware para logging, monitoreo de errores y optimización de rendimiento. +- Optimiza para rendimiento usando funciones async para tareas vinculadas a I/O, estrategias de caché y carga perezosa. +- Usa HTTPException para errores esperados y modélalos como respuestas HTTP específicas. +- Usa middleware para manejar errores inesperados, logging y monitoreo de errores. +- Usa BaseModel de Pydantic para validación de entrada/salida consistente y esquemas de respuesta. + +## Optimización de Rendimiento + +- Minimiza operaciones de I/O bloqueantes; usa operaciones asíncronas para todas las llamadas a base de datos y solicitudes de API externas. +- Implementa caché para datos estáticos y frecuentemente accedidos usando herramientas como Redis o almacenes en memoria. +- Optimiza la serialización y deserialización de datos con Pydantic. +- Usa técnicas de carga perezosa para conjuntos de datos grandes y respuestas API sustanciales. + +## Convenciones Clave + +1. Confía en el sistema de inyección de dependencias de FastAPI para gestionar estado y recursos compartidos. +2. Prioriza las métricas de rendimiento de API (tiempo de respuesta, latencia, throughput). +3. Limita las operaciones bloqueantes en rutas: + - Favorece flujos asíncronos y no bloqueantes. + - Usa funciones async dedicadas para operaciones de base de datos y API externas. + - Estructura rutas y dependencias claramente para optimizar legibilidad y mantenibilidad. + +Consulta la documentación de FastAPI para Modelos de Datos, Operaciones de Ruta y Middleware para mejores prácticas. \ No newline at end of file diff --git a/localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md new file mode 100644 index 0000000..ca3d0de --- /dev/null +++ b/localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md @@ -0,0 +1,5 @@ +Eres un experto como Analista de Negocios. Eres muy capaz de interpretar los requisitos comerciales a detalles técnicos. + +Cuando trabajas con OpenAPI, siempre se refiere a la versión de especificación 3.0.1. + +Cuando creas un documento OpenAPI, siempre debes considerar la reutilización del esquema de datos. NO dupliques estructuras de datos similares. \ No newline at end of file diff --git a/localisation/es-es/dotnet/README.md b/localisation/es-es/dotnet/README.md new file mode 100644 index 0000000..ccbb5d3 --- /dev/null +++ b/localisation/es-es/dotnet/README.md @@ -0,0 +1,5 @@ +# Comenzando con .NET + +Aquí está el punto de partida para el desarrollo de tu aplicación .NET. + +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/dotnet](../complete/dotnet/). \ No newline at end of file diff --git a/localisation/es-es/java/README.md b/localisation/es-es/java/README.md new file mode 100644 index 0000000..faba0ed --- /dev/null +++ b/localisation/es-es/java/README.md @@ -0,0 +1,5 @@ +# Comenzando con Java + +Aquí está el punto de partida para el desarrollo de tu aplicación Java. + +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/java](../complete/java/). \ No newline at end of file diff --git a/localisation/es-es/javascript/README.md b/localisation/es-es/javascript/README.md new file mode 100644 index 0000000..729f233 --- /dev/null +++ b/localisation/es-es/javascript/README.md @@ -0,0 +1,5 @@ +# Comenzando con JavaScript + +Aquí está el punto de partida para el desarrollo de tu aplicación JavaScript. + +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/javascript](../complete/javascript/). \ No newline at end of file diff --git a/localisation/es-es/product-requirements.md b/localisation/es-es/product-requirements.md new file mode 100644 index 0000000..b6ceb56 --- /dev/null +++ b/localisation/es-es/product-requirements.md @@ -0,0 +1,148 @@ +# Documento de Requisitos del Producto (PRD) + +## Título del Producto + +Aplicación Simple de Redes Sociales + +## Versión del Documento + +1.0.0 + +## Autor + +Propietario del Producto / Líder Técnico en Contoso + +## Última Actualización + +2025-05-30 + +--- + +## 1. Resumen + +El objetivo de este proyecto es construir un Servicio de Redes Sociales (SNS) básico pero funcional que permita a los usuarios crear, recuperar, actualizar y eliminar publicaciones; agregar comentarios; y dar/quitar me gusta a las publicaciones. El enfoque API-first asegura que pueda ser usado como backend para frontends web o móviles. + +## 2. Contexto + +Contoso es una empresa que vende productos para varias actividades al aire libre. El departamento de marketing de Contoso quiere lanzar un sitio web de redes sociales micro para promocionar sus productos a clientes existentes y potenciales. Como su primer MVP, el departamento de marketing quiere construir rápidamente el sitio web. + +## 3. Objetivos y Metas + +* Proporcionar operaciones CRUD para contenido generado por usuarios (publicaciones). +* Habilitar interacción social a través de comentarios y me gusta. +* Mantener simplicidad para casos de uso educativos y MVP. +* Asegurar diseño de API RESTful y manejo adecuado de errores. + +## 4. Características Clave + +### 4.1 Gestión de Publicaciones + +* **Listar Publicaciones** + + * **GET** `/api/posts` + * Historia de Usuario: Como usuario, quiero ver todas las publicaciones recientes para poder navegar lo que otros están compartiendo. + +* **Crear Publicación** + + * **POST** `/api/posts` + * Requerido: `username`, `content` + * Historia de Usuario: Como usuario, quiero crear una nueva publicación para poder compartir algo con otros. + +* **Obtener Publicación Individual** + + * **GET** `/api/posts/{postId}` + * Historia de Usuario: Como usuario, quiero leer una publicación específica en detalle. + +* **Actualizar Publicación** + + * **PATCH** `/api/posts/{postId}` + * Requerido: `username`, `content` + * Historia de Usuario: Como usuario, quiero actualizar mi publicación si cometí un error o tengo algo que agregar. + +* **Eliminar Publicación** + + * **DELETE** `/api/posts/{postId}` + * Historia de Usuario: Como usuario, quiero eliminar mi publicación si ya no quiero que sea compartida. + +### 4.2 Gestión de Comentarios + +* **Listar Comentarios de una Publicación** + + * **GET** `/api/posts/{postId}/comments` + * Historia de Usuario: Como usuario, quiero leer todos los comentarios en una publicación. + +* **Crear Comentario** + + * **POST** `/api/posts/{postId}/comments` + * Requerido: `username`, `content` + * Historia de Usuario: Como usuario, quiero comentar en una publicación para compartir mis pensamientos. + +* **Obtener Comentario Específico** + + * **GET** `/api/posts/{postId}/comments/{commentId}` + * Historia de Usuario: Como usuario, quiero ver un comentario específico en detalle. + +* **Actualizar Comentario** + + * **PATCH** `/api/posts/{postId}/comments/{commentId}` + * Requerido: `username`, `content` + * Historia de Usuario: Como usuario, quiero corregir o revisar mi comentario. + +* **Eliminar Comentario** + + * **DELETE** `/api/posts/{postId}/comments/{commentId}` + * Historia de Usuario: Como usuario, quiero eliminar mi comentario si es necesario. + +### 4.3 Sistema de Me Gusta + +* **Dar Me Gusta a una Publicación** + + * **POST** `/api/posts/{postId}/likes` + * Requerido: `username` + * Historia de Usuario: Como usuario, quiero dar me gusta a una publicación para mostrar aprecio. + +* **Quitar Me Gusta a una Publicación** + + * **DELETE** `/api/posts/{postId}/likes` + * Historia de Usuario: Como usuario, quiero quitar mi me gusta si cambio de opinión. + +## 5. Roles de Usuario y Permisos + +* **Usuarios Anónimos** + * Pueden leer publicaciones y comentarios. + +* **Usuarios Autenticados (vía campo username)** + * Pueden crear, actualizar, eliminar sus propias publicaciones y comentarios. + * Pueden dar/quitar me gusta a publicaciones. + +## 6. Contratos de API + +* Definir el documento OpenAPI con la especificación v3.0.1 al menos. +* Usa códigos de estado HTTP estándar. + * `200 OK`, `201 Created`, `204 No Content`, `400 Bad Request`, `404 Not Found`, `500 Internal Server Error` +* Content-Type: `application/json` + +## 7. Requisitos No Funcionales + +* **Documentación**: La API debe estar completamente documentada usando Swagger UI. +* **Seguridad**: Validación de entrada y validación básica de solicitudes, incluso si la autenticación completa no está implementada. + +## 8. Suposiciones y Dependencias + +* Usar base de datos en memoria para este producto. +* No se incluye soporte para carga de archivos o medios. +* No hay flujos de registro de usuario o login/autenticación. +* No se requiere código de pruebas. + +## 9. Métricas de Éxito + +* Todos los endpoints de la API son alcanzables y responden como está documentado. +* Capaz de publicar, comentar, dar me gusta y eliminar recursos de extremo a extremo. +* Documentación clara de Swagger generada desde OpenAPI. + +## 10. Fuera del Alcance + +* Autenticación de usuario (OAuth, JWT, etc.) +* Actualizaciones en tiempo real o notificaciones +* Herramientas de moderación o reportes +* Cargas multimedia (imágenes, video) \ No newline at end of file diff --git a/localisation/es-es/python/README.md b/localisation/es-es/python/README.md new file mode 100644 index 0000000..7ed898c --- /dev/null +++ b/localisation/es-es/python/README.md @@ -0,0 +1,5 @@ +# Comenzando con Python + +Aquí está el punto de partida para el desarrollo de tu aplicación Python. + +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/python](../complete/python/). \ No newline at end of file From 9c92afc2c53a083a7e0390db973441fa1cb04b11 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Jun 2025 13:56:26 +0900 Subject: [PATCH 02/17] [WIP] Add Portuguese localisation for all markdown files (#31) * Initial plan for issue * Add Portuguese localisation for main README and product requirements Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Add Portuguese localisation for setup, python and javascript docs Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Add Portuguese localisation for remaining main docs files Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Add Portuguese localisation for custom instructions and partial complete files Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Complete Portuguese localization for remaining README files Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Update ToC --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> Co-authored-by: Justin Yoo --- localisation/pt-br/README.md | 106 +++++ localisation/pt-br/complete/README.md | 56 +++ localisation/pt-br/complete/dotnet/README.md | 35 ++ .../pt-br/complete/java/socialapp/README.md | 367 ++++++++++++++++++ .../pt-br/complete/javascript/README.md | 43 ++ localisation/pt-br/complete/python/README.md | 292 ++++++++++++++ localisation/pt-br/docs/00-setup.md | 352 +++++++++++++++++ localisation/pt-br/docs/01-python.md | 119 ++++++ localisation/pt-br/docs/02-javascript.md | 165 ++++++++ localisation/pt-br/docs/03-java.md | 160 ++++++++ localisation/pt-br/docs/04-dotnet.md | 173 +++++++++ .../pt-br/docs/05-containerization.md | 182 +++++++++ localisation/pt-br/docs/README.md | 12 + .../containerization/copilot-instructions.md | 34 ++ .../dotnet/copilot-instructions.md | 81 ++++ .../java/copilot-instructions.md | 92 +++++ .../javascript/copilot-instructions.md | 46 +++ .../python/copilot-instructions.md | 70 ++++ .../setup/copilot-instructions.md | 5 + localisation/pt-br/dotnet/README.md | 5 + localisation/pt-br/java/README.md | 5 + localisation/pt-br/javascript/README.md | 5 + localisation/pt-br/product-requirements.md | 148 +++++++ localisation/pt-br/python/README.md | 5 + 24 files changed, 2558 insertions(+) create mode 100644 localisation/pt-br/README.md create mode 100644 localisation/pt-br/complete/README.md create mode 100644 localisation/pt-br/complete/dotnet/README.md create mode 100644 localisation/pt-br/complete/java/socialapp/README.md create mode 100644 localisation/pt-br/complete/javascript/README.md create mode 100644 localisation/pt-br/complete/python/README.md create mode 100644 localisation/pt-br/docs/00-setup.md create mode 100644 localisation/pt-br/docs/01-python.md create mode 100644 localisation/pt-br/docs/02-javascript.md create mode 100644 localisation/pt-br/docs/03-java.md create mode 100644 localisation/pt-br/docs/04-dotnet.md create mode 100644 localisation/pt-br/docs/05-containerization.md create mode 100644 localisation/pt-br/docs/README.md create mode 100644 localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md create mode 100644 localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md create mode 100644 localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md create mode 100644 localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md create mode 100644 localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md create mode 100644 localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md create mode 100644 localisation/pt-br/dotnet/README.md create mode 100644 localisation/pt-br/java/README.md create mode 100644 localisation/pt-br/javascript/README.md create mode 100644 localisation/pt-br/product-requirements.md create mode 100644 localisation/pt-br/python/README.md diff --git a/localisation/pt-br/README.md b/localisation/pt-br/README.md new file mode 100644 index 0000000..73d15f5 --- /dev/null +++ b/localisation/pt-br/README.md @@ -0,0 +1,106 @@ +# Workshop de Codificação GitHub Copilot Vibe + +![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) + +Vamos codar com vibe usando o [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) e seus recursos mais novos e incríveis em várias linguagens de programação como Python, JavaScript, Java e .NET, além de tornar os aplicativos nativos da nuvem através da containerização. Você está pronto para mergulhar? + +## Contexto + +A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. O departamento de marketing da Contoso gostaria de lançar um site de micro mídia social para promover seus produtos para clientes existentes e potenciais. Como seu primeiro MVP, eles querem construir rapidamente o site. O departamento de TI da Contoso atualmente tem dois desenvolvedores usando Python e JavaScript, respectivamente. A data de lançamento está se aproximando rapidamente, então ambos os desenvolvedores devem entregar a aplicação rapidamente. + +Mas aqui está a situação... + +## Objetivos do Workshop + +- Construir aplicações usando o Modo Agente do GitHub Copilot. +- Adicionar instruções customizadas ao GitHub Copilot para que você tenha mais controle sobre o GitHub Copilot. +- Adicionar vários servidores MCP ao GitHub Copilot para que você construa as aplicações com mais precisão. + +## Workshop no Seu Idioma + +Este material do workshop está atualmente disponível nos seguintes idiomas: + +[English](../../README.md) | [Español](../es-es/) | [Português](./README.md) | [Français](../fr-fr/) | [中文(简体)](../zh-cn/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) + +## Pré-requisitos + +Durante este workshop, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) é altamente recomendado porque não há necessidade de preparação, exceto um navegador web. No entanto, se você realmente precisar usar sua máquina, certifique-se de ter instalado tudo identificado abaixo. + +### Comum + +- [Visual Studio Code](https://code.visualstudio.com/) +- Extensão [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) do VS Code +- Extensão [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) do VS Code +- 💥 Para usuários Windows 👉 [PowerShell 7](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) +- [git CLI](https://git-scm.com/downloads) +- [GitHub CLI](https://cli.github.com/) +- [Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) + +### Python + +- [pyenv](https://github.com/pyenv/pyenv) ou [pyenv for Windows](https://github.com/pyenv-win/pyenv-win) +- Python 3.12+ através do pyenv +- Gerenciador de pacotes `uv` (recomendado) ou `pip` +- Extensão [Python](https://marketplace.visualstudio.com/items/?itemName=ms-python.python) do VS Code +- Extensão [Pylance](https://marketplace.visualstudio.com/items/?itemName=ms-python.vscode-pylance) do VS Code +- Extensão [Python Debugger](https://marketplace.visualstudio.com/items/?itemName=ms-python.debugpy) do VS Code +- Extensão [autopep8](https://marketplace.visualstudio.com/items/?itemName=ms-python.autopep8) do VS Code + +### JavaScript + +- [nvm](https://github.com/nvm-sh/nvm) ou [nvm for Windows](https://github.com/coreybutler/nvm-windows) +- A versão LTS mais recente do [Node.js](https://nodejs.org/) através do nvm + +### Java + +- [SDKMAN](https://sdkman.io/) +- [OpenJDK 21](https://learn.microsoft.com/java/openjdk/download) através do SDKMAN +- [Apache Maven](https://maven.apache.org/download.cgi) através do SDKMAN +- [Gradle Build Tool](https://docs.gradle.org/current/userguide/installation.html) através do SDKMAN +- [Spring Boot Initializr](https://docs.spring.io/spring-boot/cli/installation.html) através do SDKMAN +- Extensão [Extension Pack for Java](https://marketplace.visualstudio.com/items/?itemName=vscjava.vscode-java-pack) do VS Code +- Extensão [Spring Boot Extension Pack](https://marketplace.visualstudio.com/items/?itemName=vmware.vscode-boot-dev-pack) do VS Code + +### .NET + +- [.NET SDK 9](https://dotnet.microsoft.com/download/dotnet/9.0) +- Extensão [VS Code C# Dev Kit](https://marketplace.visualstudio.com/items/?itemName=ms-dotnettools.csdevkit) + +## Documento de Requisitos do Produto + +Em primeiro lugar, o lugar para você começar é este [PRD (Documento de Requisitos do Produto)](./product-requirements.md). Este documento lhe dará uma melhor compreensão do que fazer e como fazer. + +## Instruções do Workshop + +Este é um workshop autoguiado seguindo os links abaixo: + +| Etapa | Link | +|------------------------------------------|---------------------------------------------------------| +| 00: Ambiente de Desenvolvimento | [00-setup.md](./docs/00-setup.md) | +| 01: Backend Python | [01-python.md](./docs/01-python.md) | +| 02: Frontend JavaScript | [02-javascript.md](./docs/02-javascript.md) | +| 03: Migração Java do Python | [03-java.md](./docs/03-java.md) | +| 04: Migração .NET do JavaScript | [04-dotnet.md](./docs/04-dotnet.md) | +| 05: Containerização | [05-containerization.md](./docs/05-containerization.md) | + +## Exemplos Completos + +Confira o exemplo completo de cada aplicação. Eles também foram codificados com vibe usando o GitHub Copilot, portanto, podem não ser perfeitos, e você não precisa seguir o app. + +| Linguagem | Aplicação | Localização | +|---------------------|-------------|--------------------------------------| +| Backend Python | FastAPI | [python](./complete/python/) | +| Frontend JavaScript | React | [javascript](./complete/javascript/) | +| Backend Java | Spring Boot | [java](./complete/java/) | +| Frontend .NET | Blazor | [dotnet](./complete/dotnet/) | +| Containerização | Container | [containerization](./complete/) | + +## Leia Mais... + +- [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) +- [GitHub Copilot](https://docs.github.com/en/copilot/about-github-copilot/what-is-github-copilot) +- [GitHub Copilot: Agent Mode](https://code.visualstudio.com/blogs/2025/04/07/agentMode) +- [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) +- [GitHub Copilot: Custom Instructions](https://code.visualstudio.com/docs/copilot/copilot-customization) +- [GitHub Copilot: Changing AI Models](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) +- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) \ No newline at end of file diff --git a/localisation/pt-br/complete/README.md b/localisation/pt-br/complete/README.md new file mode 100644 index 0000000..740b0b5 --- /dev/null +++ b/localisation/pt-br/complete/README.md @@ -0,0 +1,56 @@ +# Exemplos de Aplicações Completas + +Aqui está a lista de exemplos de aplicações completas. Como elas também foram codificadas com vibe, você pode verificar como foram construídas. + +| Aplicação | Localização | +|-------------|-----------------------------| +| FastAPI | [python](./python/) | +| React | [javascript](./javascript/) | +| Spring Boot | [java](./java/) | +| Blazor | [dotnet](./dotnet/) | + +## Exemplo de Containerização + +### Pré-requisitos + +Consulte a documentação [README](../README.md) para preparação. + +### Primeiros Passos + +1. Certifique-se de que o Docker está rodando. + + ```bash + docker info + ``` + +1. Obtenha a raiz do repositório. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Navegue para o diretório `complete`. + + ```bash + cd $REPOSITORY_ROOT/complete + ``` + +1. Execute as aplicações containerizadas. + + ```bash + docker compose up --build -d + ``` + +1. Abra um navegador web e navegue para `http://localhost:3030`. +1. Verifique se a aplicação web está funcionando adequadamente. +1. Limpe executando o seguinte comando para remover as aplicações containerizadas. + + ```bash + docker compose down --rmi all + ``` \ No newline at end of file diff --git a/localisation/pt-br/complete/dotnet/README.md b/localisation/pt-br/complete/dotnet/README.md new file mode 100644 index 0000000..8eb928b --- /dev/null +++ b/localisation/pt-br/complete/dotnet/README.md @@ -0,0 +1,35 @@ +# Exemplo de Aplicação .NET + +## Pré-requisitos + +Consulte a documentação [README](../../README.md) para preparação. + +## Primeiros Passos + +### Executar Backend Spring Boot + +Use [Exemplo de Aplicação Java](../java/). + +> **NOTA**: Se você usar GitHub Codespaces, certifique-se de que a porta da aplicação Java, `8080`, está definida como **pública**. + +### Executar Frontend Blazor + +1. Obtenha a raiz do repositório. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Execute a aplicação. + + ```bash + dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp + ``` + +1. Verifique se a aplicação web está funcionando adequadamente. \ No newline at end of file diff --git a/localisation/pt-br/complete/java/socialapp/README.md b/localisation/pt-br/complete/java/socialapp/README.md new file mode 100644 index 0000000..183d3a8 --- /dev/null +++ b/localisation/pt-br/complete/java/socialapp/README.md @@ -0,0 +1,367 @@ +# Aplicação Java de Exemplo + +Uma aplicação REST API Spring Boot abrangente para uma plataforma de mídia social com operações CRUD completas para posts, comentários e curtidas. + +## Visão Geral do Projeto + +Esta é uma aplicação Spring Boot pronta para produção construída com as seguintes especificações: + +- **Nome do Pacote**: `com.contoso.socialapp` +- **ID do Artefato**: `socialapp` +- **ID do Grupo**: `com.contoso` +- **Tipo de Pacote**: `jar` +- **Versão Java**: OpenJDK 21 +- **Ferramenta de Build**: Gradle +- **Banco de Dados**: SQLite (embarcado) +- **Porta**: 8080 + +### Dependências do Projeto + +- **Spring Boot 3.2.5**: Framework principal +- **Spring Web**: Endpoints da RESTful API +- **Spring Data JPA**: Operações de banco de dados +- **Spring Boot Actuator**: Monitoramento da aplicação +- **Spring Boot Validation**: Validação de entrada +- **SQLite**: Banco de dados embarcado +- **Hibernate Community Dialects**: Suporte ao SQLite +- **Springdoc OpenAPI**: Documentação da API (Swagger UI) +- **Lombok**: Redução de código boilerplate + +### Estrutura do Projeto + +```text +src/ +├── main/ +│ ├── java/ +│ │ └── com/ +│ │ └── contoso/ +│ │ └── socialapp/ +│ │ ├── SocialAppApplication.java # Classe principal da aplicação +│ │ ├── config/ +│ │ │ ├── WebConfig.java # Configuração CORS +│ │ │ └── OpenApiConfig.java # Configuração Swagger/OpenAPI +│ │ ├── controller/ +│ │ │ ├── HealthController.java # Endpoints de saúde +│ │ │ ├── PostController.java # Gerenciamento de posts +│ │ │ └── CommentController.java # Gerenciamento de comentários e curtidas +│ │ ├── model/ +│ │ │ ├── Post.java # Entidade Post +│ │ │ ├── Comment.java # Entidade Comment +│ │ │ ├── Like.java # Entidade Like +│ │ │ └── dto/ # Objetos de Transferência de Dados +│ │ ├── repository/ +│ │ │ ├── PostRepository.java # Acesso a dados de posts +│ │ │ ├── CommentRepository.java # Acesso a dados de comentários +│ │ │ └── LikeRepository.java # Acesso a dados de curtidas +│ │ └── service/ +│ │ ├── PostService.java # Lógica de negócio de posts +│ │ └── CommentService.java # Lógica de negócio de comentários +│ └── resources/ +│ ├── application.properties # Configuração da aplicação +│ └── data.sql # Dados de exemplo (opcional) +└── test/ + └── java/ + └── com/ + └── contoso/ + └── socialapp/ + └── SocialAppApplicationTests.java # Testes de integração +``` + +## Funcionalidades + +- ✅ API RESTful completa para operações de mídia social +- ✅ Gerenciamento de posts (Criar, Ler, Atualizar, Excluir) +- ✅ Sistema de comentários com operações CRUD completas +- ✅ Funcionalidade de curtir/descurtir +- ✅ Banco de dados SQLite com JPA/Hibernate +- ✅ Documentação OpenAPI/Swagger +- ✅ CORS habilitado para localhost e GitHub Codespaces +- ✅ Configuração dinâmica de URL do servidor +- ✅ Endpoints de verificação de saúde +- ✅ Integração com Spring Boot Actuator +- ✅ Tratamento abrangente de erros +- ✅ Validação de entrada com Bean Validation + +## Início Rápido + +### Pré-requisitos + +Consulte a documentação [README](../../README.md) para preparação. + +### 1. Configuração do Ambiente + +Primeiro, defina a variável de ambiente `$REPOSITORY_ROOT`. + +```bash +# bash/zsh +REPOSITORY_ROOT=$(git rev-parse --show-toplevel) +``` + +```powershell +# PowerShell +$REPOSITORY_ROOT = git rev-parse --show-toplevel +``` + +Em seguida, navegue até o diretório java. + +```bash +cd $REPOSITORY_ROOT/complete/java +``` + +### 2. Construir a Aplicação + +```bash +# Tornar gradlew executável (se necessário) +chmod +x ./gradlew + +# Construir o projeto +./gradlew build +``` + +### 3. Executar a Aplicação + +```bash +# Iniciar a aplicação usando Gradle +./gradlew bootRun + +# Alternativa: Executar o arquivo JAR diretamente +# java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar +``` + +### 4. Verificar se a Aplicação está Executando + +```bash +# Verificar endpoint de saúde +curl http://localhost:8080/api/health + +# Resposta esperada: {"status":"healthy"} +``` + +### 5. Acessar Documentação da API + +Abra seu navegador e navegue para: + +- **Swagger UI**: [http://localhost:8080/swagger-ui.html](http://localhost:8080/swagger-ui.html) +- **OpenAPI JSON**: [http://localhost:8080/v3/api-docs](http://localhost:8080/v3/api-docs) + +## Endpoints da API + +### Saúde e Boas-vindas + +- `GET /api/health` - Endpoint personalizado de verificação de saúde +- `GET /api/welcome` - Endpoint de mensagem de boas-vindas + +### Gerenciamento de Posts + +- `GET /api/posts` - Obter todos os posts +- `GET /api/posts/{id}` - Obter post específico por ID +- `POST /api/posts` - Criar um novo post +- `PATCH /api/posts/{id}` - Atualizar um post existente +- `DELETE /api/posts/{id}` - Excluir um post + +### Gerenciamento de Comentários + +- `GET /api/posts/{postId}/comments` - Obter todos os comentários de um post +- `GET /api/posts/{postId}/comments/{commentId}` - Obter comentário específico +- `POST /api/posts/{postId}/comments` - Adicionar um comentário a um post +- `PATCH /api/posts/{postId}/comments/{commentId}` - Atualizar um comentário +- `DELETE /api/posts/{postId}/comments/{commentId}` - Excluir um comentário + +### Gerenciamento de Curtidas + +- `POST /api/posts/{postId}/like` - Curtir um post +- `DELETE /api/posts/{postId}/like` - Descurtir um post + +### Spring Boot Actuator + +- `GET /actuator/health` - Indicador de saúde do Spring Boot +- `GET /actuator/info` - Informações da aplicação + +## Testando a API + +### Usando Exemplos de cURL + +#### Criar um Post + +```bash +curl -X POST http://localhost:8080/api/posts \ + -H "Content-Type: application/json" \ + -d '{ + "title": "Meu Primeiro Post", + "content": "Este é o conteúdo do meu primeiro post!", + "authorName": "João Silva" + }' +``` + +#### Obter Todos os Posts + +```bash +curl http://localhost:8080/api/posts +``` + +#### Adicionar um Comentário + +```bash +curl -X POST http://localhost:8080/api/posts/1/comments \ + -H "Content-Type: application/json" \ + -d '{ + "content": "Ótimo post!", + "authorName": "Maria Santos" + }' +``` + +#### Curtir um Post + +```bash +curl -X POST http://localhost:8080/api/posts/1/like \ + -H "Content-Type: application/json" \ + -d '{ + "userName": "joao_silva" + }' +``` + +### Usando Swagger UI + +1. Abra [http://localhost:8080/swagger-ui.html](http://localhost:8080/swagger-ui.html) +2. Explore os endpoints disponíveis +3. Clique em "Try it out" em qualquer endpoint +4. Preencha os parâmetros e clique em "Execute" + +## Desenvolvimento + +### Executando Testes + +```bash +# Executar todos os testes +./gradlew test + +# Executar com relatório de cobertura +./gradlew test jacocoTestReport + +# Executar classe de teste específica +./gradlew test --tests "SocialAppApplicationTests" +``` + +### Banco de Dados + +A aplicação usa SQLite como banco de dados embarcado: + +- **Arquivo do banco de dados**: `sns_api.db` (criado automaticamente) +- **Localização**: Diretório raiz do projeto +- **Schema**: Gerado automaticamente pelo Hibernate +- **Dados de exemplo**: Carregados de `data.sql` (se presente) + +Para resetar o banco de dados, simplesmente exclua o arquivo `sns_api.db` e reinicie a aplicação. + +## Configuração + +### Propriedades da Aplicação + +Configurações principais em `application.properties`: + +```properties +# Configurações da Aplicação +spring.application.name=socialapp +server.port=8080 + +# Configuração do Banco de Dados +spring.datasource.url=jdbc:sqlite:sns_api.db +spring.jpa.hibernate.ddl-auto=update + +# Configuração OpenAPI/Swagger +springdoc.swagger-ui.path=/swagger-ui.html +springdoc.swagger-ui.operationsSorter=method +``` + +### Configuração CORS + +A aplicação suporta tanto localhost quanto GitHub Codespaces: + +- **Localhost**: `http://localhost:8080` +- **GitHub Codespaces**: Detectado e configurado automaticamente de forma dinâmica + +### Detecção de Ambiente + +A aplicação detecta automaticamente o ambiente de execução: + +- **Desenvolvimento Local**: Usa `http://localhost:8080` +- **GitHub Codespaces**: Usa `https://{codespace-name}-8080.{domain}` + +## Implantação + +### Construindo para Produção + +```bash +# Criar JAR de produção +./gradlew clean build + +# Localização do JAR +ls -la build/libs/socialapp-0.0.1-SNAPSHOT.jar +``` + +### Executando em Produção + +```bash +# Executar com perfil de produção +java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod + +# Ou com porta personalizada +java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --server.port=8081 +``` + +## Solução de Problemas + +### Problemas Comuns + +#### Porta Já em Uso + +```bash +# Encontrar processo usando porta 8080 +lsof -i :8080 + +# Matar o processo (substitua PID) +kill -9 + +# Ou usar uma porta diferente +./gradlew bootRun --args='--server.port=8081' +``` + +#### Falhas de Build + +```bash +# Limpar e reconstruir +./gradlew clean build + +# Atualizar wrapper Gradle +./gradlew wrapper --gradle-version=8.5 +``` + +#### Problemas com Banco de Dados + +```bash +# Resetar banco de dados +rm sns_api.db +./gradlew bootRun +``` + +### Logs e Monitoramento + +- **Logs da aplicação**: Saída do console ao executar `./gradlew bootRun` +- **Verificação de saúde**: `GET /actuator/health` +- **Informações da aplicação**: `GET /actuator/info` + +## Considerações de Segurança + +⚠️ **Configuração de Desenvolvimento**: A configuração atual é otimizada para desenvolvimento com: + +- CORS habilitado para todas as origens +- Banco de dados SQLite (não adequado para escala de produção) +- Sem autenticação/autorização + +Para implantação em produção, considere: + +- Restringir CORS a domínios específicos +- Usar PostgreSQL/MySQL em vez de SQLite +- Implementar Spring Security para autenticação +- Adicionar limitação de taxa e sanitização de entrada +- Usar criptografia HTTPS/TLS \ No newline at end of file diff --git a/localisation/pt-br/complete/javascript/README.md b/localisation/pt-br/complete/javascript/README.md new file mode 100644 index 0000000..9eff94e --- /dev/null +++ b/localisation/pt-br/complete/javascript/README.md @@ -0,0 +1,43 @@ +# Exemplo de Aplicação JavaScript + +## Pré-requisitos + +Consulte a documentação [README](../../README.md) para preparação. + +## Primeiros Passos + +### Executar Backend FastAPI + +Use [Exemplo de Aplicação Python](../python/). + +> **NOTA**: Se você usar GitHub Codespaces, certifique-se de que a porta da aplicação Python, `8000`, está definida como **pública**. + +### Executar Frontend React + +1. Obtenha a raiz do repositório. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Instale pacotes npm. + + ```bash + cd $REPOSITORY_ROOT/complete/javascript + npm install + ``` + +1. Execute a aplicação. + + ```bash + npm run dev + ``` + +1. Abra um navegador web e navegue para `http://localhost:3000`. +1. Verifique se a aplicação web está funcionando adequadamente. \ No newline at end of file diff --git a/localisation/pt-br/complete/python/README.md b/localisation/pt-br/complete/python/README.md new file mode 100644 index 0000000..12f292c --- /dev/null +++ b/localisation/pt-br/complete/python/README.md @@ -0,0 +1,292 @@ +# Aplicação Python de Exemplo + +Uma implementação completa de backend FastAPI para um Serviço de Rede Social Simples (SNS) que permite aos usuários criar, recuperar, atualizar e excluir posts; adicionar comentários; e curtir/descurtir posts. + +## 🏗️ Visão Geral da Arquitetura + +- **Framework**: FastAPI com Python 3.12+ +- **Banco de Dados**: SQLite (`sns_api.db`) +- **Documentação da API**: Swagger UI + especificação OpenAPI 3.1 +- **CORS**: Habilitado para requisições cross-origin +- **Validação de Dados**: modelos Pydantic com validação abrangente + +## 📁 Estrutura do Projeto + +```text +python/ +├── main.py # Ponto de entrada da aplicação FastAPI +├── models.py # Modelos de dados e esquemas Pydantic +├── database.py # Operações do banco de dados SQLite +├── openapi.yaml # Especificação OpenAPI 3.0.1 +├── sns_api.db # Arquivo de banco de dados SQLite (criado automaticamente) +├── README.md # Esta documentação +└── .venv/ # Ambiente virtual (criado durante a configuração) +``` + +## 🚀 Início Rápido + +### Pré-requisitos + +Consulte a documentação [README](../../README.md) para preparação. + +### 1. Configuração do Ambiente + +Primeiro, defina a variável de ambiente `$REPOSITORY_ROOT`. + +```bash +# bash/zsh +REPOSITORY_ROOT=$(git rev-parse --show-toplevel) +``` + +```powershell +# PowerShell +$REPOSITORY_ROOT = git rev-parse --show-toplevel +``` + +Em seguida, navegue até o diretório python e crie um ambiente virtual: + +```bash +cd $REPOSITORY_ROOT/complete/python +``` + +Crie o ambiente virtual + +```bash +# Usando uv (recomendado) +uv venv .venv +``` + +```bash +# Usando Python padrão (alternativa) +python -m venv .venv +``` + +### 2. Ativar Ambiente Virtual + +```bash +# No Linux/macOS +source .venv/bin/activate +``` + +```bash +# No Windows Command Prompt +.venv\Scripts\activate +``` + +### 3. Instalar Dependências + +```bash +# Usando uv (recomendado) +uv pip install fastapi uvicorn python-multipart pyyaml +``` + +```bash +# Usando pip (alternativa) +pip install fastapi uvicorn python-multipart pyyaml +``` + +### 4. Copiar Especificação OpenAPI + +Copie a especificação OpenAPI do diretório pai. + +```bash +# No Linux/macOS +cp ../openapi.yaml . +``` + +```powershell +# No Windows Command Prompt +xcopy ..\openapi.yaml . +``` + +### 5. Executar a Aplicação + +Inicie o servidor de desenvolvimento + +```bash +uvicorn main:app --host 0.0.0.0 --port 8000 --reload +``` + +A aplicação estará disponível em: + +- **URL Base da API**: `http://localhost:8000/api/` +- **Swagger UI**: `http://localhost:8000/docs` +- **Especificação OpenAPI**: `http://localhost:8000/openapi.json` + +## 📊 Esquema do Banco de Dados + +A aplicação usa SQLite com as seguintes tabelas: + +### Tabela Posts + +- `id` (TEXT, PRIMARY KEY) - UUID +- `username` (TEXT, NOT NULL) - Nome de usuário do autor +- `content` (TEXT, NOT NULL) - Conteúdo do post +- `created_at` (TEXT, NOT NULL) - Timestamp ISO +- `updated_at` (TEXT, NOT NULL) - Timestamp ISO + +### Tabela Comments + +- `id` (TEXT, PRIMARY KEY) - UUID +- `post_id` (TEXT, NOT NULL) - Chave estrangeira para posts +- `username` (TEXT, NOT NULL) - Nome de usuário do autor +- `content` (TEXT, NOT NULL) - Conteúdo do comentário +- `created_at` (TEXT, NOT NULL) - Timestamp ISO +- `updated_at` (TEXT, NOT NULL) - Timestamp ISO + +### Tabela Likes + +- `post_id` (TEXT, NOT NULL) - Chave estrangeira para posts +- `username` (TEXT, NOT NULL) - Usuário que curtiu +- `liked_at` (TEXT, NOT NULL) - Timestamp ISO +- Chave primária: `(post_id, username)` + +## 🔌 Endpoints da API + +### Posts + +- `GET /api/posts` - Listar todos os posts +- `POST /api/posts` - Criar um novo post +- `GET /api/posts/{postId}` - Obter um post específico +- `PATCH /api/posts/{postId}` - Atualizar um post +- `DELETE /api/posts/{postId}` - Excluir um post + +### Comentários + +- `GET /api/posts/{postId}/comments` - Listar comentários de um post +- `POST /api/posts/{postId}/comments` - Criar um comentário +- `GET /api/posts/{postId}/comments/{commentId}` - Obter um comentário específico +- `PATCH /api/posts/{postId}/comments/{commentId}` - Atualizar um comentário +- `DELETE /api/posts/{postId}/comments/{commentId}` - Excluir um comentário + +### Curtidas + +- `POST /api/posts/{postId}/likes` - Curtir um post +- `DELETE /api/posts/{postId}/likes?username={username}` - Descurtir um post + +## 🧪 Testando a API + +### Usando cURL + +#### Criar um Post + +```bash +curl -X POST "http://localhost:8000/api/posts" \ + -H "Content-Type: application/json" \ + -d '{"username": "john_doe", "content": "Olá Mundo! Este é meu primeiro post."}' +``` + +#### Obter Todos os Posts + +```bash +curl -X GET "http://localhost:8000/api/posts" +``` + +#### Adicionar um Comentário + +```bash +curl -X POST "http://localhost:8000/api/posts/{POST_ID}/comments" \ + -H "Content-Type: application/json" \ + -d '{"username": "jane_smith", "content": "Ótimo post!"}' +``` + +#### Curtir um Post + +```bash +curl -X POST "http://localhost:8000/api/posts/{POST_ID}/likes" \ + -H "Content-Type: application/json" \ + -d '{"username": "alice_johnson"}' +``` + +### Usando Swagger UI + +1. Navegue para `http://localhost:8000/docs` +2. Explore e teste todos os endpoints da API interativamente +3. Visualize esquemas e exemplos de request/response + +## 📝 Modelos de Dados + +### Modelos de Request + +- `NewPostRequest`: `{username: str, content: str}` +- `UpdatePostRequest`: `{username: str, content: str}` +- `NewCommentRequest`: `{username: str, content: str}` +- `UpdateCommentRequest`: `{username: str, content: str}` +- `LikeRequest`: `{username: str}` + +### Modelos de Response + +- `Post`: Objeto post completo com metadados e contadores +- `Comment`: Objeto comentário completo com metadados +- `LikeResponse`: Confirmação de curtida com timestamp + +## ⚙️ Configuração + +### Variáveis de Ambiente + +A aplicação usa configurações padrão mas pode ser personalizada: + +- **Banco de Dados**: Arquivo SQLite `sns_api.db` (criado automaticamente) +- **Host**: `0.0.0.0` (todas as interfaces) +- **Porta**: `8000` +- **CORS**: Habilitado para todas as origens + +### Considerações para Produção + +Para implantação em produção, considere: + +1. **Banco de Dados**: Mude para PostgreSQL ou MySQL +2. **Variáveis de Ambiente**: Use para configuração sensível +3. **Segurança**: Adicione autenticação e autorização +4. **CORS**: Restrinja a domínios específicos +5. **Logging**: implemente logging estruturado +6. **Monitoramento**: Adicione verificações de saúde e métricas + +## 🛠️ Desenvolvimento + +### Organização de Arquivos + +- **`main.py`**: Configuração da app FastAPI, middleware e definições de rotas +- **`models.py`**: Modelos Pydantic para validação e serialização de dados +- **`database.py`**: Operações SQLite, gerenciamento de conexão e funções CRUD + +### Estilo de Código + +O projeto segue: + +- Diretrizes de estilo Python PEP 8 +- Melhores práticas do FastAPI +- Padrões de programação funcional +- Type hints em todo o código +- Tratamento de erros abrangente + +### Adicionando Novas Funcionalidades + +1. Defina modelos Pydantic em `models.py` +2. Adicione operações de banco de dados em `database.py` +3. Crie endpoints da API em `main.py` +4. Atualize a especificação OpenAPI se necessário + +## 🐛 Solução de Problemas + +### Problemas Comuns + +1. **Porta já em uso**: Mude a porta com `--port 8001` +2. **Problemas com ambiente virtual**: Recrie com `rm -rf .venv && uv venv .venv` +3. **Banco de dados bloqueado**: Pare todas as instâncias em execução da aplicação +4. **Erros de importação**: Certifique-se de que o ambiente virtual está ativado + +### Modo Debug + +Execute com logging adicional: + +```bash +uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug +``` + +## 📚 Recursos Adicionais + +- [Documentação do FastAPI](https://fastapi.tiangolo.com/) +- [Documentação do Pydantic](https://docs.pydantic.dev/) +- [Documentação do SQLite](https://sqlite.org/docs.html) +- [Especificação OpenAPI](https://swagger.io/specification/) \ No newline at end of file diff --git a/localisation/pt-br/docs/00-setup.md b/localisation/pt-br/docs/00-setup.md new file mode 100644 index 0000000..ea494ca --- /dev/null +++ b/localisation/pt-br/docs/00-setup.md @@ -0,0 +1,352 @@ +# 00: Ambiente de Desenvolvimento + +Nesta etapa, você está configurando o ambiente de desenvolvimento para o workshop. + +## Pré-requisitos + +Consulte a documentação [README](../README.md) para preparação. + +## Primeiros Passos + +- [Usar GitHub Codespaces](#usar-github-codespaces) +- [Usar Visual Studio Code](#usar-visual-studio-code) + - [Instalar PowerShell 👉 Para Usuários Windows](#instalar-powershell--para-usuários-windows) + - [Instalar git CLI](#instalar-git-cli) + - [Instalar GitHub CLI](#instalar-github-cli) + - [Instalar Docker Desktop](#instalar-docker-desktop) + - [Instalar Visual Studio Code](#instalar-visual-studio-code) + - [Iniciar Visual Studio Code](#iniciar-visual-studio-code) + - [Configurar Servidores MCP](#configurar-servidores-mcp) +- [Verificar o Modo Agente do GitHub Copilot](#verificar-o-modo-agente-do-github-copilot) +- [Preparar Instruções Customizadas](#preparar-instruções-customizadas) +- [Analisar Documento de Requisitos do Produto (PRD) e Projetar API](#analisar-documento-de-requisitos-do-produto-prd-e-projetar-api) + +## Usar GitHub Codespaces + +1. Dê uma olhada na imagem abaixo e siga os passos na ordem de clicar ![a imagem do botão "code"](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![a imagem do botão "codespaces"](https://img.shields.io/badge/Codespaces-white) 👉 ![a imagem do botão "create codespace on main"](https://img.shields.io/badge/Create_codespace_on_main-green) e criar uma nova instância do GitHub Codespace. Pode levar de 5-10 minutos dependendo do status da rede. + + ![Iniciando com GitHub Codespaces](./images/setup-01.png) + +2. Uma vez que a instância do GitHub Codespace esteja pronta, abra um terminal e execute o seguinte comando para verificar se tudo que você precisa foi devidamente instalado ou não. + + ```bash + # Python + python --version + ``` + + ```bash + # Node.js + node --version + npm --version + + ``` + + ```bash + # JDK + java --version + ``` + + ```bash + # .NET SDK + dotnet --list-sdks + ``` + +3. Verifique o status do seu repositório. + + ```bash + git remote -v + ``` + + Você deve conseguir ver o seguinte. + + ```bash + origin https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (fetch) + origin https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (push) + ``` + + Se você ver algo diferente do acima, delete a instância do GitHub Codespace e recrie-a. + +4. Vá para a seção [Configurar Servidores MCP](#configurar-servidores-mcp). + +**👇👇👇 Ao invés disso, se você gostaria de usar VS Code em sua máquina local, siga as instruções abaixo. A seção abaixo não se aplica àqueles que usam GitHub Codespaces. 👇👇👇** + +## Usar Visual Studio Code + +### Instalar PowerShell 👉 Para Usuários Windows + +1. Verifique se você já instalou o PowerShell ou não. + + ```bash + # Bash/Zsh + which pwsh + ``` + + ```bash + # PowerShell + Get-Command pwsh + ``` + + Se você não vir o caminho do comando `pwsh`, significa que você ainda não instalou o PowerShell. Visite a [página de instalação do PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) e siga as instruções. + +1. Verifique a versão do seu PowerShell. + + ```bash + pwsh --version + ``` + + `7.5.0` ou superior é recomendado. Se o seu for inferior a isso, visite a [página de instalação do PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) e siga as instruções. + +### Instalar git CLI + +1. Verifique se você já instalou o git CLI ou não. + + ```bash + # Bash/Zsh + which git + ``` + + ```bash + # PowerShell + Get-Command git + ``` + + Se você não vir o caminho do comando `git`, significa que você ainda não instalou o git CLI. Visite a [página de instalação do git CLI](https://git-scm.com/downloads) e siga as instruções. + +1. Verifique a versão do seu git CLI. + + ```bash + git --version + ``` + + `2.39.0` ou superior é recomendado. Se o seu for inferior a isso, visite a [página de instalação do git CLI](https://git-scm.com/downloads) e siga as instruções. + +### Instalar GitHub CLI + +1. Verifique se você já instalou o GitHub CLI ou não. + + ```bash + # Bash/Zsh + which gh + ``` + + ```bash + # PowerShell + Get-Command gh + ``` + + Se você não vir o caminho do comando `gh`, significa que você ainda não instalou o GitHub CLI. Visite a [página de instalação do GitHub CLI](https://cli.github.com/) e siga as instruções. + +1. Verifique a versão do seu GitHub CLI. + + ```bash + gh --version + ``` + + `2.65.0` ou superior é recomendado. Se o seu for inferior a isso, visite a [página de instalação do GitHub CLI](https://cli.github.com/) e siga as instruções. + +1. Verifique se você fez login no GitHub ou não. + + ```bash + gh auth status + ``` + + Se você ainda não fez login, execute `gh auth login` e faça login. + +### Instalar Docker Desktop + +1. Verifique se você já instalou o Docker Desktop ou não. + + ```bash + # Bash/Zsh + which docker + ``` + + ```bash + # PowerShell + Get-Command docker + ``` + + Se você não vir o caminho do comando `docker`, significa que você ainda não instalou o Docker Desktop. Visite a [página de instalação do Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) e siga as instruções. + +1. Verifique a versão do seu Docker CLI. + + ```bash + docker --version + ``` + + `28.0.4` ou superior é recomendado. Se o seu for inferior a isso, visite a [página de instalação do Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) e siga as instruções. + +### Instalar Visual Studio Code + +1. Verifique se você já instalou o VS Code ou não. + + ```bash + # Bash/Zsh + which code + ``` + + ```bash + # PowerShell + Get-Command code + ``` + + Se você não vir o caminho do comando `code`, significa que você ainda não instalou o VS Code. Visite a [página de instalação do Visual Studio Code](https://code.visualstudio.com/) e siga as instruções. + +1. Verifique a versão do seu VS Code. + + ```bash + code --version + ``` + + `1.99.0` ou superior é recomendado. Se o seu for inferior a isso, visite a [página de instalação do Visual Studio Code](https://code.visualstudio.com/) e siga as instruções. + + > **NOTA**: Você pode não conseguir executar o comando `code`. Neste caso, siga [este documento](https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line) para configuração. + +### Iniciar Visual Studio Code + +1. Crie um diretório de trabalho. +1. Execute o comando para fazer fork deste repo e cloná-lo em sua máquina local. + + ```bash + gh repo fork microsoft/github-copilot-vibe-coding-workshop --clone + ``` + +1. Navegue para o diretório clonado. + + ```bash + cd github-copilot-vibe-coding-workshop + ``` + +1. Execute o VS Code a partir do terminal. + + ```bash + code . + ``` + +1. Abra um novo terminal dentro do VS Code e execute o seguinte comando para verificar o status do seu repositório. + + ```bash + git remote -v + ``` + + Você deve conseguir ver o seguinte. Se você vir `microsoft` em `origin`, você deve cloná-lo novamente do seu repositório com fork. + + ```bash + origin https://github.com//github-copilot-vibe-coding-workshop.git (fetch) + origin https://github.com//github-copilot-vibe-coding-workshop.git (push) + upstream https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (fetch) + upstream https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (push) + ``` + +1. Verifique se ambas as extensões foram instaladas ou não – [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) e [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat). + + ```bash + # Bash/Zsh + code --list-extensions | grep github.copilot + ``` + + ```powershell + # PowerShell + code --list-extensions | Select-String "github.copilot" + ``` + + Se você não vir nada, significa que você ainda não instalou essas extensões. Execute o seguinte comando para instalar as extensões. + + ```bash + code --install-extension "github.copilot" --force && code --install-extension "github.copilot-chat" --force + ``` + +### Configurar Servidores MCP + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as configurações do servidor MCP. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/.vscode/. \ + $REPOSITORY_ROOT/.vscode/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/* ` + -Destination $REPOSITORY_ROOT/.vscode/ -Recurse -Force + ``` + +1. Abra a Paleta de Comandos digitando F1 ou `Ctrl`+`Shift`+`P` no Windows ou `Cmd`+`Shift`+`P` no Mac OS, e procure `MCP: List Servers`. +1. Escolha `context7` e clique em `Start Server`. + +## Verificar o Modo Agente do GitHub Copilot + +1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. + + ![Abrir GitHub Copilot Chat](./images/setup-02.png) + +1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. + + ![Modo Agente do GitHub Copilot](./images/setup-03.png) + +1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. + +## Preparar Instruções Customizadas + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as instruções customizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/setup/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/setup/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +## Analisar Documento de Requisitos do Produto (PRD) e Projetar API + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Adicione [`product-requirements.md`](../product-requirements.md) ao GitHub Copilot. +1. Digite o prompt como o seguinte para o Agente GitHub Copilot gerar um documento OpenAPI para você. Este documento OpenAPI será a base de toda a sua aplicação. + + ```text + Aqui está o PRD para você. Leia cuidadosamente todo o PRD e faça o seguinte para mim. + + - Identifique todos os passos primeiro, que você vai fazer. + - Gere um documento OpenAPI em formato YAML. + - O documento OpenAPI deve capturar todos os endpoints da API, parâmetros e payloads de requisição/resposta. + - Assuma que o servidor da API é `http://localhost:8080` e a URL base é `/api`. + - Salve-o no arquivo `openapi.yaml` na raiz do repositório. + ``` + +1. Verifique se o `openapi.yaml` foi gerado na raiz do repositório. +1. Clique no botão `[keep]` do GitHub Copilot para aceitar o arquivo `openapi.yaml`. + +--- + +OK. Você completou a etapa "Ambiente de Desenvolvimento". Vamos seguir para [ETAPA 01: Desenvolvimento de Backend Python](./01-python.md). \ No newline at end of file diff --git a/localisation/pt-br/docs/01-python.md b/localisation/pt-br/docs/01-python.md new file mode 100644 index 0000000..bc178c8 --- /dev/null +++ b/localisation/pt-br/docs/01-python.md @@ -0,0 +1,119 @@ +# 01: Desenvolvimento de Backend Python + +## Cenário + +A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. O departamento de marketing da Contoso gostaria de lançar um site de micro mídia social para promover seus produtos para clientes existentes e potenciais. + +Como desenvolvedor Python, você vai construir uma aplicação backend Python usando FastAPI. Por enquanto, você está usando o recurso em memória do SQLite. + +## Pré-requisitos + +Consulte a documentação [README](../README.md) para preparação. + +## Primeiros Passos + +- [Verificar o Modo Agente do GitHub Copilot](#verificar-o-modo-agente-do-github-copilot) +- [Preparar Instruções Customizadas](#preparar-instruções-customizadas) +- [Preparar Ambiente Virtual](#preparar-ambiente-virtual) +- [Construir Aplicação Backend FastAPI](#construir-aplicação-backend-fastapi) + +### Verificar o Modo Agente do GitHub Copilot + +1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. + + ![Abrir GitHub Copilot Chat](./images/setup-02.png) + +1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. + + ![Modo Agente do GitHub Copilot](./images/setup-03.png) + +1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. +1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instruções Customizadas + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as instruções customizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/python/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/python/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Ambiente Virtual + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Use um prompt como o abaixo para preparar o ambiente virtual para desenvolvimento de aplicação Python. + + ```text + Gostaria de escrever uma aplicação Python. Mas antes disso, preciso configurar um ambiente virtual. Siga as instruções abaixo. + + - Use context7. + - Seu diretório de trabalho é `python`. + - Identifique todos os passos primeiro, que você vai fazer. + - Use `.venv` para o ambiente virtual. + - Use `uv` como gerenciador de pacotes Python. + ``` + +### Construir Aplicação Backend FastAPI + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Adicione [`product-requirements.md`](../product-requirements.md) e [`openapi.yaml`](../openapi.yaml) ao GitHub Copilot. +1. Use um prompt como o abaixo para construir uma aplicação backend FastAPI. + + ```text + Gostaria de construir uma aplicação FastAPI como API backend. Leia cuidadosamente todo o PRD e `openapi.yaml`. Então, siga as instruções abaixo. + + - Use context7. + - Seu diretório de trabalho é `python`. + - Identifique todos os passos primeiro, que você vai fazer. + - Use FastAPI como framework da aplicação API. + - Use SQLite como banco de dados. + - Use `sns_api.db` como nome do banco de dados SQLite. + - O banco de dados deve sempre ser inicializado sempre que iniciar a aplicação. + - Use `openapi.yaml` que descreve todos os endpoints e esquema de dados. + - Use o número da porta `8000`. + - Certifique-se de permitir CORS de qualquer lugar. + - O ponto de entrada é `main.py`. + - A aplicação API deve renderizar a página Swagger UI através de um endpoint padrão. + - A aplicação API deve renderizar exatamente o mesmo documento OpenAPI através de um endpoint padrão. + - NÃO adicione nada que não esteja definido em `openapi.yaml`. + - NÃO modifique nada definido em `openapi.yaml`. + ``` + +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. +1. Uma vez que a aplicação seja construída, verifique se está escrita adequadamente ou não. + + ```text + Execute a aplicação FastAPI e verifique se a aplicação está funcionando adequadamente. Também verifique se o endpoint OpenAPI renderiza exatamente o mesmo conteúdo que `openapi.yaml`. + + Se a execução da aplicação falhar, analise os problemas e corrija-os. + ``` + +1. Abra um navegador web e navegue para `http://localhost:8000`. +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +--- + +OK. Você completou a etapa "Python". Vamos seguir para [ETAPA 02: Desenvolvimento de Frontend JavaScript](./02-javascript.md). \ No newline at end of file diff --git a/localisation/pt-br/docs/02-javascript.md b/localisation/pt-br/docs/02-javascript.md new file mode 100644 index 0000000..5e3805d --- /dev/null +++ b/localisation/pt-br/docs/02-javascript.md @@ -0,0 +1,165 @@ +# 02: Desenvolvimento de Frontend JavaScript + +## Cenário + +A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. O departamento de marketing da Contoso gostaria de lançar um site de micro mídia social para promover seus produtos para clientes existentes e potenciais. + +Como desenvolvedor JavaScript, você vai construir uma aplicação frontend JavaScript usando React para se comunicar com a aplicação backend Python API. + +## Pré-requisitos + +Consulte a documentação [README](../README.md) para preparação. + +## Primeiros Passos + +- [Verificar o Modo Agente do GitHub Copilot](#verificar-o-modo-agente-do-github-copilot) +- [Preparar Instruções Customizadas](#preparar-instruções-customizadas) +- [Preparar Projeto da Aplicação](#preparar-projeto-da-aplicação) +- [Preparar Servidor MCP Figma](#preparar-servidor-mcp-figma) +- [Gerar Componentes UI do Figma](#gerar-componentes-ui-do-figma) +- [Executar Aplicação Backend FastAPI](#executar-aplicação-backend-fastapi) +- [Construir Aplicação Frontend React](#construir-aplicação-frontend-react) +- [Verificar Aplicação Frontend React](#verificar-aplicação-frontend-react) + +### Verificar o Modo Agente do GitHub Copilot + +1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. + + ![Abrir GitHub Copilot Chat](./images/setup-02.png) + +1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. + + ![Modo Agente do GitHub Copilot](./images/setup-03.png) + +1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. +1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instruções Customizadas + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as instruções customizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/javascript/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/javascript/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Projeto da Aplicação + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Use um prompt como o abaixo para criar um projeto de aplicação web React. + + ```text + Gostaria de criar um projeto de aplicação web React. Siga as instruções abaixo. + + - Certifique-se de que é uma aplicação web, não mobile. + - Seu diretório de trabalho é `javascript`. + - Identifique todos os passos primeiro, que você vai fazer. + - Use ViteJS como framework da aplicação frontend. + - Use configurações padrão ao inicializar o projeto. + - Use `SimpleSocialMediaApplication` como nome do projeto durante a inicialização. + - Use o número da porta `3000`. + - Apenas inicialize o projeto. NÃO vá além. + ``` + +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +### Preparar Servidor MCP Figma + +1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). +1. Obtenha o token de acesso pessoal (PAT) do [Figma](https://www.figma.com/). +1. Abra a Paleta de Comandos digitando F1 ou `Ctrl`+`Shift`+`P` no Windows ou `Cmd`+`Shift`+`P` no Mac OS, e procure `MCP: List Servers`. +1. Escolha `Framelink Figma MCP` e clique em `Start Server`. +1. Digite o PAT que você obteve do Figma. + +### Gerar Componentes UI do Figma + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que você está executando o servidor MCP Figma. +1. Copie o [template de design Figma](https://www.figma.com/community/file/1495954632647006209) para sua conta. + + ![Página do template de design Figma](./images/javascript-01.png) + +1. Clique com o botão direito em cada seção - `Home`, `Search`, `Post Details`, `Post Modal` e `Name Input Modal` 👉 Selecione `Copy/Paste as` 👉 Selecione `Copy link to selection` para obter o link para cada seção. Anote todos os cinco links. + +### Executar Aplicação Backend FastAPI + +1. Certifique-se de que a aplicação backend FastAPI está funcionando. + + ```text + Execute a API backend FastAPI, que está localizada no diretório `python`. + ``` + + > **NOTA**: Você pode usar a aplicação de exemplo [`complete/python`](../complete/python/) em vez disso. + +1. Se você usar GitHub Codespaces, certifique-se de que o número da porta `8000` está definido como `public` em vez de `private`. Caso contrário, você receberá o erro `401` ao acessar da aplicação frontend. + +### Construir Aplicação Frontend React + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Certifique-se de que você tem todos os links das seções Figma dos 5 recuperados da [seção anterior](#gerar-componentes-ui-do-figma). +1. Adicione [`product-requirements.md`](../product-requirements.md) e [`openapi.yaml`](../openapi.yaml) ao GitHub Copilot. +1. Use um prompt como o abaixo para construir a aplicação baseada nos requisitos e documento OpenAPI. + + ```text + Gostaria de construir uma aplicação web React. Siga as instruções abaixo. + + - Seu diretório de trabalho é `javascript`. + - Identifique todos os passos primeiro, que você vai fazer. + - Há uma aplicação API backend rodando em `http://localhost:8000`. + - Use `openapi.yaml` que descreve todos os endpoints e esquema de dados. + - Use o número da porta `3000`. + - Crie todos os componentes UI definidos neste link: {{FIGMA_SECTION_LINK}}. + - NÃO adicione nada não relacionado aos componentes UI. + - NÃO adicione nada não definido em `openapi.yaml`. + - NÃO modifique nada definido em `openapi.yaml`. + - Forneça indicação visual quando a API backend estiver indisponível ou inacessível por qualquer motivo. + ``` + +1. Repita mais quatro vezes para os outros quatro links de design Figma. +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +### Verificar Aplicação Frontend React + +1. Certifique-se de que a aplicação backend FastAPI está funcionando. + + ```text + Execute a API backend FastAPI, que está localizada no diretório `python`. + ``` + +1. Verifique se foi construída adequadamente ou não. + + ```text + Execute a aplicação React e verifique se a aplicação está funcionando adequadamente. + + Se a execução da aplicação falhar, analise os problemas e corrija-os. + ``` + +1. Abra um navegador web e navegue para `http://localhost:3000`. +1. Verifique se ambas as aplicações frontend e backend estão funcionando adequadamente. +1. Clique no botão `[keep]` do GitHub Copilot para aceitar as mudanças. + +--- + +OK. Você completou a etapa "JavaScript". Vamos seguir para [ETAPA 03: Migração Java do Python](./03-java.md). \ No newline at end of file diff --git a/localisation/pt-br/docs/03-java.md b/localisation/pt-br/docs/03-java.md new file mode 100644 index 0000000..bcbca3b --- /dev/null +++ b/localisation/pt-br/docs/03-java.md @@ -0,0 +1,160 @@ +# 03: Migração Java do Python + +## Cenário + +A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. O departamento de marketing da Contoso gostaria de lançar um site de micro mídia social para promover seus produtos para clientes existentes e potenciais. + +Como um desenvolvedor Python deixou a empresa, os stakeholders pediram para migrar a aplicação backend Python API existente para Java, usando Spring Boot. + +Agora, como desenvolvedor Java, você deve migrar a aplicação FastAPI existente para Spring Boot. Você tem muito pouco conhecimento de Python e FastAPI, a propósito. + +## Pré-requisitos + +Consulte a documentação [README](../README.md) para preparação. + +## Primeiros Passos + +- [Verificar o Modo Agente do GitHub Copilot](#verificar-o-modo-agente-do-github-copilot) +- [Preparar Instruções Customizadas](#preparar-instruções-customizadas) +- [Preparar Projeto Spring Boot](#preparar-projeto-spring-boot) +- [Migrar Aplicação API FastAPI](#migrar-aplicação-api-fastapi) +- [Verificar Aplicação Backend Spring Boot](#verificar-aplicação-backend-spring-boot) + +### Verificar o Modo Agente do GitHub Copilot + +1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. + + ![Abrir GitHub Copilot Chat](./images/setup-02.png) + +1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. + + ![Modo Agente do GitHub Copilot](./images/setup-03.png) + +1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. +1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instruções Customizadas + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as instruções customizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/java/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/java/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Projeto Spring Boot + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Instale o Spring Boot CLI. + + ```bash + sdk install springboot + ``` + +1. Use um prompt como o abaixo para criar um projeto de aplicação Spring Boot. + + ```text + Gostaria de criar um projeto de aplicação Spring Boot. Siga as instruções abaixo. + + - Use context7. + - Seu diretório de trabalho é `java`. + - Identifique todos os passos primeiro, que você vai fazer. + - Use Spring Boot CLI para criar o projeto de aplicação Spring Boot. + - Use Gradle como gerenciador de pacotes Java. + - Use o nome do pacote `com.contoso.socialapp`. + - Use o artifact ID `socialapp`. + - Use o group ID `com.contoso`. + - Use o tipo de pacote `jar`. + - Use a versão OpenJDK `21`. + - Adicione dependências - `Spring Web`, `Spring Boot Actuator` e `Lombok`. + - Use o número da porta `8080`. + - Certifique-se de permitir CORS de qualquer lugar. + - Construa a aplicação Spring Boot e verifique se a aplicação foi construída adequadamente. + - Execute esta aplicação Spring Boot e verifique se a aplicação está funcionando adequadamente. + - Se construir ou executar a aplicação falhar, analise os problemas e corrija-os. + ``` + +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +### Migrar Aplicação API FastAPI + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Adicione [`product-requirements.md`](../product-requirements.md) e [`openapi.yaml`](../openapi.yaml) ao GitHub Copilot. +1. Use um prompt como o abaixo para migrar FastAPI para Spring Boot. + + ```text + Agora, estamos migrando a aplicação API baseada em FastAPI existente para aplicação API Spring Boot. Siga as instruções abaixo para a migração. + + - Use context7. + - A aplicação FastAPI existente está localizada em `python`. + - Seu diretório de trabalho é `java/socialapp`. + - Identifique todos os passos primeiro, que você vai fazer. + - Analise a estrutura da aplicação da aplicação FastAPI existente. + - Migre todos os endpoints. Ambos os endpoints correspondentes devem ser exatamente iguais um ao outro. + - Use SQLite como banco de dados. + - Use `sns_api.db` como nome do banco de dados SQLite. + - O banco de dados deve sempre ser inicializado sempre que iniciar a aplicação. + - Use `openapi.yaml` que descreve todos os endpoints e esquema de dados. + - A aplicação API deve renderizar a página Swagger UI através de um endpoint padrão. + - A aplicação API deve renderizar exatamente o mesmo documento OpenAPI através de um endpoint padrão. + - NÃO adicione nada não definido em `openapi.yaml`. + - NÃO modifique nada definido em `openapi.yaml`. + - Se necessário, adicione mais pacotes para OpenAPI e Swagger UI. + ``` + +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. +1. Uma vez que a migração esteja completa, use um prompt como o abaixo para verificar o resultado da migração. + + ```text + Gostaria de construir a aplicação Spring Boot. Siga as instruções. + + - Use context7. + - Construa a aplicação Spring Boot e verifique se a aplicação foi construída adequadamente. + - Se construir a aplicação falhar, analise os problemas e corrija-os. + ``` + + > **NOTA**: + > + > - Até que a construção seja bem-sucedida, itere esta etapa. + > - Se a construção continuar falhando, verifique as mensagens de erro e pergunte ao Agente GitHub Copilot para entendê-las. + +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +### Verificar Aplicação Backend Spring Boot + +1. Uma vez que a aplicação seja construída, verifique se está escrita adequadamente ou não. + + ```text + Execute a aplicação Spring Boot e verifique se a aplicação está funcionando adequadamente verificando todos os endpoints. Também verifique se o endpoint OpenAPI renderiza exatamente o mesmo conteúdo que `openapi.yaml`. + + Se a execução da aplicação falhar, analise os problemas e corrija-os. Use context7. + ``` + +1. Abra um navegador web e navegue para `http://localhost:8080`. +1. Clique no botão ![a imagem do botão "keep"](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +--- + +OK. Você completou a etapa "Java". Vamos seguir para [ETAPA 04: Migração .NET do JavaScript](./04-dotnet.md). \ No newline at end of file diff --git a/localisation/pt-br/docs/04-dotnet.md b/localisation/pt-br/docs/04-dotnet.md new file mode 100644 index 0000000..765b193 --- /dev/null +++ b/localisation/pt-br/docs/04-dotnet.md @@ -0,0 +1,173 @@ +# 04: Migração .NET do JavaScript + +## Cenário + +A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. O departamento de marketing da Contoso gostaria de lançar um site de micro mídia social para promover seus produtos para clientes existentes e potenciais. + +Eles já têm uma aplicação frontend escrita em JavaScript, mais especificamente em React. No entanto, de repente, eles enviaram novos requisitos para redesenvolver a aplicação frontend usando .NET, especialmente em Blazor. + +Agora, como desenvolvedor .NET, você deve migrar a aplicação React existente para Blazor. Você tem muito pouco conhecimento de JavaScript e React, a propósito. + +## Pré-requisitos + +Consulte a documentação [README](../README.md) para preparação. + +## Primeiros Passos + +- [Verificar o Modo Agente do GitHub Copilot](#verificar-o-modo-agente-do-github-copilot) +- [Preparar Instruções Customizadas](#preparar-instruções-customizadas) +- [Preparar Projeto de Aplicação Web Blazor](#preparar-projeto-de-aplicação-web-blazor) +- [Executar Aplicação Backend Spring Boot](#executar-aplicação-backend-spring-boot) +- [Migrar Aplicação Web React](#migrar-aplicação-web-react) +- [Verificar Aplicação Frontend Blazor](#verificar-aplicação-frontend-blazor) + +### Verificar o Modo Agente do GitHub Copilot + +1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. + + ![Abrir GitHub Copilot Chat](./images/setup-02.png) + +1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. + + ![Modo Agente do GitHub Copilot](./images/setup-03.png) + +1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. +1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instruções Customizadas + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as instruções customizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/dotnet/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/dotnet/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Preparar Projeto de Aplicação Web Blazor + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Use um prompt como o abaixo para criar um projeto de aplicação web Blazor. + + ```text + Gostaria de criar um projeto de aplicação web Blazor. Siga as instruções abaixo. + + - Use context7. + - Seu diretório de trabalho é `dotnet`. + - Identifique todos os passos primeiro, que você vai fazer. + - Mostre-me a lista de projetos .NET relacionados ao Blazor e peça para eu escolher. + - Gere um projeto Blazor. + - Use o nome do projeto `Contoso.BlazorApp`. + - Atualize `launchSettings.json` para mudar o número da porta para `3031` para HTTP, `43031` para HTTPS. + - Crie uma solução, `ContosoWebApp`, e adicione o projeto Blazor nesta solução. + - Construa a aplicação Blazor e verifique se a aplicação foi construída adequadamente. + - Execute esta aplicação Blazor e verifique se a aplicação está funcionando adequadamente. + - Se construir ou executar a aplicação falhar, analise os problemas e corrija-os. + ``` + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +### Executar Aplicação Backend Spring Boot + +1. Certifique-se de que a aplicação backend Spring Boot está funcionando. + + ```text + Execute a API backend Spring Boot, que está localizada no diretório `java`. + ``` + + > **NOTA**: Você pode usar a aplicação de exemplo [`complete/java`](../complete/java/) em vez disso. + +1. Se você usar GitHub Codespaces, certifique-se de que o número da porta `8080` está definido como `public` em vez de `private`. Caso contrário, você receberá o erro `401` ao acessar da aplicação frontend. + +### Migrar Aplicação Web React + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Certifique-se de que o servidor MCP `context7` está funcionando. +1. Use um prompt como o abaixo para migrar React para Blazor. + + ```text + Agora, estamos migrando a aplicação web baseada em React existente para aplicação web Blazor. Siga as instruções abaixo para a migração. + + - Use context7. + - A aplicação React existente está localizada em `javascript`. + - Seu diretório de trabalho é `dotnet/Contoso.BlazorApp`. + - Identifique todos os passos primeiro, que você vai fazer. + - Há uma aplicação API backend rodando em `http://localhost:8080`. + - Analise a estrutura da aplicação da aplicação React existente. + - Migre todos os componentes React para componentes Blazor. Ambos os componentes correspondentes devem ser o mais próximo possível um do outro. + - Migre todos os elementos CSS necessários do React para Blazor. + - Ao migrar elementos JavaScript do React para Blazor, maximize o uso dos recursos nativos do Blazor o máximo possível. Se você tiver que usar JavaScript, use os recursos JSInterop do Blazor. + - Se necessário, adicione pacotes NuGet que sejam compatíveis com .NET 9. + ``` + +1. Uma vez que a migração esteja completa, use um prompt como o abaixo para verificar o resultado da migração. + + ```text + Gostaria de construir a aplicação Blazor. Siga as instruções. + + - Use context7. + - Construa a aplicação Blazor e verifique se a aplicação foi construída adequadamente. + - Se construir a aplicação falhar, analise os problemas e corrija-os. + ``` + + > **NOTA**: + > + > - Até que a construção seja bem-sucedida, itere esta etapa. + > - Se a construção continuar falhando, verifique as mensagens de erro e pergunte ao Agente GitHub Copilot para entendê-las. + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. +1. Uma vez que a construção seja bem-sucedida, use um prompt como o abaixo para verificar o resultado da migração. + + ```text + Gostaria de executar a aplicação Blazor. Siga as instruções. + + - Use context7. + - Execute esta aplicação Blazor e verifique se a aplicação está funcionando adequadamente. + - Ignore o erro de conexão da aplicação API backend nesta etapa. + - Se executar a aplicação falhar, analise os problemas e corrija-os. + ``` + +### Verificar Aplicação Frontend Blazor + +1. Certifique-se de que a aplicação backend Spring Boot está funcionando. + + ```text + Execute a API backend Spring Boot, que está localizada no diretório `java`. + ``` + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. +1. Verifique se foi construída adequadamente ou não. + + ```text + Execute a aplicação Blazor e verifique se a aplicação está funcionando adequadamente. + + Se a execução da aplicação falhar, analise os problemas e corrija-os. + ``` + +1. Abra um navegador web e navegue para `http://localhost:3031`. +1. Verifique se ambas as aplicações frontend e backend estão funcionando adequadamente. +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +--- + +OK. Você completou a etapa ".NET". Vamos seguir para [ETAPA 05: Containerização](./05-containerization.md). \ No newline at end of file diff --git a/localisation/pt-br/docs/05-containerization.md b/localisation/pt-br/docs/05-containerization.md new file mode 100644 index 0000000..163639b --- /dev/null +++ b/localisation/pt-br/docs/05-containerization.md @@ -0,0 +1,182 @@ +# 05: Containerização + +## Cenário + +A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. O departamento de marketing da Contoso gostaria de lançar um site de micro mídia social para promover seus produtos para clientes existentes e potenciais. + +Eles agora têm tanto uma aplicação backend baseada em Java quanto uma aplicação frontend baseada em .NET. Eles querem containerizá-las para que possam ser implantadas em qualquer plataforma. + +Agora, como engenheiro DevOps, você deve containerizar ambas as aplicações. + +## Pré-requisitos + +Consulte a documentação [README](../README.md) para preparação. + +## Primeiros Passos + +- [Verificar o Modo Agente do GitHub Copilot](#verificar-o-modo-agente-do-github-copilot) +- [Preparar Instruções Customizadas](#preparar-instruções-customizadas) +- [Containerizar Aplicação Java](#containerizar-aplicação-java) +- [Containerizar Aplicação .NET](#containerizar-aplicação-net) +- [Orquestrar Contêineres](#orquestrar-contêineres) + +### Verificar o Modo Agente do GitHub Copilot + +1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. + + ![Abrir GitHub Copilot Chat](./images/setup-02.png) + +1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. + + ![Modo Agente do GitHub Copilot](./images/setup-03.png) + +1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. +1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). + +### Preparar Instruções Customizadas + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as instruções customizadas. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/containerization/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/containerization/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Containerizar Aplicação Java + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Use um prompt como o abaixo para construir uma imagem de contêiner para a aplicação Java. + + ```text + Gostaria de construir uma imagem de contêiner de uma aplicação Java. Siga as instruções abaixo. + + - A aplicação Java está localizada em `java`. + - Seu diretório de trabalho é a raiz do repositório. + - Identifique todos os passos primeiro, que você vai fazer. + - Crie um Dockerfile, `Dockerfile.java`. + - Use Microsoft OpenJDK 21. + - Use abordagem de construção multi-estágio. + - Extraia JRE do JDK. + - Use o número da porta de destino `8080` para a imagem do contêiner. + ``` + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +1. Uma vez que `Dockerfile.java` seja criado, construa a imagem do contêiner com o seguinte prompt. + + ```text + Use `Dockerfile.java` e construa uma imagem de contêiner. + + - Use `contoso-backend` como nome da imagem do contêiner. + - Use `latest` como tag da imagem do contêiner. + - Verifique se a imagem do contêiner foi construída adequadamente. + - Se a construção falhar, analise os problemas e corrija-os. + ``` + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +1. Uma vez que a construção seja bem-sucedida, execute a imagem do contêiner com o seguinte prompt. + + ```text + Use a imagem do contêiner recém-construída, execute um contêiner e verifique se a aplicação está funcionando adequadamente. + + - Use a porta do host `8080`. + ``` + +### Containerizar Aplicação .NET + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Use um prompt como o abaixo para construir uma imagem de contêiner para a aplicação .NET. + + ```text + Gostaria de construir uma imagem de contêiner de uma aplicação .NET. Siga as instruções abaixo. + + - A aplicação .NET está localizada em `dotnet`. + - Seu diretório de trabalho é a raiz do repositório. + - Identifique todos os passos primeiro, que você vai fazer. + - Crie um Dockerfile, `Dockerfile.dotnet`. + - Use .NET 9. + - Use abordagem de construção multi-estágio. + - Use o número da porta de destino `8080` para a imagem do contêiner. + ``` + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +1. Uma vez que `Dockerfile.dotnet` seja criado, construa a imagem do contêiner com o seguinte prompt. + + ```text + Use `Dockerfile.dotnet` e construa uma imagem de contêiner. + + - Use `contoso-frontend` como nome da imagem do contêiner. + - Use `latest` como tag da imagem do contêiner. + - Verifique se a imagem do contêiner foi construída adequadamente. + - Se a construção falhar, analise os problemas e corrija-os. + ``` + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +1. Uma vez que a construção seja bem-sucedida, execute a imagem do contêiner com o seguinte prompt. + + ```text + Use a imagem do contêiner recém-construída, execute um contêiner e verifique se a aplicação está funcionando adequadamente. + + - Use a porta do host `3030`. + ``` + +1. Certifique-se de que ambas as aplicações frontend e backend NÃO estão se comunicando uma com a outra porque elas ainda não se conhecem. Execute o prompt como abaixo. + + ```text + Independentemente ou não, remova ambos os contêineres atualmente em execução. + ``` + +### Orquestrar Contêineres + +1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot com o modelo `Claude Sonnet 4` ou `GPT-4.1`. +1. Use um prompt como o abaixo para construir um arquivo Docker Compose. + + ```text + Gostaria de criar um arquivo Docker Compose. Siga as instruções abaixo. + + - Seu diretório de trabalho é a raiz do repositório. + - Use `Dockerfile.java` como aplicação backend. + - Use `Dockerfile.dotnet` como aplicação frontend. + - Crie `compose.yaml` como arquivo Docker Compose. + - Use `contoso` como nome da rede. + - Use `contoso-backend` como nome do contêiner da aplicação Java. Sua porta de destino é 8080, e porta do host é 8080. + - Use `contoso-frontend` como nome do contêiner da aplicação .NET. Sua porta de destino é 8080, e porta do host é 3030. + - Monte o volume para o banco de dados que a aplicação Java usa, `java/socialapp/sns_api.db`. + ``` + +1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. + +1. Uma vez que o arquivo `compose.yaml` seja criado, execute-o e verifique se ambas as aplicações estão funcionando adequadamente. + + ```text + Agora, execute o arquivo Docker compose e verifique se as aplicações estão funcionando adequadamente. + ``` + +1. Abra um navegador web e navegue para `http://localhost:3030`, e verifique se as aplicações estão funcionando adequadamente. + +--- + +Parabéns! 🎉 Você completou todas as sessões do workshop com sucesso! \ No newline at end of file diff --git a/localisation/pt-br/docs/README.md b/localisation/pt-br/docs/README.md new file mode 100644 index 0000000..2811d53 --- /dev/null +++ b/localisation/pt-br/docs/README.md @@ -0,0 +1,12 @@ +# Instruções de Aprendizado Autoguiado + +Aqui estão os materiais de instrução de aprendizado autoguiado. Use-os e construa aplicações! + +| Etapa | Link | +|------------------------------------------|----------------------------------------------------| +| 00: Ambiente de Desenvolvimento | [00-setup.md](./00-setup.md) | +| 01: Desenvolvimento de Backend Python | [01-python.md](./01-python.md) | +| 02: Desenvolvimento de Frontend JavaScript | [02-javascript.md](./02-javascript.md) | +| 03: Migração Java do Python | [03-java.md](./03-java.md) | +| 04: Migração .NET do JavaScript | [04-dotnet.md](./04-dotnet.md) | +| 05: Containerização | [05-containerization.md](./05-containerization.md) | \ No newline at end of file diff --git a/localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md new file mode 100644 index 0000000..e3535c1 --- /dev/null +++ b/localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md @@ -0,0 +1,34 @@ +# Regras DevOps + +Você é um engenheiro DevOps sênior e especialista em containerização, Docker, Dockerfile, Docker Compose e Kubernetes. + +## Diretrizes Gerais + +### Princípios Básicos + +- Use inglês para todo código, documentação e comentários. +- Priorize código modular, reutilizável e escalável. +- Siga convenções de nomenclatura: + - camelCase para variáveis, funções e nomes de métodos. + - PascalCase para nomes de classes. + - snake_case para nomes de arquivos e estruturas de diretório. + - UPPER_CASE para variáveis de ambiente. +- Evite valores hard-coded; use variáveis de ambiente ou arquivos de configuração. +- Aplique princípios de Infrastructure-as-Code (IaC) quando possível. +- Sempre considere o princípio de menor privilégio em acesso e permissões. + +### Princípios DevOps + +- Automatize tarefas repetitivas e evite intervenções manuais. +- Escreva pipelines CI/CD modulares e reutilizáveis. +- Use aplicações containerizadas com registries seguros. +- Gerencie segredos usando Azure Key Vault ou outras soluções de gerenciamento de segredos. +- Construa sistemas resilientes aplicando estratégias de deploy blue-green ou canary. + +## Cenários Específicos + +### Docker e Docker Compose + +- Use builds multi-estágio em Dockerfiles para otimizar o tamanho da imagem. +- Garanta que Dockerfiles sejam idempotentes e possam ser construídos múltiplas vezes sem efeitos colaterais. +- Use Docker Compose para ambientes de desenvolvimento e teste locais. \ No newline at end of file diff --git a/localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md new file mode 100644 index 0000000..df9afe4 --- /dev/null +++ b/localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md @@ -0,0 +1,81 @@ +# Regras de Desenvolvimento .NET + +Você é um desenvolvedor .NET sênior e especialista em C#, ASP.NET Core, API Mínima, Blazor e .NET Aspire. + +## Estilo e Estrutura de Código + +- Escreva código C# conciso e idiomático com exemplos precisos. +- Siga convenções e melhores práticas do .NET e ASP.NET Core. +- Use padrões de programação orientada a objetos e funcional conforme apropriado. +- Prefira LINQ e expressões lambda para operações de coleção. +- Use nomes descritivos para variáveis e métodos (ex: 'IsUserSignedIn', 'CalculateTotal'). +- Estruture arquivos de acordo com convenções .NET (Controllers, Models, Services, etc.). +- Use async/await para operações assíncronas sempre que possível para melhorar performance e responsividade. + +## Convenções de Nomenclatura + +- Use PascalCase para nomes de classe, nomes de método e membros públicos. +- Use camelCase para variáveis locais e campos privados. +- Use UPPERCASE para constantes. +- Prefixe nomes de interface com "I" (ex: 'IUserService'). + +## Uso de C# e .NET + +- Use recursos do C# 10+ quando apropriado (ex: record types, pattern matching, null-coalescing assignment). +- Aproveite recursos integrados do ASP.NET Core e middleware. +- Use Entity Framework Core efetivamente para operações de banco de dados. + +## Sintaxe e Formatação + +- Siga as Convenções de Codificação C# (https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions) +- Use sintaxe expressiva do C# (ex: operadores null-conditional, interpolação de string) +- Use 'var' para tipagem implícita quando o tipo for óbvio. + +## Tratamento de Erros e Validação + +- Use exceções para casos excepcionais, não para fluxo de controle. +- Implemente logging adequado de erros usando logging integrado do .NET ou logger de terceiros. +- Use Data Annotations ou Fluent Validation para validação de modelo. +- Implemente middleware global de tratamento de exceções. +- Retorne códigos de status HTTP apropriados e respostas de erro consistentes. + +## Design de API + +- Siga princípios de design de API RESTful. +- Use roteamento por atributo em controllers. +- Implemente versionamento para sua API. +- Use filtros de ação para concerns transversais. + +## Otimização de Performance + +- Use programação assíncrona com async/await para operações I/O-bound. +- Implemente estratégias de cache usando IMemoryCache ou cache distribuído. +- Use consultas LINQ eficientes e evite problemas de consulta N+1. +- Implemente paginação para grandes conjuntos de dados. + +## Convenções Principais + +- Use Injeção de Dependência para baixo acoplamento e testabilidade. +- Implemente padrão repository ou use Entity Framework Core diretamente, dependendo da complexidade. +- Use AutoMapper para mapeamento objeto-para-objeto se necessário. +- Implemente tarefas em background usando IHostedService ou BackgroundService. + +## Testes + +- Escreva testes unitários usando xUnit, NUnit ou MSTest. +- Use Moq ou NSubstitute para mock de dependências. +- Implemente testes de integração para endpoints de API. + +## Segurança + +- Use middleware de Autenticação e Autorização. +- Implemente autenticação JWT para autenticação de API stateless. +- Use HTTPS e force SSL. +- Implemente políticas CORS adequadas. + +## Documentação de API + +- Use pacote OpenAPI integrado para documentação de API. +- Forneça comentários XML para controllers e models para melhorar documentação Swagger. + +Siga a documentação oficial da Microsoft e guias do ASP.NET Core para melhores práticas em roteamento, controllers, models e outros componentes de API. \ No newline at end of file diff --git a/localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md new file mode 100644 index 0000000..362c20e --- /dev/null +++ b/localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md @@ -0,0 +1,92 @@ +# Regras de Desenvolvimento Java + +Você é um desenvolvedor Java sênior e especialista em programação Java, Spring Boot, Spring Boot CLI, Spring Framework, Maven, Gradle, JUnit e tecnologias Java relacionadas. + +## Estilo e Estrutura de Código + +- Escreva código Java limpo, eficiente e bem documentado com exemplos precisos de Spring Boot. +- Use melhores práticas e convenções do Spring Boot em todo o seu código. +- Implemente padrões de design de API RESTful ao criar serviços web. +- Use nomes descritivos para métodos e variáveis seguindo a convenção camelCase. +- Estruture aplicações Spring Boot: controllers, services, repositories, models, configurations. + +## Especificidades do Spring Boot + +- Use Spring Boot starters para configuração rápida de projeto e gerenciamento de dependências. +- Implemente uso adequado de anotações (ex: @SpringBootApplication, @RestController, @Service). +- Utilize recursos de auto-configuração do Spring Boot efetivamente. +- Implemente tratamento adequado de exceções usando @ControllerAdvice e @ExceptionHandler. + +## Convenções de Nomenclatura + +- Use PascalCase para nomes de classe (ex: UserController, OrderService). +- Use camelCase para nomes de método e variável (ex: findUserById, isOrderValid). +- Use ALL_CAPS para constantes (ex: MAX_RETRY_ATTEMPTS, DEFAULT_PAGE_SIZE). + +## Uso de Java e Spring Boot + +- Use recursos do Java 17 ou posterior quando aplicável (ex: records, sealed classes, pattern matching). +- Aproveite recursos e melhores práticas do Spring Boot 3.x. +- Use Spring Data JPA para operações de banco de dados quando aplicável. +- Implemente validação adequada usando Bean Validation (ex: @Valid, validadores customizados). + +## Configuração e Propriedades + +- Use application.properties ou application.yml para configuração. +- Implemente configurações específicas por ambiente usando Spring Profiles. +- Use @ConfigurationProperties para propriedades de configuração type-safe. + +## Injeção de Dependência e IoC + +- Use injeção por construtor em vez de injeção por campo para melhor testabilidade. +- Aproveite o container IoC do Spring para gerenciar ciclos de vida de beans. + +## Testes + +- Escreva testes unitários usando JUnit 5 e Spring Boot Test. +- Use MockMvc para testar camadas web. +- Implemente testes de integração usando @SpringBootTest. +- Use @DataJpaTest para testes da camada de repositório. + +## Performance e Escalabilidade + +- Implemente estratégias de cache usando abstração Spring Cache. +- Use processamento assíncrono com @Async para operações não-bloqueantes. +- Implemente indexação adequada de banco de dados e otimização de consultas. + +## Segurança + +- Implemente Spring Security para autenticação e autorização. +- Use codificação adequada de senha (ex: BCrypt). +- Implemente configuração CORS quando necessário. + +## Logging e Monitoramento + +- Use SLF4J com Logback para logging. +- Implemente níveis adequados de log (ERROR, WARN, INFO, DEBUG). +- Use Spring Boot Actuator para monitoramento de aplicação e métricas. + +## Documentação de API + +- Use Springdoc OpenAPI (anteriormente Swagger) para documentação de API. + +## Acesso a Dados e ORM + +- Use Spring Data JPA para operações de banco de dados. +- Implemente relacionamentos adequados de entidade e cascading. +- Use migrações de banco de dados com ferramentas como Flyway ou Liquibase. + +## Build e Deploy + +- Use Maven ou Gradle para gerenciamento de dependências e processos de build. +- Gradle é preferido para novos projetos devido à sua flexibilidade e performance. +- Implemente profiles adequados para diferentes ambientes (dev, test, prod). +- Use Docker para containerização se aplicável. + +## Siga melhores práticas para: + +- Design de API RESTful (uso adequado de métodos HTTP, códigos de status, etc.). +- Arquitetura de microsserviços (se aplicável). +- Processamento assíncrono usando @Async do Spring ou programação reativa com Spring WebFlux. + +Adira aos princípios SOLID e mantenha alta coesão e baixo acoplamento no design da sua aplicação Spring Boot. \ No newline at end of file diff --git a/localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md new file mode 100644 index 0000000..27da3b9 --- /dev/null +++ b/localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md @@ -0,0 +1,46 @@ +# Regras de Desenvolvimento JavaScript + +Você é um Desenvolvedor Front-End Sênior e Especialista em ReactJS, NextJS, ViteJS, JavaScript, TypeScript, HTML, CSS e frameworks modernos de UI/UX (ex: TailwindCSS, Shadcn, Radix). + +Você é reflexivo, dá respostas matizadas e é brilhante em raciocínio. Você fornece cuidadosamente respostas precisas, factuais e reflexivas, e é um gênio em raciocínio. + +## Princípios Fundamentais + +- Siga os requisitos do usuário cuidadosamente e à risca. +- Primeiro pense passo a passo - descreva seu plano para o que construir em pseudocódigo, escrito em grande detalhe. +- Confirme, então escreva código! +- Sempre escreva código correto, de melhores práticas, princípio DRY (Don't Repeat Yourself), livre de bugs, totalmente funcional e funcionando, também deve estar alinhado às regras listadas abaixo nas Diretrizes de Implementação de Código. +- Foque em código fácil e legível, em vez de ser performante. +- Implemente totalmente toda a funcionalidade solicitada. +- Não deixe TODOs, placeholders ou peças faltando. +- Garanta que o código está completo! Verifique minuciosamente se está finalizado. +- Inclua todas as importações necessárias e garanta nomenclatura adequada dos componentes chave. +- Seja conciso. Minimize qualquer outra prosa. +- Se você acha que pode não haver uma resposta correta, diga isso. +- Se você não souber a resposta, diga isso, em vez de adivinhar. + +## Ambiente de Codificação + +O usuário faz perguntas sobre as seguintes linguagens de codificação: + +- ReactJS +- NextJS +- ViteJS +- JavaScript +- TypeScript +- TailwindCSS +- HTML +- CSS + +## Diretrizes de Implementação de Código + +Siga essas regras quando escrever código: + +- TypeScript é preferido em vez de JavaScript, a menos que o usuário especificamente solicite JavaScript. +- Escolha NextJS ou ViteJS para o projeto, dependendo dos requisitos. +- Use retornos antecipados sempre que possível para tornar o código mais legível. +- Sempre use classes Tailwind para estilizar elementos HTML; evite usar CSS ou tags. +- Use "class:" em vez do operador ternário em tags de classe sempre que possível. +- Use nomes descritivos para variáveis e funções/const. Além disso, funções de evento devem ser nomeadas com prefixo "handle", como "handleClick" para onClick e "handleKeyDown" para onKeyDown. +- Implemente recursos de acessibilidade em elementos. Por exemplo, uma tag deve ter tabindex="0", aria-label, on:click, e on:keydown, e atributos similares. +- Use consts em vez de functions, por exemplo, "const toggle = () =>". Além disso, defina um tipo se possível. \ No newline at end of file diff --git a/localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md new file mode 100644 index 0000000..6530c13 --- /dev/null +++ b/localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md @@ -0,0 +1,70 @@ +# Regras de Desenvolvimento Python + +Você é um desenvolvedor Python sênior e especialista em Python, FastAPI, SQLite e desenvolvimento de API escalável. + +## Princípios Fundamentais + +- Escreva respostas técnicas concisas com exemplos precisos de Python. +- Use programação funcional e declarativa; evite classes quando possível. +- Prefira iteração e modularização em vez de duplicação de código. +- Use nomes de variáveis descritivos com verbos auxiliares (ex: is_active, has_permission). +- Use minúsculas com sublinhados para diretórios e arquivos (ex: routers/user_routes.py). +- Favoreça exportações nomeadas para rotas e funções utilitárias. +- Use o padrão Receive an Object, Return an Object (RORO). + +## Python/FastAPI + +- Use def para funções puras e async def para operações assíncronas. +- Use type hints para todas as assinaturas de função. Prefira modelos Pydantic em vez de dicionários brutos para validação de entrada. +- Estrutura de arquivo: roteador exportado, sub-rotas, utilitários, conteúdo estático, tipos (modelos, esquemas). +- Evite chaves desnecessárias em declarações condicionais. +- Para declarações de linha única em condicionais, omita chaves. +- Use sintaxe concisa de uma linha para declarações condicionais simples (ex: if condition: do_something()). + +## Tratamento de Erros e Validação + +- Priorize tratamento de erros e casos extremos: + - Trate erros e casos extremos no início das funções. + - Use retornos antecipados para condições de erro para evitar declarações if profundamente aninhadas. + - Coloque o caminho feliz por último na função para melhor legibilidade. + - Evite declarações else desnecessárias; use o padrão if-return em vez disso. + - Use cláusulas de guarda para tratar pré-condições e estados inválidos cedo. + - Implemente logging adequado de erros e mensagens de erro amigáveis ao usuário. + - Use tipos de erro customizados ou fábricas de erro para tratamento consistente de erros. + +## Dependências + +- FastAPI +- Pydantic v2 +- Bibliotecas de banco de dados assíncronas como asyncpg ou aiomysql +- SQLAlchemy 2.0 (se usando recursos ORM) + +## Diretrizes Específicas do FastAPI + +- Use componentes funcionais (funções simples) e modelos Pydantic para validação de entrada e esquemas de resposta. +- Use definições de rota declarativas com anotações claras de tipo de retorno. +- Use def para operações síncronas e async def para assíncronas. +- Minimize @app.on_event("startup") e @app.on_event("shutdown"); prefira gerenciadores de contexto lifespan para gerenciar eventos de inicialização e desligamento. +- Use middleware para logging, monitoramento de erros e otimização de performance. +- Otimize para performance usando funções async para tarefas I/O-bound, estratégias de cache e carregamento preguiçoso. +- Use HTTPException para erros esperados e modele-os como respostas HTTP específicas. +- Use middleware para tratar erros inesperados, logging e monitoramento de erros. +- Use BaseModel do Pydantic para validação de entrada/saída consistente e esquemas de resposta. + +## Otimização de Performance + +- Minimize operações I/O bloqueantes; use operações assíncronas para todas as chamadas de banco de dados e requisições de API externa. +- Implemente cache para dados estáticos e frequentemente acessados usando ferramentas como Redis ou stores em memória. +- Otimize serialização e desserialização de dados com Pydantic. +- Use técnicas de carregamento preguiçoso para grandes conjuntos de dados e respostas substanciais de API. + +## Convenções Principais + +1. Confie no sistema de injeção de dependência do FastAPI para gerenciar estado e recursos compartilhados. +2. Priorize métricas de performance da API (tempo de resposta, latência, throughput). +3. Limite operações bloqueantes em rotas: + - Favoreça fluxos assíncronos e não-bloqueantes. + - Use funções async dedicadas para operações de banco de dados e API externa. + - Estruture rotas e dependências claramente para otimizar legibilidade e manutenibilidade. + +Consulte a documentação do FastAPI para Modelos de Dados, Operações de Caminho e Middleware para melhores práticas. \ No newline at end of file diff --git a/localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md new file mode 100644 index 0000000..b78d659 --- /dev/null +++ b/localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md @@ -0,0 +1,5 @@ +Você é um especialista como Analista de Negócios. Você é muito capaz de interpretar os requisitos de negócio para detalhes técnicos. + +Quando você está lidando com OpenAPI, sempre está se referindo à versão de especificação 3.0.1. + +Quando você cria um documento OpenAPI, você deve sempre considerar a reutilização do esquema de dados. NÃO duplique estrutura de dados similar. \ No newline at end of file diff --git a/localisation/pt-br/dotnet/README.md b/localisation/pt-br/dotnet/README.md new file mode 100644 index 0000000..d52bffa --- /dev/null +++ b/localisation/pt-br/dotnet/README.md @@ -0,0 +1,5 @@ +# Começando com .NET + +Aqui está o ponto de partida para o desenvolvimento da sua aplicação .NET. + +Se você quiser ver o exemplo completo, confira este diretório, [/complete/dotnet](../complete/dotnet/). \ No newline at end of file diff --git a/localisation/pt-br/java/README.md b/localisation/pt-br/java/README.md new file mode 100644 index 0000000..e9e3948 --- /dev/null +++ b/localisation/pt-br/java/README.md @@ -0,0 +1,5 @@ +# Começando com Java + +Aqui está o ponto de partida para o desenvolvimento da sua aplicação Java. + +Se você quiser ver o exemplo completo, confira este diretório, [/complete/java](../complete/java/). \ No newline at end of file diff --git a/localisation/pt-br/javascript/README.md b/localisation/pt-br/javascript/README.md new file mode 100644 index 0000000..b108c11 --- /dev/null +++ b/localisation/pt-br/javascript/README.md @@ -0,0 +1,5 @@ +# Começando com JavaScript + +Aqui está o ponto de partida para o desenvolvimento da sua aplicação JavaScript. + +Se você quiser ver o exemplo completo, confira este diretório, [/complete/javascript](../complete/javascript/). \ No newline at end of file diff --git a/localisation/pt-br/product-requirements.md b/localisation/pt-br/product-requirements.md new file mode 100644 index 0000000..294a513 --- /dev/null +++ b/localisation/pt-br/product-requirements.md @@ -0,0 +1,148 @@ +# Documento de Requisitos do Produto (PRD) + +## Título do Produto + +Aplicação de Mídia Social Simples + +## Versão do Documento + +1.0.0 + +## Autor + +Product Owner / Tech Lead na Contoso + +## Última Atualização + +2025-05-30 + +--- + +## 1. Visão Geral + +O objetivo deste projeto é construir um Serviço de Rede Social (SNS) básico, mas funcional, que permita aos usuários criar, recuperar, atualizar e excluir postagens; adicionar comentários; e curtir/descurtir postagens. A abordagem API-first garante que pode ser usado como backend para frontends web ou móveis. + +## 2. Contexto + +A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. O departamento de marketing da Contoso gostaria de lançar um site de micro mídia social para promover seus produtos para clientes existentes e potenciais. Como seu primeiro MVP, o departamento de marketing quer construir rapidamente o site. + +## 3. Objetivos e Metas + +* Fornecer operações CRUD para conteúdo gerado pelo usuário (postagens). +* Permitir interação social através de comentários e curtidas. +* Manter simplicidade para casos de uso educacionais e MVP. +* Garantir design de API RESTful e tratamento adequado de erros. + +## 4. Funcionalidades Principais + +### 4.1 Gerenciamento de Postagens + +* **Listar Postagens** + + * **GET** `/api/posts` + * História do Usuário: Como usuário, quero ver todas as postagens recentes para poder navegar pelo que outros estão compartilhando. + +* **Criar Postagem** + + * **POST** `/api/posts` + * Obrigatório: `username`, `content` + * História do Usuário: Como usuário, quero criar uma nova postagem para poder compartilhar algo com outros. + +* **Obter Postagem Específica** + + * **GET** `/api/posts/{postId}` + * História do Usuário: Como usuário, quero ler uma postagem específica em detalhes. + +* **Atualizar Postagem** + + * **PATCH** `/api/posts/{postId}` + * Obrigatório: `username`, `content` + * História do Usuário: Como usuário, quero atualizar minha postagem se cometi um erro ou tenho algo a acrescentar. + +* **Deletar Postagem** + + * **DELETE** `/api/posts/{postId}` + * História do Usuário: Como usuário, quero deletar minha postagem se não quero mais que seja compartilhada. + +### 4.2 Gerenciamento de Comentários + +* **Listar Comentários de uma Postagem** + + * **GET** `/api/posts/{postId}/comments` + * História do Usuário: Como usuário, quero ler todos os comentários de uma postagem. + +* **Criar Comentário** + + * **POST** `/api/posts/{postId}/comments` + * Obrigatório: `username`, `content` + * História do Usuário: Como usuário, quero comentar em uma postagem para compartilhar meus pensamentos. + +* **Obter Comentário Específico** + + * **GET** `/api/posts/{postId}/comments/{commentId}` + * História do Usuário: Como usuário, quero ver um comentário específico em detalhes. + +* **Atualizar Comentário** + + * **PATCH** `/api/posts/{postId}/comments/{commentId}` + * Obrigatório: `username`, `content` + * História do Usuário: Como usuário, quero corrigir ou revisar meu comentário. + +* **Deletar Comentário** + + * **DELETE** `/api/posts/{postId}/comments/{commentId}` + * História do Usuário: Como usuário, quero deletar meu comentário se necessário. + +### 4.3 Sistema de Curtidas + +* **Curtir uma Postagem** + + * **POST** `/api/posts/{postId}/likes` + * Obrigatório: `username` + * História do Usuário: Como usuário, quero curtir uma postagem para mostrar apreço. + +* **Descurtir uma Postagem** + + * **DELETE** `/api/posts/{postId}/likes` + * História do Usuário: Como usuário, quero remover minha curtida se mudar de ideia. + +## 5. Funções de Usuário e Permissões + +* **Usuários Anônimos** + * Podem ler postagens e comentários. + +* **Usuários Autenticados (via campo username)** + * Podem criar, atualizar, deletar suas próprias postagens e comentários. + * Podem curtir/descurtir postagens. + +## 6. Contratos de API + +* Definir o documento OpenAPI com especificação v3.0.1 no mínimo. +* Usa códigos de status HTTP padrão. + * `200 OK`, `201 Created`, `204 No Content`, `400 Bad Request`, `404 Not Found`, `500 Internal Server Error` +* Content-Type: `application/json` + +## 7. Requisitos Não-Funcionais + +* **Documentação**: A API deve ser totalmente documentada usando Swagger UI. +* **Segurança**: Validação de entrada e validação básica de requisições, mesmo que autenticação completa não seja implementada. + +## 8. Suposições e Dependências + +* Usar banco de dados em memória para este produto. +* Nenhum suporte para upload de arquivos ou mídia está incluído. +* Nenhum registro de usuário ou fluxos de login/autenticação. +* Nenhum código de teste é necessário. + +## 9. Métricas de Sucesso + +* Todos os endpoints da API são acessíveis e respondem conforme documentado. +* Capaz de postar, comentar, curtir e deletar recursos de ponta a ponta. +* Documentação Swagger clara gerada a partir do OpenAPI. + +## 10. Fora do Escopo + +* Autenticação de usuário (OAuth, JWT, etc.) +* Atualizações em tempo real ou notificações +* Ferramentas de moderação ou relatórios +* Uploads multimídia (imagens, vídeo) \ No newline at end of file diff --git a/localisation/pt-br/python/README.md b/localisation/pt-br/python/README.md new file mode 100644 index 0000000..3aabf3c --- /dev/null +++ b/localisation/pt-br/python/README.md @@ -0,0 +1,5 @@ +# Começando com Python + +Aqui está o ponto de partida para o desenvolvimento da sua aplicação Python. + +Se você quiser ver o exemplo completo, confira este diretório, [/complete/python](../complete/python/). \ No newline at end of file From 87d085b8023f16d15960ef1899770db1882eadd9 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Jun 2025 14:32:43 +0900 Subject: [PATCH 03/17] [WIP] Add French localisation for all markdown files (#33) * Initial plan for issue * Add French translations for main and language-specific README files Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Add French translations for complete directory markdown files Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Add French translations for docs directory - first part Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Complete French translations for all docs directory files Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Update ToC and fix image links * Update image links --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> Co-authored-by: Justin Yoo --- localisation/fr-fr/README.md | 106 +++++ localisation/fr-fr/complete/README.md | 56 +++ localisation/fr-fr/complete/dotnet/README.md | 35 ++ .../fr-fr/complete/java/socialapp/README.md | 367 ++++++++++++++++++ .../fr-fr/complete/javascript/README.md | 43 ++ localisation/fr-fr/complete/python/README.md | 292 ++++++++++++++ localisation/fr-fr/docs/00-setup.md | 352 +++++++++++++++++ localisation/fr-fr/docs/01-python.md | 119 ++++++ localisation/fr-fr/docs/02-javascript.md | 165 ++++++++ localisation/fr-fr/docs/03-java.md | 160 ++++++++ localisation/fr-fr/docs/04-dotnet.md | 173 +++++++++ .../fr-fr/docs/05-containerization.md | 182 +++++++++ localisation/fr-fr/docs/README.md | 12 + .../containerization/copilot-instructions.md | 34 ++ .../dotnet/copilot-instructions.md | 81 ++++ .../java/copilot-instructions.md | 92 +++++ .../javascript/copilot-instructions.md | 46 +++ .../python/copilot-instructions.md | 70 ++++ .../setup/copilot-instructions.md | 5 + localisation/fr-fr/dotnet/README.md | 5 + localisation/fr-fr/java/README.md | 5 + localisation/fr-fr/javascript/README.md | 5 + localisation/fr-fr/product-requirements.md | 148 +++++++ localisation/fr-fr/python/README.md | 5 + localisation/pt-br/docs/00-setup.md | 6 +- localisation/pt-br/docs/01-python.md | 4 +- localisation/pt-br/docs/02-javascript.md | 6 +- localisation/pt-br/docs/03-java.md | 4 +- localisation/pt-br/docs/04-dotnet.md | 4 +- .../pt-br/docs/05-containerization.md | 4 +- 30 files changed, 2572 insertions(+), 14 deletions(-) create mode 100644 localisation/fr-fr/README.md create mode 100644 localisation/fr-fr/complete/README.md create mode 100644 localisation/fr-fr/complete/dotnet/README.md create mode 100644 localisation/fr-fr/complete/java/socialapp/README.md create mode 100644 localisation/fr-fr/complete/javascript/README.md create mode 100644 localisation/fr-fr/complete/python/README.md create mode 100644 localisation/fr-fr/docs/00-setup.md create mode 100644 localisation/fr-fr/docs/01-python.md create mode 100644 localisation/fr-fr/docs/02-javascript.md create mode 100644 localisation/fr-fr/docs/03-java.md create mode 100644 localisation/fr-fr/docs/04-dotnet.md create mode 100644 localisation/fr-fr/docs/05-containerization.md create mode 100644 localisation/fr-fr/docs/README.md create mode 100644 localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md create mode 100644 localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md create mode 100644 localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md create mode 100644 localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md create mode 100644 localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md create mode 100644 localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md create mode 100644 localisation/fr-fr/dotnet/README.md create mode 100644 localisation/fr-fr/java/README.md create mode 100644 localisation/fr-fr/javascript/README.md create mode 100644 localisation/fr-fr/product-requirements.md create mode 100644 localisation/fr-fr/python/README.md diff --git a/localisation/fr-fr/README.md b/localisation/fr-fr/README.md new file mode 100644 index 0000000..14771d9 --- /dev/null +++ b/localisation/fr-fr/README.md @@ -0,0 +1,106 @@ +# Atelier de Codage Vibe GitHub Copilot + +![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) + +Vibrons-codons avec [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) et ses fonctionnalités les plus récentes et les plus avancées dans divers langages de programmation tels que Python, JavaScript, Java et .NET, ainsi que pour rendre les applications cloud-natives par conteneurisation. Êtes-vous prêt à vous lancer ? + +## Contexte + +Contoso est une entreprise qui vend des produits pour diverses activités de plein air. Le département marketing de Contoso souhaiterait lancer un site web de micro-médias sociaux pour promouvoir leurs produits auprès des clients existants et potentiels. Pour leur premier MVP, ils veulent construire rapidement le site web. Le département informatique de Contoso a actuellement deux développeurs utilisant respectivement Python et JavaScript. La date de lancement approche rapidement, alors les deux développeurs doivent livrer l'application rapidement. + +Mais voici la situation... + +## Objectifs de l'Atelier + +- Construire des applications en utilisant le mode Agent de GitHub Copilot. +- Ajouter des instructions personnalisées à GitHub Copilot pour avoir plus de contrôle sur GitHub Copilot. +- Ajouter divers serveurs MCP à GitHub Copilot pour construire les applications plus précisément. + +## Atelier dans Votre Langue + +Ce matériel d'atelier est actuellement fourni dans les langues suivantes : + +[English](../../README.md) | [Español](../es-es/) | [Português](../pt-br/) | [Français](./README.md) | [中文(简体)](../zh-cn/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) + +## Prérequis + +Pendant cet atelier, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) est fortement recommandé car il n'y a pas besoin de préparation, sauf un navigateur web. Cependant, si vous devez vraiment utiliser votre machine, assurez-vous d'avoir installé tout ce qui est identifié ci-dessous. + +### Commun + +- [Visual Studio Code](https://code.visualstudio.com/) +- Extension VS Code [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) +- Extension VS Code [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) +- 💥 Pour les utilisateurs Windows 👉 [PowerShell 7](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) +- [git CLI](https://git-scm.com/downloads) +- [GitHub CLI](https://cli.github.com/) +- [Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) + +### Python + +- [pyenv](https://github.com/pyenv/pyenv) ou [pyenv pour Windows](https://github.com/pyenv-win/pyenv-win) +- Python 3.12+ via pyenv +- Gestionnaire de paquets `uv` (recommandé) ou `pip` +- Extension VS Code [Python](https://marketplace.visualstudio.com/items/?itemName=ms-python.python) +- Extension VS Code [Pylance](https://marketplace.visualstudio.com/items/?itemName=ms-python.vscode-pylance) +- Extension VS Code [Python Debugger](https://marketplace.visualstudio.com/items/?itemName=ms-python.debugpy) +- Extension VS Code [autopep8](https://marketplace.visualstudio.com/items/?itemName=ms-python.autopep8) + +### JavaScript + +- [nvm](https://github.com/nvm-sh/nvm) ou [nvm pour Windows](https://github.com/coreybutler/nvm-windows) +- La dernière LTS de [Node.js](https://nodejs.org/) via nvm + +### Java + +- [SDKMAN](https://sdkman.io/) +- [OpenJDK 21](https://learn.microsoft.com/java/openjdk/download) via SDKMAN +- [Apache Maven](https://maven.apache.org/download.cgi) via SDKMAN +- [Gradle Build Tool](https://docs.gradle.org/current/userguide/installation.html) via SDKMAN +- [Spring Boot Initializr](https://docs.spring.io/spring-boot/cli/installation.html) via SDKMAN +- Extension VS Code [Extension Pack for Java](https://marketplace.visualstudio.com/items/?itemName=vscjava.vscode-java-pack) +- Extension VS Code [Spring Boot Extension Pack](https://marketplace.visualstudio.com/items/?itemName=vmware.vscode-boot-dev-pack) + +### .NET + +- [.NET SDK 9](https://dotnet.microsoft.com/download/dotnet/9.0) +- Extension VS Code [C# Dev Kit](https://marketplace.visualstudio.com/items/?itemName=ms-dotnettools.csdevkit) + +## Document d'Exigences Produit + +Tout d'abord, l'endroit où vous devez commencer est ce [PRD (Document d'Exigences Produit)](./product-requirements.md). Ce document vous donnera une meilleure compréhension de ce qu'il faut faire et comment le faire. + +## Instructions de l'Atelier + +Ceci est un atelier à rythme libre en suivant les liens ci-dessous : + +| Étape | Lien | +|----------------------------------------|---------------------------------------------------------| +| 00: Environnement de Développement | [00-setup.md](./docs/00-setup.md) | +| 01: Backend Python | [01-python.md](./docs/01-python.md) | +| 02: Frontend JavaScript | [02-javascript.md](./docs/02-javascript.md) | +| 03: Migration Java depuis Python | [03-java.md](./docs/03-java.md) | +| 04: Migration .NET depuis JavaScript | [04-dotnet.md](./docs/04-dotnet.md) | +| 05: Conteneurisation | [05-containerization.md](./docs/05-containerization.md)| + +## Échantillons Complets + +Consultez l'exemple complet de chaque application. Ils sont également vibe-codés avec GitHub Copilot, par conséquent, ils pourraient ne pas être parfaits, et vous n'avez pas à suivre l'application. + +| Langage | Application | Emplacement | +|----------------------|-------------|--------------------------------------| +| Backend Python | FastAPI | [python](./complete/python/) | +| Frontend JavaScript | React | [javascript](./complete/javascript/) | +| Backend Java | Spring Boot | [java](./complete/java/) | +| Frontend .NET | Blazor | [dotnet](./complete/dotnet/) | +| Conteneurisation | Container | [containerization](./complete/) | + +## En Savoir Plus... + +- [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) +- [GitHub Copilot](https://docs.github.com/en/copilot/about-github-copilot/what-is-github-copilot) +- [GitHub Copilot: Mode Agent](https://code.visualstudio.com/blogs/2025/04/07/agentMode) +- [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) +- [GitHub Copilot: Instructions Personnalisées](https://code.visualstudio.com/docs/copilot/copilot-customization) +- [GitHub Copilot: Changer les Modèles IA](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) +- [Serveurs MCP Sélectionnés](https://github.com/modelcontextprotocol/servers) \ No newline at end of file diff --git a/localisation/fr-fr/complete/README.md b/localisation/fr-fr/complete/README.md new file mode 100644 index 0000000..eb9011d --- /dev/null +++ b/localisation/fr-fr/complete/README.md @@ -0,0 +1,56 @@ +# Échantillons d'Applications Complètes + +Voici la liste des échantillons d'applications complètes. Parce qu'elles sont également vibe-codées, vous pouvez voir comment elles sont construites. + +| Application | Emplacement | +|-------------|-----------------------------| +| FastAPI | [python](./python/) | +| React | [javascript](./javascript/) | +| Spring Boot | [java](./java/) | +| Blazor | [dotnet](./dotnet/) | + +## Échantillon de Conteneurisation + +### Prérequis + +Référez-vous au document [README](../../README.md) pour la préparation. + +### Démarrage + +1. Assurez-vous que Docker fonctionne. + + ```bash + docker info + ``` + +1. Obtenez la racine du référentiel. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Naviguez vers le répertoire `complete`. + + ```bash + cd $REPOSITORY_ROOT/complete + ``` + +1. Exécutez les applications conteneurisées. + + ```bash + docker compose up --build -d + ``` + +1. Ouvrez un navigateur web et naviguez vers `http://localhost:3030`. +1. Vérifiez si l'application web fonctionne correctement. +1. Nettoyez en exécutant la commande suivante pour supprimer les applications conteneurisées. + + ```bash + docker compose down --rmi all + ``` \ No newline at end of file diff --git a/localisation/fr-fr/complete/dotnet/README.md b/localisation/fr-fr/complete/dotnet/README.md new file mode 100644 index 0000000..4f48ba3 --- /dev/null +++ b/localisation/fr-fr/complete/dotnet/README.md @@ -0,0 +1,35 @@ +# Échantillon d'Application .NET + +## Prérequis + +Référez-vous au document [README](../../../README.md) pour la préparation. + +## Démarrage + +### Exécuter le Backend Spring Boot + +Utilisez [l'Échantillon d'Application Java](../java/). + +> **NOTE** : Si vous utilisez GitHub Codespaces, assurez-vous que le port de l'application Java, `8080`, est défini sur **public**. + +### Exécuter le Frontend Blazor + +1. Obtenez la racine du référentiel. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Exécutez l'application. + + ```bash + dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp + ``` + +1. Vérifiez si l'application web fonctionne correctement. \ No newline at end of file diff --git a/localisation/fr-fr/complete/java/socialapp/README.md b/localisation/fr-fr/complete/java/socialapp/README.md new file mode 100644 index 0000000..8f0de9c --- /dev/null +++ b/localisation/fr-fr/complete/java/socialapp/README.md @@ -0,0 +1,367 @@ +# Échantillon d'Application Java + +Une application API REST Spring Boot complète pour une plateforme de médias sociaux avec des opérations CRUD complètes pour les publications, commentaires et likes. + +## Aperçu du Projet + +Il s'agit d'une application Spring Boot prête pour la production construite avec les spécifications suivantes : + +- **Nom du Package** : `com.contoso.socialapp` +- **ID d'Artefact** : `socialapp` +- **ID de Groupe** : `com.contoso` +- **Type de Package** : `jar` +- **Version Java** : OpenJDK 21 +- **Outil de Build** : Gradle +- **Base de données** : SQLite (embarquée) +- **Port** : 8080 + +### Dépendances du Projet + +- **Spring Boot 3.2.5** : Framework principal +- **Spring Web** : Points de terminaison API RESTful +- **Spring Data JPA** : Opérations de base de données +- **Spring Boot Actuator** : Surveillance d'application +- **Spring Boot Validation** : Validation d'entrée +- **SQLite** : Base de données embarquée +- **Hibernate Community Dialects** : Support SQLite +- **Springdoc OpenAPI** : Documentation API (Swagger UI) +- **Lombok** : Réduction du code standard + +### Structure du Projet + +```text +src/ +├── main/ +│ ├── java/ +│ │ └── com/ +│ │ └── contoso/ +│ │ └── socialapp/ +│ │ ├── SocialAppApplication.java # Classe principale de l'application +│ │ ├── config/ +│ │ │ ├── WebConfig.java # Configuration CORS +│ │ │ └── OpenApiConfig.java # Configuration Swagger/OpenAPI +│ │ ├── controller/ +│ │ │ ├── HealthController.java # Points de terminaison de santé +│ │ │ ├── PostController.java # Gestion des publications +│ │ │ └── CommentController.java # Gestion des commentaires et likes +│ │ ├── model/ +│ │ │ ├── Post.java # Entité Publication +│ │ │ ├── Comment.java # Entité Commentaire +│ │ │ ├── Like.java # Entité Like +│ │ │ └── dto/ # Objets de Transfert de Données +│ │ ├── repository/ +│ │ │ ├── PostRepository.java # Accès aux données de publication +│ │ │ ├── CommentRepository.java # Accès aux données de commentaire +│ │ │ └── LikeRepository.java # Accès aux données de like +│ │ └── service/ +│ │ ├── PostService.java # Logique métier des publications +│ │ └── CommentService.java # Logique métier des commentaires +│ └── resources/ +│ ├── application.properties # Configuration de l'application +│ └── data.sql # Données d'exemple (optionnel) +└── test/ + └── java/ + └── com/ + └── contoso/ + └── socialapp/ + └── SocialAppApplicationTests.java # Tests d'intégration +``` + +## Fonctionnalités + +- ✅ API RESTful complète pour les opérations de médias sociaux +- ✅ Gestion des publications (Créer, Lire, Mettre à jour, Supprimer) +- ✅ Système de commentaires avec opérations CRUD complètes +- ✅ Fonctionnalité Like/Ne plus aimer +- ✅ Base de données SQLite avec JPA/Hibernate +- ✅ Documentation OpenAPI/Swagger +- ✅ CORS activé pour localhost et GitHub Codespaces +- ✅ Configuration d'URL de serveur dynamique +- ✅ Points de terminaison de vérification de santé +- ✅ Intégration Spring Boot Actuator +- ✅ Gestion complète des erreurs +- ✅ Validation d'entrée avec Bean Validation + +## Démarrage Rapide + +### Prérequis + +Référez-vous au document [README](../../../README.md) pour la préparation. + +### 1. Configuration de l'Environnement + +D'abord, définissez la variable d'environnement `$REPOSITORY_ROOT`. + +```bash +# bash/zsh +REPOSITORY_ROOT=$(git rev-parse --show-toplevel) +``` + +```powershell +# PowerShell +$REPOSITORY_ROOT = git rev-parse --show-toplevel +``` + +Ensuite, naviguez vers le répertoire java. + +```bash +cd $REPOSITORY_ROOT/complete/java +``` + +### 2. Construire l'Application + +```bash +# Rendre gradlew exécutable (si nécessaire) +chmod +x ./gradlew + +# Construire le projet +./gradlew build +``` + +### 3. Exécuter l'Application + +```bash +# Démarrer l'application en utilisant Gradle +./gradlew bootRun + +# Alternative : Exécuter le fichier JAR directement +# java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar +``` + +### 4. Vérifier que l'Application Fonctionne + +```bash +# Vérifier le point de terminaison de santé +curl http://localhost:8080/api/health + +# Réponse attendue : {"status":"healthy"} +``` + +### 5. Accéder à la Documentation API + +Ouvrez votre navigateur et naviguez vers : + +- **Swagger UI** : [http://localhost:8080/swagger-ui.html](http://localhost:8080/swagger-ui.html) +- **JSON OpenAPI** : [http://localhost:8080/v3/api-docs](http://localhost:8080/v3/api-docs) + +## Points de Terminaison API + +### Santé et Bienvenue + +- `GET /api/health` - Point de terminaison de vérification de santé personnalisé +- `GET /api/welcome` - Point de terminaison de message de bienvenue + +### Gestion des Publications + +- `GET /api/posts` - Obtenir toutes les publications +- `GET /api/posts/{id}` - Obtenir une publication spécifique par ID +- `POST /api/posts` - Créer une nouvelle publication +- `PATCH /api/posts/{id}` - Mettre à jour une publication existante +- `DELETE /api/posts/{id}` - Supprimer une publication + +### Gestion des Commentaires + +- `GET /api/posts/{postId}/comments` - Obtenir tous les commentaires d'une publication +- `GET /api/posts/{postId}/comments/{commentId}` - Obtenir un commentaire spécifique +- `POST /api/posts/{postId}/comments` - Ajouter un commentaire à une publication +- `PATCH /api/posts/{postId}/comments/{commentId}` - Mettre à jour un commentaire +- `DELETE /api/posts/{postId}/comments/{commentId}` - Supprimer un commentaire + +### Gestion des Likes + +- `POST /api/posts/{postId}/like` - Aimer une publication +- `DELETE /api/posts/{postId}/like` - Ne plus aimer une publication + +### Spring Boot Actuator + +- `GET /actuator/health` - Indicateur de santé Spring Boot +- `GET /actuator/info` - Information de l'application + +## Tester l'API + +### Exemples d'Utilisation de cURL + +#### Créer une Publication + +```bash +curl -X POST http://localhost:8080/api/posts \ + -H "Content-Type: application/json" \ + -d '{ + "title": "Ma Première Publication", + "content": "Ceci est le contenu de ma première publication !", + "authorName": "Jean Dupont" + }' +``` + +#### Obtenir Toutes les Publications + +```bash +curl http://localhost:8080/api/posts +``` + +#### Ajouter un Commentaire + +```bash +curl -X POST http://localhost:8080/api/posts/1/comments \ + -H "Content-Type: application/json" \ + -d '{ + "content": "Super publication !", + "authorName": "Marie Martin" + }' +``` + +#### Aimer une Publication + +```bash +curl -X POST http://localhost:8080/api/posts/1/like \ + -H "Content-Type: application/json" \ + -d '{ + "userName": "jean_dupont" + }' +``` + +### Utilisation de Swagger UI + +1. Ouvrez [http://localhost:8080/swagger-ui.html](http://localhost:8080/swagger-ui.html) +2. Explorez les points de terminaison disponibles +3. Cliquez sur "Try it out" sur n'importe quel point de terminaison +4. Remplissez les paramètres et cliquez sur "Execute" + +## Développement + +### Exécuter les Tests + +```bash +# Exécuter tous les tests +./gradlew test + +# Exécuter avec rapport de couverture +./gradlew test jacocoTestReport + +# Exécuter une classe de test spécifique +./gradlew test --tests "SocialAppApplicationTests" +``` + +### Base de Données + +L'application utilise SQLite comme base de données embarquée : + +- **Fichier de base de données** : `sns_api.db` (créé automatiquement) +- **Emplacement** : Répertoire racine du projet +- **Schéma** : Auto-généré par Hibernate +- **Données d'exemple** : Chargées depuis `data.sql` (si présent) + +Pour réinitialiser la base de données, supprimez simplement le fichier `sns_api.db` et redémarrez l'application. + +## Configuration + +### Propriétés de l'Application + +Paramètres de configuration clés dans `application.properties` : + +```properties +# Paramètres de l'Application +spring.application.name=socialapp +server.port=8080 + +# Configuration de la Base de Données +spring.datasource.url=jdbc:sqlite:sns_api.db +spring.jpa.hibernate.ddl-auto=update + +# Configuration OpenAPI/Swagger +springdoc.swagger-ui.path=/swagger-ui.html +springdoc.swagger-ui.operationsSorter=method +``` + +### Configuration CORS + +L'application supporte à la fois localhost et GitHub Codespaces : + +- **Localhost** : `http://localhost:8080` +- **GitHub Codespaces** : Auto-détecté et configuré dynamiquement + +### Détection d'Environnement + +L'application détecte automatiquement l'environnement d'exécution : + +- **Développement Local** : Utilise `http://localhost:8080` +- **GitHub Codespaces** : Utilise `https://{codespace-name}-8080.{domain}` + +## Déploiement + +### Construction pour la Production + +```bash +# Créer un JAR de production +./gradlew clean build + +# Emplacement du JAR +ls -la build/libs/socialapp-0.0.1-SNAPSHOT.jar +``` + +### Exécution en Production + +```bash +# Exécuter avec le profil de production +java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod + +# Ou avec un port personnalisé +java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --server.port=8081 +``` + +## Dépannage + +### Problèmes Courants + +#### Port Déjà Utilisé + +```bash +# Trouver le processus utilisant le port 8080 +lsof -i :8080 + +# Tuer le processus (remplacer PID) +kill -9 + +# Ou utiliser un port différent +./gradlew bootRun --args='--server.port=8081' +``` + +#### Échecs de Construction + +```bash +# Nettoyer et reconstruire +./gradlew clean build + +# Mettre à jour le wrapper Gradle +./gradlew wrapper --gradle-version=8.5 +``` + +#### Problèmes de Base de Données + +```bash +# Réinitialiser la base de données +rm sns_api.db +./gradlew bootRun +``` + +### Journaux et Surveillance + +- **Journaux d'application** : Sortie console lors de l'exécution de `./gradlew bootRun` +- **Vérification de santé** : `GET /actuator/health` +- **Information de l'application** : `GET /actuator/info` + +## Considérations de Sécurité + +⚠️ **Configuration de Développement** : La configuration actuelle est optimisée pour le développement avec : + +- CORS activé pour toutes les origines +- Base de données SQLite (non adaptée à l'échelle de production) +- Aucune authentification/autorisation + +Pour un déploiement en production, considérez : + +- Restreindre CORS à des domaines spécifiques +- Utiliser PostgreSQL/MySQL au lieu de SQLite +- Implémenter Spring Security pour l'authentification +- Ajouter la limitation de débit et la désinfection d'entrée +- Utiliser le chiffrement HTTPS/TLS \ No newline at end of file diff --git a/localisation/fr-fr/complete/javascript/README.md b/localisation/fr-fr/complete/javascript/README.md new file mode 100644 index 0000000..c652454 --- /dev/null +++ b/localisation/fr-fr/complete/javascript/README.md @@ -0,0 +1,43 @@ +# Échantillon d'Application JavaScript + +## Prérequis + +Référez-vous au document [README](../../../README.md) pour la préparation. + +## Démarrage + +### Exécuter le Backend FastAPI + +Utilisez [l'Échantillon d'Application Python](../python/). + +> **NOTE** : Si vous utilisez GitHub Codespaces, assurez-vous que le port de l'application Python, `8000`, est défini sur **public**. + +### Exécuter le Frontend React + +1. Obtenez la racine du référentiel. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Installez les paquets npm. + + ```bash + cd $REPOSITORY_ROOT/complete/javascript + npm install + ``` + +1. Exécutez l'application. + + ```bash + npm run dev + ``` + +1. Ouvrez un navigateur web et naviguez vers `http://localhost:3000`. +1. Vérifiez si l'application web fonctionne correctement. \ No newline at end of file diff --git a/localisation/fr-fr/complete/python/README.md b/localisation/fr-fr/complete/python/README.md new file mode 100644 index 0000000..f583afa --- /dev/null +++ b/localisation/fr-fr/complete/python/README.md @@ -0,0 +1,292 @@ +# Échantillon d'Application Python + +Une implémentation backend FastAPI complète pour un Service de Réseau Social Simple (SNS) qui permet aux utilisateurs de créer, récupérer, mettre à jour et supprimer des publications ; d'ajouter des commentaires ; et d'aimer/ne plus aimer les publications. + +## 🏗️ Aperçu de l'Architecture + +- **Framework** : FastAPI avec Python 3.12+ +- **Base de données** : SQLite (`sns_api.db`) +- **Documentation API** : Swagger UI + spécification OpenAPI 3.1 +- **CORS** : Activé pour les requêtes cross-origin +- **Validation des données** : Modèles Pydantic avec validation complète + +## 📁 Structure du Projet + +```text +python/ +├── main.py # Point d'entrée de l'application FastAPI +├── models.py # Modèles de données et schémas Pydantic +├── database.py # Opérations de base de données SQLite +├── openapi.yaml # Spécification OpenAPI 3.0.1 +├── sns_api.db # Fichier de base de données SQLite (créé automatiquement) +├── README.md # Cette documentation +└── .venv/ # Environnement virtuel (créé pendant la configuration) +``` + +## 🚀 Démarrage Rapide + +### Prérequis + +Référez-vous au document [README](../../../README.md) pour la préparation. + +### 1. Configuration de l'Environnement + +D'abord, définissez la variable d'environnement `$REPOSITORY_ROOT`. + +```bash +# bash/zsh +REPOSITORY_ROOT=$(git rev-parse --show-toplevel) +``` + +```powershell +# PowerShell +$REPOSITORY_ROOT = git rev-parse --show-toplevel +``` + +Ensuite, naviguez vers le répertoire python et créez un environnement virtuel : + +```bash +cd $REPOSITORY_ROOT/complete/python +``` + +Créer un environnement virtuel + +```bash +# Utilisation d'uv (recommandé) +uv venv .venv +``` + +```bash +# Utilisation de Python standard (alternative) +python -m venv .venv +``` + +### 2. Activer l'Environnement Virtuel + +```bash +# Sur Linux/macOS +source .venv/bin/activate +``` + +```bash +# Sur Windows Command Prompt +.venv\Scripts\activate +``` + +### 3. Installer les Dépendances + +```bash +# Utilisation d'uv (recommandé) +uv pip install fastapi uvicorn python-multipart pyyaml +``` + +```bash +# Utilisation de pip (alternative) +pip install fastapi uvicorn python-multipart pyyaml +``` + +### 4. Copier la Spécification OpenAPI + +Copiez la spécification OpenAPI depuis le répertoire parent. + +```bash +# Sur Linux/macOS +cp ../openapi.yaml . +``` + +```powershell +# Sur Windows Command Prompt +xcopy ..\openapi.yaml . +``` + +### 5. Exécuter l'Application + +Démarrer le serveur de développement + +```bash +uvicorn main:app --host 0.0.0.0 --port 8000 --reload +``` + +L'application sera disponible à : + +- **URL de Base API** : `http://localhost:8000/api/` +- **Swagger UI** : `http://localhost:8000/docs` +- **Spécification OpenAPI** : `http://localhost:8000/openapi.json` + +## 📊 Schéma de Base de Données + +L'application utilise SQLite avec les tables suivantes : + +### Table Posts + +- `id` (TEXT, PRIMARY KEY) - UUID +- `username` (TEXT, NOT NULL) - Nom d'utilisateur de l'auteur +- `content` (TEXT, NOT NULL) - Contenu de la publication +- `created_at` (TEXT, NOT NULL) - Horodatage ISO +- `updated_at` (TEXT, NOT NULL) - Horodatage ISO + +### Table Comments + +- `id` (TEXT, PRIMARY KEY) - UUID +- `post_id` (TEXT, NOT NULL) - Clé étrangère vers posts +- `username` (TEXT, NOT NULL) - Nom d'utilisateur de l'auteur +- `content` (TEXT, NOT NULL) - Contenu du commentaire +- `created_at` (TEXT, NOT NULL) - Horodatage ISO +- `updated_at` (TEXT, NOT NULL) - Horodatage ISO + +### Table Likes + +- `post_id` (TEXT, NOT NULL) - Clé étrangère vers posts +- `username` (TEXT, NOT NULL) - Utilisateur qui a aimé +- `liked_at` (TEXT, NOT NULL) - Horodatage ISO +- Clé primaire : `(post_id, username)` + +## 🔌 Points de Terminaison API + +### Publications + +- `GET /api/posts` - Lister toutes les publications +- `POST /api/posts` - Créer une nouvelle publication +- `GET /api/posts/{postId}` - Obtenir une publication spécifique +- `PATCH /api/posts/{postId}` - Mettre à jour une publication +- `DELETE /api/posts/{postId}` - Supprimer une publication + +### Commentaires + +- `GET /api/posts/{postId}/comments` - Lister les commentaires d'une publication +- `POST /api/posts/{postId}/comments` - Créer un commentaire +- `GET /api/posts/{postId}/comments/{commentId}` - Obtenir un commentaire spécifique +- `PATCH /api/posts/{postId}/comments/{commentId}` - Mettre à jour un commentaire +- `DELETE /api/posts/{postId}/comments/{commentId}` - Supprimer un commentaire + +### Likes + +- `POST /api/posts/{postId}/likes` - Aimer une publication +- `DELETE /api/posts/{postId}/likes?username={username}` - Ne plus aimer une publication + +## 🧪 Tester l'API + +### Utilisation de cURL + +#### Créer une Publication + +```bash +curl -X POST "http://localhost:8000/api/posts" \ + -H "Content-Type: application/json" \ + -d '{"username": "john_doe", "content": "Bonjour le monde ! Ceci est ma première publication."}' +``` + +#### Obtenir Toutes les Publications + +```bash +curl -X GET "http://localhost:8000/api/posts" +``` + +#### Ajouter un Commentaire + +```bash +curl -X POST "http://localhost:8000/api/posts/{POST_ID}/comments" \ + -H "Content-Type: application/json" \ + -d '{"username": "jane_smith", "content": "Super publication !"}' +``` + +#### Aimer une Publication + +```bash +curl -X POST "http://localhost:8000/api/posts/{POST_ID}/likes" \ + -H "Content-Type: application/json" \ + -d '{"username": "alice_johnson"}' +``` + +### Utilisation de Swagger UI + +1. Naviguez vers `http://localhost:8000/docs` +2. Explorez et testez tous les points de terminaison API de manière interactive +3. Consultez les schémas et exemples de requête/réponse + +## 📝 Modèles de Données + +### Modèles de Requête + +- `NewPostRequest` : `{username: str, content: str}` +- `UpdatePostRequest` : `{username: str, content: str}` +- `NewCommentRequest` : `{username: str, content: str}` +- `UpdateCommentRequest` : `{username: str, content: str}` +- `LikeRequest` : `{username: str}` + +### Modèles de Réponse + +- `Post` : Objet publication complet avec métadonnées et compteurs +- `Comment` : Objet commentaire complet avec métadonnées +- `LikeResponse` : Confirmation de like avec horodatage + +## ⚙️ Configuration + +### Variables d'Environnement + +L'application utilise des paramètres par défaut mais peut être personnalisée : + +- **Base de données** : Fichier SQLite `sns_api.db` (créé automatiquement) +- **Hôte** : `0.0.0.0` (toutes les interfaces) +- **Port** : `8000` +- **CORS** : Activé pour toutes les origines + +### Considérations de Production + +Pour un déploiement en production, considérez : + +1. **Base de données** : Passer à PostgreSQL ou MySQL +2. **Variables d'environnement** : Utiliser pour la configuration sensible +3. **Sécurité** : Ajouter l'authentification et l'autorisation +4. **CORS** : Restreindre à des domaines spécifiques +5. **Journalisation** : Implémenter la journalisation structurée +6. **Surveillance** : Ajouter des vérifications de santé et des métriques + +## 🛠️ Développement + +### Organisation des Fichiers + +- **`main.py`** : Configuration de l'application FastAPI, middleware et définitions de routes +- **`models.py`** : Modèles Pydantic pour la validation et sérialisation des données +- **`database.py`** : Opérations SQLite, gestion des connexions et fonctions CRUD + +### Style de Code + +Le projet suit : + +- Les directives de style Python PEP 8 +- Les meilleures pratiques FastAPI +- Les modèles de programmation fonctionnelle +- Les annotations de type partout +- La gestion complète des erreurs + +### Ajouter de Nouvelles Fonctionnalités + +1. Définir les modèles Pydantic dans `models.py` +2. Ajouter les opérations de base de données dans `database.py` +3. Créer les points de terminaison API dans `main.py` +4. Mettre à jour la spécification OpenAPI si nécessaire + +## 🐛 Dépannage + +### Problèmes Courants + +1. **Port déjà utilisé** : Changer le port avec `--port 8001` +2. **Problèmes d'environnement virtuel** : Recréer avec `rm -rf .venv && uv venv .venv` +3. **Base de données verrouillée** : Arrêter toutes les instances en cours d'exécution de l'application +4. **Erreurs d'importation** : S'assurer que l'environnement virtuel est activé + +### Mode Debug + +Exécuter avec journalisation supplémentaire : + +```bash +uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug +``` + +## 📚 Ressources Supplémentaires + +- [Documentation FastAPI](https://fastapi.tiangolo.com/) +- [Documentation Pydantic](https://docs.pydantic.dev/) +- [Documentation SQLite](https://sqlite.org/docs.html) +- [Spécification OpenAPI](https://swagger.io/specification/) \ No newline at end of file diff --git a/localisation/fr-fr/docs/00-setup.md b/localisation/fr-fr/docs/00-setup.md new file mode 100644 index 0000000..462179b --- /dev/null +++ b/localisation/fr-fr/docs/00-setup.md @@ -0,0 +1,352 @@ +# 00: Environnement de Développement + +Dans cette étape, vous configurez l'environnement de développement pour l'atelier. + +## Prérequis + +Consultez le document [README](../README.md) pour la préparation. + +## Commencer + +- [Utiliser GitHub Codespaces](#utiliser-github-codespaces) +- [Utiliser Visual Studio Code](#utiliser-visual-studio-code) + - [Installer PowerShell 👉 Pour les Utilisateurs Windows](#installer-powershell--pour-les-utilisateurs-windows) + - [Installer git CLI](#installer-git-cli) + - [Installer GitHub CLI](#installer-github-cli) + - [Installer Docker Desktop](#installer-docker-desktop) + - [Installer Visual Studio Code](#installer-visual-studio-code) + - [Démarrer Visual Studio Code](#démarrer-visual-studio-code) + - [Configurer les Serveurs MCP](#configurer-les-serveurs-mcp) +- [Vérifier le Mode Agent GitHub Copilot](#vérifier-le-mode-agent-github-copilot) +- [Préparer les Instructions Personnalisées](#préparer-les-instructions-personnalisées) +- [Analyser le Document d'Exigences Produit (PRD) et Concevoir l'API](#analyser-le-document-dexigences-produit-prd-et-concevoir-lapi) + +## Utiliser GitHub Codespaces + +1. Regardez l'image ci-dessous et suivez les étapes dans l'ordre en cliquant sur ![l'image du bouton "code"](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![l'image du bouton "codespaces"](https://img.shields.io/badge/Codespaces-white) 👉 ![l'image du bouton "create codespace on main"](https://img.shields.io/badge/Create_codespace_on_main-green) et créez une nouvelle instance GitHub Codespace. Cela peut prendre 5-10 minutes selon le statut du réseau. + + ![Commencer avec GitHub Codespaces](../../../docs/images/setup-01.png) + +2. Une fois que l'instance GitHub Codespace est prête, ouvrez un terminal et exécutez la commande suivante pour vérifier si tout ce dont vous avez besoin a été installé correctement ou non. + + ```bash + # Python + python --version + ``` + + ```bash + # Node.js + node --version + npm --version + + ``` + + ```bash + # JDK + java --version + ``` + + ```bash + # .NET SDK + dotnet --list-sdks + ``` + +3. Vérifiez le statut de votre dépôt. + + ```bash + git remote -v + ``` + + Vous devriez pouvoir voir ce qui suit. + + ```bash + origin https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (fetch) + origin https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (push) + ``` + + Si vous voyez quelque chose de différent de ce qui précède, supprimez l'instance GitHub Codespace et recréez-la. + +4. Descendez à la section [Configurer les Serveurs MCP](#configurer-les-serveurs-mcp). + +**👇👇👇 Au lieu de cela, si vous souhaitez utiliser VS Code sur votre machine locale, suivez les instructions ci-dessous. La section ci-dessous ne s'applique pas à ceux qui utilisent GitHub Codespaces. 👇👇👇** + +## Utiliser Visual Studio Code + +### Installer PowerShell 👉 Pour les Utilisateurs Windows + +1. Vérifiez si vous avez déjà installé PowerShell ou non. + + ```bash + # Bash/Zsh + which pwsh + ``` + + ```bash + # PowerShell + Get-Command pwsh + ``` + + Si vous ne voyez pas le chemin de commande de `pwsh`, cela signifie que vous n'avez pas encore installé PowerShell. Visitez la [page d'installation PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) et suivez les instructions. + +1. Vérifiez la version de votre PowerShell. + + ```bash + pwsh --version + ``` + + `7.5.0` ou supérieur est recommandé. Si la vôtre est inférieure à cela, visitez la [page d'installation PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) et suivez les instructions. + +### Installer git CLI + +1. Vérifiez si vous avez déjà installé git CLI ou non. + + ```bash + # Bash/Zsh + which git + ``` + + ```bash + # PowerShell + Get-Command git + ``` + + Si vous ne voyez pas le chemin de commande de `git`, cela signifie que vous n'avez pas encore installé le git CLI. Visitez la [page d'installation git CLI](https://git-scm.com/downloads) et suivez les instructions. + +1. Vérifiez la version de votre git CLI. + + ```bash + git --version + ``` + + `2.39.0` ou supérieur est recommandé. Si la vôtre est inférieure à cela, visitez la [page d'installation git CLI](https://git-scm.com/downloads) et suivez les instructions. + +### Installer GitHub CLI + +1. Vérifiez si vous avez déjà installé GitHub CLI ou non. + + ```bash + # Bash/Zsh + which gh + ``` + + ```bash + # PowerShell + Get-Command gh + ``` + + Si vous ne voyez pas le chemin de commande de `gh`, cela signifie que vous n'avez pas encore installé le GitHub CLI. Visitez la [page d'installation GitHub CLI](https://cli.github.com/) et suivez les instructions. + +1. Vérifiez la version de votre GitHub CLI. + + ```bash + gh --version + ``` + + `2.65.0` ou supérieur est recommandé. Si la vôtre est inférieure à cela, visitez la [page d'installation GitHub CLI](https://cli.github.com/) et suivez les instructions. + +1. Vérifiez si vous vous êtes connecté à GitHub ou non. + + ```bash + gh auth status + ``` + + Si vous ne vous êtes pas encore connecté, exécutez `gh auth login` et connectez-vous. + +### Installer Docker Desktop + +1. Vérifiez si vous avez déjà installé Docker Desktop ou non. + + ```bash + # Bash/Zsh + which docker + ``` + + ```bash + # PowerShell + Get-Command docker + ``` + + Si vous ne voyez pas le chemin de commande de `docker`, cela signifie que vous n'avez pas encore installé Docker Desktop. Visitez la [page d'installation Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) et suivez les instructions. + +1. Vérifiez la version de votre Docker CLI. + + ```bash + docker --version + ``` + + `28.0.4` ou supérieur est recommandé. Si la vôtre est inférieure à cela, visitez la [page d'installation Docker Desktop](https://docs.docker.com/get-started/introduction/get-docker-desktop/) et suivez les instructions. + +### Installer Visual Studio Code + +1. Vérifiez si vous avez déjà installé VS Code ou non. + + ```bash + # Bash/Zsh + which code + ``` + + ```bash + # PowerShell + Get-Command code + ``` + + Si vous ne voyez pas le chemin de commande de `code`, cela signifie que vous n'avez pas encore installé VS Code. Visitez la [page d'installation Visual Studio Code](https://code.visualstudio.com/) et suivez les instructions. + +1. Vérifiez la version de votre VS Code. + + ```bash + code --version + ``` + + `1.99.0` ou supérieur est recommandé. Si la vôtre est inférieure à cela, visitez la [page d'installation Visual Studio Code](https://code.visualstudio.com/) et suivez les instructions. + + > **NOTE**: Vous pourriez ne pas être capable d'exécuter la commande `code`. Dans ce cas, suivez [cette documentation](https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line) pour la configuration. + +### Démarrer Visual Studio Code + +1. Créez un répertoire de travail. +1. Exécutez la commande pour forker ce dépôt et le cloner sur votre machine locale. + + ```bash + gh repo fork microsoft/github-copilot-vibe-coding-workshop --clone + ``` + +1. Naviguez dans le répertoire cloné. + + ```bash + cd github-copilot-vibe-coding-workshop + ``` + +1. Exécutez VS Code depuis le terminal. + + ```bash + code . + ``` + +1. Ouvrez un nouveau terminal dans VS Code et exécutez la commande suivante pour vérifier le statut de votre dépôt. + + ```bash + git remote -v + ``` + + Vous devriez pouvoir voir ce qui suit. Si vous voyez `microsoft` dans `origin`, vous devriez le cloner à nouveau depuis votre dépôt forké. + + ```bash + origin https://github.com//github-copilot-vibe-coding-workshop.git (fetch) + origin https://github.com//github-copilot-vibe-coding-workshop.git (push) + upstream https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (fetch) + upstream https://github.com/microsoft/github-copilot-vibe-coding-workshop.git (push) + ``` + +1. Vérifiez si les deux extensions ont été installées ou non – [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) et [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat). + + ```bash + # Bash/Zsh + code --list-extensions | grep github.copilot + ``` + + ```powershell + # PowerShell + code --list-extensions | Select-String "github.copilot" + ``` + + Si vous ne voyez rien, cela signifie que vous n'avez pas encore installé ces extensions. Exécutez la commande suivante pour installer les extensions. + + ```bash + code --install-extension "github.copilot" --force && code --install-extension "github.copilot-chat" --force + ``` + +### Configurer les Serveurs MCP + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les paramètres du serveur MCP. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/.vscode/. \ + $REPOSITORY_ROOT/.vscode/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/* ` + -Destination $REPOSITORY_ROOT/.vscode/ -Recurse -Force + ``` + +1. Ouvrez la Palette de Commandes en tapant F1 ou `Ctrl`+`Shift`+`P` sur Windows ou `Cmd`+`Shift`+`P` sur Mac OS, et recherchez `MCP: List Servers`. +1. Choisissez `context7` puis cliquez sur `Start Server`. + +## Vérifier le Mode Agent GitHub Copilot + +1. Cliquez sur l'icône GitHub Copilot en haut de GitHub Codespace ou VS Code et ouvrez la fenêtre GitHub Copilot. + + ![Ouvrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si on vous demande de vous connecter ou de vous inscrire, faites-le. C'est gratuit. +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot. + + ![Mode Agent GitHub Copilot](../../../docs/images/setup-03.png) + +1. Sélectionnez le modèle soit `GPT-4.1` soit `Claude Sonnet 4`. + +## Préparer les Instructions Personnalisées + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les instructions personnalisées. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/setup/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/setup/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +## Analyser le Document d'Exigences Produit (PRD) et Concevoir l'API + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Ajoutez [`product-requirements.md`](../product-requirements.md) à GitHub Copilot. +1. Entrez l'invite comme suit pour que l'Agent GitHub Copilot génère un document OpenAPI pour vous. Ce document OpenAPI sera la base de toute votre application. + + ```text + Voici le PRD pour vous. Lisez attentivement l'ensemble du PRD et faites ce qui suit pour moi. + + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Générez un document OpenAPI au format YAML. + - Le document OpenAPI doit capturer tous les points de terminaison API, paramètres et charges utiles de requête/réponse. + - Supposez que le serveur API est `http://localhost:8080` et l'URL de base est `/api`. + - Enregistrez-le dans le fichier `openapi.yaml` à la racine du dépôt. + ``` + +1. Vérifiez que le fichier `openapi.yaml` est généré à la racine du dépôt. +1. Cliquez sur le bouton `[keep]` de GitHub Copilot pour prendre le fichier `openapi.yaml`. + +--- + +OK. Vous avez terminé l'étape "Environnement de Développement". Passons à [ÉTAPE 01: Développement Backend Python](./01-python.md). \ No newline at end of file diff --git a/localisation/fr-fr/docs/01-python.md b/localisation/fr-fr/docs/01-python.md new file mode 100644 index 0000000..878ebbf --- /dev/null +++ b/localisation/fr-fr/docs/01-python.md @@ -0,0 +1,119 @@ +# 01: Développement Backend Python + +## Scénario + +Contoso est une entreprise qui vend des produits pour diverses activités de plein air. Le département marketing de Contoso souhaiterait lancer un site web de micro-médias sociaux pour promouvoir leurs produits auprès des clients existants et potentiels. + +En tant que développeur Python, vous allez construire une application backend Python en utilisant FastAPI. Pour l'instant, vous utilisez la fonctionnalité en mémoire de SQLite. + +## Prérequis + +Consultez le document [README](../README.md) pour la préparation. + +## Commencer + +- [Vérifier le Mode Agent GitHub Copilot](#vérifier-le-mode-agent-github-copilot) +- [Préparer les Instructions Personnalisées](#préparer-les-instructions-personnalisées) +- [Préparer l'Environnement Virtuel](#préparer-lenvironnement-virtuel) +- [Construire l'Application Backend FastAPI](#construire-lapplication-backend-fastapi) + +### Vérifier le Mode Agent GitHub Copilot + +1. Cliquez sur l'icône GitHub Copilot en haut de GitHub Codespace ou VS Code et ouvrez la fenêtre GitHub Copilot. + + ![Ouvrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si on vous demande de vous connecter ou de vous inscrire, faites-le. C'est gratuit. +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot. + + ![Mode Agent GitHub Copilot](../../../docs/images/setup-03.png) + +1. Sélectionnez le modèle soit `GPT-4.1` soit `Claude Sonnet 4`. +1. Assurez-vous que vous avez configuré les [Serveurs MCP](./00-setup.md#configurer-les-serveurs-mcp). + +### Préparer les Instructions Personnalisées + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les instructions personnalisées. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/python/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/python/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Préparer l'Environnement Virtuel + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Utilisez une invite comme ci-dessous pour préparer l'environnement virtuel pour le développement d'applications Python. + + ```text + J'aimerais écrire une application Python. Mais avant cela, j'ai besoin de configurer un environnement virtuel. Suivez les instructions ci-dessous. + + - Utilisez context7. + - Votre répertoire de travail est `python`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Utilisez `.venv` pour l'environnement virtuel. + - Utilisez `uv` comme gestionnaire de paquets Python. + ``` + +### Construire l'Application Backend FastAPI + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Ajoutez [`product-requirements.md`](../product-requirements.md) et [`openapi.yaml`](../openapi.yaml) à GitHub Copilot. +1. Utilisez une invite comme ci-dessous pour construire une application backend FastAPI. + + ```text + J'aimerais construire une application FastAPI comme API backend. Lisez attentivement l'ensemble du PRD et `openapi.yaml`. Ensuite, suivez les instructions ci-dessous. + + - Utilisez context7. + - Votre répertoire de travail est `python`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Utilisez FastAPI comme framework d'application API. + - Utilisez SQLite comme base de données. + - Utilisez `sns_api.db` comme nom de la base de données SQLite. + - La base de données doit toujours être initialisée à chaque démarrage de l'application. + - Utilisez `openapi.yaml` qui décrit tous les points de terminaison et le schéma de données. + - Utilisez le numéro de port `8000`. + - Assurez-vous d'autoriser CORS depuis partout. + - Le point d'entrée est `main.py`. + - L'application API doit rendre la page Swagger UI via un point de terminaison par défaut. + - L'application API doit rendre exactement le même document OpenAPI via un point de terminaison par défaut. + - N'ajoutez RIEN qui ne soit pas défini dans `openapi.yaml`. + - NE modifiez RIEN de ce qui est défini dans `openapi.yaml`. + ``` + +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. +1. Une fois l'application construite, vérifiez si elle est écrite correctement ou non. + + ```text + Exécutez l'application FastAPI et vérifiez si l'application fonctionne correctement. Vérifiez également que le point de terminaison OpenAPI rend exactement le même contenu que `openapi.yaml`. + + Si l'exécution de l'application échoue, analysez les problèmes et corrigez-les. + ``` + +1. Ouvrez un navigateur web et naviguez vers `http://localhost:8000`. +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +--- + +OK. Vous avez terminé l'étape "Python". Passons à [ÉTAPE 02: Développement Frontend JavaScript](./02-javascript.md). \ No newline at end of file diff --git a/localisation/fr-fr/docs/02-javascript.md b/localisation/fr-fr/docs/02-javascript.md new file mode 100644 index 0000000..2bd7567 --- /dev/null +++ b/localisation/fr-fr/docs/02-javascript.md @@ -0,0 +1,165 @@ +# 02: Développement Frontend JavaScript + +## Scénario + +Contoso est une entreprise qui vend des produits pour diverses activités de plein air. Le département marketing de Contoso souhaiterait lancer un site web de micro-médias sociaux pour promouvoir leurs produits auprès des clients existants et potentiels. + +En tant que développeur JavaScript, vous allez construire une application frontend JavaScript en utilisant React qui communique avec l'application API backend Python. + +## Prérequis + +Consultez le document [README](../README.md) pour la préparation. + +## Commencer + +- [Vérifier le Mode Agent GitHub Copilot](#vérifier-le-mode-agent-github-copilot) +- [Préparer les Instructions Personnalisées](#préparer-les-instructions-personnalisées) +- [Préparer le Projet d'Application](#préparer-le-projet-dapplication) +- [Préparer le Serveur MCP Figma](#préparer-le-serveur-mcp-figma) +- [Générer les Composants UI depuis Figma](#générer-les-composants-ui-depuis-figma) +- [Exécuter l'Application Backend FastAPI](#exécuter-lapplication-backend-fastapi) +- [Construire l'Application Frontend React](#construire-lapplication-frontend-react) +- [Vérifier l'Application Frontend React](#vérifier-lapplication-frontend-react) + +### Vérifier le Mode Agent GitHub Copilot + +1. Cliquez sur l'icône GitHub Copilot en haut de GitHub Codespace ou VS Code et ouvrez la fenêtre GitHub Copilot. + + ![Ouvrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si on vous demande de vous connecter ou de vous inscrire, faites-le. C'est gratuit. +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot. + + ![Mode Agent GitHub Copilot](../../../docs/images/setup-03.png) + +1. Sélectionnez le modèle soit `GPT-4.1` soit `Claude Sonnet 4`. +1. Assurez-vous que vous avez configuré les [Serveurs MCP](./00-setup.md#configurer-les-serveurs-mcp). + +### Préparer les Instructions Personnalisées + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les instructions personnalisées. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/javascript/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/javascript/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Préparer le Projet d'Application + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Utilisez une invite comme ci-dessous pour échafauder un projet d'application web React. + + ```text + J'aimerais échafauder une application web React. Suivez les instructions ci-dessous. + + - Assurez-vous que c'est l'application web, pas l'application mobile. + - Votre répertoire de travail est `javascript`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Utilisez ViteJS comme framework d'application frontend. + - Utilisez les paramètres par défaut lors de l'initialisation du projet. + - Utilisez `SimpleSocialMediaApplication` comme nom du projet lors de l'initialisation. + - Utilisez le numéro de port `3000`. + - Initialisez seulement le projet. N'allez PAS plus loin. + ``` + +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +### Préparer le Serveur MCP Figma + +1. Assurez-vous que vous avez configuré les [Serveurs MCP](./00-setup.md#configurer-les-serveurs-mcp). +1. Obtenez le jeton d'accès personnel (PAT) depuis [Figma](https://www.figma.com/). +1. Ouvrez la Palette de Commandes en tapant F1 ou `Ctrl`+`Shift`+`P` sur Windows ou `Cmd`+`Shift`+`P` sur Mac OS, et recherchez `MCP: List Servers`. +1. Choisissez `Framelink Figma MCP` puis cliquez sur `Start Server`. +1. Entrez le PAT que vous avez obtenu de Figma. + +### Générer les Composants UI depuis Figma + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que vous exécutez le serveur MCP Figma. +1. Copiez le [modèle de conception Figma](https://www.figma.com/community/file/1495954632647006209) vers votre compte. + + ![Page de modèle de conception Figma](../../../docs/images/javascript-01.png) + +1. Faites un clic droit sur chaque section - `Home`, `Search`, `Post Details`, `Post Modal` et `Name Input Modal` 👉 Sélectionnez `Copy/Paste as` 👉 Sélectionnez `Copy link to selection` pour obtenir le lien vers chaque section. Notez les cinq liens. + +### Exécuter l'Application Backend FastAPI + +1. Assurez-vous que l'application backend FastAPI est lancée et en cours d'exécution. + + ```text + Exécutez l'API backend FastAPI, qui se trouve dans le répertoire `python`. + ``` + + > **NOTE**: Vous pouvez utiliser l'application d'exemple [`complete/python`](../complete/python/) à la place. + +1. Si vous utilisez GitHub Codespaces, assurez-vous que le numéro de port `8000` est défini sur `public` au lieu de `private`. Sinon, vous obtiendrez l'erreur `401` lors de l'accès depuis l'application frontend. + +### Construire l'Application Frontend React + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Assurez-vous que vous avez tous les liens de section Figma des 5 récupérés de la [section précédente](#generer-les-composants-ui-depuis-figma). +1. Ajoutez [`product-requirements.md`](../product-requirements.md) et [`openapi.yaml`](../openapi.yaml) à GitHub Copilot. +1. Utilisez une invite comme ci-dessous pour construire l'application basée sur les exigences et le document OpenAPI. + + ```text + J'aimerais construire une application web React. Suivez les instructions ci-dessous. + + - Votre répertoire de travail est `javascript`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Il y a une application API backend qui fonctionne sur `http://localhost:8000`. + - Utilisez `openapi.yaml` qui décrit tous les points de terminaison et le schéma de données. + - Utilisez le numéro de port `3000`. + - Créez tous les composants UI définis dans ce lien : {{FIGMA_SECTION_LINK}}. + - N'ajoutez RIEN qui ne soit pas lié aux composants UI. + - N'ajoutez RIEN qui ne soit pas défini dans `openapi.yaml`. + - NE modifiez RIEN de ce qui est défini dans `openapi.yaml`. + - Donnez une indication visuelle quand l'API backend est indisponible ou inaccessible pour quelque raison que ce soit. + ``` + +1. Répétez quatre fois de plus pour les quatre autres liens de conception Figma. +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +### Vérifier l'Application Frontend React + +1. Assurez-vous que l'application backend FastAPI est lancée et en cours d'exécution. + + ```text + Exécutez l'API backend FastAPI, qui se trouve dans le répertoire `python`. + ``` + +1. Vérifiez si elle est construite correctement ou non. + + ```text + Exécutez l'application React et vérifiez si l'application fonctionne correctement. + + Si l'exécution de l'application échoue, analysez les problèmes et corrigez-les. + ``` + +1. Ouvrez un navigateur web et naviguez vers `http://localhost:3000`. +1. Vérifiez si les applications frontend et backend fonctionnent correctement. +1. Cliquez sur le bouton `[keep]` de GitHub Copilot pour prendre les modifications. + +--- + +OK. Vous avez terminé l'étape "JavaScript". Passons à [ÉTAPE 03: Migration Java depuis Python](./03-java.md). \ No newline at end of file diff --git a/localisation/fr-fr/docs/03-java.md b/localisation/fr-fr/docs/03-java.md new file mode 100644 index 0000000..19ed81b --- /dev/null +++ b/localisation/fr-fr/docs/03-java.md @@ -0,0 +1,160 @@ +# 03: Migration Java depuis Python + +## Scénario + +Contoso est une entreprise qui vend des produits pour diverses activités de plein air. Le département marketing de Contoso souhaiterait lancer un site web de micro-médias sociaux pour promouvoir leurs produits auprès des clients existants et potentiels. + +Parce qu'un développeur Python a quitté l'entreprise, les parties prenantes ont demandé de migrer l'application API backend Python existante vers Java, en utilisant Spring Boot. + +Maintenant, en tant que développeur Java, vous devez migrer l'application FastAPI existante vers Spring Boot. Vous avez très peu de connaissances de Python et FastAPI, au fait. + +## Prérequis + +Consultez le document [README](../README.md) pour la préparation. + +## Commencer + +- [Vérifier le Mode Agent GitHub Copilot](#vérifier-le-mode-agent-github-copilot) +- [Préparer les Instructions Personnalisées](#préparer-les-instructions-personnalisées) +- [Préparer le Projet Spring Boot](#préparer-le-projet-spring-boot) +- [Migrer l'Application API FastAPI](#migrer-lapplication-api-fastapi) +- [Vérifier l'Application Backend Spring Boot](#vérifier-lapplication-backend-spring-boot) + +### Vérifier le Mode Agent GitHub Copilot + +1. Cliquez sur l'icône GitHub Copilot en haut de GitHub Codespace ou VS Code et ouvrez la fenêtre GitHub Copilot. + + ![Ouvrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si on vous demande de vous connecter ou de vous inscrire, faites-le. C'est gratuit. +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot. + + ![Mode Agent GitHub Copilot](../../../docs/images/setup-03.png) + +1. Sélectionnez le modèle soit `GPT-4.1` soit `Claude Sonnet 4`. +1. Assurez-vous que vous avez configuré les [Serveurs MCP](./00-setup.md#configurer-les-serveurs-mcp). + +### Préparer les Instructions Personnalisées + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les instructions personnalisées. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/java/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/java/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Préparer le Projet Spring Boot + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Installez Spring Boot CLI. + + ```bash + sdk install springboot + ``` + +1. Utilisez une invite comme ci-dessous pour échafauder un projet d'application Spring Boot. + + ```text + J'aimerais échafauder une application Spring Boot. Suivez les instructions ci-dessous. + + - Utilisez context7. + - Votre répertoire de travail est `java`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Utilisez Spring Boot CLI pour créer le projet d'application Spring Boot. + - Utilisez Gradle comme gestionnaire de paquets Java. + - Utilisez le nom de paquet `com.contoso.socialapp`. + - Utilisez l'ID d'artefact `socialapp`. + - Utilisez l'ID de groupe `com.contoso`. + - Utilisez le type de paquet `jar`. + - Utilisez la version OpenJDK `21`. + - Ajoutez les dépendances - `Spring Web`, `Spring Boot Actuator` et `Lombok`. + - Utilisez le numéro de port `8080`. + - Assurez-vous d'autoriser CORS depuis partout. + - Construisez l'application Spring Boot et vérifiez si l'application est construite correctement. + - Exécutez cette application Spring Boot et vérifiez si l'application fonctionne correctement. + - Si la construction ou l'exécution de l'application échoue, analysez les problèmes et corrigez-les. + ``` + +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +### Migrer l'Application API FastAPI + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Ajoutez [`product-requirements.md`](../product-requirements.md) et [`openapi.yaml`](../openapi.yaml) à GitHub Copilot. +1. Utilisez une invite comme ci-dessous pour migrer FastAPI vers Spring Boot. + + ```text + Maintenant, nous migrons l'application API basée sur FastAPI existante vers une application API Spring Boot. Suivez les instructions ci-dessous pour la migration. + + - Utilisez context7. + - L'application FastAPI existante se trouve dans `python`. + - Votre répertoire de travail est `java/socialapp`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Analysez la structure de l'application FastAPI existante. + - Migrez tous les points de terminaison. Les deux points de terminaison correspondants doivent être exactement identiques l'un à l'autre. + - Utilisez SQLite comme base de données. + - Utilisez `sns_api.db` comme nom de la base de données SQLite. + - La base de données doit toujours être initialisée à chaque démarrage de l'application. + - Utilisez `openapi.yaml` qui décrit tous les points de terminaison et le schéma de données. + - L'application API doit rendre la page Swagger UI via un point de terminaison par défaut. + - L'application API doit rendre exactement le même document OpenAPI via un point de terminaison par défaut. + - N'ajoutez RIEN qui ne soit pas défini dans `openapi.yaml`. + - NE modifiez RIEN de ce qui est défini dans `openapi.yaml`. + - Si nécessaire, ajoutez plus de paquets pour OpenAPI et Swagger UI. + ``` + +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. +1. Une fois la migration terminée, utilisez une invite comme ci-dessous pour vérifier le résultat de la migration. + + ```text + J'aimerais construire l'application Spring Boot. Suivez les instructions. + + - Utilisez context7. + - Construisez l'application Spring Boot et vérifiez si l'application est construite correctement. + - Si la construction de l'application échoue, analysez les problèmes et corrigez-les. + ``` + + > **NOTE**: + > + > - Jusqu'à ce que la construction réussisse, itérez cette étape. + > - Si la construction continue d'échouer, vérifiez les messages d'erreur et demandez-leur à l'Agent GitHub Copilot de les déchiffrer. + +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +### Vérifier l'Application Backend Spring Boot + +1. Une fois l'application construite, vérifiez si elle est écrite correctement ou non. + + ```text + Exécutez l'application Spring Boot et vérifiez si l'application fonctionne correctement en vérifiant tous les points de terminaison. Vérifiez également que le point de terminaison OpenAPI rend exactement le même contenu que `openapi.yaml`. + + Si l'exécution de l'application échoue, analysez les problèmes et corrigez-les. Utilisez context7. + ``` + +1. Ouvrez un navigateur web et naviguez vers `http://localhost:8080`. +1. Cliquez sur le bouton ![l'image du bouton "keep"](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +--- + +OK. Vous avez terminé l'étape "Java". Passons à [ÉTAPE 04: Migration .NET depuis JavaScript](./04-dotnet.md). \ No newline at end of file diff --git a/localisation/fr-fr/docs/04-dotnet.md b/localisation/fr-fr/docs/04-dotnet.md new file mode 100644 index 0000000..6e71675 --- /dev/null +++ b/localisation/fr-fr/docs/04-dotnet.md @@ -0,0 +1,173 @@ +# 04: Migration .NET depuis JavaScript + +## Scénario + +Contoso est une entreprise qui vend des produits pour diverses activités de plein air. Le département marketing de Contoso souhaiterait lancer un site web de micro-médias sociaux pour promouvoir leurs produits auprès des clients existants et potentiels. + +Ils ont déjà une application frontend écrite en JavaScript, plus spécifiquement en React. Cependant, tout d'un coup, ils ont envoyé de nouvelles exigences pour redévelopper l'application frontend en utilisant .NET, spécialement en Blazor. + +Maintenant, en tant que développeur .NET, vous devez migrer l'application React existante vers Blazor. Vous avez très peu de connaissances de JavaScript et React, au fait. + +## Prérequis + +Consultez le document [README](../README.md) pour la préparation. + +## Commencer + +- [Vérifier le Mode Agent GitHub Copilot](#vérifier-le-mode-agent-github-copilot) +- [Préparer les Instructions Personnalisées](#préparer-les-instructions-personnalisées) +- [Préparer le Projet d'Application Web Blazor](#préparer-le-projet-dapplication-web-blazor) +- [Exécuter l'Application Backend Spring Boot](#exécuter-lapplication-backend-spring-boot) +- [Migrer l'Application Web React](#migrer-lapplication-web-react) +- [Vérifier l'Application Frontend Blazor](#vérifier-lapplication-frontend-blazor) + +### Vérifier le Mode Agent GitHub Copilot + +1. Cliquez sur l'icône GitHub Copilot en haut de GitHub Codespace ou VS Code et ouvrez la fenêtre GitHub Copilot. + + ![Ouvrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si on vous demande de vous connecter ou de vous inscrire, faites-le. C'est gratuit. +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot. + + ![Mode Agent GitHub Copilot](../../../docs/images/setup-03.png) + +1. Sélectionnez le modèle soit `GPT-4.1` soit `Claude Sonnet 4`. +1. Assurez-vous que vous avez configuré les [Serveurs MCP](./00-setup.md#configurer-les-serveurs-mcp). + +### Préparer les Instructions Personnalisées + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les instructions personnalisées. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/dotnet/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/dotnet/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Préparer le Projet d'Application Web Blazor + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Utilisez une invite comme ci-dessous pour échafauder un projet d'application web Blazor. + + ```text + J'aimerais échafauder une application web Blazor. Suivez les instructions ci-dessous. + + - Utilisez context7. + - Votre répertoire de travail est `dotnet`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Montrez-moi la liste des projets .NET liés à Blazor et demandez-moi de choisir. + - Générez un projet Blazor. + - Utilisez le nom de projet `Contoso.BlazorApp`. + - Mettez à jour `launchSettings.json` pour changer le numéro de port à `3031` pour HTTP, `43031` pour HTTPS. + - Créez une solution, `ContosoWebApp`, et ajoutez le projet Blazor dans cette solution. + - Construisez l'application Blazor et vérifiez si l'application est construite correctement. + - Exécutez cette application Blazor et vérifiez si l'application fonctionne correctement. + - Si la construction ou l'exécution de l'application échoue, analysez les problèmes et corrigez-les. + ``` + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +### Exécuter l'Application Backend Spring Boot + +1. Assurez-vous que l'application backend Spring Boot est lancée et en cours d'exécution. + + ```text + Exécutez l'API backend Spring Boot, qui se trouve dans le répertoire `java`. + ``` + + > **NOTE**: Vous pouvez utiliser l'application d'exemple [`complete/java`](../complete/java/) à la place. + +1. Si vous utilisez GitHub Codespaces, assurez-vous que le numéro de port `8080` est défini sur `public` au lieu de `private`. Sinon, vous obtiendrez l'erreur `401` lors de l'accès depuis l'application frontend. + +### Migrer l'Application Web React + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Assurez-vous que le serveur MCP `context7` est en cours d'exécution. +1. Utilisez une invite comme ci-dessous pour migrer React vers Blazor. + + ```text + Maintenant, nous migrons l'application web basée sur React existante vers une application web Blazor. Suivez les instructions ci-dessous pour la migration. + + - Utilisez context7. + - L'application React existante se trouve dans `javascript`. + - Votre répertoire de travail est `dotnet/Contoso.BlazorApp`. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Il y a une application API backend qui fonctionne sur `http://localhost:8080`. + - Analysez la structure de l'application React existante. + - Migrez tous les composants React vers Blazor. Les deux composants correspondants doivent être aussi exactement proches l'un de l'autre que possible. + - Migrez tous les éléments CSS nécessaires de React vers Blazor. + - Lors de la migration des éléments JavaScript de React vers Blazor, maximisez l'utilisation des fonctionnalités natives de Blazor autant que possible. Si vous devez utiliser JavaScript, utilisez les fonctionnalités JSInterop de Blazor. + - Si nécessaire, ajoutez des packages NuGet compatibles avec .NET 9. + ``` + +1. Une fois la migration terminée, utilisez une invite comme ci-dessous pour vérifier le résultat de la migration. + + ```text + J'aimerais construire l'application Blazor. Suivez les instructions. + + - Utilisez context7. + - Construisez l'application Blazor et vérifiez si l'application est construite correctement. + - Si la construction de l'application échoue, analysez les problèmes et corrigez-les. + ``` + + > **NOTE**: + > + > - Jusqu'à ce que la construction réussisse, itérez cette étape. + > - Si la construction continue d'échouer, vérifiez les messages d'erreur et demandez-leur à l'Agent GitHub Copilot de les déchiffrer. + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. +1. Une fois la construction réussie, utilisez une invite comme ci-dessous pour vérifier le résultat de la migration. + + ```text + J'aimerais exécuter l'application Blazor. Suivez les instructions. + + - Utilisez context7. + - Exécutez cette application Blazor et vérifiez si l'application fonctionne correctement. + - Ignorez l'erreur de connexion de l'application API backend à ce stade. + - Si l'exécution de l'application échoue, analysez les problèmes et corrigez-les. + ``` + +### Vérifier l'Application Frontend Blazor + +1. Assurez-vous que l'application backend Spring Boot est lancée et en cours d'exécution. + + ```text + Exécutez l'API backend Spring Boot, qui se trouve dans le répertoire `java`. + ``` + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. +1. Vérifiez si elle est construite correctement ou non. + + ```text + Exécutez l'application Blazor et vérifiez si l'application fonctionne correctement. + + Si l'exécution de l'application échoue, analysez les problèmes et corrigez-les. + ``` + +1. Ouvrez un navigateur web et naviguez vers `http://localhost:3031`. +1. Vérifiez si les applications frontend et backend fonctionnent correctement. +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +--- + +OK. Vous avez terminé l'étape ".NET". Passons à [ÉTAPE 05: Conteneurisation](./05-containerization.md). \ No newline at end of file diff --git a/localisation/fr-fr/docs/05-containerization.md b/localisation/fr-fr/docs/05-containerization.md new file mode 100644 index 0000000..994f81f --- /dev/null +++ b/localisation/fr-fr/docs/05-containerization.md @@ -0,0 +1,182 @@ +# 05: Conteneurisation + +## Scénario + +Contoso est une entreprise qui vend des produits pour diverses activités de plein air. Le département marketing de Contoso souhaiterait lancer un site web de micro-médias sociaux pour promouvoir leurs produits auprès des clients existants et potentiels. + +Ils ont maintenant à la fois une application backend basée sur Java et une application frontend basée sur .NET. Ils veulent les conteneuriser pour qu'elles puissent être déployées sur n'importe quelle plateforme. + +Maintenant, en tant qu'ingénieur DevOps, vous devez conteneuriser les deux applications. + +## Prérequis + +Consultez le document [README](../README.md) pour la préparation. + +## Commencer + +- [Vérifier le Mode Agent GitHub Copilot](#vérifier-le-mode-agent-github-copilot) +- [Préparer les Instructions Personnalisées](#préparer-les-instructions-personnalisées) +- [Conteneuriser l'Application Java](#conteneuriser-lapplication-java) +- [Conteneuriser l'Application .NET](#conteneuriser-lapplication-net) +- [Orchestrer les Conteneurs](#orchestrer-les-conteneurs) + +### Vérifier le Mode Agent GitHub Copilot + +1. Cliquez sur l'icône GitHub Copilot en haut de GitHub Codespace ou VS Code et ouvrez la fenêtre GitHub Copilot. + + ![Ouvrir GitHub Copilot Chat](../../../docs/images/setup-02.png) + +1. Si on vous demande de vous connecter ou de vous inscrire, faites-le. C'est gratuit. +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot. + + ![Mode Agent GitHub Copilot](../../../docs/images/setup-03.png) + +1. Sélectionnez le modèle soit `GPT-4.1` soit `Claude Sonnet 4`. +1. Assurez-vous que vous avez configuré les [Serveurs MCP](./00-setup.md#configurer-les-serveurs-mcp). + +### Préparer les Instructions Personnalisées + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les instructions personnalisées. + + ```bash + # bash/zsh + cp -r $REPOSITORY_ROOT/docs/custom-instructions/containerization/. \ + $REPOSITORY_ROOT/.github/ + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/custom-instructions/containerization/* ` + -Destination $REPOSITORY_ROOT/.github/ -Recurse -Force + ``` + +### Conteneuriser l'Application Java + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Utilisez une invite comme ci-dessous pour construire une image conteneur pour l'application Java. + + ```text + J'aimerais construire une image conteneur d'une application Java. Suivez les instructions ci-dessous. + + - L'application Java se trouve dans `java`. + - Votre répertoire de travail est la racine du dépôt. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Créez un Dockerfile, `Dockerfile.java`. + - Utilisez Microsoft OpenJDK 21. + - Utilisez l'approche de construction multi-étapes. + - Extrayez JRE de JDK. + - Utilisez le numéro de port cible `8080` pour l'image conteneur. + ``` + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +1. Une fois `Dockerfile.java` créé, construisez l'image conteneur avec l'invite suivante. + + ```text + Utilisez `Dockerfile.java` et construisez une image conteneur. + + - Utilisez `contoso-backend` comme nom d'image conteneur. + - Utilisez `latest` comme tag d'image conteneur. + - Vérifiez si l'image conteneur est construite correctement. + - Si la construction échoue, analysez les problèmes et corrigez-les. + ``` + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +1. Une fois la construction réussie, exécutez l'image conteneur avec l'invite suivante. + + ```text + Utilisez l'image conteneur qui vient d'être construite, exécutez un conteneur et vérifiez si l'application fonctionne correctement. + + - Utilisez le port hôte `8080`. + ``` + +### Conteneuriser l'Application .NET + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Utilisez une invite comme ci-dessous pour construire une image conteneur pour l'application .NET. + + ```text + J'aimerais construire une image conteneur d'une application .NET. Suivez les instructions ci-dessous. + + - L'application .NET se trouve dans `dotnet`. + - Votre répertoire de travail est la racine du dépôt. + - Identifiez d'abord toutes les étapes que vous allez effectuer. + - Créez un Dockerfile, `Dockerfile.dotnet`. + - Utilisez .NET 9. + - Utilisez l'approche de construction multi-étapes. + - Utilisez le numéro de port cible `8080` pour l'image conteneur. + ``` + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +1. Une fois `Dockerfile.dotnet` créé, construisez l'image conteneur avec l'invite suivante. + + ```text + Utilisez `Dockerfile.dotnet` et construisez une image conteneur. + + - Utilisez `contoso-frontend` comme nom d'image conteneur. + - Utilisez `latest` comme tag d'image conteneur. + - Vérifiez si l'image conteneur est construite correctement. + - Si la construction échoue, analysez les problèmes et corrigez-les. + ``` + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +1. Une fois la construction réussie, exécutez l'image conteneur avec l'invite suivante. + + ```text + Utilisez l'image conteneur qui vient d'être construite, exécutez un conteneur et vérifiez si l'application fonctionne correctement. + + - Utilisez le port hôte `3030`. + ``` + +1. Assurez-vous que les applications frontend et backend ne communiquent PAS entre elles car elles ne se connaissent pas encore. Exécutez l'invite comme ci-dessous. + + ```text + Peu importe ou non, supprimez les deux conteneurs actuellement en cours d'exécution. + ``` + +### Orchestrer les Conteneurs + +1. Assurez-vous que vous utilisez le Mode Agent GitHub Copilot avec le modèle `Claude Sonnet 4` ou `GPT-4.1`. +1. Utilisez une invite comme ci-dessous pour construire un fichier Docker Compose. + + ```text + J'aimerais créer un fichier Docker Compose. Suivez les instructions ci-dessous. + + - Votre répertoire de travail est la racine du dépôt. + - Utilisez `Dockerfile.java` comme application backend. + - Utilisez `Dockerfile.dotnet` comme application frontend. + - Créez `compose.yaml` comme fichier Docker Compose. + - Utilisez `contoso` comme nom de réseau. + - Utilisez `contoso-backend` comme nom de conteneur de l'application Java. Son port cible est 8080, et le port hôte est 8080. + - Utilisez `contoso-frontend` comme nom de conteneur de l'application .NET. Son port cible est 8080, et le port hôte est 3030. + - Montez le volume pour la base de données que l'application Java utilise, `java/socialapp/sns_api.db`. + ``` + +1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. + +1. Une fois le fichier `compose.yaml` créé, exécutez-le et vérifiez si les deux applications fonctionnent correctement. + + ```text + Maintenant, exécutez le fichier Docker compose et vérifiez si les applications fonctionnent correctement. + ``` + +1. Ouvrez un navigateur web et naviguez vers `http://localhost:3030`, et vérifiez si les applications sont en marche et fonctionnent correctement. + +--- + +Félicitations ! 🎉 Vous avez terminé toutes les sessions d'atelier avec succès ! \ No newline at end of file diff --git a/localisation/fr-fr/docs/README.md b/localisation/fr-fr/docs/README.md new file mode 100644 index 0000000..db5413c --- /dev/null +++ b/localisation/fr-fr/docs/README.md @@ -0,0 +1,12 @@ +# Instructions d'Apprentissage Auto-Rythmé + +Voici les matériaux d'instructions d'apprentissage auto-rythmé. Utilisez-les et construisez des applications ! + +| Étape | Lien | +|-------------------------------------|----------------------------------------------------| +| 00: Environnement de Développement | [00-setup.md](./00-setup.md) | +| 01: Développement Backend Python | [01-python.md](./01-python.md) | +| 02: Développement Frontend JavaScript | [02-javascript.md](./02-javascript.md) | +| 03: Migration Java depuis Python | [03-java.md](./03-java.md) | +| 04: Migration .NET depuis JavaScript | [04-dotnet.md](./04-dotnet.md) | +| 05: Conteneurisation | [05-containerization.md](./05-containerization.md) | \ No newline at end of file diff --git a/localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md new file mode 100644 index 0000000..4f99d13 --- /dev/null +++ b/localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md @@ -0,0 +1,34 @@ +# Règles DevOps + +Vous êtes un ingénieur DevOps senior et un expert en conteneurisation, Docker, Dockerfile, Docker Compose et Kubernetes. + +## Directives Générales + +### Principes de Base + +- Utilisez l'anglais pour tout le code, la documentation et les commentaires. +- Priorisez un code modulaire, réutilisable et évolutif. +- Suivez les conventions de nommage : + - camelCase pour les variables, fonctions et noms de méthodes. + - PascalCase pour les noms de classes. + - snake_case pour les noms de fichiers et structures de répertoires. + - UPPER_CASE pour les variables d'environnement. +- Évitez les valeurs codées en dur ; utilisez des variables d'environnement ou des fichiers de configuration. +- Appliquez les principes d'Infrastructure-as-Code (IaC) quand possible. +- Considérez toujours le principe du moindre privilège dans les accès et permissions. + +### Principes DevOps + +- Automatisez les tâches répétitives et évitez les interventions manuelles. +- Écrivez des pipelines CI/CD modulaires et réutilisables. +- Utilisez des applications conteneurisées avec des registres sécurisés. +- Gérez les secrets en utilisant Azure Key Vault ou d'autres solutions de gestion de secrets. +- Construisez des systèmes résilients en appliquant des stratégies de déploiement blue-green ou canary. + +## Scénarios Spécifiques + +### Docker et Docker Compose + +- Utilisez des constructions multi-étapes dans les Dockerfiles pour optimiser la taille d'image. +- Assurez-vous que les Dockerfiles sont idempotents et peuvent être construits plusieurs fois sans effets de bord. +- Utilisez Docker Compose pour les environnements de développement local et de test. \ No newline at end of file diff --git a/localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md new file mode 100644 index 0000000..ce1c312 --- /dev/null +++ b/localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md @@ -0,0 +1,81 @@ +# Règles de Développement .NET + +Vous êtes un développeur .NET senior et un expert en C#, ASP.NET Core, Minimal API, Blazor et .NET Aspire. + +## Style et Structure de Code + +- Écrivez du code C# concis et idiomatique avec des exemples précis. +- Suivez les conventions et meilleures pratiques de .NET et ASP.NET Core. +- Utilisez les patterns de programmation orientée objet et fonctionnelle selon le cas. +- Préférez LINQ et les expressions lambda pour les opérations de collection. +- Utilisez des noms de variables et méthodes descriptifs (ex. 'IsUserSignedIn', 'CalculateTotal'). +- Structurez les fichiers selon les conventions .NET (Controllers, Models, Services, etc.). +- Utilisez async/await pour les opérations asynchrones partout où possible pour améliorer les performances et la réactivité. + +## Conventions de Nommage + +- Utilisez PascalCase pour les noms de classes, méthodes et membres publics. +- Utilisez camelCase pour les variables locales et champs privés. +- Utilisez UPPERCASE pour les constantes. +- Préfixez les noms d'interface avec "I" (ex. 'IUserService'). + +## Utilisation de C# et .NET + +- Utilisez les fonctionnalités C# 10+ quand approprié (ex. types record, pattern matching, assignation null-coalescing). +- Tirez parti des fonctionnalités et middleware intégrés d'ASP.NET Core. +- Utilisez Entity Framework Core efficacement pour les opérations de base de données. + +## Syntaxe et Formatage + +- Suivez les Conventions de Codage C# (https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions) +- Utilisez la syntaxe expressive de C# (ex. opérateurs conditionnels null, interpolation de chaînes) +- Utilisez 'var' pour le typage implicite quand le type est évident. + +## Gestion d'Erreurs et Validation + +- Utilisez les exceptions pour les cas exceptionnels, pas pour le flux de contrôle. +- Implémentez une journalisation d'erreurs appropriée en utilisant la journalisation .NET intégrée ou un logger tiers. +- Utilisez Data Annotations ou Fluent Validation pour la validation de modèle. +- Implémentez un middleware global de gestion d'exceptions. +- Retournez des codes de statut HTTP appropriés et des réponses d'erreur cohérentes. + +## Conception d'API + +- Suivez les principes de conception d'API RESTful. +- Utilisez le routage par attributs dans les contrôleurs. +- Implémentez la versioning pour votre API. +- Utilisez des filtres d'action pour les préoccupations transversales. + +## Optimisation des Performances + +- Utilisez la programmation asynchrone avec async/await pour les opérations liées aux E/S. +- Implémentez des stratégies de mise en cache en utilisant IMemoryCache ou la mise en cache distribuée. +- Utilisez des requêtes LINQ efficaces et évitez les problèmes de requête N+1. +- Implémentez la pagination pour les grands ensembles de données. + +## Conventions Clés + +- Utilisez l'Injection de Dépendances pour un couplage lâche et la testabilité. +- Implémentez le pattern repository ou utilisez Entity Framework Core directement, selon la complexité. +- Utilisez AutoMapper pour le mapping objet-vers-objet si nécessaire. +- Implémentez les tâches en arrière-plan en utilisant IHostedService ou BackgroundService. + +## Tests + +- Écrivez des tests unitaires en utilisant xUnit, NUnit, ou MSTest. +- Utilisez Moq ou NSubstitute pour simuler les dépendances. +- Implémentez des tests d'intégration pour les points de terminaison d'API. + +## Sécurité + +- Utilisez le middleware d'Authentification et d'Autorisation. +- Implémentez l'authentification JWT pour l'authentification d'API sans état. +- Utilisez HTTPS et forcez SSL. +- Implémentez des politiques CORS appropriées. + +## Documentation API + +- Utilisez le package OpenAPI intégré pour la documentation d'API. +- Fournissez des commentaires XML pour les contrôleurs et modèles pour améliorer la documentation Swagger. + +Suivez la documentation officielle Microsoft et les guides ASP.NET Core pour les meilleures pratiques en routage, contrôleurs, modèles et autres composants d'API. \ No newline at end of file diff --git a/localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md new file mode 100644 index 0000000..f3a4237 --- /dev/null +++ b/localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md @@ -0,0 +1,92 @@ +# Règles de Développement Java + +Vous êtes un développeur Java senior et un expert en programmation Java, Spring Boot, Spring Boot CLI, Spring Framework, Maven, Gradle, JUnit, et technologies Java associées. + +## Style et Structure de Code + +- Écrivez du code Java propre, efficace et bien documenté avec des exemples Spring Boot précis. +- Utilisez les meilleures pratiques et conventions de Spring Boot dans tout votre code. +- Implémentez les patterns de conception d'API RESTful lors de la création de services web. +- Utilisez des noms de méthodes et de variables descriptifs suivant la convention camelCase. +- Structurez les applications Spring Boot : contrôleurs, services, dépôts, modèles, configurations. + +## Spécificités Spring Boot + +- Utilisez les starters Spring Boot pour une configuration rapide de projet et gestion des dépendances. +- Implémentez une utilisation appropriée des annotations (ex. @SpringBootApplication, @RestController, @Service). +- Utilisez efficacement les fonctionnalités d'auto-configuration de Spring Boot. +- Implémentez une gestion d'exceptions appropriée en utilisant @ControllerAdvice et @ExceptionHandler. + +## Conventions de Nommage + +- Utilisez PascalCase pour les noms de classes (ex. UserController, OrderService). +- Utilisez camelCase pour les noms de méthodes et variables (ex. findUserById, isOrderValid). +- Utilisez ALL_CAPS pour les constantes (ex. MAX_RETRY_ATTEMPTS, DEFAULT_PAGE_SIZE). + +## Utilisation de Java et Spring Boot + +- Utilisez les fonctionnalités Java 17 ou ultérieures quand applicable (ex. records, sealed classes, pattern matching). +- Tirez parti des fonctionnalités et meilleures pratiques de Spring Boot 3.x. +- Utilisez Spring Data JPA pour les opérations de base de données quand applicable. +- Implémentez une validation appropriée en utilisant Bean Validation (ex. @Valid, validateurs personnalisés). + +## Configuration et Propriétés + +- Utilisez application.properties ou application.yml pour la configuration. +- Implémentez des configurations spécifiques à l'environnement en utilisant les Profils Spring. +- Utilisez @ConfigurationProperties pour des propriétés de configuration type-safe. + +## Injection de Dépendances et IoC + +- Utilisez l'injection par constructeur plutôt que l'injection par champ pour une meilleure testabilité. +- Tirez parti du conteneur IoC de Spring pour gérer les cycles de vie des beans. + +## Tests + +- Écrivez des tests unitaires en utilisant JUnit 5 et Spring Boot Test. +- Utilisez MockMvc pour tester les couches web. +- Implémentez des tests d'intégration en utilisant @SpringBootTest. +- Utilisez @DataJpaTest pour les tests de couche de dépôt. + +## Performance et Évolutivité + +- Implémentez des stratégies de mise en cache en utilisant l'abstraction Spring Cache. +- Utilisez le traitement asynchrone avec @Async pour les opérations non bloquantes. +- Implémentez une indexation de base de données appropriée et l'optimisation des requêtes. + +## Sécurité + +- Implémentez Spring Security pour l'authentification et l'autorisation. +- Utilisez un encodage de mot de passe approprié (ex. BCrypt). +- Implémentez la configuration CORS quand nécessaire. + +## Journalisation et Monitoring + +- Utilisez SLF4J avec Logback pour la journalisation. +- Implémentez des niveaux de log appropriés (ERROR, WARN, INFO, DEBUG). +- Utilisez Spring Boot Actuator pour le monitoring d'application et les métriques. + +## Documentation API + +- Utilisez Springdoc OpenAPI (anciennement Swagger) pour la documentation API. + +## Accès aux Données et ORM + +- Utilisez Spring Data JPA pour les opérations de base de données. +- Implémentez des relations d'entités appropriées et la cascade. +- Utilisez les migrations de base de données avec des outils comme Flyway ou Liquibase. + +## Construction et Déploiement + +- Utilisez soit Maven soit Gradle pour la gestion des dépendances et les processus de construction. +- Gradle est préféré pour les nouveaux projets en raison de sa flexibilité et performance. +- Implémentez des profils appropriés pour différents environnements (dev, test, prod). +- Utilisez Docker pour la conteneurisation si applicable. + +## Suivez les meilleures pratiques pour : + +- La conception d'API RESTful (utilisation appropriée des méthodes HTTP, codes de statut, etc.). +- L'architecture microservices (si applicable). +- Le traitement asynchrone en utilisant @Async de Spring ou la programmation réactive avec Spring WebFlux. + +Adhérez aux principes SOLID et maintenez une forte cohésion et un faible couplage dans la conception de votre application Spring Boot. \ No newline at end of file diff --git a/localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md new file mode 100644 index 0000000..04a8fd3 --- /dev/null +++ b/localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md @@ -0,0 +1,46 @@ +# Règles de Développement JavaScript + +Vous êtes un Développeur Front-End Senior et un Expert en ReactJS, NextJS, ViteJS, JavaScript, TypeScript, HTML, CSS et frameworks UI/UX modernes (ex. TailwindCSS, Shadcn, Radix). + +Vous êtes réfléchi, donnez des réponses nuancées, et êtes brillant en raisonnement. Vous fournissez avec soin des réponses précises, factuelles et réfléchies, et êtes un génie en raisonnement. + +## Principes Clés + +- Suivez les exigences de l'utilisateur avec attention et à la lettre. +- Pensez d'abord étape par étape - décrivez votre plan pour ce que vous allez construire en pseudocode, écrit en grand détail. +- Confirmez, puis écrivez le code ! +- Écrivez toujours un code correct, suivant les meilleures pratiques, le principe DRY (Don't Repeat Yourself), sans bugs, entièrement fonctionnel et qui marche, également aligné aux règles listées ci-dessous dans les Directives d'Implémentation de Code. +- Concentrez-vous sur un code facile et lisible, plutôt que performant. +- Implémentez entièrement toutes les fonctionnalités demandées. +- Ne laissez AUCUN todo, placeholder ou pièce manquante. +- Assurez-vous que le code est complet ! Vérifiez soigneusement qu'il est finalisé. +- Incluez tous les imports requis, et assurez-vous d'un nommage approprié des composants clés. +- Soyez concis et minimisez toute autre prose. +- Si vous pensez qu'il pourrait ne pas y avoir de réponse correcte, dites-le. +- Si vous ne connaissez pas la réponse, dites-le, au lieu de deviner. + +## Environnement de Codage + +L'utilisateur pose des questions sur les langages de codage suivants : + +- ReactJS +- NextJS +- ViteJS +- JavaScript +- TypeScript +- TailwindCSS +- HTML +- CSS + +## Directives d'Implémentation de Code + +Suivez ces règles quand vous écrivez du code : + +- TypeScript est préféré à JavaScript, sauf si l'utilisateur demande spécifiquement JavaScript. +- Choisissez soit NextJS soit ViteJS pour le projet, selon les exigences. +- Utilisez des retours précoces chaque fois que possible pour rendre le code plus lisible. +- Utilisez toujours les classes Tailwind pour styliser les éléments HTML ; évitez d'utiliser CSS ou les balises. +- Utilisez "class:" au lieu de l'opérateur ternaire dans les balises de classe chaque fois que possible. +- Utilisez des noms de variables et de fonctions/const descriptifs. Aussi, les fonctions d'événement doivent être nommées avec un préfixe "handle", comme "handleClick" pour onClick et "handleKeyDown" pour onKeyDown. +- Implémentez des fonctionnalités d'accessibilité sur les éléments. Par exemple, une balise devrait avoir un tabindex="0", aria-label, on:click, et on:keydown, et des attributs similaires. +- Utilisez des consts au lieu de fonctions, par exemple, "const toggle = () =>". Aussi, définissez un type si possible. \ No newline at end of file diff --git a/localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md new file mode 100644 index 0000000..24d8189 --- /dev/null +++ b/localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md @@ -0,0 +1,70 @@ +# Règles de Développement Python + +Vous êtes un développeur Python senior et un expert en Python, FastAPI, SQLite et développement d'API évolutives. + +## Principes Clés + +- Écrivez des réponses concises et techniques avec des exemples Python précis. +- Utilisez la programmation fonctionnelle et déclarative ; évitez les classes autant que possible. +- Préférez l'itération et la modularisation plutôt que la duplication de code. +- Utilisez des noms de variables descriptifs avec des verbes auxiliaires (ex. is_active, has_permission). +- Utilisez des minuscules avec des underscores pour les répertoires et fichiers (ex. routers/user_routes.py). +- Favorisez les exports nommés pour les routes et fonctions utilitaires. +- Utilisez le pattern Receive an Object, Return an Object (RORO). + +## Python/FastAPI + +- Utilisez def pour les fonctions pures et async def pour les opérations asynchrones. +- Utilisez des annotations de type pour toutes les signatures de fonctions. Préférez les modèles Pydantic aux dictionnaires bruts pour la validation d'entrée. +- Structure de fichier : routeur exporté, sous-routes, utilitaires, contenu statique, types (modèles, schémas). +- Évitez les accolades inutiles dans les déclarations conditionnelles. +- Pour les déclarations sur une seule ligne dans les conditionnelles, omettez les accolades. +- Utilisez une syntaxe concise d'une ligne pour les déclarations conditionnelles simples (ex. if condition: do_something()). + +## Gestion d'Erreurs et Validation + +- Priorisez la gestion d'erreurs et les cas limites : + - Gérez les erreurs et cas limites au début des fonctions. + - Utilisez des retours précoces pour les conditions d'erreur afin d'éviter les déclarations if profondément imbriquées. + - Placez le chemin heureux en dernier dans la fonction pour améliorer la lisibilité. + - Évitez les déclarations else inutiles ; utilisez le pattern if-return à la place. + - Utilisez des clauses de garde pour gérer les préconditions et états invalides tôt. + - Implémentez une journalisation d'erreurs appropriée et des messages d'erreur conviviaux. + - Utilisez des types d'erreurs personnalisés ou des fabriques d'erreurs pour une gestion cohérente des erreurs. + +## Dépendances + +- FastAPI +- Pydantic v2 +- Bibliothèques de base de données asynchrones comme asyncpg ou aiomysql +- SQLAlchemy 2.0 (si vous utilisez les fonctionnalités ORM) + +## Directives Spécifiques à FastAPI + +- Utilisez des composants fonctionnels (fonctions simples) et des modèles Pydantic pour la validation d'entrée et les schémas de réponse. +- Utilisez des définitions de routes déclaratives avec des annotations de type de retour claires. +- Utilisez def pour les opérations synchrones et async def pour les asynchrones. +- Minimisez @app.on_event("startup") et @app.on_event("shutdown") ; préférez les gestionnaires de contexte lifespan pour gérer les événements de démarrage et d'arrêt. +- Utilisez le middleware pour la journalisation, le monitoring d'erreurs et l'optimisation des performances. +- Optimisez les performances en utilisant des fonctions async pour les tâches liées aux E/S, stratégies de mise en cache et chargement paresseux. +- Utilisez HTTPException pour les erreurs attendues et modélisez-les comme des réponses HTTP spécifiques. +- Utilisez le middleware pour gérer les erreurs inattendues, la journalisation et le monitoring d'erreurs. +- Utilisez BaseModel de Pydantic pour une validation d'entrée/sortie cohérente et des schémas de réponse. + +## Optimisation des Performances + +- Minimisez les opérations d'E/S bloquantes ; utilisez des opérations asynchrones pour tous les appels de base de données et requêtes d'API externes. +- Implémentez la mise en cache pour les données statiques et fréquemment consultées en utilisant des outils comme Redis ou des magasins en mémoire. +- Optimisez la sérialisation et désérialisation des données avec Pydantic. +- Utilisez des techniques de chargement paresseux pour les grands ensembles de données et les réponses d'API substantielles. + +## Conventions Clés + +1. Comptez sur le système d'injection de dépendances de FastAPI pour gérer l'état et les ressources partagées. +2. Priorisez les métriques de performance d'API (temps de réponse, latence, débit). +3. Limitez les opérations bloquantes dans les routes : + - Favorisez les flux asynchrones et non bloquants. + - Utilisez des fonctions async dédiées pour les opérations de base de données et d'API externes. + - Structurez les routes et dépendances clairement pour optimiser la lisibilité et la maintenabilité. + +Référez-vous à la documentation FastAPI pour les Modèles de Données, Opérations de Chemin et Middleware pour les meilleures pratiques. \ No newline at end of file diff --git a/localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md new file mode 100644 index 0000000..9ef379d --- /dev/null +++ b/localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md @@ -0,0 +1,5 @@ +Vous êtes un expert en tant qu'Analyste Métier. Vous êtes très capable d'interpréter les exigences métier en détails techniques. + +Lorsque vous traitez avec OpenAPI, cela fait toujours référence à la version spec 3.0.1. + +Lorsque vous créez un document OpenAPI, vous devez toujours considérer la réutilisabilité du schéma de données. NE dupliquez PAS une structure de données similaire. \ No newline at end of file diff --git a/localisation/fr-fr/dotnet/README.md b/localisation/fr-fr/dotnet/README.md new file mode 100644 index 0000000..b9d947f --- /dev/null +++ b/localisation/fr-fr/dotnet/README.md @@ -0,0 +1,5 @@ +# Démarrer avec .NET + +Voici le point de départ pour le développement de votre application .NET. + +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/dotnet](../complete/dotnet/). \ No newline at end of file diff --git a/localisation/fr-fr/java/README.md b/localisation/fr-fr/java/README.md new file mode 100644 index 0000000..5903e50 --- /dev/null +++ b/localisation/fr-fr/java/README.md @@ -0,0 +1,5 @@ +# Démarrer avec Java + +Voici le point de départ pour le développement de votre application Java. + +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/java](../complete/java/). \ No newline at end of file diff --git a/localisation/fr-fr/javascript/README.md b/localisation/fr-fr/javascript/README.md new file mode 100644 index 0000000..7173428 --- /dev/null +++ b/localisation/fr-fr/javascript/README.md @@ -0,0 +1,5 @@ +# Démarrer avec JavaScript + +Voici le point de départ pour le développement de votre application JavaScript. + +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/javascript](../complete/javascript/). \ No newline at end of file diff --git a/localisation/fr-fr/product-requirements.md b/localisation/fr-fr/product-requirements.md new file mode 100644 index 0000000..0be3e5e --- /dev/null +++ b/localisation/fr-fr/product-requirements.md @@ -0,0 +1,148 @@ +# Document d'Exigences Produit (DEP) + +## Titre du Produit + +Application de Médias Sociaux Simple + +## Version du Document + +1.0.0 + +## Auteur + +Propriétaire de Produit / Tech Lead chez Contoso + +## Dernière Mise à Jour + +2025-05-30 + +--- + +## 1. Aperçu + +L'objectif de ce projet est de construire un Service de Réseau Social (SNS) basique mais fonctionnel qui permet aux utilisateurs de créer, récupérer, mettre à jour et supprimer des publications ; d'ajouter des commentaires ; et d'aimer/ne plus aimer les publications. L'approche API-first garantit qu'elle peut être utilisée comme backend pour des frontends web ou mobiles. + +## 2. Contexte + +Contoso est une entreprise qui vend des produits pour diverses activités de plein air. Un département marketing de Contoso souhaiterait lancer un site web de micro-médias sociaux pour promouvoir leurs produits auprès des clients existants et potentiels. Pour leur premier MVP, le département marketing veut construire rapidement le site web. + +## 3. Objectifs et Buts + +* Fournir des opérations CRUD pour le contenu généré par les utilisateurs (publications). +* Permettre l'interaction sociale via les commentaires et les likes. +* Maintenir la simplicité pour les cas d'usage éducatifs et MVP. +* Assurer une conception d'API RESTful et une gestion d'erreur appropriée. + +## 4. Fonctionnalités Clés + +### 4.1 Gestion des Publications + +* **Lister les Publications** + + * **GET** `/api/posts` + * Histoire Utilisateur : En tant qu'utilisateur, je veux voir toutes les publications récentes afin de pouvoir parcourir ce que les autres partagent. + +* **Créer une Publication** + + * **POST** `/api/posts` + * Requis : `username`, `content` + * Histoire Utilisateur : En tant qu'utilisateur, je veux créer une nouvelle publication afin de partager quelque chose avec les autres. + +* **Obtenir une Publication Unique** + + * **GET** `/api/posts/{postId}` + * Histoire Utilisateur : En tant qu'utilisateur, je veux lire une publication spécifique en détail. + +* **Mettre à Jour une Publication** + + * **PATCH** `/api/posts/{postId}` + * Requis : `username`, `content` + * Histoire Utilisateur : En tant qu'utilisateur, je veux mettre à jour ma publication si j'ai fait une erreur ou ai quelque chose à ajouter. + +* **Supprimer une Publication** + + * **DELETE** `/api/posts/{postId}` + * Histoire Utilisateur : En tant qu'utilisateur, je veux supprimer ma publication si je ne veux plus qu'elle soit partagée. + +### 4.2 Gestion des Commentaires + +* **Lister les Commentaires d'une Publication** + + * **GET** `/api/posts/{postId}/comments` + * Histoire Utilisateur : En tant qu'utilisateur, je veux lire tous les commentaires sur une publication. + +* **Créer un Commentaire** + + * **POST** `/api/posts/{postId}/comments` + * Requis : `username`, `content` + * Histoire Utilisateur : En tant qu'utilisateur, je veux commenter une publication pour partager mes pensées. + +* **Obtenir un Commentaire Spécifique** + + * **GET** `/api/posts/{postId}/comments/{commentId}` + * Histoire Utilisateur : En tant qu'utilisateur, je veux voir un commentaire spécifique en détail. + +* **Mettre à Jour un Commentaire** + + * **PATCH** `/api/posts/{postId}/comments/{commentId}` + * Requis : `username`, `content` + * Histoire Utilisateur : En tant qu'utilisateur, je veux corriger ou réviser mon commentaire. + +* **Supprimer un Commentaire** + + * **DELETE** `/api/posts/{postId}/comments/{commentId}` + * Histoire Utilisateur : En tant qu'utilisateur, je veux supprimer mon commentaire si nécessaire. + +### 4.3 Système de Like + +* **Aimer une Publication** + + * **POST** `/api/posts/{postId}/likes` + * Requis : `username` + * Histoire Utilisateur : En tant qu'utilisateur, je veux aimer une publication pour montrer mon appréciation. + +* **Ne Plus Aimer une Publication** + + * **DELETE** `/api/posts/{postId}/likes` + * Histoire Utilisateur : En tant qu'utilisateur, je veux retirer mon like si je change d'avis. + +## 5. Rôles Utilisateur et Permissions + +* **Utilisateurs Anonymes** + * Peuvent lire les publications et commentaires. + +* **Utilisateurs Authentifiés (via le champ username)** + * Peuvent créer, mettre à jour, supprimer leurs propres publications et commentaires. + * Peuvent aimer/ne plus aimer les publications. + +## 6. Contrats API + +* Définir le document OpenAPI avec la spécification v3.0.1 au minimum. +* Utilise les codes d'état HTTP standard. + * `200 OK`, `201 Created`, `204 No Content`, `400 Bad Request`, `404 Not Found`, `500 Internal Server Error` +* Content-Type : `application/json` + +## 7. Exigences Non-Fonctionnelles + +* **Documentation** : L'API doit être entièrement documentée en utilisant Swagger UI. +* **Sécurité** : Validation des entrées et validation de requête basique, même si l'authentification complète n'est pas implémentée. + +## 8. Suppositions et Dépendances + +* Utiliser une base de données en mémoire pour ce produit. +* Aucun support de téléchargement de fichiers ou de médias n'est inclus. +* Aucun flux d'inscription utilisateur ou de connexion/authentification. +* Aucun code de test n'est requis. + +## 9. Métriques de Succès + +* Tous les endpoints API sont accessibles et répondent comme documenté. +* Capable de publier, commenter, aimer et supprimer des ressources de bout en bout. +* Documentation Swagger claire générée à partir d'OpenAPI. + +## 10. Hors Périmètre + +* Authentification utilisateur (OAuth, JWT, etc.) +* Mises à jour en temps réel ou notifications +* Outils de modération ou de signalement +* Téléchargements multimédia (images, vidéo) \ No newline at end of file diff --git a/localisation/fr-fr/python/README.md b/localisation/fr-fr/python/README.md new file mode 100644 index 0000000..d93beff --- /dev/null +++ b/localisation/fr-fr/python/README.md @@ -0,0 +1,5 @@ +# Démarrer avec Python + +Voici le point de départ pour le développement de votre application Python. + +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/python](../complete/python/). \ No newline at end of file diff --git a/localisation/pt-br/docs/00-setup.md b/localisation/pt-br/docs/00-setup.md index ea494ca..a080a86 100644 --- a/localisation/pt-br/docs/00-setup.md +++ b/localisation/pt-br/docs/00-setup.md @@ -25,7 +25,7 @@ Consulte a documentação [README](../README.md) para preparação. 1. Dê uma olhada na imagem abaixo e siga os passos na ordem de clicar ![a imagem do botão "code"](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![a imagem do botão "codespaces"](https://img.shields.io/badge/Codespaces-white) 👉 ![a imagem do botão "create codespace on main"](https://img.shields.io/badge/Create_codespace_on_main-green) e criar uma nova instância do GitHub Codespace. Pode levar de 5-10 minutos dependendo do status da rede. - ![Iniciando com GitHub Codespaces](./images/setup-01.png) + ![Iniciando com GitHub Codespaces](../../../docs/images/setup-01.png) 2. Uma vez que a instância do GitHub Codespace esteja pronta, abra um terminal e execute o seguinte comando para verificar se tudo que você precisa foi devidamente instalado ou não. @@ -291,12 +291,12 @@ Consulte a documentação [README](../README.md) para preparação. 1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. - ![Abrir GitHub Copilot Chat](./images/setup-02.png) + ![Abrir GitHub Copilot Chat](.../../../docs/images/setup-02.png) 1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. 1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. - ![Modo Agente do GitHub Copilot](./images/setup-03.png) + ![Modo Agente do GitHub Copilot](../../../docs/images/setup-03.png) 1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. diff --git a/localisation/pt-br/docs/01-python.md b/localisation/pt-br/docs/01-python.md index bc178c8..fe53bf8 100644 --- a/localisation/pt-br/docs/01-python.md +++ b/localisation/pt-br/docs/01-python.md @@ -21,12 +21,12 @@ Consulte a documentação [README](../README.md) para preparação. 1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. - ![Abrir GitHub Copilot Chat](./images/setup-02.png) + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) 1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. 1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. - ![Modo Agente do GitHub Copilot](./images/setup-03.png) + ![Modo Agente do GitHub Copilot](../../../docs/images/setup-03.png) 1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. 1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). diff --git a/localisation/pt-br/docs/02-javascript.md b/localisation/pt-br/docs/02-javascript.md index 5e3805d..2289a73 100644 --- a/localisation/pt-br/docs/02-javascript.md +++ b/localisation/pt-br/docs/02-javascript.md @@ -25,12 +25,12 @@ Consulte a documentação [README](../README.md) para preparação. 1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. - ![Abrir GitHub Copilot Chat](./images/setup-02.png) + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) 1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. 1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. - ![Modo Agente do GitHub Copilot](./images/setup-03.png) + ![Modo Agente do GitHub Copilot](../../../docs/images/setup-03.png) 1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. 1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). @@ -98,7 +98,7 @@ Consulte a documentação [README](../README.md) para preparação. 1. Certifique-se de que você está executando o servidor MCP Figma. 1. Copie o [template de design Figma](https://www.figma.com/community/file/1495954632647006209) para sua conta. - ![Página do template de design Figma](./images/javascript-01.png) + ![Página do template de design Figma](../../../docs/images/javascript-01.png) 1. Clique com o botão direito em cada seção - `Home`, `Search`, `Post Details`, `Post Modal` e `Name Input Modal` 👉 Selecione `Copy/Paste as` 👉 Selecione `Copy link to selection` para obter o link para cada seção. Anote todos os cinco links. diff --git a/localisation/pt-br/docs/03-java.md b/localisation/pt-br/docs/03-java.md index bcbca3b..3ca2b0d 100644 --- a/localisation/pt-br/docs/03-java.md +++ b/localisation/pt-br/docs/03-java.md @@ -24,12 +24,12 @@ Consulte a documentação [README](../README.md) para preparação. 1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. - ![Abrir GitHub Copilot Chat](./images/setup-02.png) + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) 1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. 1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. - ![Modo Agente do GitHub Copilot](./images/setup-03.png) + ![Modo Agente do GitHub Copilot](../../../docs/images/setup-03.png) 1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. 1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). diff --git a/localisation/pt-br/docs/04-dotnet.md b/localisation/pt-br/docs/04-dotnet.md index 765b193..6144de4 100644 --- a/localisation/pt-br/docs/04-dotnet.md +++ b/localisation/pt-br/docs/04-dotnet.md @@ -25,12 +25,12 @@ Consulte a documentação [README](../README.md) para preparação. 1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. - ![Abrir GitHub Copilot Chat](./images/setup-02.png) + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) 1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. 1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. - ![Modo Agente do GitHub Copilot](./images/setup-03.png) + ![Modo Agente do GitHub Copilot](../../../docs/images/setup-03.png) 1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. 1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). diff --git a/localisation/pt-br/docs/05-containerization.md b/localisation/pt-br/docs/05-containerization.md index 163639b..6c78a17 100644 --- a/localisation/pt-br/docs/05-containerization.md +++ b/localisation/pt-br/docs/05-containerization.md @@ -24,12 +24,12 @@ Consulte a documentação [README](../README.md) para preparação. 1. Clique no ícone do GitHub Copilot no topo do GitHub Codespace ou VS Code e abra a janela do GitHub Copilot. - ![Abrir GitHub Copilot Chat](./images/setup-02.png) + ![Abrir GitHub Copilot Chat](../../../docs/images/setup-02.png) 1. Se você for solicitado a fazer login ou se inscrever, faça-o. É gratuito. 1. Certifique-se de que você está usando o Modo Agente do GitHub Copilot. - ![Modo Agente do GitHub Copilot](./images/setup-03.png) + ![Modo Agente do GitHub Copilot](../../../docs/images/setup-03.png) 1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. 1. Certifique-se de que você configurou os [Servidores MCP](./00-setup.md#configurar-servidores-mcp). From 239bf58714ea46e07a031bbe4c17148fea61cf85 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Sat, 7 Jun 2025 14:40:37 +0900 Subject: [PATCH 04/17] Update localisation links --- README.md | 2 +- localisation/es-es/README.md | 2 +- localisation/fr-fr/README.md | 2 +- localisation/ja-jp/README.md | 2 +- localisation/ko-kr/README.md | 2 +- localisation/pt-br/README.md | 2 +- localisation/zh-cn/README.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f0afe31..c5923fe 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ But here's the situation... This workshop material is currently provided in the following languages: -[English](./README.md) | [Español](./localisation/es-es/) | [Português](./localisation/pt-br/) | [Français](./localisation/fr-fr/) | [中文(简体)](./localisation/zh-cn/) | [日本語](./localisation/ja-jp/) | [한국어](./localisation/ko-kr/) +[English](./README.md) | [Español](./localisation/es-es/) | [Français](./localisation/fr-fr/) | [日本語](./localisation/ja-jp/) | [한국어](./localisation/ko-kr/) | [Português](./localisation/pt-br/) | [中文(简体)](./localisation/zh-cn/) ## Prerequisites diff --git a/localisation/es-es/README.md b/localisation/es-es/README.md index 20d4b52..2c9c62b 100644 --- a/localisation/es-es/README.md +++ b/localisation/es-es/README.md @@ -20,7 +20,7 @@ Pero aquí está la situación... Este material del taller está actualmente disponible en los siguientes idiomas: -[English](../../README.md) | [Español](./README.md) | [Português](../pt-br/) | [Français](../fr-fr/) | [中文(简体)](../zh-cn/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) +[English](../../README.md) | [Español](./README.md) | [Français](../fr-fr/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) | [Português](../pt-br/) | [中文(简体)](../zh-cn/) ## Prerrequisitos diff --git a/localisation/fr-fr/README.md b/localisation/fr-fr/README.md index 14771d9..31765a1 100644 --- a/localisation/fr-fr/README.md +++ b/localisation/fr-fr/README.md @@ -20,7 +20,7 @@ Mais voici la situation... Ce matériel d'atelier est actuellement fourni dans les langues suivantes : -[English](../../README.md) | [Español](../es-es/) | [Português](../pt-br/) | [Français](./README.md) | [中文(简体)](../zh-cn/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) +[English](../../README.md) | [Español](../es-es/) | [Français](./README.md) | [日本語](../ja-jp/) | [한국어](../ko-kr/) | [Português](../pt-br/) | [中文(简体)](../zh-cn/) ## Prérequis diff --git a/localisation/ja-jp/README.md b/localisation/ja-jp/README.md index 2f7edfb..8b65c56 100644 --- a/localisation/ja-jp/README.md +++ b/localisation/ja-jp/README.md @@ -20,7 +20,7 @@ Contosoは様々なアウトドア活動用製品を販売する会社です。C このワークショップ教材は現在、以下の言語で提供されています: -[English](../../README.md) | [Español](../es-es/) | [Português](../pt-br/) | [Français](../fr-fr/) | [中文(简体)](../zh-cn/) | [日本語](./README.md) | [한국어](../ko-kr/) +[English](../../README.md) | [Español](../es-es/) | [Français](../fr-fr/) | [日本語](./README.md) | [한국어](../ko-kr/) | [Português](../pt-br/) | [中文(简体)](../zh-cn/) ## 前提条件 diff --git a/localisation/ko-kr/README.md b/localisation/ko-kr/README.md index 2d9602b..a724ce4 100644 --- a/localisation/ko-kr/README.md +++ b/localisation/ko-kr/README.md @@ -20,7 +20,7 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto 이 워크샵 자료는 현재 다음 언어로 제공됩니다: -[English](../../README.md) | [Español](../es-es/) | [Português](../pt-br/) | [Français](../fr-fr/) | [中文(简体)](../zh-cn/) | [日本語](../ja-jp/) | [한국어](./README.md) +[English](../../README.md) | [Español](../es-es/) | [Français](../fr-fr/) | [日本語](../ja-jp/) | [한국어](./README.md) | [Português](../pt-br/) | [中文(简体)](../zh-cn/) ## 전제 조건 diff --git a/localisation/pt-br/README.md b/localisation/pt-br/README.md index 73d15f5..0d3dbb3 100644 --- a/localisation/pt-br/README.md +++ b/localisation/pt-br/README.md @@ -20,7 +20,7 @@ Mas aqui está a situação... Este material do workshop está atualmente disponível nos seguintes idiomas: -[English](../../README.md) | [Español](../es-es/) | [Português](./README.md) | [Français](../fr-fr/) | [中文(简体)](../zh-cn/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) +[English](../../README.md) | [Español](../es-es/) | [Français](../fr-fr/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) | [Português](./README.md) | [中文(简体)](../zh-cn/) ## Pré-requisitos diff --git a/localisation/zh-cn/README.md b/localisation/zh-cn/README.md index dc7a9df..3c7a92f 100644 --- a/localisation/zh-cn/README.md +++ b/localisation/zh-cn/README.md @@ -20,7 +20,7 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 此工作坊材料目前提供以下语言版本: -[English](../../README.md) | [Español](../es-es/) | [Português](../pt-br/) | [Français](../fr-fr/) | [中文(简体)](./README.md) | [日本語](../ja-jp/) | [한국어](../ko-kr/) +[English](../../README.md) | [Español](../es-es/) | [Français](../fr-fr/) | [日本語](../ja-jp/) | [한국어](../ko-kr/) | [Português](../pt-br/) | [中文(简体)](./README.md) ## 先决条件 From 010423a2b9985c0090b9b89e7431c20058e2e51f Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Jun 2025 15:29:47 +0900 Subject: [PATCH 05/17] Add localized disclaimers to all documentation files in localisation directories (#36) * Initial plan for issue * Add localized disclaimers to all 144 markdown files in localisation directories Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Fix disclaimer format: add blank line, localized prefix, and update issue link Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> --- localisation/es-es/README.md | 6 +++++- localisation/es-es/complete/README.md | 6 +++++- localisation/es-es/complete/dotnet/README.md | 6 +++++- localisation/es-es/complete/java/socialapp/README.md | 6 +++++- localisation/es-es/complete/javascript/README.md | 6 +++++- localisation/es-es/complete/python/README.md | 6 +++++- localisation/es-es/docs/00-setup.md | 6 +++++- localisation/es-es/docs/01-python.md | 6 +++++- localisation/es-es/docs/02-javascript.md | 6 +++++- localisation/es-es/docs/03-java.md | 6 +++++- localisation/es-es/docs/04-dotnet.md | 6 +++++- localisation/es-es/docs/05-containerization.md | 6 +++++- localisation/es-es/docs/README.md | 6 +++++- .../containerization/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/dotnet/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/java/copilot-instructions.md | 6 +++++- .../custom-instructions/javascript/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/python/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/setup/copilot-instructions.md | 6 +++++- localisation/es-es/dotnet/README.md | 6 +++++- localisation/es-es/java/README.md | 6 +++++- localisation/es-es/javascript/README.md | 6 +++++- localisation/es-es/product-requirements.md | 6 +++++- localisation/es-es/python/README.md | 6 +++++- localisation/fr-fr/README.md | 6 +++++- localisation/fr-fr/complete/README.md | 6 +++++- localisation/fr-fr/complete/dotnet/README.md | 6 +++++- localisation/fr-fr/complete/java/socialapp/README.md | 6 +++++- localisation/fr-fr/complete/javascript/README.md | 6 +++++- localisation/fr-fr/complete/python/README.md | 6 +++++- localisation/fr-fr/docs/00-setup.md | 6 +++++- localisation/fr-fr/docs/01-python.md | 6 +++++- localisation/fr-fr/docs/02-javascript.md | 6 +++++- localisation/fr-fr/docs/03-java.md | 6 +++++- localisation/fr-fr/docs/04-dotnet.md | 6 +++++- localisation/fr-fr/docs/05-containerization.md | 6 +++++- localisation/fr-fr/docs/README.md | 6 +++++- .../containerization/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/dotnet/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/java/copilot-instructions.md | 6 +++++- .../custom-instructions/javascript/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/python/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/setup/copilot-instructions.md | 6 +++++- localisation/fr-fr/dotnet/README.md | 6 +++++- localisation/fr-fr/java/README.md | 6 +++++- localisation/fr-fr/javascript/README.md | 6 +++++- localisation/fr-fr/product-requirements.md | 6 +++++- localisation/fr-fr/python/README.md | 6 +++++- localisation/ja-jp/README.md | 6 +++++- localisation/ja-jp/complete/README.md | 6 +++++- localisation/ja-jp/complete/dotnet/README.md | 6 +++++- localisation/ja-jp/complete/java/socialapp/README.md | 6 +++++- localisation/ja-jp/complete/javascript/README.md | 6 +++++- localisation/ja-jp/complete/python/README.md | 6 +++++- localisation/ja-jp/docs/00-setup.md | 6 +++++- localisation/ja-jp/docs/01-python.md | 6 +++++- localisation/ja-jp/docs/02-javascript.md | 6 +++++- localisation/ja-jp/docs/03-java.md | 6 +++++- localisation/ja-jp/docs/04-dotnet.md | 6 +++++- localisation/ja-jp/docs/05-containerization.md | 6 +++++- localisation/ja-jp/docs/README.md | 6 +++++- .../containerization/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/dotnet/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/java/copilot-instructions.md | 6 +++++- .../custom-instructions/javascript/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/python/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/setup/copilot-instructions.md | 6 +++++- localisation/ja-jp/dotnet/README.md | 6 +++++- localisation/ja-jp/java/README.md | 6 +++++- localisation/ja-jp/javascript/README.md | 6 +++++- localisation/ja-jp/product-requirements.md | 6 +++++- localisation/ja-jp/python/README.md | 6 +++++- localisation/ko-kr/README.md | 6 +++++- localisation/ko-kr/complete/README.md | 6 +++++- localisation/ko-kr/complete/dotnet/README.md | 6 +++++- localisation/ko-kr/complete/java/socialapp/README.md | 6 +++++- localisation/ko-kr/complete/javascript/README.md | 6 +++++- localisation/ko-kr/complete/python/README.md | 6 +++++- localisation/ko-kr/docs/00-setup.md | 6 +++++- localisation/ko-kr/docs/01-python.md | 6 +++++- localisation/ko-kr/docs/02-javascript.md | 6 +++++- localisation/ko-kr/docs/03-java.md | 6 +++++- localisation/ko-kr/docs/04-dotnet.md | 6 +++++- localisation/ko-kr/docs/05-containerization.md | 6 +++++- localisation/ko-kr/docs/README.md | 6 +++++- .../containerization/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/dotnet/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/java/copilot-instructions.md | 6 +++++- .../custom-instructions/javascript/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/python/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/setup/copilot-instructions.md | 6 +++++- localisation/ko-kr/dotnet/README.md | 6 +++++- localisation/ko-kr/java/README.md | 6 +++++- localisation/ko-kr/javascript/README.md | 6 +++++- localisation/ko-kr/product-requirements.md | 6 +++++- localisation/ko-kr/python/README.md | 6 +++++- localisation/pt-br/README.md | 6 +++++- localisation/pt-br/complete/README.md | 6 +++++- localisation/pt-br/complete/dotnet/README.md | 6 +++++- localisation/pt-br/complete/java/socialapp/README.md | 6 +++++- localisation/pt-br/complete/javascript/README.md | 6 +++++- localisation/pt-br/complete/python/README.md | 6 +++++- localisation/pt-br/docs/00-setup.md | 6 +++++- localisation/pt-br/docs/01-python.md | 6 +++++- localisation/pt-br/docs/02-javascript.md | 6 +++++- localisation/pt-br/docs/03-java.md | 6 +++++- localisation/pt-br/docs/04-dotnet.md | 6 +++++- localisation/pt-br/docs/05-containerization.md | 6 +++++- localisation/pt-br/docs/README.md | 6 +++++- .../containerization/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/dotnet/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/java/copilot-instructions.md | 6 +++++- .../custom-instructions/javascript/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/python/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/setup/copilot-instructions.md | 6 +++++- localisation/pt-br/dotnet/README.md | 6 +++++- localisation/pt-br/java/README.md | 6 +++++- localisation/pt-br/javascript/README.md | 6 +++++- localisation/pt-br/product-requirements.md | 6 +++++- localisation/pt-br/python/README.md | 6 +++++- localisation/zh-cn/README.md | 6 +++++- localisation/zh-cn/complete/README.md | 6 +++++- localisation/zh-cn/complete/dotnet/README.md | 6 +++++- localisation/zh-cn/complete/java/socialapp/README.md | 6 +++++- localisation/zh-cn/complete/javascript/README.md | 6 +++++- localisation/zh-cn/complete/python/README.md | 6 +++++- localisation/zh-cn/docs/00-setup.md | 6 +++++- localisation/zh-cn/docs/01-python.md | 6 +++++- localisation/zh-cn/docs/02-javascript.md | 6 +++++- localisation/zh-cn/docs/03-java.md | 6 +++++- localisation/zh-cn/docs/04-dotnet.md | 6 +++++- localisation/zh-cn/docs/05-containerization.md | 6 +++++- localisation/zh-cn/docs/README.md | 6 +++++- .../containerization/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/dotnet/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/java/copilot-instructions.md | 6 +++++- .../custom-instructions/javascript/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/python/copilot-instructions.md | 6 +++++- .../docs/custom-instructions/setup/copilot-instructions.md | 6 +++++- localisation/zh-cn/dotnet/README.md | 6 +++++- localisation/zh-cn/java/README.md | 6 +++++- localisation/zh-cn/javascript/README.md | 6 +++++- localisation/zh-cn/product-requirements.md | 6 +++++- localisation/zh-cn/python/README.md | 6 +++++- 144 files changed, 720 insertions(+), 144 deletions(-) diff --git a/localisation/es-es/README.md b/localisation/es-es/README.md index 2c9c62b..d52171e 100644 --- a/localisation/es-es/README.md +++ b/localisation/es-es/README.md @@ -103,4 +103,8 @@ Revisa el ejemplo completo de cada aplicación. También están programadas con - [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) - [GitHub Copilot: Instrucciones Personalizadas](https://code.visualstudio.com/docs/copilot/copilot-customization) - [GitHub Copilot: Cambiar Modelos de IA](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) -- [Servidores MCP Curados](https://github.com/modelcontextprotocol/servers) \ No newline at end of file +- [Servidores MCP Curados](https://github.com/modelcontextprotocol/servers) + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/complete/README.md b/localisation/es-es/complete/README.md index b79487f..29982d1 100644 --- a/localisation/es-es/complete/README.md +++ b/localisation/es-es/complete/README.md @@ -53,4 +53,8 @@ Consulta el documento [README](../README.md) para la preparación. ```bash docker compose down --rmi all - ``` \ No newline at end of file + ``` + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/complete/dotnet/README.md b/localisation/es-es/complete/dotnet/README.md index 91f2111..965a4e0 100644 --- a/localisation/es-es/complete/dotnet/README.md +++ b/localisation/es-es/complete/dotnet/README.md @@ -32,4 +32,8 @@ Usa [Muestra de Aplicación Java](../java/). dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp ``` -1. Verifica si la aplicación web está ejecutándose correctamente. \ No newline at end of file +1. Verifica si la aplicación web está ejecutándose correctamente. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/complete/java/socialapp/README.md b/localisation/es-es/complete/java/socialapp/README.md index 6fef9e6..8ea52c5 100644 --- a/localisation/es-es/complete/java/socialapp/README.md +++ b/localisation/es-es/complete/java/socialapp/README.md @@ -364,4 +364,8 @@ Para despliegue en producción, considera: - Usar PostgreSQL/MySQL en lugar de SQLite - Implementar Spring Security para autenticación - Agregar limitación de velocidad y sanitización de entrada -- Usar cifrado HTTPS/TLS \ No newline at end of file +- Usar cifrado HTTPS/TLS + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/complete/javascript/README.md b/localisation/es-es/complete/javascript/README.md index ca18ab7..ef0422e 100644 --- a/localisation/es-es/complete/javascript/README.md +++ b/localisation/es-es/complete/javascript/README.md @@ -40,4 +40,8 @@ Usa [Muestra de Aplicación Python](../python/). ``` 1. Abre un navegador web y navega a `http://localhost:3000`. -1. Verifica si la aplicación web está ejecutándose correctamente. \ No newline at end of file +1. Verifica si la aplicación web está ejecutándose correctamente. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/complete/python/README.md b/localisation/es-es/complete/python/README.md index fb6731c..bc78b68 100644 --- a/localisation/es-es/complete/python/README.md +++ b/localisation/es-es/complete/python/README.md @@ -289,4 +289,8 @@ uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug - [Documentación de FastAPI](https://fastapi.tiangolo.com/) - [Documentación de Pydantic](https://docs.pydantic.dev/) - [Documentación de SQLite](https://sqlite.org/docs.html) -- [Especificación OpenAPI](https://swagger.io/specification/) \ No newline at end of file +- [Especificación OpenAPI](https://swagger.io/specification/) + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/00-setup.md b/localisation/es-es/docs/00-setup.md index 0da88bc..405d1c2 100644 --- a/localisation/es-es/docs/00-setup.md +++ b/localisation/es-es/docs/00-setup.md @@ -349,4 +349,8 @@ Consulta el documento [README](../README.md) para la preparación. --- -Bien. Has completado el paso "Entorno de Desarrollo". Vamos al [PASO 01: Desarrollo Backend Python](./01-python.md). \ No newline at end of file +Bien. Has completado el paso "Entorno de Desarrollo". Vamos al [PASO 01: Desarrollo Backend Python](./01-python.md). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/01-python.md b/localisation/es-es/docs/01-python.md index 06866aa..7c7d7ab 100644 --- a/localisation/es-es/docs/01-python.md +++ b/localisation/es-es/docs/01-python.md @@ -116,4 +116,8 @@ Consulta el documento [README](../README.md) para la preparación. --- -Bien. Has completado el paso "Python". Vamos al [PASO 02: Desarrollo Frontend JavaScript](./02-javascript.md). \ No newline at end of file +Bien. Has completado el paso "Python". Vamos al [PASO 02: Desarrollo Frontend JavaScript](./02-javascript.md). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/02-javascript.md b/localisation/es-es/docs/02-javascript.md index 24f7611..17268e6 100644 --- a/localisation/es-es/docs/02-javascript.md +++ b/localisation/es-es/docs/02-javascript.md @@ -162,4 +162,8 @@ Consulta el documento [README](../README.md) para la preparación. --- -Bien. Has completado el paso "JavaScript". Vamos al [PASO 03: Migración Java desde Python](./03-java.md). \ No newline at end of file +Bien. Has completado el paso "JavaScript". Vamos al [PASO 03: Migración Java desde Python](./03-java.md). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/03-java.md b/localisation/es-es/docs/03-java.md index 4e8f30f..6e7252e 100644 --- a/localisation/es-es/docs/03-java.md +++ b/localisation/es-es/docs/03-java.md @@ -157,4 +157,8 @@ Consulta el documento [README](../README.md) para la preparación. --- -Bien. Has completado el paso "Java". Vamos al [PASO 04: Migración .NET desde JavaScript](./04-dotnet.md). \ No newline at end of file +Bien. Has completado el paso "Java". Vamos al [PASO 04: Migración .NET desde JavaScript](./04-dotnet.md). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/04-dotnet.md b/localisation/es-es/docs/04-dotnet.md index 05f0d44..abca1f3 100644 --- a/localisation/es-es/docs/04-dotnet.md +++ b/localisation/es-es/docs/04-dotnet.md @@ -170,4 +170,8 @@ Consulta el documento [README](../README.md) para la preparación. --- -Bien. Has completado el paso ".NET". Vamos al [PASO 05: Contenedorización](./05-containerization.md). \ No newline at end of file +Bien. Has completado el paso ".NET". Vamos al [PASO 05: Contenedorización](./05-containerization.md). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/05-containerization.md b/localisation/es-es/docs/05-containerization.md index 7e763a6..3ba2d08 100644 --- a/localisation/es-es/docs/05-containerization.md +++ b/localisation/es-es/docs/05-containerization.md @@ -179,4 +179,8 @@ Consulta el documento [README](../README.md) para la preparación. --- -¡Felicidades! 🎉 ¡Has completado todas las sesiones del taller exitosamente! \ No newline at end of file +¡Felicidades! 🎉 ¡Has completado todas las sesiones del taller exitosamente! + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/README.md b/localisation/es-es/docs/README.md index 7d1d055..72f0348 100644 --- a/localisation/es-es/docs/README.md +++ b/localisation/es-es/docs/README.md @@ -9,4 +9,8 @@ Aquí están los materiales de instrucción para el aprendizaje autodidacta. ¡ | 02: Desarrollo Frontend JavaScript | [02-javascript.md](./02-javascript.md) | | 03: Migración Java desde Python | [03-java.md](./03-java.md) | | 04: Migración .NET desde JavaScript | [04-dotnet.md](./04-dotnet.md) | -| 05: Contenedorización | [05-containerization.md](./05-containerization.md) | \ No newline at end of file +| 05: Contenedorización | [05-containerization.md](./05-containerization.md) | + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md index 634f515..3b77972 100644 --- a/localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md +++ b/localisation/es-es/docs/custom-instructions/containerization/copilot-instructions.md @@ -31,4 +31,8 @@ Eres un ingeniero DevOps senior y un experto en contenedorización, Docker, Dock - Usa construcciones multi-etapa en Dockerfiles para optimizar el tamaño de imagen. - Asegúrate de que los Dockerfiles sean idempotentes y puedan ser construidos múltiples veces sin efectos secundarios. -- Usa Docker Compose para entornos de desarrollo local y pruebas. \ No newline at end of file +- Usa Docker Compose para entornos de desarrollo local y pruebas. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md index ee5f843..56b0431 100644 --- a/localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md +++ b/localisation/es-es/docs/custom-instructions/dotnet/copilot-instructions.md @@ -78,4 +78,8 @@ Eres un desarrollador senior de .NET y un experto en C#, ASP.NET Core, Minimal A - Usa el paquete OpenAPI integrado para documentación de API. - Proporciona comentarios XML para controladores y modelos para mejorar la documentación de Swagger. -Sigue la documentación oficial de Microsoft y las guías de ASP.NET Core para mejores prácticas en enrutamiento, controladores, modelos y otros componentes de API. \ No newline at end of file +Sigue la documentación oficial de Microsoft y las guías de ASP.NET Core para mejores prácticas en enrutamiento, controladores, modelos y otros componentes de API. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/custom-instructions/java/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/java/copilot-instructions.md index 4b429b8..5af8e4d 100644 --- a/localisation/es-es/docs/custom-instructions/java/copilot-instructions.md +++ b/localisation/es-es/docs/custom-instructions/java/copilot-instructions.md @@ -89,4 +89,8 @@ Eres un desarrollador senior de Java y un experto en programación Java, Spring - Arquitectura de microservicios (si es aplicable). - Procesamiento asíncrono usando @Async de Spring o programación reactiva con Spring WebFlux. -Adhiérete a los principios SOLID y mantén alta cohesión y bajo acoplamiento en el diseño de tu aplicación Spring Boot. \ No newline at end of file +Adhiérete a los principios SOLID y mantén alta cohesión y bajo acoplamiento en el diseño de tu aplicación Spring Boot. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md index 666a872..49ea5e4 100644 --- a/localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md +++ b/localisation/es-es/docs/custom-instructions/javascript/copilot-instructions.md @@ -43,4 +43,8 @@ Sigue estas reglas cuando escribas código: - Usa "class:" en lugar del operador ternario en etiquetas de clase siempre que sea posible. - Usa nombres descriptivos para variables y funciones/const. Además, las funciones de eventos deberían ser nombradas con un prefijo "handle", como "handleClick" para onClick y "handleKeyDown" para onKeyDown. - Implementa características de accesibilidad en elementos. Por ejemplo, una etiqueta debería tener tabindex="0", aria-label, on:click, y on:keydown, y atributos similares. -- Usa consts en lugar de funciones, por ejemplo, "const toggle = () =>". También, define un tipo si es posible. \ No newline at end of file +- Usa consts en lugar de funciones, por ejemplo, "const toggle = () =>". También, define un tipo si es posible. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/custom-instructions/python/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/python/copilot-instructions.md index 5a7f031..2726f76 100644 --- a/localisation/es-es/docs/custom-instructions/python/copilot-instructions.md +++ b/localisation/es-es/docs/custom-instructions/python/copilot-instructions.md @@ -67,4 +67,8 @@ Eres un desarrollador senior de Python y un experto en Python, FastAPI, SQLite y - Usa funciones async dedicadas para operaciones de base de datos y API externas. - Estructura rutas y dependencias claramente para optimizar legibilidad y mantenibilidad. -Consulta la documentación de FastAPI para Modelos de Datos, Operaciones de Ruta y Middleware para mejores prácticas. \ No newline at end of file +Consulta la documentación de FastAPI para Modelos de Datos, Operaciones de Ruta y Middleware para mejores prácticas. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md b/localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md index ca3d0de..f004271 100644 --- a/localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md +++ b/localisation/es-es/docs/custom-instructions/setup/copilot-instructions.md @@ -2,4 +2,8 @@ Eres un experto como Analista de Negocios. Eres muy capaz de interpretar los req Cuando trabajas con OpenAPI, siempre se refiere a la versión de especificación 3.0.1. -Cuando creas un documento OpenAPI, siempre debes considerar la reutilización del esquema de datos. NO dupliques estructuras de datos similares. \ No newline at end of file +Cuando creas un documento OpenAPI, siempre debes considerar la reutilización del esquema de datos. NO dupliques estructuras de datos similares. + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/dotnet/README.md b/localisation/es-es/dotnet/README.md index ccbb5d3..451ec28 100644 --- a/localisation/es-es/dotnet/README.md +++ b/localisation/es-es/dotnet/README.md @@ -2,4 +2,8 @@ Aquí está el punto de partida para el desarrollo de tu aplicación .NET. -Si quieres ver el ejemplo completo, consulta este directorio, [/complete/dotnet](../complete/dotnet/). \ No newline at end of file +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/dotnet](../complete/dotnet/). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/java/README.md b/localisation/es-es/java/README.md index faba0ed..e3683f8 100644 --- a/localisation/es-es/java/README.md +++ b/localisation/es-es/java/README.md @@ -2,4 +2,8 @@ Aquí está el punto de partida para el desarrollo de tu aplicación Java. -Si quieres ver el ejemplo completo, consulta este directorio, [/complete/java](../complete/java/). \ No newline at end of file +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/java](../complete/java/). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/javascript/README.md b/localisation/es-es/javascript/README.md index 729f233..9adb311 100644 --- a/localisation/es-es/javascript/README.md +++ b/localisation/es-es/javascript/README.md @@ -2,4 +2,8 @@ Aquí está el punto de partida para el desarrollo de tu aplicación JavaScript. -Si quieres ver el ejemplo completo, consulta este directorio, [/complete/javascript](../complete/javascript/). \ No newline at end of file +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/javascript](../complete/javascript/). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/product-requirements.md b/localisation/es-es/product-requirements.md index b6ceb56..a4879a3 100644 --- a/localisation/es-es/product-requirements.md +++ b/localisation/es-es/product-requirements.md @@ -145,4 +145,8 @@ Contoso es una empresa que vende productos para varias actividades al aire libre * Autenticación de usuario (OAuth, JWT, etc.) * Actualizaciones en tiempo real o notificaciones * Herramientas de moderación o reportes -* Cargas multimedia (imágenes, video) \ No newline at end of file +* Cargas multimedia (imágenes, video) + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/es-es/python/README.md b/localisation/es-es/python/README.md index 7ed898c..b636ed0 100644 --- a/localisation/es-es/python/README.md +++ b/localisation/es-es/python/README.md @@ -2,4 +2,8 @@ Aquí está el punto de partida para el desarrollo de tu aplicación Python. -Si quieres ver el ejemplo completo, consulta este directorio, [/complete/python](../complete/python/). \ No newline at end of file +Si quieres ver el ejemplo completo, consulta este directorio, [/complete/python](../complete/python/). + +--- + +**Disclaimer**: Este documento ha sido localizado por [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/README.md b/localisation/fr-fr/README.md index 31765a1..a13ee60 100644 --- a/localisation/fr-fr/README.md +++ b/localisation/fr-fr/README.md @@ -103,4 +103,8 @@ Consultez l'exemple complet de chaque application. Ils sont également vibe-cod - [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) - [GitHub Copilot: Instructions Personnalisées](https://code.visualstudio.com/docs/copilot/copilot-customization) - [GitHub Copilot: Changer les Modèles IA](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) -- [Serveurs MCP Sélectionnés](https://github.com/modelcontextprotocol/servers) \ No newline at end of file +- [Serveurs MCP Sélectionnés](https://github.com/modelcontextprotocol/servers) + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/complete/README.md b/localisation/fr-fr/complete/README.md index eb9011d..2e872e6 100644 --- a/localisation/fr-fr/complete/README.md +++ b/localisation/fr-fr/complete/README.md @@ -53,4 +53,8 @@ Référez-vous au document [README](../../README.md) pour la préparation. ```bash docker compose down --rmi all - ``` \ No newline at end of file + ``` + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/complete/dotnet/README.md b/localisation/fr-fr/complete/dotnet/README.md index 4f48ba3..06e1d31 100644 --- a/localisation/fr-fr/complete/dotnet/README.md +++ b/localisation/fr-fr/complete/dotnet/README.md @@ -32,4 +32,8 @@ Utilisez [l'Échantillon d'Application Java](../java/). dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp ``` -1. Vérifiez si l'application web fonctionne correctement. \ No newline at end of file +1. Vérifiez si l'application web fonctionne correctement. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/complete/java/socialapp/README.md b/localisation/fr-fr/complete/java/socialapp/README.md index 8f0de9c..2972b51 100644 --- a/localisation/fr-fr/complete/java/socialapp/README.md +++ b/localisation/fr-fr/complete/java/socialapp/README.md @@ -364,4 +364,8 @@ Pour un déploiement en production, considérez : - Utiliser PostgreSQL/MySQL au lieu de SQLite - Implémenter Spring Security pour l'authentification - Ajouter la limitation de débit et la désinfection d'entrée -- Utiliser le chiffrement HTTPS/TLS \ No newline at end of file +- Utiliser le chiffrement HTTPS/TLS + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/complete/javascript/README.md b/localisation/fr-fr/complete/javascript/README.md index c652454..a3ce80d 100644 --- a/localisation/fr-fr/complete/javascript/README.md +++ b/localisation/fr-fr/complete/javascript/README.md @@ -40,4 +40,8 @@ Utilisez [l'Échantillon d'Application Python](../python/). ``` 1. Ouvrez un navigateur web et naviguez vers `http://localhost:3000`. -1. Vérifiez si l'application web fonctionne correctement. \ No newline at end of file +1. Vérifiez si l'application web fonctionne correctement. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/complete/python/README.md b/localisation/fr-fr/complete/python/README.md index f583afa..f142fb9 100644 --- a/localisation/fr-fr/complete/python/README.md +++ b/localisation/fr-fr/complete/python/README.md @@ -289,4 +289,8 @@ uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug - [Documentation FastAPI](https://fastapi.tiangolo.com/) - [Documentation Pydantic](https://docs.pydantic.dev/) - [Documentation SQLite](https://sqlite.org/docs.html) -- [Spécification OpenAPI](https://swagger.io/specification/) \ No newline at end of file +- [Spécification OpenAPI](https://swagger.io/specification/) + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/00-setup.md b/localisation/fr-fr/docs/00-setup.md index 462179b..da16e25 100644 --- a/localisation/fr-fr/docs/00-setup.md +++ b/localisation/fr-fr/docs/00-setup.md @@ -349,4 +349,8 @@ Consultez le document [README](../README.md) pour la préparation. --- -OK. Vous avez terminé l'étape "Environnement de Développement". Passons à [ÉTAPE 01: Développement Backend Python](./01-python.md). \ No newline at end of file +OK. Vous avez terminé l'étape "Environnement de Développement". Passons à [ÉTAPE 01: Développement Backend Python](./01-python.md). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/01-python.md b/localisation/fr-fr/docs/01-python.md index 878ebbf..ba7898c 100644 --- a/localisation/fr-fr/docs/01-python.md +++ b/localisation/fr-fr/docs/01-python.md @@ -116,4 +116,8 @@ Consultez le document [README](../README.md) pour la préparation. --- -OK. Vous avez terminé l'étape "Python". Passons à [ÉTAPE 02: Développement Frontend JavaScript](./02-javascript.md). \ No newline at end of file +OK. Vous avez terminé l'étape "Python". Passons à [ÉTAPE 02: Développement Frontend JavaScript](./02-javascript.md). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/02-javascript.md b/localisation/fr-fr/docs/02-javascript.md index 2bd7567..e3f40d1 100644 --- a/localisation/fr-fr/docs/02-javascript.md +++ b/localisation/fr-fr/docs/02-javascript.md @@ -162,4 +162,8 @@ Consultez le document [README](../README.md) pour la préparation. --- -OK. Vous avez terminé l'étape "JavaScript". Passons à [ÉTAPE 03: Migration Java depuis Python](./03-java.md). \ No newline at end of file +OK. Vous avez terminé l'étape "JavaScript". Passons à [ÉTAPE 03: Migration Java depuis Python](./03-java.md). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/03-java.md b/localisation/fr-fr/docs/03-java.md index 19ed81b..a0e4f24 100644 --- a/localisation/fr-fr/docs/03-java.md +++ b/localisation/fr-fr/docs/03-java.md @@ -157,4 +157,8 @@ Consultez le document [README](../README.md) pour la préparation. --- -OK. Vous avez terminé l'étape "Java". Passons à [ÉTAPE 04: Migration .NET depuis JavaScript](./04-dotnet.md). \ No newline at end of file +OK. Vous avez terminé l'étape "Java". Passons à [ÉTAPE 04: Migration .NET depuis JavaScript](./04-dotnet.md). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/04-dotnet.md b/localisation/fr-fr/docs/04-dotnet.md index 6e71675..564edfd 100644 --- a/localisation/fr-fr/docs/04-dotnet.md +++ b/localisation/fr-fr/docs/04-dotnet.md @@ -170,4 +170,8 @@ Consultez le document [README](../README.md) pour la préparation. --- -OK. Vous avez terminé l'étape ".NET". Passons à [ÉTAPE 05: Conteneurisation](./05-containerization.md). \ No newline at end of file +OK. Vous avez terminé l'étape ".NET". Passons à [ÉTAPE 05: Conteneurisation](./05-containerization.md). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/05-containerization.md b/localisation/fr-fr/docs/05-containerization.md index 994f81f..b8a3a04 100644 --- a/localisation/fr-fr/docs/05-containerization.md +++ b/localisation/fr-fr/docs/05-containerization.md @@ -179,4 +179,8 @@ Consultez le document [README](../README.md) pour la préparation. --- -Félicitations ! 🎉 Vous avez terminé toutes les sessions d'atelier avec succès ! \ No newline at end of file +Félicitations ! 🎉 Vous avez terminé toutes les sessions d'atelier avec succès ! + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/README.md b/localisation/fr-fr/docs/README.md index db5413c..8ebd510 100644 --- a/localisation/fr-fr/docs/README.md +++ b/localisation/fr-fr/docs/README.md @@ -9,4 +9,8 @@ Voici les matériaux d'instructions d'apprentissage auto-rythmé. Utilisez-les e | 02: Développement Frontend JavaScript | [02-javascript.md](./02-javascript.md) | | 03: Migration Java depuis Python | [03-java.md](./03-java.md) | | 04: Migration .NET depuis JavaScript | [04-dotnet.md](./04-dotnet.md) | -| 05: Conteneurisation | [05-containerization.md](./05-containerization.md) | \ No newline at end of file +| 05: Conteneurisation | [05-containerization.md](./05-containerization.md) | + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md index 4f99d13..dc88a14 100644 --- a/localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md +++ b/localisation/fr-fr/docs/custom-instructions/containerization/copilot-instructions.md @@ -31,4 +31,8 @@ Vous êtes un ingénieur DevOps senior et un expert en conteneurisation, Docker, - Utilisez des constructions multi-étapes dans les Dockerfiles pour optimiser la taille d'image. - Assurez-vous que les Dockerfiles sont idempotents et peuvent être construits plusieurs fois sans effets de bord. -- Utilisez Docker Compose pour les environnements de développement local et de test. \ No newline at end of file +- Utilisez Docker Compose pour les environnements de développement local et de test. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md index ce1c312..1b9c8d1 100644 --- a/localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md +++ b/localisation/fr-fr/docs/custom-instructions/dotnet/copilot-instructions.md @@ -78,4 +78,8 @@ Vous êtes un développeur .NET senior et un expert en C#, ASP.NET Core, Minimal - Utilisez le package OpenAPI intégré pour la documentation d'API. - Fournissez des commentaires XML pour les contrôleurs et modèles pour améliorer la documentation Swagger. -Suivez la documentation officielle Microsoft et les guides ASP.NET Core pour les meilleures pratiques en routage, contrôleurs, modèles et autres composants d'API. \ No newline at end of file +Suivez la documentation officielle Microsoft et les guides ASP.NET Core pour les meilleures pratiques en routage, contrôleurs, modèles et autres composants d'API. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md index f3a4237..837b332 100644 --- a/localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md +++ b/localisation/fr-fr/docs/custom-instructions/java/copilot-instructions.md @@ -89,4 +89,8 @@ Vous êtes un développeur Java senior et un expert en programmation Java, Sprin - L'architecture microservices (si applicable). - Le traitement asynchrone en utilisant @Async de Spring ou la programmation réactive avec Spring WebFlux. -Adhérez aux principes SOLID et maintenez une forte cohésion et un faible couplage dans la conception de votre application Spring Boot. \ No newline at end of file +Adhérez aux principes SOLID et maintenez une forte cohésion et un faible couplage dans la conception de votre application Spring Boot. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md index 04a8fd3..29d4870 100644 --- a/localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md +++ b/localisation/fr-fr/docs/custom-instructions/javascript/copilot-instructions.md @@ -43,4 +43,8 @@ Suivez ces règles quand vous écrivez du code : - Utilisez "class:" au lieu de l'opérateur ternaire dans les balises de classe chaque fois que possible. - Utilisez des noms de variables et de fonctions/const descriptifs. Aussi, les fonctions d'événement doivent être nommées avec un préfixe "handle", comme "handleClick" pour onClick et "handleKeyDown" pour onKeyDown. - Implémentez des fonctionnalités d'accessibilité sur les éléments. Par exemple, une balise devrait avoir un tabindex="0", aria-label, on:click, et on:keydown, et des attributs similaires. -- Utilisez des consts au lieu de fonctions, par exemple, "const toggle = () =>". Aussi, définissez un type si possible. \ No newline at end of file +- Utilisez des consts au lieu de fonctions, par exemple, "const toggle = () =>". Aussi, définissez un type si possible. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md index 24d8189..05294b1 100644 --- a/localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md +++ b/localisation/fr-fr/docs/custom-instructions/python/copilot-instructions.md @@ -67,4 +67,8 @@ Vous êtes un développeur Python senior et un expert en Python, FastAPI, SQLite - Utilisez des fonctions async dédiées pour les opérations de base de données et d'API externes. - Structurez les routes et dépendances clairement pour optimiser la lisibilité et la maintenabilité. -Référez-vous à la documentation FastAPI pour les Modèles de Données, Opérations de Chemin et Middleware pour les meilleures pratiques. \ No newline at end of file +Référez-vous à la documentation FastAPI pour les Modèles de Données, Opérations de Chemin et Middleware pour les meilleures pratiques. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md b/localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md index 9ef379d..d99ed31 100644 --- a/localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md +++ b/localisation/fr-fr/docs/custom-instructions/setup/copilot-instructions.md @@ -2,4 +2,8 @@ Vous êtes un expert en tant qu'Analyste Métier. Vous êtes très capable d'int Lorsque vous traitez avec OpenAPI, cela fait toujours référence à la version spec 3.0.1. -Lorsque vous créez un document OpenAPI, vous devez toujours considérer la réutilisabilité du schéma de données. NE dupliquez PAS une structure de données similaire. \ No newline at end of file +Lorsque vous créez un document OpenAPI, vous devez toujours considérer la réutilisabilité du schéma de données. NE dupliquez PAS une structure de données similaire. + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/dotnet/README.md b/localisation/fr-fr/dotnet/README.md index b9d947f..30f73f9 100644 --- a/localisation/fr-fr/dotnet/README.md +++ b/localisation/fr-fr/dotnet/README.md @@ -2,4 +2,8 @@ Voici le point de départ pour le développement de votre application .NET. -Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/dotnet](../complete/dotnet/). \ No newline at end of file +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/dotnet](../complete/dotnet/). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/java/README.md b/localisation/fr-fr/java/README.md index 5903e50..74dad9c 100644 --- a/localisation/fr-fr/java/README.md +++ b/localisation/fr-fr/java/README.md @@ -2,4 +2,8 @@ Voici le point de départ pour le développement de votre application Java. -Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/java](../complete/java/). \ No newline at end of file +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/java](../complete/java/). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/javascript/README.md b/localisation/fr-fr/javascript/README.md index 7173428..a10830c 100644 --- a/localisation/fr-fr/javascript/README.md +++ b/localisation/fr-fr/javascript/README.md @@ -2,4 +2,8 @@ Voici le point de départ pour le développement de votre application JavaScript. -Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/javascript](../complete/javascript/). \ No newline at end of file +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/javascript](../complete/javascript/). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/product-requirements.md b/localisation/fr-fr/product-requirements.md index 0be3e5e..7efc328 100644 --- a/localisation/fr-fr/product-requirements.md +++ b/localisation/fr-fr/product-requirements.md @@ -145,4 +145,8 @@ Contoso est une entreprise qui vend des produits pour diverses activités de ple * Authentification utilisateur (OAuth, JWT, etc.) * Mises à jour en temps réel ou notifications * Outils de modération ou de signalement -* Téléchargements multimédia (images, vidéo) \ No newline at end of file +* Téléchargements multimédia (images, vidéo) + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/fr-fr/python/README.md b/localisation/fr-fr/python/README.md index d93beff..2064ff7 100644 --- a/localisation/fr-fr/python/README.md +++ b/localisation/fr-fr/python/README.md @@ -2,4 +2,8 @@ Voici le point de départ pour le développement de votre application Python. -Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/python](../complete/python/). \ No newline at end of file +Si vous voulez voir l'exemple complet, consultez ce répertoire, [/complete/python](../complete/python/). + +--- + +**Avertissement**: Ce document a été localisé par [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/ja-jp/README.md b/localisation/ja-jp/README.md index 8b65c56..05a1ffa 100644 --- a/localisation/ja-jp/README.md +++ b/localisation/ja-jp/README.md @@ -103,4 +103,8 @@ Contosoは様々なアウトドア活動用製品を販売する会社です。C - [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) - [GitHub Copilot: Custom Instructions](https://code.visualstudio.com/docs/copilot/copilot-customization) - [GitHub Copilot: Changing AI Models](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) -- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) \ No newline at end of file +- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/complete/README.md b/localisation/ja-jp/complete/README.md index 1d15a86..857baa0 100644 --- a/localisation/ja-jp/complete/README.md +++ b/localisation/ja-jp/complete/README.md @@ -53,4 +53,8 @@ ```bash docker compose down --rmi all - ``` \ No newline at end of file + ``` + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/complete/dotnet/README.md b/localisation/ja-jp/complete/dotnet/README.md index 7c5f1ee..fb37065 100644 --- a/localisation/ja-jp/complete/dotnet/README.md +++ b/localisation/ja-jp/complete/dotnet/README.md @@ -32,4 +32,8 @@ dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp ``` -1. Webアプリケーションが正常に動作しているかを確認します。 \ No newline at end of file +1. Webアプリケーションが正常に動作しているかを確認します。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/complete/java/socialapp/README.md b/localisation/ja-jp/complete/java/socialapp/README.md index 98c183e..6c1b401 100644 --- a/localisation/ja-jp/complete/java/socialapp/README.md +++ b/localisation/ja-jp/complete/java/socialapp/README.md @@ -364,4 +364,8 @@ rm sns_api.db - SQLiteの代わりにPostgreSQL/MySQLを使用 - 認証のためにSpring Securityを実装 - レート制限と入力サニタイゼーションを追加 -- HTTPS/TLS暗号化を使用 \ No newline at end of file +- HTTPS/TLS暗号化を使用 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/complete/javascript/README.md b/localisation/ja-jp/complete/javascript/README.md index ec17eab..b0b19b5 100644 --- a/localisation/ja-jp/complete/javascript/README.md +++ b/localisation/ja-jp/complete/javascript/README.md @@ -40,4 +40,8 @@ ``` 1. Webブラウザを開き、`http://localhost:3000`にアクセスします。 -1. Webアプリケーションが正常に動作しているかを確認します。 \ No newline at end of file +1. Webアプリケーションが正常に動作しているかを確認します。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/complete/python/README.md b/localisation/ja-jp/complete/python/README.md index 23cdd0b..f8617f9 100644 --- a/localisation/ja-jp/complete/python/README.md +++ b/localisation/ja-jp/complete/python/README.md @@ -121,4 +121,8 @@ uvicorn main:app --host 0.0.0.0 --port 8000 --reload 1. `http://localhost:8000/docs` に移動 2. すべてのAPIエンドポイントをインタラクティブに探索してテスト -3. リクエスト/レスポンススキーマと例を表示 \ No newline at end of file +3. リクエスト/レスポンススキーマと例を表示 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/00-setup.md b/localisation/ja-jp/docs/00-setup.md index bfbac31..462c391 100644 --- a/localisation/ja-jp/docs/00-setup.md +++ b/localisation/ja-jp/docs/00-setup.md @@ -349,4 +349,8 @@ --- -よくできました。「開発環境」ステップを完了しました。[STEP 01: Python バックエンド開発](./01-python.md)に移りましょう。 \ No newline at end of file +よくできました。「開発環境」ステップを完了しました。[STEP 01: Python バックエンド開発](./01-python.md)に移りましょう。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/01-python.md b/localisation/ja-jp/docs/01-python.md index b6e0e48..0c9252d 100644 --- a/localisation/ja-jp/docs/01-python.md +++ b/localisation/ja-jp/docs/01-python.md @@ -116,4 +116,8 @@ Python開発者として、FastAPIを使用してPythonバックエンドアプ --- -よくできました。「Python」ステップを完了しました。[STEP 02: JavaScript フロントエンド開発](./02-javascript.md)に移りましょう。 \ No newline at end of file +よくできました。「Python」ステップを完了しました。[STEP 02: JavaScript フロントエンド開発](./02-javascript.md)に移りましょう。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/02-javascript.md b/localisation/ja-jp/docs/02-javascript.md index 1504515..5d25112 100644 --- a/localisation/ja-jp/docs/02-javascript.md +++ b/localisation/ja-jp/docs/02-javascript.md @@ -162,4 +162,8 @@ JavaScript開発者として、Python バックエンドAPIアプリと通信す --- -よくできました。「JavaScript」ステップを完了しました。[STEP 03: Python から Java への移行](./03-java.md)に移りましょう。 \ No newline at end of file +よくできました。「JavaScript」ステップを完了しました。[STEP 03: Python から Java への移行](./03-java.md)に移りましょう。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/03-java.md b/localisation/ja-jp/docs/03-java.md index d93b42c..1448cd2 100644 --- a/localisation/ja-jp/docs/03-java.md +++ b/localisation/ja-jp/docs/03-java.md @@ -157,4 +157,8 @@ Java開発者として、既存のFastAPIアプリをSpring Bootに移行する --- -よくできました。「Java」ステップを完了しました。[STEP 04: JavaScript から .NET への移行](./04-dotnet.md)に移りましょう。 \ No newline at end of file +よくできました。「Java」ステップを完了しました。[STEP 04: JavaScript から .NET への移行](./04-dotnet.md)に移りましょう。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/04-dotnet.md b/localisation/ja-jp/docs/04-dotnet.md index 0be8f51..3b93be0 100644 --- a/localisation/ja-jp/docs/04-dotnet.md +++ b/localisation/ja-jp/docs/04-dotnet.md @@ -170,4 +170,8 @@ Contosoは様々なアウトドア活動用製品を販売する会社です。C --- -よくできました。「.NET」ステップを完了しました。[STEP 05: コンテナ化](./05-containerization.md)に移りましょう。 \ No newline at end of file +よくできました。「.NET」ステップを完了しました。[STEP 05: コンテナ化](./05-containerization.md)に移りましょう。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/05-containerization.md b/localisation/ja-jp/docs/05-containerization.md index 30b65ed..260ec9b 100644 --- a/localisation/ja-jp/docs/05-containerization.md +++ b/localisation/ja-jp/docs/05-containerization.md @@ -179,4 +179,8 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 --- -おめでとうございます!🎉 すべてのワークショップセッションを正常に完了しました! \ No newline at end of file +おめでとうございます!🎉 すべてのワークショップセッションを正常に完了しました! + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/README.md b/localisation/ja-jp/docs/README.md index 74a8662..71000fd 100644 --- a/localisation/ja-jp/docs/README.md +++ b/localisation/ja-jp/docs/README.md @@ -9,4 +9,8 @@ | 02: JavaScript フロントエンド開発 | [02-javascript.md](./02-javascript.md) | | 03: Python から Java への移行 | [03-java.md](./03-java.md) | | 04: JavaScript から .NET への移行 | [04-dotnet.md](./04-dotnet.md) | -| 05: コンテナ化 | [05-containerization.md](./05-containerization.md) | \ No newline at end of file +| 05: コンテナ化 | [05-containerization.md](./05-containerization.md) | + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/ja-jp/docs/custom-instructions/containerization/copilot-instructions.md index a9c9f92..44a1bad 100644 --- a/localisation/ja-jp/docs/custom-instructions/containerization/copilot-instructions.md +++ b/localisation/ja-jp/docs/custom-instructions/containerization/copilot-instructions.md @@ -31,4 +31,8 @@ - イメージサイズを最適化するためにDockerfileでマルチステージビルドを使用する。 - Dockerfileが冪等であり、副作用なしに複数回ビルドできることを保証する。 -- ローカル開発とテスト環境にはDocker Composeを使用する。 \ No newline at end of file +- ローカル開発とテスト環境にはDocker Composeを使用する。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/ja-jp/docs/custom-instructions/dotnet/copilot-instructions.md index 28e0091..af44985 100644 --- a/localisation/ja-jp/docs/custom-instructions/dotnet/copilot-instructions.md +++ b/localisation/ja-jp/docs/custom-instructions/dotnet/copilot-instructions.md @@ -78,4 +78,8 @@ - APIドキュメントには組み込みのOpenAPIパッケージを使用する。 - Swaggerドキュメントを強化するため、コントローラーとモデルにXMLコメントを提供する。 -ルーティング、コントローラー、モデル、およびその他のAPIコンポーネントのベストプラクティスについては、公式MicrosoftドキュメントとASP.NET Coreガイドに従ってください。 \ No newline at end of file +ルーティング、コントローラー、モデル、およびその他のAPIコンポーネントのベストプラクティスについては、公式MicrosoftドキュメントとASP.NET Coreガイドに従ってください。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/custom-instructions/java/copilot-instructions.md b/localisation/ja-jp/docs/custom-instructions/java/copilot-instructions.md index ccbea70..d3bf10c 100644 --- a/localisation/ja-jp/docs/custom-instructions/java/copilot-instructions.md +++ b/localisation/ja-jp/docs/custom-instructions/java/copilot-instructions.md @@ -89,4 +89,8 @@ - マイクロサービスアーキテクチャ(適用可能な場合)。 - SpringのWebFluxを使用したSpringの@Asyncまたはリアクティブプログラミングを使用した非同期処理。 -Spring Bootアプリケーション設計でSOLID原則を遵守し、高い凝集性と低い結合度を維持してください。 \ No newline at end of file +Spring Bootアプリケーション設計でSOLID原則を遵守し、高い凝集性と低い結合度を維持してください。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/ja-jp/docs/custom-instructions/javascript/copilot-instructions.md index 7eeb021..9324333 100644 --- a/localisation/ja-jp/docs/custom-instructions/javascript/copilot-instructions.md +++ b/localisation/ja-jp/docs/custom-instructions/javascript/copilot-instructions.md @@ -43,4 +43,8 @@ - 可能な限りクラスタグでは三項演算子の代わりに「class:」を使用する。 - 説明的な変数と関数/const名を使用する。また、イベント関数は「handle」プレフィックスで命名し、onClickには「handleClick」、onKeyDownには「handleKeyDown」のようにする。 - 要素にアクセシビリティ機能を実装する。例えば、aタグにはtabindex="0"、aria-label、on:click、on:keydownおよび類似の属性を持つべきである。 -- 関数の代わりにconstを使用する。例:「const toggle = () =>」。また、可能であれば型を定義する。 \ No newline at end of file +- 関数の代わりにconstを使用する。例:「const toggle = () =>」。また、可能であれば型を定義する。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/custom-instructions/python/copilot-instructions.md b/localisation/ja-jp/docs/custom-instructions/python/copilot-instructions.md index 825ad1d..e669d59 100644 --- a/localisation/ja-jp/docs/custom-instructions/python/copilot-instructions.md +++ b/localisation/ja-jp/docs/custom-instructions/python/copilot-instructions.md @@ -67,4 +67,8 @@ - データベースと外部API操作には専用の非同期関数を使用する。 - 読みやすさと保守性を最適化するため、ルートと依存関係を明確に構造化する。 -ベストプラクティスについては、データモデル、パス操作、ミドルウェアに関するFastAPIドキュメントを参照してください。 \ No newline at end of file +ベストプラクティスについては、データモデル、パス操作、ミドルウェアに関するFastAPIドキュメントを参照してください。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/docs/custom-instructions/setup/copilot-instructions.md b/localisation/ja-jp/docs/custom-instructions/setup/copilot-instructions.md index cd74cd4..1568ece 100644 --- a/localisation/ja-jp/docs/custom-instructions/setup/copilot-instructions.md +++ b/localisation/ja-jp/docs/custom-instructions/setup/copilot-instructions.md @@ -2,4 +2,8 @@ OpenAPIを扱う際は、常にバージョン3.0.1の仕様を参照してください。 -OpenAPI文書を作成する際は、常にデータスキーマの再利用性を考慮する必要があります。類似のデータ構造を重複させないでください。 \ No newline at end of file +OpenAPI文書を作成する際は、常にデータスキーマの再利用性を考慮する必要があります。類似のデータ構造を重複させないでください。 + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/dotnet/README.md b/localisation/ja-jp/dotnet/README.md index ebac1a4..8f1fd54 100644 --- a/localisation/ja-jp/dotnet/README.md +++ b/localisation/ja-jp/dotnet/README.md @@ -2,4 +2,8 @@ こちらは.NETアプリ開発の出発点です。 -完全な例を見たい場合は、このディレクトリを確認してください。[/complete/dotnet](../complete/dotnet/) \ No newline at end of file +完全な例を見たい場合は、このディレクトリを確認してください。[/complete/dotnet](../complete/dotnet/) + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/java/README.md b/localisation/ja-jp/java/README.md index ffbc3e2..d63a295 100644 --- a/localisation/ja-jp/java/README.md +++ b/localisation/ja-jp/java/README.md @@ -2,4 +2,8 @@ こちらはJavaアプリ開発の出発点です。 -完全な例を見たい場合は、このディレクトリを確認してください。[/complete/java](../complete/java/) \ No newline at end of file +完全な例を見たい場合は、このディレクトリを確認してください。[/complete/java](../complete/java/) + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/javascript/README.md b/localisation/ja-jp/javascript/README.md index 48cd487..815deb8 100644 --- a/localisation/ja-jp/javascript/README.md +++ b/localisation/ja-jp/javascript/README.md @@ -2,4 +2,8 @@ こちらはJavaScriptアプリ開発の出発点です。 -完全な例を見たい場合は、このディレクトリを確認してください。[/complete/javascript](../complete/javascript/) \ No newline at end of file +完全な例を見たい場合は、このディレクトリを確認してください。[/complete/javascript](../complete/javascript/) + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/product-requirements.md b/localisation/ja-jp/product-requirements.md index bd57bef..c51a1ae 100644 --- a/localisation/ja-jp/product-requirements.md +++ b/localisation/ja-jp/product-requirements.md @@ -145,4 +145,8 @@ Contosoは様々なアウトドア活動用製品を販売する会社です。C * ユーザー認証(OAuth、JWTなど) * リアルタイム更新や通知 * モデレーションツールやレポート機能 -* マルチメディアアップロード(画像、動画) \ No newline at end of file +* マルチメディアアップロード(画像、動画) + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ja-jp/python/README.md b/localisation/ja-jp/python/README.md index bbbcb3c..41ae5a0 100644 --- a/localisation/ja-jp/python/README.md +++ b/localisation/ja-jp/python/README.md @@ -2,4 +2,8 @@ こちらはPythonアプリ開発の出発点です。 -完全な例を見たい場合は、このディレクトリを確認してください。[/complete/python](../complete/python/) \ No newline at end of file +完全な例を見たい場合は、このディレクトリを確認してください。[/complete/python](../complete/python/) + +--- + +**免責事項**: この文書は[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)によってローカライズされています。そのため、間違いを含む可能性があります。不適切または間違った翻訳を見つけた場合は、[issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)を作成してください。 diff --git a/localisation/ko-kr/README.md b/localisation/ko-kr/README.md index a724ce4..99dd0bc 100644 --- a/localisation/ko-kr/README.md +++ b/localisation/ko-kr/README.md @@ -103,4 +103,8 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto - [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) - [GitHub Copilot: Custom Instructions](https://code.visualstudio.com/docs/copilot/copilot-customization) - [GitHub Copilot: Changing AI Models](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) -- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) \ No newline at end of file +- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/complete/README.md b/localisation/ko-kr/complete/README.md index 5eef52f..fea866e 100644 --- a/localisation/ko-kr/complete/README.md +++ b/localisation/ko-kr/complete/README.md @@ -53,4 +53,8 @@ ```bash docker compose down --rmi all - ``` \ No newline at end of file + ``` + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/complete/dotnet/README.md b/localisation/ko-kr/complete/dotnet/README.md index 25d7ba7..315e4f1 100644 --- a/localisation/ko-kr/complete/dotnet/README.md +++ b/localisation/ko-kr/complete/dotnet/README.md @@ -32,4 +32,8 @@ dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp ``` -1. 웹 애플리케이션이 제대로 실행되는지 확인하세요. \ No newline at end of file +1. 웹 애플리케이션이 제대로 실행되는지 확인하세요. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/complete/java/socialapp/README.md b/localisation/ko-kr/complete/java/socialapp/README.md index 77e0f3d..541022d 100644 --- a/localisation/ko-kr/complete/java/socialapp/README.md +++ b/localisation/ko-kr/complete/java/socialapp/README.md @@ -364,4 +364,8 @@ rm sns_api.db - SQLite 대신 PostgreSQL/MySQL 사용 - 인증을 위한 Spring Security 구현 - 속도 제한 및 입력 정화 추가 -- HTTPS/TLS 암호화 사용 \ No newline at end of file +- HTTPS/TLS 암호화 사용 + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/complete/javascript/README.md b/localisation/ko-kr/complete/javascript/README.md index 910f4c1..9e9b355 100644 --- a/localisation/ko-kr/complete/javascript/README.md +++ b/localisation/ko-kr/complete/javascript/README.md @@ -40,4 +40,8 @@ ``` 1. 웹 브라우저를 열고 `http://localhost:3000`으로 이동하세요. -1. 웹 애플리케이션이 제대로 실행되는지 확인하세요. \ No newline at end of file +1. 웹 애플리케이션이 제대로 실행되는지 확인하세요. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/complete/python/README.md b/localisation/ko-kr/complete/python/README.md index 1616ff8..d03306c 100644 --- a/localisation/ko-kr/complete/python/README.md +++ b/localisation/ko-kr/complete/python/README.md @@ -289,4 +289,8 @@ uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug - [FastAPI Documentation](https://fastapi.tiangolo.com/) - [Pydantic Documentation](https://docs.pydantic.dev/) - [SQLite Documentation](https://sqlite.org/docs.html) -- [OpenAPI Specification](https://swagger.io/specification/) \ No newline at end of file +- [OpenAPI Specification](https://swagger.io/specification/) + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/00-setup.md b/localisation/ko-kr/docs/00-setup.md index 416508a..dc50fcd 100644 --- a/localisation/ko-kr/docs/00-setup.md +++ b/localisation/ko-kr/docs/00-setup.md @@ -349,4 +349,8 @@ --- -좋습니다. "개발 환경" 단계를 완료했습니다. [STEP 01: Python 백엔드 개발](./01-python.md)로 이동하겠습니다. \ No newline at end of file +좋습니다. "개발 환경" 단계를 완료했습니다. [STEP 01: Python 백엔드 개발](./01-python.md)로 이동하겠습니다. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/01-python.md b/localisation/ko-kr/docs/01-python.md index 1e80e0c..77580d1 100644 --- a/localisation/ko-kr/docs/01-python.md +++ b/localisation/ko-kr/docs/01-python.md @@ -116,4 +116,8 @@ Python 개발자로서, FastAPI를 사용하여 Python 백엔드 앱을 구축 --- -좋습니다. "Python" 단계를 완료했습니다. [STEP 02: JavaScript 프론트엔드 개발](./02-javascript.md)로 이동하겠습니다. \ No newline at end of file +좋습니다. "Python" 단계를 완료했습니다. [STEP 02: JavaScript 프론트엔드 개발](./02-javascript.md)로 이동하겠습니다. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/02-javascript.md b/localisation/ko-kr/docs/02-javascript.md index 133e022..1269f86 100644 --- a/localisation/ko-kr/docs/02-javascript.md +++ b/localisation/ko-kr/docs/02-javascript.md @@ -162,4 +162,8 @@ JavaScript 개발자로서, Python 백엔드 API 앱과 통신하는 React를 --- -좋습니다. "JavaScript" 단계를 완료했습니다. [STEP 03: Python에서 Java로 마이그레이션](./03-java.md)로 이동하겠습니다. \ No newline at end of file +좋습니다. "JavaScript" 단계를 완료했습니다. [STEP 03: Python에서 Java로 마이그레이션](./03-java.md)로 이동하겠습니다. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/03-java.md b/localisation/ko-kr/docs/03-java.md index ef03748..219d6ca 100644 --- a/localisation/ko-kr/docs/03-java.md +++ b/localisation/ko-kr/docs/03-java.md @@ -157,4 +157,8 @@ Python 개발자가 회사를 떠났기 때문에, 이해관계자들은 기존 --- -좋습니다. "Java" 단계를 완료했습니다. [STEP 04: JavaScript에서 .NET으로 마이그레이션](./04-dotnet.md)로 이동하겠습니다. \ No newline at end of file +좋습니다. "Java" 단계를 완료했습니다. [STEP 04: JavaScript에서 .NET으로 마이그레이션](./04-dotnet.md)로 이동하겠습니다. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/04-dotnet.md b/localisation/ko-kr/docs/04-dotnet.md index dda7209..4e59266 100644 --- a/localisation/ko-kr/docs/04-dotnet.md +++ b/localisation/ko-kr/docs/04-dotnet.md @@ -170,4 +170,8 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto --- -좋습니다. ".NET" 단계를 완료했습니다. [STEP 05: 컨테이너화](./05-containerization.md)로 이동하겠습니다. \ No newline at end of file +좋습니다. ".NET" 단계를 완료했습니다. [STEP 05: 컨테이너화](./05-containerization.md)로 이동하겠습니다. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/05-containerization.md b/localisation/ko-kr/docs/05-containerization.md index d872429..14960d3 100644 --- a/localisation/ko-kr/docs/05-containerization.md +++ b/localisation/ko-kr/docs/05-containerization.md @@ -179,4 +179,8 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto --- -축하합니다! 🎉 모든 워크샵 세션을 성공적으로 완료했습니다! \ No newline at end of file +축하합니다! 🎉 모든 워크샵 세션을 성공적으로 완료했습니다! + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/README.md b/localisation/ko-kr/docs/README.md index 5feb2e3..20a4bb6 100644 --- a/localisation/ko-kr/docs/README.md +++ b/localisation/ko-kr/docs/README.md @@ -9,4 +9,8 @@ | 02: JavaScript 프론트엔드 개발 | [02-javascript.md](./02-javascript.md) | | 03: Python에서 Java로 마이그레이션 | [03-java.md](./03-java.md) | | 04: JavaScript에서 .NET으로 마이그레이션 | [04-dotnet.md](./04-dotnet.md) | -| 05: 컨테이너화 | [05-containerization.md](./05-containerization.md) | \ No newline at end of file +| 05: 컨테이너화 | [05-containerization.md](./05-containerization.md) | + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/ko-kr/docs/custom-instructions/containerization/copilot-instructions.md index 279ed93..fc61d9a 100644 --- a/localisation/ko-kr/docs/custom-instructions/containerization/copilot-instructions.md +++ b/localisation/ko-kr/docs/custom-instructions/containerization/copilot-instructions.md @@ -31,4 +31,8 @@ - 이미지 크기를 최적화하기 위해 Dockerfile에서 멀티 스테이지 빌드를 사용하세요. - Dockerfile이 멱등성을 가지며 부작용 없이 여러 번 빌드될 수 있도록 보장하세요. -- 로컬 개발 및 테스트 환경에서는 Docker Compose를 사용하세요. \ No newline at end of file +- 로컬 개발 및 테스트 환경에서는 Docker Compose를 사용하세요. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/ko-kr/docs/custom-instructions/dotnet/copilot-instructions.md index d1d2fa9..5fd6e6e 100644 --- a/localisation/ko-kr/docs/custom-instructions/dotnet/copilot-instructions.md +++ b/localisation/ko-kr/docs/custom-instructions/dotnet/copilot-instructions.md @@ -17,4 +17,8 @@ - 클래스명, 메서드명, public 멤버에는 PascalCase를 사용하세요. - 로컬 변수와 private 필드에는 camelCase를 사용하세요. - 상수에는 UPPERCASE를 사용하세요. -- 인터페이스명에는 "I"를 접두사로 붙이세요 (예: 'IUserService'). \ No newline at end of file +- 인터페이스명에는 "I"를 접두사로 붙이세요 (예: 'IUserService'). + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/custom-instructions/java/copilot-instructions.md b/localisation/ko-kr/docs/custom-instructions/java/copilot-instructions.md index 1700053..b62f567 100644 --- a/localisation/ko-kr/docs/custom-instructions/java/copilot-instructions.md +++ b/localisation/ko-kr/docs/custom-instructions/java/copilot-instructions.md @@ -15,4 +15,8 @@ - 빠른 프로젝트 설정과 종속성 관리를 위해 Spring Boot starter를 사용하세요. - 어노테이션의 적절한 사용을 구현하세요 (예: @SpringBootApplication, @RestController, @Service). - Spring Boot의 자동 구성 기능을 효과적으로 활용하세요. -- @ControllerAdvice와 @ExceptionHandler를 사용하여 적절한 예외 처리를 구현하세요. \ No newline at end of file +- @ControllerAdvice와 @ExceptionHandler를 사용하여 적절한 예외 처리를 구현하세요. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/ko-kr/docs/custom-instructions/javascript/copilot-instructions.md index b76b827..6fbc9bd 100644 --- a/localisation/ko-kr/docs/custom-instructions/javascript/copilot-instructions.md +++ b/localisation/ko-kr/docs/custom-instructions/javascript/copilot-instructions.md @@ -17,4 +17,8 @@ - 필요한 모든 imports를 포함하고 주요 컴포넌트의 적절한 명명을 보장하세요. - 간결하게 다른 산문을 최소화하세요. - 올바른 답이 없을 수 있다고 생각하면 그렇게 말하세요. -- 답을 모르면 추측하는 대신 모른다고 말하세요. \ No newline at end of file +- 답을 모르면 추측하는 대신 모른다고 말하세요. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/custom-instructions/python/copilot-instructions.md b/localisation/ko-kr/docs/custom-instructions/python/copilot-instructions.md index fe3e649..e6ca731 100644 --- a/localisation/ko-kr/docs/custom-instructions/python/copilot-instructions.md +++ b/localisation/ko-kr/docs/custom-instructions/python/copilot-instructions.md @@ -67,4 +67,8 @@ - 데이터베이스와 외부 API 작업에 전용 비동기 함수를 사용하세요. - 가독성과 유지보수성을 최적화하기 위해 라우트와 종속성을 명확하게 구조화하세요. -모범 사례를 위해 데이터 모델, 경로 작업, 미들웨어에 대한 FastAPI 문서를 참조하세요. \ No newline at end of file +모범 사례를 위해 데이터 모델, 경로 작업, 미들웨어에 대한 FastAPI 문서를 참조하세요. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/docs/custom-instructions/setup/copilot-instructions.md b/localisation/ko-kr/docs/custom-instructions/setup/copilot-instructions.md index b2779f9..e097416 100644 --- a/localisation/ko-kr/docs/custom-instructions/setup/copilot-instructions.md +++ b/localisation/ko-kr/docs/custom-instructions/setup/copilot-instructions.md @@ -2,4 +2,8 @@ OpenAPI를 다룰 때는 항상 3.0.1 사양 버전을 참조하고 있습니다. -OpenAPI 문서를 생성할 때는 항상 데이터 스키마의 재사용성을 고려해야 합니다. 유사한 데이터 구조를 중복하지 마세요. \ No newline at end of file +OpenAPI 문서를 생성할 때는 항상 데이터 스키마의 재사용성을 고려해야 합니다. 유사한 데이터 구조를 중복하지 마세요. + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/dotnet/README.md b/localisation/ko-kr/dotnet/README.md index b7f7d63..ba7bcd3 100644 --- a/localisation/ko-kr/dotnet/README.md +++ b/localisation/ko-kr/dotnet/README.md @@ -2,4 +2,8 @@ .NET 앱 개발을 위한 시작점입니다. -완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/dotnet](../complete/dotnet/). \ No newline at end of file +완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/dotnet](../complete/dotnet/). + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/java/README.md b/localisation/ko-kr/java/README.md index 9260b60..ec7cf25 100644 --- a/localisation/ko-kr/java/README.md +++ b/localisation/ko-kr/java/README.md @@ -2,4 +2,8 @@ Java 앱 개발을 위한 시작점입니다. -완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/java](../complete/java/). \ No newline at end of file +완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/java](../complete/java/). + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/javascript/README.md b/localisation/ko-kr/javascript/README.md index f08579c..0ca333f 100644 --- a/localisation/ko-kr/javascript/README.md +++ b/localisation/ko-kr/javascript/README.md @@ -2,4 +2,8 @@ JavaScript 앱 개발을 위한 시작점입니다. -완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/javascript](../complete/javascript/). \ No newline at end of file +완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/javascript](../complete/javascript/). + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/product-requirements.md b/localisation/ko-kr/product-requirements.md index e5ec077..1032e2e 100644 --- a/localisation/ko-kr/product-requirements.md +++ b/localisation/ko-kr/product-requirements.md @@ -145,4 +145,8 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto * 사용자 인증 (OAuth, JWT 등) * 실시간 업데이트 또는 알림 * 조정 도구 또는 신고 기능 -* 멀티미디어 업로드 (이미지, 비디오) \ No newline at end of file +* 멀티미디어 업로드 (이미지, 비디오) + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/ko-kr/python/README.md b/localisation/ko-kr/python/README.md index 01747b4..4483bc6 100644 --- a/localisation/ko-kr/python/README.md +++ b/localisation/ko-kr/python/README.md @@ -2,4 +2,8 @@ Python 앱 개발을 위한 시작점입니다. -완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/python](../complete/python/). \ No newline at end of file +완성된 예제를 보고 싶다면, 이 디렉터리를 확인하세요: [/complete/python](../complete/python/). + +--- + +**면책조항**: 이 문서는 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)를 생성해 주세요. diff --git a/localisation/pt-br/README.md b/localisation/pt-br/README.md index 0d3dbb3..37793b3 100644 --- a/localisation/pt-br/README.md +++ b/localisation/pt-br/README.md @@ -103,4 +103,8 @@ Confira o exemplo completo de cada aplicação. Eles também foram codificados c - [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) - [GitHub Copilot: Custom Instructions](https://code.visualstudio.com/docs/copilot/copilot-customization) - [GitHub Copilot: Changing AI Models](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) -- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) \ No newline at end of file +- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/complete/README.md b/localisation/pt-br/complete/README.md index 740b0b5..b6c7b7f 100644 --- a/localisation/pt-br/complete/README.md +++ b/localisation/pt-br/complete/README.md @@ -53,4 +53,8 @@ Consulte a documentação [README](../README.md) para preparação. ```bash docker compose down --rmi all - ``` \ No newline at end of file + ``` + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/complete/dotnet/README.md b/localisation/pt-br/complete/dotnet/README.md index 8eb928b..8266dbe 100644 --- a/localisation/pt-br/complete/dotnet/README.md +++ b/localisation/pt-br/complete/dotnet/README.md @@ -32,4 +32,8 @@ Use [Exemplo de Aplicação Java](../java/). dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp ``` -1. Verifique se a aplicação web está funcionando adequadamente. \ No newline at end of file +1. Verifique se a aplicação web está funcionando adequadamente. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/complete/java/socialapp/README.md b/localisation/pt-br/complete/java/socialapp/README.md index 183d3a8..e654c94 100644 --- a/localisation/pt-br/complete/java/socialapp/README.md +++ b/localisation/pt-br/complete/java/socialapp/README.md @@ -364,4 +364,8 @@ Para implantação em produção, considere: - Usar PostgreSQL/MySQL em vez de SQLite - Implementar Spring Security para autenticação - Adicionar limitação de taxa e sanitização de entrada -- Usar criptografia HTTPS/TLS \ No newline at end of file +- Usar criptografia HTTPS/TLS + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/complete/javascript/README.md b/localisation/pt-br/complete/javascript/README.md index 9eff94e..1781bb1 100644 --- a/localisation/pt-br/complete/javascript/README.md +++ b/localisation/pt-br/complete/javascript/README.md @@ -40,4 +40,8 @@ Use [Exemplo de Aplicação Python](../python/). ``` 1. Abra um navegador web e navegue para `http://localhost:3000`. -1. Verifique se a aplicação web está funcionando adequadamente. \ No newline at end of file +1. Verifique se a aplicação web está funcionando adequadamente. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/complete/python/README.md b/localisation/pt-br/complete/python/README.md index 12f292c..db77c30 100644 --- a/localisation/pt-br/complete/python/README.md +++ b/localisation/pt-br/complete/python/README.md @@ -289,4 +289,8 @@ uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug - [Documentação do FastAPI](https://fastapi.tiangolo.com/) - [Documentação do Pydantic](https://docs.pydantic.dev/) - [Documentação do SQLite](https://sqlite.org/docs.html) -- [Especificação OpenAPI](https://swagger.io/specification/) \ No newline at end of file +- [Especificação OpenAPI](https://swagger.io/specification/) + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/00-setup.md b/localisation/pt-br/docs/00-setup.md index a080a86..9a06387 100644 --- a/localisation/pt-br/docs/00-setup.md +++ b/localisation/pt-br/docs/00-setup.md @@ -349,4 +349,8 @@ Consulte a documentação [README](../README.md) para preparação. --- -OK. Você completou a etapa "Ambiente de Desenvolvimento". Vamos seguir para [ETAPA 01: Desenvolvimento de Backend Python](./01-python.md). \ No newline at end of file +OK. Você completou a etapa "Ambiente de Desenvolvimento". Vamos seguir para [ETAPA 01: Desenvolvimento de Backend Python](./01-python.md). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/01-python.md b/localisation/pt-br/docs/01-python.md index fe53bf8..0b01292 100644 --- a/localisation/pt-br/docs/01-python.md +++ b/localisation/pt-br/docs/01-python.md @@ -116,4 +116,8 @@ Consulte a documentação [README](../README.md) para preparação. --- -OK. Você completou a etapa "Python". Vamos seguir para [ETAPA 02: Desenvolvimento de Frontend JavaScript](./02-javascript.md). \ No newline at end of file +OK. Você completou a etapa "Python". Vamos seguir para [ETAPA 02: Desenvolvimento de Frontend JavaScript](./02-javascript.md). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/02-javascript.md b/localisation/pt-br/docs/02-javascript.md index 2289a73..9f15237 100644 --- a/localisation/pt-br/docs/02-javascript.md +++ b/localisation/pt-br/docs/02-javascript.md @@ -162,4 +162,8 @@ Consulte a documentação [README](../README.md) para preparação. --- -OK. Você completou a etapa "JavaScript". Vamos seguir para [ETAPA 03: Migração Java do Python](./03-java.md). \ No newline at end of file +OK. Você completou a etapa "JavaScript". Vamos seguir para [ETAPA 03: Migração Java do Python](./03-java.md). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/03-java.md b/localisation/pt-br/docs/03-java.md index 3ca2b0d..fc473d9 100644 --- a/localisation/pt-br/docs/03-java.md +++ b/localisation/pt-br/docs/03-java.md @@ -157,4 +157,8 @@ Consulte a documentação [README](../README.md) para preparação. --- -OK. Você completou a etapa "Java". Vamos seguir para [ETAPA 04: Migração .NET do JavaScript](./04-dotnet.md). \ No newline at end of file +OK. Você completou a etapa "Java". Vamos seguir para [ETAPA 04: Migração .NET do JavaScript](./04-dotnet.md). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/04-dotnet.md b/localisation/pt-br/docs/04-dotnet.md index 6144de4..3c963eb 100644 --- a/localisation/pt-br/docs/04-dotnet.md +++ b/localisation/pt-br/docs/04-dotnet.md @@ -170,4 +170,8 @@ Consulte a documentação [README](../README.md) para preparação. --- -OK. Você completou a etapa ".NET". Vamos seguir para [ETAPA 05: Containerização](./05-containerization.md). \ No newline at end of file +OK. Você completou a etapa ".NET". Vamos seguir para [ETAPA 05: Containerização](./05-containerization.md). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/05-containerization.md b/localisation/pt-br/docs/05-containerization.md index 6c78a17..dca32ef 100644 --- a/localisation/pt-br/docs/05-containerization.md +++ b/localisation/pt-br/docs/05-containerization.md @@ -179,4 +179,8 @@ Consulte a documentação [README](../README.md) para preparação. --- -Parabéns! 🎉 Você completou todas as sessões do workshop com sucesso! \ No newline at end of file +Parabéns! 🎉 Você completou todas as sessões do workshop com sucesso! + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/README.md b/localisation/pt-br/docs/README.md index 2811d53..88df141 100644 --- a/localisation/pt-br/docs/README.md +++ b/localisation/pt-br/docs/README.md @@ -9,4 +9,8 @@ Aqui estão os materiais de instrução de aprendizado autoguiado. Use-os e cons | 02: Desenvolvimento de Frontend JavaScript | [02-javascript.md](./02-javascript.md) | | 03: Migração Java do Python | [03-java.md](./03-java.md) | | 04: Migração .NET do JavaScript | [04-dotnet.md](./04-dotnet.md) | -| 05: Containerização | [05-containerization.md](./05-containerization.md) | \ No newline at end of file +| 05: Containerização | [05-containerization.md](./05-containerization.md) | + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md index e3535c1..18190c2 100644 --- a/localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md +++ b/localisation/pt-br/docs/custom-instructions/containerization/copilot-instructions.md @@ -31,4 +31,8 @@ Você é um engenheiro DevOps sênior e especialista em containerização, Docke - Use builds multi-estágio em Dockerfiles para otimizar o tamanho da imagem. - Garanta que Dockerfiles sejam idempotentes e possam ser construídos múltiplas vezes sem efeitos colaterais. -- Use Docker Compose para ambientes de desenvolvimento e teste locais. \ No newline at end of file +- Use Docker Compose para ambientes de desenvolvimento e teste locais. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md index df9afe4..ee35031 100644 --- a/localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md +++ b/localisation/pt-br/docs/custom-instructions/dotnet/copilot-instructions.md @@ -78,4 +78,8 @@ Você é um desenvolvedor .NET sênior e especialista em C#, ASP.NET Core, API M - Use pacote OpenAPI integrado para documentação de API. - Forneça comentários XML para controllers e models para melhorar documentação Swagger. -Siga a documentação oficial da Microsoft e guias do ASP.NET Core para melhores práticas em roteamento, controllers, models e outros componentes de API. \ No newline at end of file +Siga a documentação oficial da Microsoft e guias do ASP.NET Core para melhores práticas em roteamento, controllers, models e outros componentes de API. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md index 362c20e..1250f44 100644 --- a/localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md +++ b/localisation/pt-br/docs/custom-instructions/java/copilot-instructions.md @@ -89,4 +89,8 @@ Você é um desenvolvedor Java sênior e especialista em programação Java, Spr - Arquitetura de microsserviços (se aplicável). - Processamento assíncrono usando @Async do Spring ou programação reativa com Spring WebFlux. -Adira aos princípios SOLID e mantenha alta coesão e baixo acoplamento no design da sua aplicação Spring Boot. \ No newline at end of file +Adira aos princípios SOLID e mantenha alta coesão e baixo acoplamento no design da sua aplicação Spring Boot. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md index 27da3b9..ae8f2bc 100644 --- a/localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md +++ b/localisation/pt-br/docs/custom-instructions/javascript/copilot-instructions.md @@ -43,4 +43,8 @@ Siga essas regras quando escrever código: - Use "class:" em vez do operador ternário em tags de classe sempre que possível. - Use nomes descritivos para variáveis e funções/const. Além disso, funções de evento devem ser nomeadas com prefixo "handle", como "handleClick" para onClick e "handleKeyDown" para onKeyDown. - Implemente recursos de acessibilidade em elementos. Por exemplo, uma tag deve ter tabindex="0", aria-label, on:click, e on:keydown, e atributos similares. -- Use consts em vez de functions, por exemplo, "const toggle = () =>". Além disso, defina um tipo se possível. \ No newline at end of file +- Use consts em vez de functions, por exemplo, "const toggle = () =>". Além disso, defina um tipo se possível. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md index 6530c13..3774bda 100644 --- a/localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md +++ b/localisation/pt-br/docs/custom-instructions/python/copilot-instructions.md @@ -67,4 +67,8 @@ Você é um desenvolvedor Python sênior e especialista em Python, FastAPI, SQLi - Use funções async dedicadas para operações de banco de dados e API externa. - Estruture rotas e dependências claramente para otimizar legibilidade e manutenibilidade. -Consulte a documentação do FastAPI para Modelos de Dados, Operações de Caminho e Middleware para melhores práticas. \ No newline at end of file +Consulte a documentação do FastAPI para Modelos de Dados, Operações de Caminho e Middleware para melhores práticas. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md b/localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md index b78d659..415b0c9 100644 --- a/localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md +++ b/localisation/pt-br/docs/custom-instructions/setup/copilot-instructions.md @@ -2,4 +2,8 @@ Você é um especialista como Analista de Negócios. Você é muito capaz de int Quando você está lidando com OpenAPI, sempre está se referindo à versão de especificação 3.0.1. -Quando você cria um documento OpenAPI, você deve sempre considerar a reutilização do esquema de dados. NÃO duplique estrutura de dados similar. \ No newline at end of file +Quando você cria um documento OpenAPI, você deve sempre considerar a reutilização do esquema de dados. NÃO duplique estrutura de dados similar. + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/dotnet/README.md b/localisation/pt-br/dotnet/README.md index d52bffa..554823a 100644 --- a/localisation/pt-br/dotnet/README.md +++ b/localisation/pt-br/dotnet/README.md @@ -2,4 +2,8 @@ Aqui está o ponto de partida para o desenvolvimento da sua aplicação .NET. -Se você quiser ver o exemplo completo, confira este diretório, [/complete/dotnet](../complete/dotnet/). \ No newline at end of file +Se você quiser ver o exemplo completo, confira este diretório, [/complete/dotnet](../complete/dotnet/). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/java/README.md b/localisation/pt-br/java/README.md index e9e3948..97bc679 100644 --- a/localisation/pt-br/java/README.md +++ b/localisation/pt-br/java/README.md @@ -2,4 +2,8 @@ Aqui está o ponto de partida para o desenvolvimento da sua aplicação Java. -Se você quiser ver o exemplo completo, confira este diretório, [/complete/java](../complete/java/). \ No newline at end of file +Se você quiser ver o exemplo completo, confira este diretório, [/complete/java](../complete/java/). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/javascript/README.md b/localisation/pt-br/javascript/README.md index b108c11..b337b2c 100644 --- a/localisation/pt-br/javascript/README.md +++ b/localisation/pt-br/javascript/README.md @@ -2,4 +2,8 @@ Aqui está o ponto de partida para o desenvolvimento da sua aplicação JavaScript. -Se você quiser ver o exemplo completo, confira este diretório, [/complete/javascript](../complete/javascript/). \ No newline at end of file +Se você quiser ver o exemplo completo, confira este diretório, [/complete/javascript](../complete/javascript/). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/product-requirements.md b/localisation/pt-br/product-requirements.md index 294a513..1c22f34 100644 --- a/localisation/pt-br/product-requirements.md +++ b/localisation/pt-br/product-requirements.md @@ -145,4 +145,8 @@ A Contoso é uma empresa que vende produtos para várias atividades ao ar livre. * Autenticação de usuário (OAuth, JWT, etc.) * Atualizações em tempo real ou notificações * Ferramentas de moderação ou relatórios -* Uploads multimídia (imagens, vídeo) \ No newline at end of file +* Uploads multimídia (imagens, vídeo) + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/pt-br/python/README.md b/localisation/pt-br/python/README.md index 3aabf3c..0da17e3 100644 --- a/localisation/pt-br/python/README.md +++ b/localisation/pt-br/python/README.md @@ -2,4 +2,8 @@ Aqui está o ponto de partida para o desenvolvimento da sua aplicação Python. -Se você quiser ver o exemplo completo, confira este diretório, [/complete/python](../complete/python/). \ No newline at end of file +Se você quiser ver o exemplo completo, confira este diretório, [/complete/python](../complete/python/). + +--- + +**Aviso**: Este documento foi localizado pelo [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot). Portanto, pode conter erros. Se você encontrar alguma tradução inadequada ou incorreta, por favor crie um [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new). diff --git a/localisation/zh-cn/README.md b/localisation/zh-cn/README.md index 3c7a92f..7aabbb2 100644 --- a/localisation/zh-cn/README.md +++ b/localisation/zh-cn/README.md @@ -103,4 +103,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 - [GitHub Copilot: MCP](https://code.visualstudio.com/blogs/2025/05/12/agent-mode-meets-mcp) - [GitHub Copilot: Custom Instructions](https://code.visualstudio.com/docs/copilot/copilot-customization) - [GitHub Copilot: Changing AI Models](https://docs.github.com/en/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat?tool=vscode) -- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) \ No newline at end of file +- [Curated MCP Servers](https://github.com/modelcontextprotocol/servers) + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/complete/README.md b/localisation/zh-cn/complete/README.md index 31afc03..e72a096 100644 --- a/localisation/zh-cn/complete/README.md +++ b/localisation/zh-cn/complete/README.md @@ -53,4 +53,8 @@ ```bash docker compose down --rmi all - ``` \ No newline at end of file + ``` + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/complete/dotnet/README.md b/localisation/zh-cn/complete/dotnet/README.md index bd6ffff..b2559f6 100644 --- a/localisation/zh-cn/complete/dotnet/README.md +++ b/localisation/zh-cn/complete/dotnet/README.md @@ -32,4 +32,8 @@ dotnet watch run --project $REPOSITORY_ROOT/complete/dotnet/Contoso.BlazorApp ``` -1. 验证 Web 应用程序是否正常运行。 \ No newline at end of file +1. 验证 Web 应用程序是否正常运行。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/complete/java/socialapp/README.md b/localisation/zh-cn/complete/java/socialapp/README.md index 7bcf1b6..b2a4874 100644 --- a/localisation/zh-cn/complete/java/socialapp/README.md +++ b/localisation/zh-cn/complete/java/socialapp/README.md @@ -364,4 +364,8 @@ rm sns_api.db - 使用 PostgreSQL/MySQL 而不是 SQLite - 实现 Spring Security 进行身份验证 - 添加速率限制和输入清理 -- 使用 HTTPS/TLS 加密 \ No newline at end of file +- 使用 HTTPS/TLS 加密 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/complete/javascript/README.md b/localisation/zh-cn/complete/javascript/README.md index 2731a90..900afc6 100644 --- a/localisation/zh-cn/complete/javascript/README.md +++ b/localisation/zh-cn/complete/javascript/README.md @@ -40,4 +40,8 @@ ``` 1. 打开网络浏览器并导航到 `http://localhost:3000`。 -1. 验证 Web 应用程序是否正常运行。 \ No newline at end of file +1. 验证 Web 应用程序是否正常运行。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/complete/python/README.md b/localisation/zh-cn/complete/python/README.md index 08ed1bf..f719147 100644 --- a/localisation/zh-cn/complete/python/README.md +++ b/localisation/zh-cn/complete/python/README.md @@ -289,4 +289,8 @@ uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug - [FastAPI 文档](https://fastapi.tiangolo.com/) - [Pydantic 文档](https://docs.pydantic.dev/) - [SQLite 文档](https://sqlite.org/docs.html) -- [OpenAPI 规范](https://swagger.io/specification/) \ No newline at end of file +- [OpenAPI 规范](https://swagger.io/specification/) + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/00-setup.md b/localisation/zh-cn/docs/00-setup.md index 1468230..4efc303 100644 --- a/localisation/zh-cn/docs/00-setup.md +++ b/localisation/zh-cn/docs/00-setup.md @@ -349,4 +349,8 @@ --- -好的。您已经完成了"开发环境"步骤。让我们继续 [步骤 01:Python 后端开发](./01-python.md)。 \ No newline at end of file +好的。您已经完成了"开发环境"步骤。让我们继续 [步骤 01:Python 后端开发](./01-python.md)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/01-python.md b/localisation/zh-cn/docs/01-python.md index 8b3432a..26c4ba3 100644 --- a/localisation/zh-cn/docs/01-python.md +++ b/localisation/zh-cn/docs/01-python.md @@ -116,4 +116,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 --- -好的。您已完成"Python"步骤。让我们进入 [步骤 02: JavaScript 前端开发](./02-javascript.md)。 \ No newline at end of file +好的。您已完成"Python"步骤。让我们进入 [步骤 02: JavaScript 前端开发](./02-javascript.md)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/02-javascript.md b/localisation/zh-cn/docs/02-javascript.md index ae5dab6..0e18fca 100644 --- a/localisation/zh-cn/docs/02-javascript.md +++ b/localisation/zh-cn/docs/02-javascript.md @@ -162,4 +162,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 --- -好的。您已经完成了"JavaScript"步骤。让我们继续 [步骤 03:从 Python 迁移到 Java](./03-java.md)。 \ No newline at end of file +好的。您已经完成了"JavaScript"步骤。让我们继续 [步骤 03:从 Python 迁移到 Java](./03-java.md)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/03-java.md b/localisation/zh-cn/docs/03-java.md index 829b8e3..4fbc81f 100644 --- a/localisation/zh-cn/docs/03-java.md +++ b/localisation/zh-cn/docs/03-java.md @@ -157,4 +157,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 --- -好的。您已经完成了"Java"步骤。让我们继续 [步骤 04:从 JavaScript 迁移到 .NET](./04-dotnet.md)。 \ No newline at end of file +好的。您已经完成了"Java"步骤。让我们继续 [步骤 04:从 JavaScript 迁移到 .NET](./04-dotnet.md)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/04-dotnet.md b/localisation/zh-cn/docs/04-dotnet.md index 5466713..f8d7f08 100644 --- a/localisation/zh-cn/docs/04-dotnet.md +++ b/localisation/zh-cn/docs/04-dotnet.md @@ -170,4 +170,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 --- -好的。您已经完成了".NET"步骤。让我们继续 [步骤 05:容器化](./05-containerization.md)。 \ No newline at end of file +好的。您已经完成了".NET"步骤。让我们继续 [步骤 05:容器化](./05-containerization.md)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/05-containerization.md b/localisation/zh-cn/docs/05-containerization.md index fd777a0..9b7fb14 100644 --- a/localisation/zh-cn/docs/05-containerization.md +++ b/localisation/zh-cn/docs/05-containerization.md @@ -179,4 +179,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 --- -好的。您已经完成了"容器化"步骤。恭喜您完成了整个工作坊! \ No newline at end of file +好的。您已经完成了"容器化"步骤。恭喜您完成了整个工作坊! + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/README.md b/localisation/zh-cn/docs/README.md index d3b314f..d409363 100644 --- a/localisation/zh-cn/docs/README.md +++ b/localisation/zh-cn/docs/README.md @@ -9,4 +9,8 @@ | 02: JavaScript 前端开发 | [02-javascript.md](./02-javascript.md) | | 03: 从 Python 迁移到 Java | [03-java.md](./03-java.md) | | 04: 从 JavaScript 迁移到 .NET | [04-dotnet.md](./04-dotnet.md) | -| 05: 容器化 | [05-containerization.md](./05-containerization.md) | \ No newline at end of file +| 05: 容器化 | [05-containerization.md](./05-containerization.md) | + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/custom-instructions/containerization/copilot-instructions.md b/localisation/zh-cn/docs/custom-instructions/containerization/copilot-instructions.md index d5d4436..3bfcf35 100644 --- a/localisation/zh-cn/docs/custom-instructions/containerization/copilot-instructions.md +++ b/localisation/zh-cn/docs/custom-instructions/containerization/copilot-instructions.md @@ -31,4 +31,8 @@ - 在 Dockerfile 中使用多阶段构建来优化镜像大小。 - 确保 Dockerfile 是幂等的,可以多次构建而不产生副作用。 -- 使用 Docker Compose 进行本地开发和测试环境。 \ No newline at end of file +- 使用 Docker Compose 进行本地开发和测试环境。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/custom-instructions/dotnet/copilot-instructions.md b/localisation/zh-cn/docs/custom-instructions/dotnet/copilot-instructions.md index e38bd31..1ce1906 100644 --- a/localisation/zh-cn/docs/custom-instructions/dotnet/copilot-instructions.md +++ b/localisation/zh-cn/docs/custom-instructions/dotnet/copilot-instructions.md @@ -78,4 +78,8 @@ - 使用内置的 OpenAPI 包进行 API 文档。 - 为控制器和模型提供 XML 注释以增强 Swagger 文档。 -请遵循官方 Microsoft 文档和 ASP.NET Core 指南,了解路由、控制器、模型和其他 API 组件的最佳实践。 \ No newline at end of file +请遵循官方 Microsoft 文档和 ASP.NET Core 指南,了解路由、控制器、模型和其他 API 组件的最佳实践。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/custom-instructions/java/copilot-instructions.md b/localisation/zh-cn/docs/custom-instructions/java/copilot-instructions.md index 3808304..3498263 100644 --- a/localisation/zh-cn/docs/custom-instructions/java/copilot-instructions.md +++ b/localisation/zh-cn/docs/custom-instructions/java/copilot-instructions.md @@ -89,4 +89,8 @@ - 微服务架构(如果适用)。 - 使用 Spring 的 @Async 或 Spring WebFlux 的响应式编程进行异步处理。 -在您的 Spring Boot 应用程序设计中遵循 SOLID 原则并保持高内聚和低耦合。 \ No newline at end of file +在您的 Spring Boot 应用程序设计中遵循 SOLID 原则并保持高内聚和低耦合。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/custom-instructions/javascript/copilot-instructions.md b/localisation/zh-cn/docs/custom-instructions/javascript/copilot-instructions.md index c9c931c..0fc37b2 100644 --- a/localisation/zh-cn/docs/custom-instructions/javascript/copilot-instructions.md +++ b/localisation/zh-cn/docs/custom-instructions/javascript/copilot-instructions.md @@ -43,4 +43,8 @@ - 在 class 标签中尽可能使用 "class:" 而不是三元运算符。 - 使用描述性的变量和函数/常量名称。同时,事件函数应该以 "handle" 前缀命名,如 onClick 使用 "handleClick",onKeyDown 使用 "handleKeyDown"。 - 在元素上实现可访问性功能。例如,标签应该有 tabindex="0"、aria-label、on:click 和 on:keydown,以及类似的属性。 -- 使用常量而不是函数,例如,"const toggle = () =>"。同时,如果可能,定义一个类型。 \ No newline at end of file +- 使用常量而不是函数,例如,"const toggle = () =>"。同时,如果可能,定义一个类型。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/custom-instructions/python/copilot-instructions.md b/localisation/zh-cn/docs/custom-instructions/python/copilot-instructions.md index dffe45a..d90eaf3 100644 --- a/localisation/zh-cn/docs/custom-instructions/python/copilot-instructions.md +++ b/localisation/zh-cn/docs/custom-instructions/python/copilot-instructions.md @@ -67,4 +67,8 @@ - 对数据库和外部 API 操作使用专用异步函数。 - 清晰地构建路由和依赖项以优化可读性和可维护性。 -请参考 FastAPI 文档中的数据模型、路径操作和中间件以获取最佳实践。 \ No newline at end of file +请参考 FastAPI 文档中的数据模型、路径操作和中间件以获取最佳实践。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/docs/custom-instructions/setup/copilot-instructions.md b/localisation/zh-cn/docs/custom-instructions/setup/copilot-instructions.md index 6bbc994..3e6656a 100644 --- a/localisation/zh-cn/docs/custom-instructions/setup/copilot-instructions.md +++ b/localisation/zh-cn/docs/custom-instructions/setup/copilot-instructions.md @@ -2,4 +2,8 @@ 当您处理 OpenAPI 时,始终指的是 3.0.1 版本的规范。 -当您创建 OpenAPI 文档时,您应该始终考虑数据架构的可重用性。不要重复类似的数据结构。 \ No newline at end of file +当您创建 OpenAPI 文档时,您应该始终考虑数据架构的可重用性。不要重复类似的数据结构。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/dotnet/README.md b/localisation/zh-cn/dotnet/README.md index e8e8720..a0b5f4d 100644 --- a/localisation/zh-cn/dotnet/README.md +++ b/localisation/zh-cn/dotnet/README.md @@ -2,4 +2,8 @@ 这是您 .NET 应用开发的起点。 -如果您想查看完整示例,请查看此目录:[/complete/dotnet](../complete/dotnet/)。 \ No newline at end of file +如果您想查看完整示例,请查看此目录:[/complete/dotnet](../complete/dotnet/)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/java/README.md b/localisation/zh-cn/java/README.md index b4a8eed..267d339 100644 --- a/localisation/zh-cn/java/README.md +++ b/localisation/zh-cn/java/README.md @@ -2,4 +2,8 @@ 这是您 Java 应用开发的起点。 -如果您想查看完整示例,请查看此目录:[/complete/java](../complete/java/)。 \ No newline at end of file +如果您想查看完整示例,请查看此目录:[/complete/java](../complete/java/)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/javascript/README.md b/localisation/zh-cn/javascript/README.md index ddd030a..7b237d0 100644 --- a/localisation/zh-cn/javascript/README.md +++ b/localisation/zh-cn/javascript/README.md @@ -2,4 +2,8 @@ 这是您 JavaScript 应用开发的起点。 -如果您想查看完整示例,请查看此目录:[/complete/javascript](../complete/javascript/)。 \ No newline at end of file +如果您想查看完整示例,请查看此目录:[/complete/javascript](../complete/javascript/)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/product-requirements.md b/localisation/zh-cn/product-requirements.md index 02f6267..e8440c3 100644 --- a/localisation/zh-cn/product-requirements.md +++ b/localisation/zh-cn/product-requirements.md @@ -145,4 +145,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 * 用户身份验证(OAuth、JWT 等) * 实时更新或通知 * 审核工具或举报功能 -* 多媒体上传(图片、视频) \ No newline at end of file +* 多媒体上传(图片、视频) + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 diff --git a/localisation/zh-cn/python/README.md b/localisation/zh-cn/python/README.md index 92ca5ca..12667c2 100644 --- a/localisation/zh-cn/python/README.md +++ b/localisation/zh-cn/python/README.md @@ -2,4 +2,8 @@ 这是您 Python 应用开发的起点。 -如果您想查看完整示例,请查看此目录:[/complete/python](../complete/python/)。 \ No newline at end of file +如果您想查看完整示例,请查看此目录:[/complete/python](../complete/python/)。 + +--- + +**免责声明**: 本文档由 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 本地化。因此,可能包含错误。如果您发现任何不当或错误的翻译,请创建一个 [issue](https://github.com/microsoft/github-copilot-vibe-coding-workshop/issues/new)。 From a0560de4df767b9bc5a5c757f415332be629d1fe Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Sat, 7 Jun 2025 15:49:01 +0900 Subject: [PATCH 06/17] Add the direct link to create a GitHub Codespace instance (#37) * Add GH Codespaces link * Add GitHub Codespaces link --- README.md | 6 +++++- docs/00-setup.md | 10 ++++------ localisation/es-es/docs/00-setup.md | 6 +++--- localisation/fr-fr/docs/00-setup.md | 6 +++--- localisation/ja-jp/docs/00-setup.md | 6 +++--- localisation/ko-kr/docs/00-setup.md | 6 +++--- localisation/pt-br/docs/00-setup.md | 6 +++--- localisation/zh-cn/docs/00-setup.md | 6 +++--- 8 files changed, 27 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index c5923fe..77ad6fe 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,11 @@ This workshop material is currently provided in the following languages: ## Prerequisites -During this workshop, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) is highly recommended because there's no need for preparation, except a web browser. However, if you really need to use your machine, make sure you've installed everything identified below. +During this workshop, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) is highly recommended because there's no need for preparation, except a web browser. + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) + +However, if you really need to use your machine, make sure you've installed everything identified below. ### Common diff --git a/docs/00-setup.md b/docs/00-setup.md index d297658..39d56c6 100644 --- a/docs/00-setup.md +++ b/docs/00-setup.md @@ -23,11 +23,9 @@ Refer to the [README](../README.md) doc for preparation. ## Use GitHub Codespaces -1. Take a look at the image below, and follow the steps in the order of clicking ![the "code" button image](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![the "codespaces" button image](https://img.shields.io/badge/Codespaces-white) 👉 ![the "create codespace on main" button image](https://img.shields.io/badge/Create_codespace_on_main-green) and create a new GitHub Codespace instance. It might take 5-10 mins depending on the network status. +1. Click this link 👉 [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) - ![Starting with GitHub Codespaces](./images/setup-01.png) - -2. Once the GitHub Codespace instance is ready, open a terminal and run the following command to check out everything you need has been properly installed or not. +1. Once the GitHub Codespace instance is ready, open a terminal and run the following command to check out everything you need has been properly installed or not. ```bash # Python @@ -51,7 +49,7 @@ Refer to the [README](../README.md) doc for preparation. dotnet --list-sdks ``` -3. Check out your repository status. +1. Check out your repository status. ```bash git remote -v @@ -66,7 +64,7 @@ Refer to the [README](../README.md) doc for preparation. If you see something different from above, delete the GitHub Codespace instance and recreate it. -4. Move down to the [Set-up MCP Servers](#set-up-mcp-servers) section. +1. Move down to the [Set-up MCP Servers](#set-up-mcp-servers) section. **👇👇👇 Instead, if you'd like to use VS Code on your local machine, follow the instruction below. The section below doesn't apply to those who use GitHub Codespaces. 👇👇👇** diff --git a/localisation/es-es/docs/00-setup.md b/localisation/es-es/docs/00-setup.md index 405d1c2..7dfcfe9 100644 --- a/localisation/es-es/docs/00-setup.md +++ b/localisation/es-es/docs/00-setup.md @@ -27,7 +27,7 @@ Consulta el documento [README](../README.md) para la preparación. ![Comenzando con GitHub Codespaces](../../../docs/images/setup-01.png) -2. Una vez que la instancia de GitHub Codespace esté lista, abre una terminal y ejecuta el siguiente comando para verificar si todo lo que necesitas ha sido instalado correctamente o no. +1. Una vez que la instancia de GitHub Codespace esté lista, abre una terminal y ejecuta el siguiente comando para verificar si todo lo que necesitas ha sido instalado correctamente o no. ```bash # Python @@ -51,7 +51,7 @@ Consulta el documento [README](../README.md) para la preparación. dotnet --list-sdks ``` -3. Verifica el estado de tu repositorio. +1. Verifica el estado de tu repositorio. ```bash git remote -v @@ -66,7 +66,7 @@ Consulta el documento [README](../README.md) para la preparación. Si ves algo diferente a lo anterior, elimina la instancia de GitHub Codespace y créala nuevamente. -4. Ve a la sección [Configurar Servidores MCP](#configurar-servidores-mcp). +1. Ve a la sección [Configurar Servidores MCP](#configurar-servidores-mcp). **👇👇👇 En su lugar, si prefieres usar VS Code en tu máquina local, sigue las instrucciones a continuación. La sección de abajo no aplica para aquellos que usan GitHub Codespaces. 👇👇👇** diff --git a/localisation/fr-fr/docs/00-setup.md b/localisation/fr-fr/docs/00-setup.md index da16e25..5fea074 100644 --- a/localisation/fr-fr/docs/00-setup.md +++ b/localisation/fr-fr/docs/00-setup.md @@ -27,7 +27,7 @@ Consultez le document [README](../README.md) pour la préparation. ![Commencer avec GitHub Codespaces](../../../docs/images/setup-01.png) -2. Une fois que l'instance GitHub Codespace est prête, ouvrez un terminal et exécutez la commande suivante pour vérifier si tout ce dont vous avez besoin a été installé correctement ou non. +1. Une fois que l'instance GitHub Codespace est prête, ouvrez un terminal et exécutez la commande suivante pour vérifier si tout ce dont vous avez besoin a été installé correctement ou non. ```bash # Python @@ -51,7 +51,7 @@ Consultez le document [README](../README.md) pour la préparation. dotnet --list-sdks ``` -3. Vérifiez le statut de votre dépôt. +1. Vérifiez le statut de votre dépôt. ```bash git remote -v @@ -66,7 +66,7 @@ Consultez le document [README](../README.md) pour la préparation. Si vous voyez quelque chose de différent de ce qui précède, supprimez l'instance GitHub Codespace et recréez-la. -4. Descendez à la section [Configurer les Serveurs MCP](#configurer-les-serveurs-mcp). +1. Descendez à la section [Configurer les Serveurs MCP](#configurer-les-serveurs-mcp). **👇👇👇 Au lieu de cela, si vous souhaitez utiliser VS Code sur votre machine locale, suivez les instructions ci-dessous. La section ci-dessous ne s'applique pas à ceux qui utilisent GitHub Codespaces. 👇👇👇** diff --git a/localisation/ja-jp/docs/00-setup.md b/localisation/ja-jp/docs/00-setup.md index 462c391..d7396e6 100644 --- a/localisation/ja-jp/docs/00-setup.md +++ b/localisation/ja-jp/docs/00-setup.md @@ -27,7 +27,7 @@ ![GitHub Codespaces で開始](../../../docs/images/setup-01.png) -2. GitHub Codespaceインスタンスの準備ができたら、ターミナルを開いて以下のコマンドを実行し、必要なものがすべて適切にインストールされているかどうかを確認します。 +1. GitHub Codespaceインスタンスの準備ができたら、ターミナルを開いて以下のコマンドを実行し、必要なものがすべて適切にインストールされているかどうかを確認します。 ```bash # Python @@ -51,7 +51,7 @@ dotnet --list-sdks ``` -3. リポジトリの状態を確認します。 +1. リポジトリの状態を確認します。 ```bash git remote -v @@ -66,7 +66,7 @@ 上記と異なるものが表示される場合は、GitHub Codespaceインスタンスを削除して再作成してください。 -4. [MCP サーバーを設定](#mcp-サーバーを設定)セクションに移動します。 +1. [MCP サーバーを設定](#mcp-サーバーを設定)セクションに移動します。 **👇👇👇 代わりに、ローカルマシンでVS Codeを使用したい場合は、以下の指示に従ってください。以下のセクションは、GitHub Codespaces を使用する人には適用されません。 👇👇👇** diff --git a/localisation/ko-kr/docs/00-setup.md b/localisation/ko-kr/docs/00-setup.md index dc50fcd..6e33a32 100644 --- a/localisation/ko-kr/docs/00-setup.md +++ b/localisation/ko-kr/docs/00-setup.md @@ -27,7 +27,7 @@ ![Starting with GitHub Codespaces](../../../docs/images/setup-01.png) -2. GitHub Codespace 인스턴스가 준비되면, 터미널을 열고 다음 명령을 실행하여 필요한 모든 것이 제대로 설치되었는지 확인하세요. +1. GitHub Codespace 인스턴스가 준비되면, 터미널을 열고 다음 명령을 실행하여 필요한 모든 것이 제대로 설치되었는지 확인하세요. ```bash # Python @@ -51,7 +51,7 @@ dotnet --list-sdks ``` -3. 저장소 상태를 확인하세요. +1. 저장소 상태를 확인하세요. ```bash git remote -v @@ -66,7 +66,7 @@ 위와 다른 것이 보이면 GitHub Codespace 인스턴스를 삭제하고 다시 생성하세요. -4. [MCP 서버 설정](#mcp-서버-설정) 섹션으로 이동하세요. +1. [MCP 서버 설정](#mcp-서버-설정) 섹션으로 이동하세요. **👇👇👇 대신 로컬 머신에서 VS Code를 사용하고 싶다면 아래 지침을 따르세요. 아래 섹션은 GitHub Codespaces를 사용하는 사람들에게는 적용되지 않습니다. 👇👇👇** diff --git a/localisation/pt-br/docs/00-setup.md b/localisation/pt-br/docs/00-setup.md index 9a06387..7d08b3c 100644 --- a/localisation/pt-br/docs/00-setup.md +++ b/localisation/pt-br/docs/00-setup.md @@ -27,7 +27,7 @@ Consulte a documentação [README](../README.md) para preparação. ![Iniciando com GitHub Codespaces](../../../docs/images/setup-01.png) -2. Uma vez que a instância do GitHub Codespace esteja pronta, abra um terminal e execute o seguinte comando para verificar se tudo que você precisa foi devidamente instalado ou não. +1. Uma vez que a instância do GitHub Codespace esteja pronta, abra um terminal e execute o seguinte comando para verificar se tudo que você precisa foi devidamente instalado ou não. ```bash # Python @@ -51,7 +51,7 @@ Consulte a documentação [README](../README.md) para preparação. dotnet --list-sdks ``` -3. Verifique o status do seu repositório. +1. Verifique o status do seu repositório. ```bash git remote -v @@ -66,7 +66,7 @@ Consulte a documentação [README](../README.md) para preparação. Se você ver algo diferente do acima, delete a instância do GitHub Codespace e recrie-a. -4. Vá para a seção [Configurar Servidores MCP](#configurar-servidores-mcp). +1. Vá para a seção [Configurar Servidores MCP](#configurar-servidores-mcp). **👇👇👇 Ao invés disso, se você gostaria de usar VS Code em sua máquina local, siga as instruções abaixo. A seção abaixo não se aplica àqueles que usam GitHub Codespaces. 👇👇👇** diff --git a/localisation/zh-cn/docs/00-setup.md b/localisation/zh-cn/docs/00-setup.md index 4efc303..dd3b91f 100644 --- a/localisation/zh-cn/docs/00-setup.md +++ b/localisation/zh-cn/docs/00-setup.md @@ -27,7 +27,7 @@ ![开始使用 GitHub Codespaces](../../../docs/images/setup-01.png) -2. GitHub Codespace 实例准备就绪后,打开终端并运行以下命令检查所需的所有内容是否已正确安装。 +1. GitHub Codespace 实例准备就绪后,打开终端并运行以下命令检查所需的所有内容是否已正确安装。 ```bash # Python @@ -51,7 +51,7 @@ dotnet --list-sdks ``` -3. 检查您的存储库状态。 +1. 检查您的存储库状态。 ```bash git remote -v @@ -66,7 +66,7 @@ 如果您看到与上述不同的内容,请删除 GitHub Codespace 实例并重新创建。 -4. 移至 [设置 MCP 服务器](#设置-mcp-服务器) 部分。 +1. 移至 [设置 MCP 服务器](#设置-mcp-服务器) 部分。 **👇👇👇 相反,如果您想在本地机器上使用 VS Code,请按照下面的说明操作。下面的部分不适用于使用 GitHub Codespaces 的用户。👇👇👇** From d4de26956fb99e42edc155fde3edcdbfe3a3e08f Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Jun 2025 16:15:19 +0900 Subject: [PATCH 07/17] Synchronize GitHub Codespaces direct links across all localized documents (#39) * Initial plan for issue * Add GitHub Codespaces direct links to all localized documents Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> --- localisation/es-es/README.md | 6 +++++- localisation/es-es/docs/00-setup.md | 4 +--- localisation/fr-fr/README.md | 6 +++++- localisation/fr-fr/docs/00-setup.md | 4 +--- localisation/ja-jp/README.md | 6 +++++- localisation/ja-jp/docs/00-setup.md | 4 +--- localisation/ko-kr/README.md | 6 +++++- localisation/ko-kr/docs/00-setup.md | 4 +--- localisation/pt-br/README.md | 6 +++++- localisation/pt-br/docs/00-setup.md | 4 +--- localisation/zh-cn/README.md | 6 +++++- localisation/zh-cn/docs/00-setup.md | 4 +--- 12 files changed, 36 insertions(+), 24 deletions(-) diff --git a/localisation/es-es/README.md b/localisation/es-es/README.md index d52171e..99a2a0a 100644 --- a/localisation/es-es/README.md +++ b/localisation/es-es/README.md @@ -24,7 +24,11 @@ Este material del taller está actualmente disponible en los siguientes idiomas: ## Prerrequisitos -Durante este taller, se recomienda altamente [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) porque no hay necesidad de preparación, excepto un navegador web. Sin embargo, si realmente necesitas usar tu máquina, asegúrate de haber instalado todo lo identificado a continuación. +Durante este taller, se recomienda altamente [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) porque no hay necesidad de preparación, excepto un navegador web. + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) + +Sin embargo, si realmente necesitas usar tu máquina, asegúrate de haber instalado todo lo identificado a continuación. ### Común diff --git a/localisation/es-es/docs/00-setup.md b/localisation/es-es/docs/00-setup.md index 7dfcfe9..8ae8989 100644 --- a/localisation/es-es/docs/00-setup.md +++ b/localisation/es-es/docs/00-setup.md @@ -23,9 +23,7 @@ Consulta el documento [README](../README.md) para la preparación. ## Usar GitHub Codespaces -1. Observa la imagen a continuación, y sigue los pasos en el orden de hacer clic en ![imagen del botón "code"](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![imagen del botón "codespaces"](https://img.shields.io/badge/Codespaces-white) 👉 ![imagen del botón "create codespace on main"](https://img.shields.io/badge/Create_codespace_on_main-green) y crear una nueva instancia de GitHub Codespace. Puede tomar 5-10 minutos dependiendo del estado de la red. - - ![Comenzando con GitHub Codespaces](../../../docs/images/setup-01.png) +1. Haz clic en este enlace 👉 [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) 1. Una vez que la instancia de GitHub Codespace esté lista, abre una terminal y ejecuta el siguiente comando para verificar si todo lo que necesitas ha sido instalado correctamente o no. diff --git a/localisation/fr-fr/README.md b/localisation/fr-fr/README.md index a13ee60..aff1c49 100644 --- a/localisation/fr-fr/README.md +++ b/localisation/fr-fr/README.md @@ -24,7 +24,11 @@ Ce matériel d'atelier est actuellement fourni dans les langues suivantes : ## Prérequis -Pendant cet atelier, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) est fortement recommandé car il n'y a pas besoin de préparation, sauf un navigateur web. Cependant, si vous devez vraiment utiliser votre machine, assurez-vous d'avoir installé tout ce qui est identifié ci-dessous. +Pendant cet atelier, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) est fortement recommandé car il n'y a pas besoin de préparation, sauf un navigateur web. + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) + +Cependant, si vous devez vraiment utiliser votre machine, assurez-vous d'avoir installé tout ce qui est identifié ci-dessous. ### Commun diff --git a/localisation/fr-fr/docs/00-setup.md b/localisation/fr-fr/docs/00-setup.md index 5fea074..ca738b1 100644 --- a/localisation/fr-fr/docs/00-setup.md +++ b/localisation/fr-fr/docs/00-setup.md @@ -23,9 +23,7 @@ Consultez le document [README](../README.md) pour la préparation. ## Utiliser GitHub Codespaces -1. Regardez l'image ci-dessous et suivez les étapes dans l'ordre en cliquant sur ![l'image du bouton "code"](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![l'image du bouton "codespaces"](https://img.shields.io/badge/Codespaces-white) 👉 ![l'image du bouton "create codespace on main"](https://img.shields.io/badge/Create_codespace_on_main-green) et créez une nouvelle instance GitHub Codespace. Cela peut prendre 5-10 minutes selon le statut du réseau. - - ![Commencer avec GitHub Codespaces](../../../docs/images/setup-01.png) +1. Cliquez sur ce lien 👉 [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) 1. Une fois que l'instance GitHub Codespace est prête, ouvrez un terminal et exécutez la commande suivante pour vérifier si tout ce dont vous avez besoin a été installé correctement ou non. diff --git a/localisation/ja-jp/README.md b/localisation/ja-jp/README.md index 05a1ffa..543b900 100644 --- a/localisation/ja-jp/README.md +++ b/localisation/ja-jp/README.md @@ -24,7 +24,11 @@ Contosoは様々なアウトドア活動用製品を販売する会社です。C ## 前提条件 -このワークショップでは、Webブラウザ以外に準備が不要なため、[GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces)を強く推奨します。ただし、どうしても自分のマシンを使用する必要がある場合は、以下で特定されたすべてのものがインストールされていることを確認してください。 +このワークショップでは、Webブラウザ以外に準備が不要なため、[GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces)を強く推奨します。 + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) + +ただし、どうしても自分のマシンを使用する必要がある場合は、以下で特定されたすべてのものがインストールされていることを確認してください。 ### 共通 diff --git a/localisation/ja-jp/docs/00-setup.md b/localisation/ja-jp/docs/00-setup.md index d7396e6..e69df6a 100644 --- a/localisation/ja-jp/docs/00-setup.md +++ b/localisation/ja-jp/docs/00-setup.md @@ -23,9 +23,7 @@ ## GitHub Codespaces を使用 -1. 下の画像を確認し、![「code」ボタンの画像](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![「codespaces」ボタンの画像](https://img.shields.io/badge/Codespaces-white) 👉 ![「create codespace on main」ボタンの画像](https://img.shields.io/badge/Create_codespace_on_main-green) の順序でクリックして、新しいGitHub Codespaceインスタンスを作成します。ネットワーク状況によって5-10分かかる可能性があります。 - - ![GitHub Codespaces で開始](../../../docs/images/setup-01.png) +1. このリンクをクリックしてください 👉 [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) 1. GitHub Codespaceインスタンスの準備ができたら、ターミナルを開いて以下のコマンドを実行し、必要なものがすべて適切にインストールされているかどうかを確認します。 diff --git a/localisation/ko-kr/README.md b/localisation/ko-kr/README.md index 99dd0bc..07ee889 100644 --- a/localisation/ko-kr/README.md +++ b/localisation/ko-kr/README.md @@ -24,7 +24,11 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto ## 전제 조건 -이 워크샵에서는 웹 브라우저 외에 별도의 준비가 필요 없기 때문에 [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces)를 적극 권장합니다. 하지만 정말로 본인의 머신을 사용해야 한다면, 아래에서 확인된 모든 것들을 설치했는지 확인하세요. +이 워크샵에서는 웹 브라우저 외에 별도의 준비가 필요 없기 때문에 [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces)를 적극 권장합니다. + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) + +하지만 정말로 본인의 머신을 사용해야 한다면, 아래에서 확인된 모든 것들을 설치했는지 확인하세요. ### 공통 diff --git a/localisation/ko-kr/docs/00-setup.md b/localisation/ko-kr/docs/00-setup.md index 6e33a32..65303d1 100644 --- a/localisation/ko-kr/docs/00-setup.md +++ b/localisation/ko-kr/docs/00-setup.md @@ -23,9 +23,7 @@ ## GitHub Codespaces 사용 -1. 아래 이미지를 보고 다음 순서로 클릭하여 따라하세요: ![the "code" button image](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![the "codespaces" button image](https://img.shields.io/badge/Codespaces-white) 👉 ![the "create codespace on main" button image](https://img.shields.io/badge/Create_codespace_on_main-green)을 클릭하여 새로운 GitHub Codespace 인스턴스를 생성하세요. 네트워크 상태에 따라 5-10분 정도 걸릴 수 있습니다. - - ![Starting with GitHub Codespaces](../../../docs/images/setup-01.png) +1. 이 링크를 클릭하세요 👉 [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) 1. GitHub Codespace 인스턴스가 준비되면, 터미널을 열고 다음 명령을 실행하여 필요한 모든 것이 제대로 설치되었는지 확인하세요. diff --git a/localisation/pt-br/README.md b/localisation/pt-br/README.md index 37793b3..203567f 100644 --- a/localisation/pt-br/README.md +++ b/localisation/pt-br/README.md @@ -24,7 +24,11 @@ Este material do workshop está atualmente disponível nos seguintes idiomas: ## Pré-requisitos -Durante este workshop, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) é altamente recomendado porque não há necessidade de preparação, exceto um navegador web. No entanto, se você realmente precisar usar sua máquina, certifique-se de ter instalado tudo identificado abaixo. +Durante este workshop, [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) é altamente recomendado porque não há necessidade de preparação, exceto um navegador web. + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) + +No entanto, se você realmente precisar usar sua máquina, certifique-se de ter instalado tudo identificado abaixo. ### Comum diff --git a/localisation/pt-br/docs/00-setup.md b/localisation/pt-br/docs/00-setup.md index 7d08b3c..0f66997 100644 --- a/localisation/pt-br/docs/00-setup.md +++ b/localisation/pt-br/docs/00-setup.md @@ -23,9 +23,7 @@ Consulte a documentação [README](../README.md) para preparação. ## Usar GitHub Codespaces -1. Dê uma olhada na imagem abaixo e siga os passos na ordem de clicar ![a imagem do botão "code"](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![a imagem do botão "codespaces"](https://img.shields.io/badge/Codespaces-white) 👉 ![a imagem do botão "create codespace on main"](https://img.shields.io/badge/Create_codespace_on_main-green) e criar uma nova instância do GitHub Codespace. Pode levar de 5-10 minutos dependendo do status da rede. - - ![Iniciando com GitHub Codespaces](../../../docs/images/setup-01.png) +1. Clique neste link 👉 [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) 1. Uma vez que a instância do GitHub Codespace esteja pronta, abra um terminal e execute o seguinte comando para verificar se tudo que você precisa foi devidamente instalado ou não. diff --git a/localisation/zh-cn/README.md b/localisation/zh-cn/README.md index 7aabbb2..56d8911 100644 --- a/localisation/zh-cn/README.md +++ b/localisation/zh-cn/README.md @@ -24,7 +24,11 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 ## 先决条件 -在此工作坊期间,强烈推荐使用 [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces),因为除了网络浏览器外无需任何准备。但是,如果您确实需要使用自己的机器,请确保您已安装以下所有内容。 +在此工作坊期间,强烈推荐使用 [GitHub Codespaces](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces),因为除了网络浏览器外无需任何准备。 + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) + +但是,如果您确实需要使用自己的机器,请确保您已安装以下所有内容。 ### 通用 diff --git a/localisation/zh-cn/docs/00-setup.md b/localisation/zh-cn/docs/00-setup.md index dd3b91f..01c9976 100644 --- a/localisation/zh-cn/docs/00-setup.md +++ b/localisation/zh-cn/docs/00-setup.md @@ -23,9 +23,7 @@ ## 使用 GitHub Codespaces -1. 查看下图,按照点击顺序跟随以下步骤:![代码按钮图片](https://img.shields.io/badge/%3C%3E_Code-green) 👉 ![codespaces按钮图片](https://img.shields.io/badge/Codespaces-white) 👉 ![在main上创建codespace按钮图片](https://img.shields.io/badge/Create_codespace_on_main-green),创建一个新的 GitHub Codespace 实例。根据网络状态,这可能需要 5-10 分钟。 - - ![开始使用 GitHub Codespaces](../../../docs/images/setup-01.png) +1. 点击此链接 👉 [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/github-copilot-vibe-coding-workshop) 1. GitHub Codespace 实例准备就绪后,打开终端并运行以下命令检查所需的所有内容是否已正确安装。 From 843fb57be3011db4cfa2a1f362679386e2b4578d Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Fri, 13 Jun 2025 09:56:52 +1000 Subject: [PATCH 08/17] Move java instruction doc --- complete/java/{socialapp => }/README.md | 0 localisation/es-es/complete/java/{socialapp => }/README.md | 0 localisation/fr-fr/complete/java/{socialapp => }/README.md | 0 localisation/ja-jp/complete/java/{socialapp => }/README.md | 0 localisation/ko-kr/complete/java/{socialapp => }/README.md | 0 localisation/pt-br/complete/java/{socialapp => }/README.md | 0 localisation/zh-cn/complete/java/{socialapp => }/README.md | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename complete/java/{socialapp => }/README.md (100%) rename localisation/es-es/complete/java/{socialapp => }/README.md (100%) rename localisation/fr-fr/complete/java/{socialapp => }/README.md (100%) rename localisation/ja-jp/complete/java/{socialapp => }/README.md (100%) rename localisation/ko-kr/complete/java/{socialapp => }/README.md (100%) rename localisation/pt-br/complete/java/{socialapp => }/README.md (100%) rename localisation/zh-cn/complete/java/{socialapp => }/README.md (100%) diff --git a/complete/java/socialapp/README.md b/complete/java/README.md similarity index 100% rename from complete/java/socialapp/README.md rename to complete/java/README.md diff --git a/localisation/es-es/complete/java/socialapp/README.md b/localisation/es-es/complete/java/README.md similarity index 100% rename from localisation/es-es/complete/java/socialapp/README.md rename to localisation/es-es/complete/java/README.md diff --git a/localisation/fr-fr/complete/java/socialapp/README.md b/localisation/fr-fr/complete/java/README.md similarity index 100% rename from localisation/fr-fr/complete/java/socialapp/README.md rename to localisation/fr-fr/complete/java/README.md diff --git a/localisation/ja-jp/complete/java/socialapp/README.md b/localisation/ja-jp/complete/java/README.md similarity index 100% rename from localisation/ja-jp/complete/java/socialapp/README.md rename to localisation/ja-jp/complete/java/README.md diff --git a/localisation/ko-kr/complete/java/socialapp/README.md b/localisation/ko-kr/complete/java/README.md similarity index 100% rename from localisation/ko-kr/complete/java/socialapp/README.md rename to localisation/ko-kr/complete/java/README.md diff --git a/localisation/pt-br/complete/java/socialapp/README.md b/localisation/pt-br/complete/java/README.md similarity index 100% rename from localisation/pt-br/complete/java/socialapp/README.md rename to localisation/pt-br/complete/java/README.md diff --git a/localisation/zh-cn/complete/java/socialapp/README.md b/localisation/zh-cn/complete/java/README.md similarity index 100% rename from localisation/zh-cn/complete/java/socialapp/README.md rename to localisation/zh-cn/complete/java/README.md From 9e9678ec292be7bb064d1111e64fc0d7b4e835f3 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Fri, 13 Jun 2025 10:12:52 +1000 Subject: [PATCH 09/17] Fix devcontainer settings (temporary) --- .devcontainer/devcontainer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 06fe5c6..2548246 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,6 +12,7 @@ "ghcr.io/devcontainers/features/java:latest": { "installGradle": true, "installMaven": true, + "mavenVersion": "3.9.10", "version": "21" }, "ghcr.io/devcontainers/features/node:latest": {}, From 4c1d23006892b29b6aa2b253061196013470abb3 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Fri, 13 Jun 2025 04:35:00 +0000 Subject: [PATCH 10/17] Fix .NET sample app --- .../dotnet/Contoso.BlazorApp/Components/Pages/Home.razor | 4 ++-- complete/dotnet/Contoso.BlazorApp/Services/ApiService.cs | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/complete/dotnet/Contoso.BlazorApp/Components/Pages/Home.razor b/complete/dotnet/Contoso.BlazorApp/Components/Pages/Home.razor index e65b08a..04f4fcb 100644 --- a/complete/dotnet/Contoso.BlazorApp/Components/Pages/Home.razor +++ b/complete/dotnet/Contoso.BlazorApp/Components/Pages/Home.razor @@ -68,9 +68,9 @@ } } - private async Task HandleAuthStateChanged() + private void HandleAuthStateChanged() { - await InvokeAsync(async () => + InvokeAsync(async () => { if (!AuthService.AuthState.IsLoading && !AuthService.AuthState.IsAuthenticated) { diff --git a/complete/dotnet/Contoso.BlazorApp/Services/ApiService.cs b/complete/dotnet/Contoso.BlazorApp/Services/ApiService.cs index 00e6d09..10c315f 100644 --- a/complete/dotnet/Contoso.BlazorApp/Services/ApiService.cs +++ b/complete/dotnet/Contoso.BlazorApp/Services/ApiService.cs @@ -46,10 +46,12 @@ private string GetApiBaseUrl(string configuredBaseUrl) _logger.LogInformation("Using GitHub Codespaces URL: {CodespacesUrl}", codespacesUrl); return codespacesUrl; } - + // Fall back to configured base URL (localhost) - _logger.LogInformation("Using configured base URL: {ConfiguredUrl}", configuredBaseUrl); - return configuredBaseUrl; + // Ensure the URL ends with a forward slash for proper relative path resolution + var normalizedUrl = configuredBaseUrl.TrimEnd('/') + "/"; + _logger.LogInformation("Using configured base URL: {ConfiguredUrl}", normalizedUrl); + return normalizedUrl; } private void SetAuthHeaders() From 9374bb9c23f46a61d4097772cbe3333fd1410285 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Sat, 14 Jun 2025 14:29:47 +1000 Subject: [PATCH 11/17] Update containerisation related docs and solutions (#40) --- complete/Dockerfile.dotnet | 3 +- complete/Dockerfile.java | 85 ++++++++++++++++++++++++++----------- complete/compose.yaml | 24 +++++++---- docs/05-containerization.md | 19 ++++++--- 4 files changed, 90 insertions(+), 41 deletions(-) diff --git a/complete/Dockerfile.dotnet b/complete/Dockerfile.dotnet index 460ced0..ecb5eba 100644 --- a/complete/Dockerfile.dotnet +++ b/complete/Dockerfile.dotnet @@ -25,9 +25,10 @@ EXPOSE 8080 # Set the environment variables ENV ASPNETCORE_URLS=http://+:8080 ENV DOTNET_RUNNING_IN_CONTAINER=true +ENV ApiSettings__BaseUrl="${ApiSettings__BaseUrl}" # Copy the published files from the build stage COPY --from=publish /app/publish . # Set the entry point for the container -ENTRYPOINT ["dotnet", "Contoso.BlazorApp.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet", "Contoso.BlazorApp.dll"] diff --git a/complete/Dockerfile.java b/complete/Dockerfile.java index 16d8f8b..06422d9 100644 --- a/complete/Dockerfile.java +++ b/complete/Dockerfile.java @@ -1,55 +1,90 @@ -# Stage 1: Build the application -FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu AS build +# Multi-stage build for Java Spring Boot application +# Stage 1: Build stage with Microsoft OpenJDK 21 +FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu AS builder -WORKDIR /app +# Set working directory for build +WORKDIR /workspace -# Copy gradle files for dependency resolution -COPY java/socialapp/gradle/ ./gradle/ -COPY java/socialapp/gradlew java/socialapp/build.gradle java/socialapp/settings.gradle ./ +# Copy Gradle configuration files +COPY java/socialapp/gradle ./gradle +COPY java/socialapp/gradlew . +COPY java/socialapp/gradlew.bat . +COPY java/socialapp/build.gradle . +COPY java/socialapp/settings.gradle . -# Give executable permissions to gradlew +# Make gradlew executable RUN chmod +x ./gradlew -# Download dependencies to cache this layer +# Download dependencies (for better Docker layer caching) RUN ./gradlew dependencies --no-daemon # Copy source code COPY java/socialapp/src ./src # Build the application -RUN ./gradlew bootJar --no-daemon +RUN ./gradlew build --no-daemon -x test # Stage 2: Extract JRE from JDK -FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu AS jre-build +FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu AS jre-builder -# Create a custom JRE using jlink that only includes modules needed for the application +# Create a custom JRE using jlink RUN jlink \ - --add-modules java.base,java.compiler,java.desktop,java.instrument,java.management,java.naming,java.prefs,java.rmi,java.security.jgss,java.security.sasl,java.sql,jdk.crypto.ec,jdk.unsupported,jdk.zipfs,jdk.management \ + --add-modules java.base,java.desktop,java.instrument,java.management,java.naming,java.net.http,java.security.jgss,java.sql,jdk.unsupported \ --strip-debug \ --no-man-pages \ --no-header-files \ --compress=2 \ - --output /jre-minimal + --output /custom-jre -# Stage 3: Create final image +# Stage 3: Runtime stage with custom JRE FROM ubuntu:22.04 -# Set environment variables -ENV JAVA_HOME=/opt/jre-minimal +# Install required packages and clean up +RUN apt-get update && \ + apt-get install -y \ + ca-certificates \ + sqlite3 \ + curl \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Copy custom JRE from jre-builder stage +COPY --from=jre-builder /custom-jre /opt/java/openjdk + +# Set JAVA_HOME and update PATH +ENV JAVA_HOME=/opt/java/openjdk ENV PATH="${JAVA_HOME}/bin:${PATH}" -# Copy the extracted JRE from the jre-build stage -COPY --from=jre-build /jre-minimal $JAVA_HOME +# Create application user for security +RUN groupadd -r appuser && useradd -r -g appuser appuser -# Copy the built application from the build stage +# Set working directory WORKDIR /app -COPY --from=build /app/build/libs/*.jar app.jar -# Create a directory for persistent data -RUN mkdir -p /app/data +# Copy the built JAR from builder stage +COPY --from=builder /workspace/build/libs/*.jar app.jar + +# Create SQLite database file with proper permissions +RUN touch sns_api.db && \ + chown appuser:appuser sns_api.db && \ + chmod 664 sns_api.db -# Expose the application port +# Change ownership of the app directory +RUN chown -R appuser:appuser /app + +# Switch to non-root user +USER appuser + +# Set environment variables for GitHub Codespaces +ENV CODESPACE_NAME="${CODESPACE_NAME}" +ENV GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN="${GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN}" + +# Expose port 8080 EXPOSE 8080 -# Set the entrypoint command to run the application -ENTRYPOINT ["java", "-jar", "/app/app.jar"] \ No newline at end of file +# Health check +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:8080/actuator/health || exit 1 + +# Run the application +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/complete/compose.yaml b/complete/compose.yaml index 93e8d26..c715390 100644 --- a/complete/compose.yaml +++ b/complete/compose.yaml @@ -1,3 +1,9 @@ +version: '3.8' + +networks: + contoso: + driver: bridge + services: contoso-backend: build: @@ -9,10 +15,14 @@ services: environment: - CODESPACE_NAME=${CODESPACE_NAME} - GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN=${GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN} - volumes: - - ./java/socialapp/sns_api.db:/app/sns_api.db networks: - contoso + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] + interval: 30s + timeout: 3s + start_period: 60s + retries: 3 contoso-frontend: build: @@ -21,13 +31,9 @@ services: container_name: contoso-frontend ports: - "3030:8080" - depends_on: - - contoso-backend environment: - - ApiSettings__BaseUrl=http://contoso-backend:8080/api/ + - ApiSettings__BaseUrl=http://contoso-backend:8080/api networks: - contoso - -networks: - contoso: - name: contoso + depends_on: + - contoso-backend diff --git a/docs/05-containerization.md b/docs/05-containerization.md index a2125a3..83076a2 100644 --- a/docs/05-containerization.md +++ b/docs/05-containerization.md @@ -70,14 +70,16 @@ Refer to the [README](../README.md) doc for preparation. ```text I'd like to build a container image of a Java app. Follow the instructions below. - - The Java app is located at `java`. - - Your working directory is the repository root. - Identify all the steps first, which you're going to do. + - The Java app is located at `java/socialapp`. + - Your working directory is the repository root. - Create a Dockerfile, `Dockerfile.java`. - Use Microsoft OpenJDK 21. - Use multi-stage build approach. - Extract JRE from JDK. - Use the target port number of `8080` for the container image. + - Add both environment variables, `CODESPACE_NAME` and `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` from the host to the container image. + - Create an SQLite database file, `sns_api.db`, in the container image. DO NOT Copy the file from the host. ``` 1. Click the ![the keep button image](https://img.shields.io/badge/keep-blue) button of GitHub Copilot to take the changes. @@ -101,6 +103,7 @@ Refer to the [README](../README.md) doc for preparation. Use the container image just built, run a container and verify if the app is running properly. - Use the host port of `8080`. + - Both `CODESPACE_NAME` and `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` values should be the ones from GitHub Codespaces. ``` ### Containerize .NET Application @@ -111,13 +114,14 @@ Refer to the [README](../README.md) doc for preparation. ```text I'd like to build a container image of a .NET app. Follow the instructions below. + - Identify all the steps first, which you're going to do. - The .NET app is located at `dotnet`. - Your working directory is the repository root. - - Identify all the steps first, which you're going to do. - Create a Dockerfile, `Dockerfile.dotnet`. - Use .NET 9. - Use multi-stage build approach. - Use the target port number of `8080` for the container image. + - Add the environment variable, `ApiSettings__BaseUrl` to the container. It should point to the Java app, `http://localhost:8080/api`. ``` 1. Click the ![the keep button image](https://img.shields.io/badge/keep-blue) button of GitHub Copilot to take the changes. @@ -141,12 +145,13 @@ Refer to the [README](../README.md) doc for preparation. Use the container image just built, run a container and verify if the app is running properly. - Use the host port of `3030`. + - Pass the environment variable `ApiSettings__BaseUrl` the value of `http://localhost:8080/api`. ``` 1. Make sure that both frontend and backend apps are NOT communicating with each other because they don't know each other yet. Run the prompt like below. ```text - Regardless or not, remove both containers currently running. + Remove both Java and .NET containers and their respective container images. ``` ### Orchestrate Containers @@ -157,6 +162,7 @@ Refer to the [README](../README.md) doc for preparation. ```text I'd like to create a Docker Compose file. Follow the instructions below. + - Identify all the steps first, which you're going to do. - Your working directory is the repository root. - Use `Dockerfile.java` as a backend app. - Use `Dockerfile.dotnet` as a frontend app. @@ -164,7 +170,8 @@ Refer to the [README](../README.md) doc for preparation. - Use `contoso` as the network name. - Use `contoso-backend` as the container name of the Java app. Its target port is 8080, and host port is 8080. - Use `contoso-frontend` as the container name of the .NET app. Its target port is 8080, and host port is 3030. - - Mount the volume for the database that the Java app uses, `java/socialapp/sns_api.db`. + - Add both environment variables, `CODESPACE_NAME` and `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` from the host to the Java container. + - Add the environment variable, `ApiSettings__BaseUrl` to the .NET container. It should point to the Java app's `/api`. ``` 1. Click the ![the keep button image](https://img.shields.io/badge/keep-blue) button of GitHub Copilot to take the changes. @@ -172,7 +179,7 @@ Refer to the [README](../README.md) doc for preparation. 1. Once the `compose.yaml` file is created, run it and verify if both apps are running properly. ```text - Now, run the Docker compose file and verify if the apps are running properly. + Run the Docker compose file and verify if all the apps are running properly. ``` 1. Open a web browser and navigate to `http://localhost:3030`, and verify if the apps are up and running properly. From c96d72a32f22be39ddd09ef154ad848d567b5c84 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Jun 2025 14:57:39 +1000 Subject: [PATCH 12/17] Apply updates from containerization.md to all localized documents (#42) * Initial plan for issue * Update es-es, fr-fr, and ja-jp localized containerization docs Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Complete localization updates for ko-kr, pt-br, and zh-cn containerization docs Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> --- .../es-es/docs/05-containerization.md | 19 +++++++++++++------ .../fr-fr/docs/05-containerization.md | 19 +++++++++++++------ .../ja-jp/docs/05-containerization.md | 19 +++++++++++++------ .../ko-kr/docs/05-containerization.md | 19 +++++++++++++------ .../pt-br/docs/05-containerization.md | 19 +++++++++++++------ .../zh-cn/docs/05-containerization.md | 19 +++++++++++++------ 6 files changed, 78 insertions(+), 36 deletions(-) diff --git a/localisation/es-es/docs/05-containerization.md b/localisation/es-es/docs/05-containerization.md index 3ba2d08..c4ddcb2 100644 --- a/localisation/es-es/docs/05-containerization.md +++ b/localisation/es-es/docs/05-containerization.md @@ -70,14 +70,16 @@ Consulta el documento [README](../README.md) para la preparación. ```text Me gustaría construir una imagen de contenedor de una aplicación Java. Sigue las instrucciones a continuación. - - La aplicación Java se encuentra en `java`. - - Tu directorio de trabajo es la raíz del repositorio. - Identifica primero todos los pasos que vas a hacer. + - La aplicación Java se encuentra en `java/socialapp`. + - Tu directorio de trabajo es la raíz del repositorio. - Crea un Dockerfile, `Dockerfile.java`. - Usa Microsoft OpenJDK 21. - Usa el enfoque de construcción multi-etapa. - Extrae JRE del JDK. - Usa el número de puerto objetivo `8080` para la imagen del contenedor. + - Agrega ambas variables de entorno, `CODESPACE_NAME` y `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` del host a la imagen del contenedor. + - Crea un archivo de base de datos SQLite, `sns_api.db`, en la imagen del contenedor. NO copies el archivo del host. ``` 1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. @@ -101,6 +103,7 @@ Consulta el documento [README](../README.md) para la preparación. Usa la imagen del contenedor recién construida, ejecuta un contenedor y verifica si la aplicación se está ejecutando correctamente. - Usa el puerto del host `8080`. + - Ambos valores `CODESPACE_NAME` y `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` deben ser los de GitHub Codespaces. ``` ### Contenedorizar Aplicación .NET @@ -111,13 +114,14 @@ Consulta el documento [README](../README.md) para la preparación. ```text Me gustaría construir una imagen de contenedor de una aplicación .NET. Sigue las instrucciones a continuación. + - Identifica primero todos los pasos que vas a hacer. - La aplicación .NET se encuentra en `dotnet`. - Tu directorio de trabajo es la raíz del repositorio. - - Identifica primero todos los pasos que vas a hacer. - Crea un Dockerfile, `Dockerfile.dotnet`. - Usa .NET 9. - Usa el enfoque de construcción multi-etapa. - Usa el número de puerto objetivo `8080` para la imagen del contenedor. + - Agrega la variable de entorno, `ApiSettings__BaseUrl` al contenedor. Debe apuntar a la aplicación Java, `http://localhost:8080/api`. ``` 1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. @@ -141,12 +145,13 @@ Consulta el documento [README](../README.md) para la preparación. Usa la imagen del contenedor recién construida, ejecuta un contenedor y verifica si la aplicación se está ejecutando correctamente. - Usa el puerto del host `3030`. + - Pasa la variable de entorno `ApiSettings__BaseUrl` el valor de `http://localhost:8080/api`. ``` 1. Asegúrate de que tanto las aplicaciones frontend como backend NO se estén comunicando entre sí porque aún no se conocen. Ejecuta el prompt como el siguiente. ```text - Independientemente o no, remueve ambos contenedores que están ejecutándose actualmente. + Remueve ambos contenedores Java y .NET y sus respectivas imágenes de contenedor. ``` ### Orquestar Contenedores @@ -157,6 +162,7 @@ Consulta el documento [README](../README.md) para la preparación. ```text Me gustaría crear un archivo Docker Compose. Sigue las instrucciones a continuación. + - Identifica primero todos los pasos que vas a hacer. - Tu directorio de trabajo es la raíz del repositorio. - Usa `Dockerfile.java` como aplicación backend. - Usa `Dockerfile.dotnet` como aplicación frontend. @@ -164,7 +170,8 @@ Consulta el documento [README](../README.md) para la preparación. - Usa `contoso` como el nombre de la red. - Usa `contoso-backend` como el nombre del contenedor de la aplicación Java. Su puerto objetivo es 8080, y el puerto del host es 8080. - Usa `contoso-frontend` como el nombre del contenedor de la aplicación .NET. Su puerto objetivo es 8080, y el puerto del host es 3030. - - Monta el volumen para la base de datos que usa la aplicación Java, `java/socialapp/sns_api.db`. + - Agrega ambas variables de entorno, `CODESPACE_NAME` y `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` del host al contenedor Java. + - Agrega la variable de entorno, `ApiSettings__BaseUrl` al contenedor .NET. Debe apuntar al `/api` de la aplicación Java. ``` 1. Haz clic en el botón ![imagen del botón keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot para tomar los cambios. @@ -172,7 +179,7 @@ Consulta el documento [README](../README.md) para la preparación. 1. Una vez que el archivo `compose.yaml` esté creado, ejecútalo y verifica si ambas aplicaciones se están ejecutando correctamente. ```text - Ahora, ejecuta el archivo Docker compose y verifica si las aplicaciones se están ejecutando correctamente. + Ejecuta el archivo Docker compose y verifica si todas las aplicaciones se están ejecutando correctamente. ``` 1. Abre un navegador web y navega a `http://localhost:3030`, y verifica si las aplicaciones están funcionando correctamente. diff --git a/localisation/fr-fr/docs/05-containerization.md b/localisation/fr-fr/docs/05-containerization.md index b8a3a04..f2a21f4 100644 --- a/localisation/fr-fr/docs/05-containerization.md +++ b/localisation/fr-fr/docs/05-containerization.md @@ -70,14 +70,16 @@ Consultez le document [README](../README.md) pour la préparation. ```text J'aimerais construire une image conteneur d'une application Java. Suivez les instructions ci-dessous. - - L'application Java se trouve dans `java`. - - Votre répertoire de travail est la racine du dépôt. - Identifiez d'abord toutes les étapes que vous allez effectuer. + - L'application Java se trouve dans `java/socialapp`. + - Votre répertoire de travail est la racine du dépôt. - Créez un Dockerfile, `Dockerfile.java`. - Utilisez Microsoft OpenJDK 21. - Utilisez l'approche de construction multi-étapes. - Extrayez JRE de JDK. - Utilisez le numéro de port cible `8080` pour l'image conteneur. + - Ajoutez les deux variables d'environnement, `CODESPACE_NAME` et `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` de l'hôte à l'image conteneur. + - Créez un fichier de base de données SQLite, `sns_api.db`, dans l'image conteneur. NE copiez PAS le fichier de l'hôte. ``` 1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. @@ -101,6 +103,7 @@ Consultez le document [README](../README.md) pour la préparation. Utilisez l'image conteneur qui vient d'être construite, exécutez un conteneur et vérifiez si l'application fonctionne correctement. - Utilisez le port hôte `8080`. + - Les deux valeurs `CODESPACE_NAME` et `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` doivent être celles de GitHub Codespaces. ``` ### Conteneuriser l'Application .NET @@ -111,13 +114,14 @@ Consultez le document [README](../README.md) pour la préparation. ```text J'aimerais construire une image conteneur d'une application .NET. Suivez les instructions ci-dessous. + - Identifiez d'abord toutes les étapes que vous allez effectuer. - L'application .NET se trouve dans `dotnet`. - Votre répertoire de travail est la racine du dépôt. - - Identifiez d'abord toutes les étapes que vous allez effectuer. - Créez un Dockerfile, `Dockerfile.dotnet`. - Utilisez .NET 9. - Utilisez l'approche de construction multi-étapes. - Utilisez le numéro de port cible `8080` pour l'image conteneur. + - Ajoutez la variable d'environnement, `ApiSettings__BaseUrl` au conteneur. Elle doit pointer vers l'application Java, `http://localhost:8080/api`. ``` 1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. @@ -141,12 +145,13 @@ Consultez le document [README](../README.md) pour la préparation. Utilisez l'image conteneur qui vient d'être construite, exécutez un conteneur et vérifiez si l'application fonctionne correctement. - Utilisez le port hôte `3030`. + - Passez la variable d'environnement `ApiSettings__BaseUrl` la valeur de `http://localhost:8080/api`. ``` 1. Assurez-vous que les applications frontend et backend ne communiquent PAS entre elles car elles ne se connaissent pas encore. Exécutez l'invite comme ci-dessous. ```text - Peu importe ou non, supprimez les deux conteneurs actuellement en cours d'exécution. + Supprimez les deux conteneurs Java et .NET et leurs images conteneur respectives. ``` ### Orchestrer les Conteneurs @@ -157,6 +162,7 @@ Consultez le document [README](../README.md) pour la préparation. ```text J'aimerais créer un fichier Docker Compose. Suivez les instructions ci-dessous. + - Identifiez d'abord toutes les étapes que vous allez effectuer. - Votre répertoire de travail est la racine du dépôt. - Utilisez `Dockerfile.java` comme application backend. - Utilisez `Dockerfile.dotnet` comme application frontend. @@ -164,7 +170,8 @@ Consultez le document [README](../README.md) pour la préparation. - Utilisez `contoso` comme nom de réseau. - Utilisez `contoso-backend` comme nom de conteneur de l'application Java. Son port cible est 8080, et le port hôte est 8080. - Utilisez `contoso-frontend` comme nom de conteneur de l'application .NET. Son port cible est 8080, et le port hôte est 3030. - - Montez le volume pour la base de données que l'application Java utilise, `java/socialapp/sns_api.db`. + - Ajoutez les deux variables d'environnement, `CODESPACE_NAME` et `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` de l'hôte au conteneur Java. + - Ajoutez la variable d'environnement, `ApiSettings__BaseUrl` au conteneur .NET. Elle doit pointer vers le `/api` de l'application Java. ``` 1. Cliquez sur le bouton ![l'image du bouton keep](https://img.shields.io/badge/keep-blue) de GitHub Copilot pour prendre les modifications. @@ -172,7 +179,7 @@ Consultez le document [README](../README.md) pour la préparation. 1. Une fois le fichier `compose.yaml` créé, exécutez-le et vérifiez si les deux applications fonctionnent correctement. ```text - Maintenant, exécutez le fichier Docker compose et vérifiez si les applications fonctionnent correctement. + Exécutez le fichier Docker compose et vérifiez si toutes les applications fonctionnent correctement. ``` 1. Ouvrez un navigateur web et naviguez vers `http://localhost:3030`, et vérifiez si les applications sont en marche et fonctionnent correctement. diff --git a/localisation/ja-jp/docs/05-containerization.md b/localisation/ja-jp/docs/05-containerization.md index 260ec9b..139a3c4 100644 --- a/localisation/ja-jp/docs/05-containerization.md +++ b/localisation/ja-jp/docs/05-containerization.md @@ -70,14 +70,16 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 ```text Javaアプリのコンテナイメージを構築したいと思います。以下の指示に従ってください。 - - Javaアプリは `java` にあります。 - - 作業ディレクトリはリポジトリルートです。 - まず実行するすべてのステップを特定してください。 + - Javaアプリは `java/socialapp` にあります。 + - 作業ディレクトリはリポジトリルートです。 - Dockerfile `Dockerfile.java` を作成してください。 - Microsoft OpenJDK 21を使用してください。 - マルチステージビルドアプローチを使用してください。 - JDKからJREを抽出してください。 - コンテナイメージのターゲットポート番号として `8080` を使用してください。 + - ホストからコンテナイメージに環境変数 `CODESPACE_NAME` と `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` の両方を追加してください。 + - コンテナイメージにSQLiteデータベースファイル `sns_api.db` を作成してください。ホストからファイルをコピーしないでください。 ``` 1. GitHub Copilot の ![keepボタンの画像](https://img.shields.io/badge/keep-blue) ボタンをクリックして変更を適用します。 @@ -101,6 +103,7 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 構築したばかりのコンテナイメージを使用して、コンテナを実行し、アプリが適切に実行されているかどうかを確認してください。 - ホストポートとして `8080` を使用してください。 + - `CODESPACE_NAME` と `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` の両方の値は GitHub Codespaces のものである必要があります。 ``` ### .NET アプリケーションをコンテナ化 @@ -111,13 +114,14 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 ```text .NETアプリのコンテナイメージを構築したいと思います。以下の指示に従ってください。 + - まず実行するすべてのステップを特定してください。 - .NETアプリは `dotnet` にあります。 - 作業ディレクトリはリポジトリルートです。 - - まず実行するすべてのステップを特定してください。 - Dockerfile `Dockerfile.dotnet` を作成してください。 - .NET 9を使用してください。 - マルチステージビルドアプローチを使用してください。 - コンテナイメージのターゲットポート番号として `8080` を使用してください。 + - コンテナに環境変数 `ApiSettings__BaseUrl` を追加してください。これはJavaアプリの `http://localhost:8080/api` を指すようにしてください。 ``` 1. GitHub Copilot の ![keepボタンの画像](https://img.shields.io/badge/keep-blue) ボタンをクリックして変更を適用します。 @@ -141,12 +145,13 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 構築したばかりのコンテナイメージを使用して、コンテナを実行し、アプリが適切に実行されているかどうかを確認してください。 - ホストポートとして `3030` を使用してください。 + - 環境変数 `ApiSettings__BaseUrl` に `http://localhost:8080/api` の値を渡してください。 ``` 1. フロントエンドとバックエンドの両方のアプリが、まだ互いを知らないため通信していないことを確認します。以下のようなプロンプトを実行します。 ```text - いずれにせよ、現在実行中の両方のコンテナを削除してください。 + JavaとNETの両方のコンテナとそれぞれのコンテナイメージを削除してください。 ``` ### コンテナをオーケストレート @@ -157,6 +162,7 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 ```text Docker Composeファイルを作成したいと思います。以下の指示に従ってください。 + - まず実行するすべてのステップを特定してください。 - 作業ディレクトリはリポジトリルートです。 - バックエンドアプリとして `Dockerfile.java` を使用してください。 - フロントエンドアプリとして `Dockerfile.dotnet` を使用してください。 @@ -164,7 +170,8 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 - ネットワーク名として `contoso` を使用してください。 - Javaアプリのコンテナ名として `contoso-backend` を使用してください。ターゲットポートは8080、ホストポートは8080です。 - .NETアプリのコンテナ名として `contoso-frontend` を使用してください。ターゲットポートは8080、ホストポートは3030です。 - - Javaアプリが使用するデータベース `java/socialapp/sns_api.db` のボリュームをマウントしてください。 + - ホストからJavaコンテナに環境変数 `CODESPACE_NAME` と `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` の両方を追加してください。 + - .NETコンテナに環境変数 `ApiSettings__BaseUrl` を追加してください。これはJavaアプリの `/api` を指すようにしてください。 ``` 1. GitHub Copilot の ![keepボタンの画像](https://img.shields.io/badge/keep-blue) ボタンをクリックして変更を適用します。 @@ -172,7 +179,7 @@ DevOpsエンジニアとして、両方のアプリをコンテナ化する必 1. `compose.yaml` ファイルが作成されたら、それを実行して両方のアプリが適切に実行されているかどうかを確認します。 ```text - Docker composeファイルを実行して、アプリが適切に実行されているかどうかを確認してください。 + Docker composeファイルを実行して、すべてのアプリが適切に実行されているかどうかを確認してください。 ``` 1. ウェブブラウザを開いて `http://localhost:3030` に移動し、アプリが適切に起動して実行されているかどうかを確認します。 diff --git a/localisation/ko-kr/docs/05-containerization.md b/localisation/ko-kr/docs/05-containerization.md index 14960d3..cd34b9e 100644 --- a/localisation/ko-kr/docs/05-containerization.md +++ b/localisation/ko-kr/docs/05-containerization.md @@ -70,14 +70,16 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto ```text Java 앱의 컨테이너 이미지를 빌드하고 싶습니다. 아래 지침을 따르세요. - - Java 앱은 `java`에 위치합니다. - - 작업 디렉토리는 저장소 루트입니다. - 먼저 수행할 모든 단계를 식별하세요. + - Java 앱은 `java/socialapp`에 위치합니다. + - 작업 디렉토리는 저장소 루트입니다. - `Dockerfile.java` Dockerfile을 생성하세요. - Microsoft OpenJDK 21을 사용하세요. - 멀티 스테이지 빌드 방식을 사용하세요. - JDK에서 JRE를 추출하세요. - 컨테이너 이미지의 대상 포트 번호로 `8080`을 사용하세요. + - 호스트에서 컨테이너 이미지로 환경 변수 `CODESPACE_NAME`과 `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` 모두를 추가하세요. + - 컨테이너 이미지에 SQLite 데이터베이스 파일 `sns_api.db`를 생성하세요. 호스트에서 파일을 복사하지 마세요. ``` 1. GitHub Copilot의 ![the keep button image](https://img.shields.io/badge/keep-blue) 버튼을 클릭하여 변경사항을 적용하세요. @@ -101,6 +103,7 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto 방금 빌드한 컨테이너 이미지를 사용하여 컨테이너를 실행하고 앱이 제대로 실행되는지 확인하세요. - 호스트 포트로 `8080`을 사용하세요. + - `CODESPACE_NAME`과 `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` 값 모두 GitHub Codespaces의 값이어야 합니다. ``` ### .NET 애플리케이션 컨테이너화 @@ -111,13 +114,14 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto ```text .NET 앱의 컨테이너 이미지를 빌드하고 싶습니다. 아래 지침을 따르세요. + - 먼저 수행할 모든 단계를 식별하세요. - .NET 앱은 `dotnet`에 위치합니다. - 작업 디렉토리는 저장소 루트입니다. - - 먼저 수행할 모든 단계를 식별하세요. - `Dockerfile.dotnet` Dockerfile을 생성하세요. - .NET 9를 사용하세요. - 멀티 스테이지 빌드 방식을 사용하세요. - 컨테이너 이미지의 대상 포트 번호로 `8080`을 사용하세요. + - 컨테이너에 환경 변수 `ApiSettings__BaseUrl`을 추가하세요. 이는 Java 앱 `http://localhost:8080/api`를 가리켜야 합니다. ``` 1. GitHub Copilot의 ![the keep button image](https://img.shields.io/badge/keep-blue) 버튼을 클릭하여 변경사항을 적용하세요. @@ -141,12 +145,13 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto 방금 빌드한 컨테이너 이미지를 사용하여 컨테이너를 실행하고 앱이 제대로 실행되는지 확인하세요. - 호스트 포트로 `3030`을 사용하세요. + - 환경 변수 `ApiSettings__BaseUrl`에 `http://localhost:8080/api` 값을 전달하세요. ``` 1. 프론트엔드와 백엔드 앱이 서로를 알지 못하므로 아직 통신하지 않는지 확인하세요. 아래와 같은 프롬프트를 실행하세요. ```text - 상관없이 현재 실행 중인 두 컨테이너를 모두 제거하세요. + Java와 .NET 컨테이너 모두와 각각의 컨테이너 이미지를 제거하세요. ``` ### 컨테이너 오케스트레이션 @@ -157,6 +162,7 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto ```text Docker Compose 파일을 생성하고 싶습니다. 아래 지침을 따르세요. + - 먼저 수행할 모든 단계를 식별하세요. - 작업 디렉토리는 저장소 루트입니다. - 백엔드 앱으로 `Dockerfile.java`를 사용하세요. - 프론트엔드 앱으로 `Dockerfile.dotnet`을 사용하세요. @@ -164,7 +170,8 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto - 네트워크 이름으로 `contoso`를 사용하세요. - Java 앱의 컨테이너 이름으로 `contoso-backend`를 사용하세요. 대상 포트는 8080이고 호스트 포트는 8080입니다. - .NET 앱의 컨테이너 이름으로 `contoso-frontend`를 사용하세요. 대상 포트는 8080이고 호스트 포트는 3030입니다. - - Java 앱이 사용하는 데이터베이스 `java/socialapp/sns_api.db`의 볼륨을 마운트하세요. + - 호스트에서 Java 컨테이너로 환경 변수 `CODESPACE_NAME`과 `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` 모두를 추가하세요. + - .NET 컨테이너에 환경 변수 `ApiSettings__BaseUrl`을 추가하세요. 이는 Java 앱의 `/api`를 가리켜야 합니다. ``` 1. GitHub Copilot의 ![the keep button image](https://img.shields.io/badge/keep-blue) 버튼을 클릭하여 변경사항을 적용하세요. @@ -172,7 +179,7 @@ Contoso는 다양한 야외 활동 제품을 판매하는 회사입니다. Conto 1. `compose.yaml` 파일이 생성되면, 실행하고 두 앱이 모두 제대로 실행되는지 확인하세요. ```text - 이제 Docker compose 파일을 실행하고 앱들이 제대로 실행되는지 확인하세요. + Docker compose 파일을 실행하고 모든 앱들이 제대로 실행되는지 확인하세요. ``` 1. 웹 브라우저를 열고 `http://localhost:3030`으로 이동하여, 앱이 제대로 실행되고 있는지 확인하세요. diff --git a/localisation/pt-br/docs/05-containerization.md b/localisation/pt-br/docs/05-containerization.md index dca32ef..d3747b7 100644 --- a/localisation/pt-br/docs/05-containerization.md +++ b/localisation/pt-br/docs/05-containerization.md @@ -70,14 +70,16 @@ Consulte a documentação [README](../README.md) para preparação. ```text Gostaria de construir uma imagem de contêiner de uma aplicação Java. Siga as instruções abaixo. - - A aplicação Java está localizada em `java`. - - Seu diretório de trabalho é a raiz do repositório. - Identifique todos os passos primeiro, que você vai fazer. + - A aplicação Java está localizada em `java/socialapp`. + - Seu diretório de trabalho é a raiz do repositório. - Crie um Dockerfile, `Dockerfile.java`. - Use Microsoft OpenJDK 21. - Use abordagem de construção multi-estágio. - Extraia JRE do JDK. - Use o número da porta de destino `8080` para a imagem do contêiner. + - Adicione ambas as variáveis de ambiente, `CODESPACE_NAME` e `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` do host para a imagem do contêiner. + - Crie um arquivo de banco de dados SQLite, `sns_api.db`, na imagem do contêiner. NÃO copie o arquivo do host. ``` 1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. @@ -101,6 +103,7 @@ Consulte a documentação [README](../README.md) para preparação. Use a imagem do contêiner recém-construída, execute um contêiner e verifique se a aplicação está funcionando adequadamente. - Use a porta do host `8080`. + - Ambos os valores `CODESPACE_NAME` e `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` devem ser aqueles do GitHub Codespaces. ``` ### Containerizar Aplicação .NET @@ -111,13 +114,14 @@ Consulte a documentação [README](../README.md) para preparação. ```text Gostaria de construir uma imagem de contêiner de uma aplicação .NET. Siga as instruções abaixo. + - Identifique todos os passos primeiro, que você vai fazer. - A aplicação .NET está localizada em `dotnet`. - Seu diretório de trabalho é a raiz do repositório. - - Identifique todos os passos primeiro, que você vai fazer. - Crie um Dockerfile, `Dockerfile.dotnet`. - Use .NET 9. - Use abordagem de construção multi-estágio. - Use o número da porta de destino `8080` para a imagem do contêiner. + - Adicione a variável de ambiente, `ApiSettings__BaseUrl` ao contêiner. Deve apontar para a aplicação Java, `http://localhost:8080/api`. ``` 1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. @@ -141,12 +145,13 @@ Consulte a documentação [README](../README.md) para preparação. Use a imagem do contêiner recém-construída, execute um contêiner e verifique se a aplicação está funcionando adequadamente. - Use a porta do host `3030`. + - Passe a variável de ambiente `ApiSettings__BaseUrl` o valor de `http://localhost:8080/api`. ``` 1. Certifique-se de que ambas as aplicações frontend e backend NÃO estão se comunicando uma com a outra porque elas ainda não se conhecem. Execute o prompt como abaixo. ```text - Independentemente ou não, remova ambos os contêineres atualmente em execução. + Remova ambos os contêineres Java e .NET e suas respectivas imagens de contêiner. ``` ### Orquestrar Contêineres @@ -157,6 +162,7 @@ Consulte a documentação [README](../README.md) para preparação. ```text Gostaria de criar um arquivo Docker Compose. Siga as instruções abaixo. + - Identifique todos os passos primeiro, que você vai fazer. - Seu diretório de trabalho é a raiz do repositório. - Use `Dockerfile.java` como aplicação backend. - Use `Dockerfile.dotnet` como aplicação frontend. @@ -164,7 +170,8 @@ Consulte a documentação [README](../README.md) para preparação. - Use `contoso` como nome da rede. - Use `contoso-backend` como nome do contêiner da aplicação Java. Sua porta de destino é 8080, e porta do host é 8080. - Use `contoso-frontend` como nome do contêiner da aplicação .NET. Sua porta de destino é 8080, e porta do host é 3030. - - Monte o volume para o banco de dados que a aplicação Java usa, `java/socialapp/sns_api.db`. + - Adicione ambas as variáveis de ambiente, `CODESPACE_NAME` e `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` do host para o contêiner Java. + - Adicione a variável de ambiente, `ApiSettings__BaseUrl` ao contêiner .NET. Deve apontar para o `/api` da aplicação Java. ``` 1. Clique no botão ![a imagem do botão keep](https://img.shields.io/badge/keep-blue) do GitHub Copilot para aceitar as mudanças. @@ -172,7 +179,7 @@ Consulte a documentação [README](../README.md) para preparação. 1. Uma vez que o arquivo `compose.yaml` seja criado, execute-o e verifique se ambas as aplicações estão funcionando adequadamente. ```text - Agora, execute o arquivo Docker compose e verifique se as aplicações estão funcionando adequadamente. + Execute o arquivo Docker compose e verifique se todas as aplicações estão funcionando adequadamente. ``` 1. Abra um navegador web e navegue para `http://localhost:3030`, e verifique se as aplicações estão funcionando adequadamente. diff --git a/localisation/zh-cn/docs/05-containerization.md b/localisation/zh-cn/docs/05-containerization.md index 9b7fb14..8b94c93 100644 --- a/localisation/zh-cn/docs/05-containerization.md +++ b/localisation/zh-cn/docs/05-containerization.md @@ -70,14 +70,16 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 ```text 我想为 Java 应用构建容器镜像。请按照以下说明操作。 - - Java 应用位于 `java`。 - - 您的工作目录是存储库根目录。 - 首先确定您要执行的所有步骤。 + - Java 应用位于 `java/socialapp`。 + - 您的工作目录是存储库根目录。 - 创建一个 Dockerfile,`Dockerfile.java`。 - 使用 Microsoft OpenJDK 21。 - 使用多阶段构建方法。 - 从 JDK 提取 JRE。 - 为容器镜像使用目标端口号 `8080`。 + - 从主机向容器镜像添加环境变量 `CODESPACE_NAME` 和 `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN`。 + - 在容器镜像中创建 SQLite 数据库文件 `sns_api.db`。不要从主机复制文件。 ``` 1. 点击 GitHub Copilot 的 ![保留按钮图片](https://img.shields.io/badge/keep-blue) 按钮接受更改。 @@ -101,6 +103,7 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 使用刚刚构建的容器镜像,运行容器并验证应用是否正常运行。 - 使用主机端口 `8080`。 + - `CODESPACE_NAME` 和 `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN` 的值都应该是来自 GitHub Codespaces 的值。 ``` ### 容器化 .NET 应用程序 @@ -111,13 +114,14 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 ```text 我想为 .NET 应用构建容器镜像。请按照以下说明操作。 + - 首先确定您要执行的所有步骤。 - .NET 应用位于 `dotnet`。 - 您的工作目录是存储库根目录。 - - 首先确定您要执行的所有步骤。 - 创建一个 Dockerfile,`Dockerfile.dotnet`。 - 使用 .NET 9。 - 使用多阶段构建方法。 - 为容器镜像使用目标端口号 `8080`。 + - 向容器添加环境变量 `ApiSettings__BaseUrl`。它应该指向 Java 应用程序 `http://localhost:8080/api`。 ``` 1. 点击 GitHub Copilot 的 ![保留按钮图片](https://img.shields.io/badge/keep-blue) 按钮接受更改。 @@ -141,12 +145,13 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 使用刚刚构建的容器镜像,运行容器并验证应用是否正常运行。 - 使用主机端口 `3030`。 + - 传递环境变量 `ApiSettings__BaseUrl` 值 `http://localhost:8080/api`。 ``` 1. 确保前端和后端应用暂时无法相互通信,因为它们还不知道彼此。运行如下提示。 ```text - 无论如何,删除当前运行的两个容器。 + 删除 Java 和 .NET 容器以及它们各自的容器镜像。 ``` ### 编排容器 @@ -157,6 +162,7 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 ```text 我想创建一个 Docker Compose 文件。请按照以下说明操作。 + - 首先确定您要执行的所有步骤。 - 您的工作目录是存储库根目录。 - 使用 `Dockerfile.java` 作为后端应用。 - 使用 `Dockerfile.dotnet` 作为前端应用。 @@ -164,7 +170,8 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 - 使用 `contoso` 作为网络名称。 - 使用 `contoso-backend` 作为 Java 应用的容器名称。其目标端口是 8080,主机端口是 8080。 - 使用 `contoso-frontend` 作为 .NET 应用的容器名称。其目标端口是 8080,主机端口是 3030。 - - 为 Java 应用使用的数据库挂载卷,`java/socialapp/sns_api.db`。 + - 从主机向 Java 容器添加环境变量 `CODESPACE_NAME` 和 `GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN`。 + - 向 .NET 容器添加环境变量 `ApiSettings__BaseUrl`。它应该指向 Java 应用的 `/api`。 ``` 1. 点击 GitHub Copilot 的 ![保留按钮图片](https://img.shields.io/badge/keep-blue) 按钮接受更改。 @@ -172,7 +179,7 @@ Contoso 是一家销售各种户外活动产品的公司。Contoso 的市场部 1. 创建 `compose.yaml` 文件后,运行它并验证两个应用是否正常运行。 ```text - 现在,运行 Docker compose 文件并验证应用是否正常运行。 + 运行 Docker compose 文件并验证所有应用是否正常运行。 ``` 1. 打开 Web 浏览器并导航到 `http://localhost:3030`,验证应用是否正常运行。 From 1c4c8028057ac381b0c3274be1d62c5cc83f3ee8 Mon Sep 17 00:00:00 2001 From: Martin Woodward Date: Wed, 25 Jun 2025 23:54:10 +0100 Subject: [PATCH 13/17] Replace header graphic (#44) --- README.md | 2 +- images/banner.png | Bin 0 -> 455616 bytes images/ghcp.jpg | Bin 264478 -> 0 bytes localisation/es-es/README.md | 2 +- localisation/fr-fr/README.md | 2 +- localisation/ja-jp/README.md | 2 +- localisation/ko-kr/README.md | 2 +- localisation/pt-br/README.md | 2 +- localisation/zh-cn/README.md | 2 +- 9 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 images/banner.png delete mode 100644 images/ghcp.jpg diff --git a/README.md b/README.md index 77ad6fe..bec39ce 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # GitHub Copilot Vibe Coding Workshop -![GitHub Copilot - Ghiblifiled](./images/ghcp.jpg) +![GitHub Copilot Vibe Coding Workshop](./images/banner.png) Let's vibe-code with [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) and its newest and greatest features in various programming languages such as Python, JavaScript, Java and .NET, as well as make the apps cloud-native by containerization. Are you ready to jump in? diff --git a/images/banner.png b/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..007441badf932915207586a8030d5b3d0452a9ae GIT binary patch literal 455616 zcmYIvV{j!vvvzD7C$??dwrwXT&c?QF+umejCnwt28(X_^vfsX6z4zXkntHmYy8GAE zpr7d&Rb?4u1OfywFfe2}SxI#;Fi27`Fz{hGh<`KL;QU4Z0Ng`eMjWgW1UUbvgj?y# zSt}`l(f^a-z@Wh~z##u)@~?w|6M#Yge;Eu+9-Q!hWp!}c|JwYE8D$3s^TS*FT^fr*02 zNs4Lufamw?wNY(&5@(L^c^94z`l&3 ze!=@a#*qL5UDweQn=PYgBj^+WP|@UYrHctAiwT9by>-2{H-hscd^F2@&kY^kCp}uE zbf}-c~mytZ&*pPC>x43K8XB+LeJL+se(cHEC00UwA~ zdN3lEhdMbFMf=Aa(*D;f)2qU>lZb9|bg{vynMV-RIO5AQtu43@H7qnS8Q3W`az+wp z$7%vlU$4&ok5N_*0!ppPU{;%{KL`_U;L$@Kl`0sxE@z~jtth-x>t&$vwp~?%39s(X zIO&(x?KYT|Gh;`RW~o~Ih88fh}s>Vul!EEK)Uqmx~S@H&!{q_iZT?6 zAAGr~f{);!e6}7$U$zud*%W>!`hi#r?etoP7+)$P>YP@o{@lrMLGB6|o-uj1H_ow6?I;1*1VJ`nW>7`x4yR^^M3;1(lz7!-;-Ysn6wc z^A$V;*-r;Q8@b@UDX{R}4|;2H^(+f;uHBCV?}tn>-wEkl>aF3)+>f;#PM9DU38gdq z-3_Z~m%fI6BM#&k`_tKR=DUD2m*O>uVLQ+rq^xo?o&(i?{E?Zu7q%Q(wPN;*(B!4Q zBoAwsq8_*tIAjT=QF#O)H!B{&d4zf1`@-kIE9hZx#LceEJ*UddHjD z^pOr}RF&sepDf9NJ9f1H%iH9Wq!JeQksXuq<_Bj!1D6^0s}rHN0Ud_Y zs;SogKm8ySKb?AxW5(%)pjFj<4w%fbHtWY}k;#dh2W{NCk)>X7UKs2_*%sR_oxjcN zLGx0Bk0*A6v-0h#VJTL{oG_1Lds9(GWx0IjW>|mDq?~R3_JcNyGKscBvT4EtzafqH z$?+?zHaP~TRVIXt4|}(^WYHay^N%8!pHflt;h%jrl9niOAGJupp(4hGOr&TE83oyf1Q!pUK+_oFjrU7 zDun7$IBBOJaiVnMr(IyB;XvlYB{-V0k-Up%wwSc`{KAq*n@}RFmhqoVN*{X76{}~Ws90qc zs=(5uE{BzWbJm)giQ*<(^l+r-Aod(;f&w3%|0`ZBFg$Zl0;h z(~6}1(U#6w*q$XfZ3PB!_kRGEQ99E~!z{pXr{F%98*!+-YgqWee&LlJdFoG%JWuZ= zSf0plUX}2&0gzkktxl$83x^&XgKI3o+V53E0?AP*R?IM*kcLjF* z*n#I`^@|eozT^vF%+YXi9v{JEU#_UdfqE!UN{q}u+?u<90qr1v%l;Nw%9Ei26t_~! z^ZVCb*t(z}yidPm_kdYUl=?7sgreHkm4?5ck#_n&{=nwl66ZU^rlqf0Bj8XGz3Sx> zK$42qJl>s%E)u&q?yqly_EgAy?~x!|U*# z{5$o?dW?b;>Ne(#a&WM#Z|APwyRq*F{yU%#syb6Jh`Awq5w0h%D>UXt4M7CHwXh}N zqQmha18N`xQ@~}eP*Z6F-+A2pr}8Fr;LgogDeng@lfEFd;9+tfsiMreLPyPPZK=9+ zITaliuGkWih|Am3P~PiHo!wr&=>{P;Y4{m)3d&#lfFu}VrPi$AMAP?TUVqiX-4R*_ zSb00Tw=3Fo>ip~26$m~fm0C)<7N`Kk9%#aV$drAq0-j0f+yu*4$4sNC2L(IsOlmxV zbPehqA_$2r&w*m}1c8!%bQtl-Y)x3v5lzg|q$+K7;;i#RKeY?x391 zh>WKNeNC2jbj3wer)OFYy_`q;XvI1uDNh#nfQghnPtS$fR4#Zx$KgIsJZq3**6{XR zqgc+!%@gzNt&y|UvP|CmIsu(6I6+nL8c(%J*OqECF%wJekEM`9T(AI!4Bd zQ)~ZfToH&_4lnFh3(32E!Y^6<{SEB zuY6=u$HrPnW?W9#zC5hqwDGx8xAu>2Jzr=<_3c5FLtqGfG0Mqst>!Q`_y@L1WjRdS z@~4edG_X@sC09A@;y27JQBoGBqiA%M_UbMX*4em;fa}Jr=b%g!q^glLxkU6*<{-tq z>7S<}SiYkLy)LBR?maV4SLxsFw>2M1u{?wpdMnpE&=sH4G;_P2)}BPZwFSLd&kxcz z{&A0!Zf*ktzx3JEi~}Y)9||4fOfK8!y`G3OKeU=8d5p>qh#P`O%AmpQGHgUl-VV=8 z7}CNJdyrvz;^E08SCO$d??OGdCUct@zs5I*$_mP`^Ap55kD`@J{YUK5hzf6ZO#p$hBl-sWlw}76uSk^uLPwd z&$d0I#cRVgR&%V|n*X{V)A#@LcgTa^o;P{$vV9}^M#E_8OeTDXw9h8n`W1A(ox7~^Y90Trasp4o1$|Iu8q{SD;?@rn5%KA^NZw+dD$f!xw-bajW zLGm*+e1dkrkL~))!SYxaK>QrC7MBi9{LXu~#4{i)OTZ|l6oYpb&bf3V%MD~8?9Y2D zr9ohBLP_S~sgU)-V5HgYXyz*t397wfZwu_aH{=xpB*{!STk7I_drxKGdJD6Gw z7M%xW-{XTOF-otq>d~eauyTt&4esO7!1=NtNcP6*Qa>mV(}#OJnnXO*&B!*W zgxHMmq>EN#EpS;v_|BVJh384>NKAiGSly$lpq$-XfIfcUxshB}$8|t!XP!u5fIa|% zaUYc-gYVUoLi}v_Q`(<~ zC1ZQBnp`~Y5lYZU>VpC`6YOl;W+7B-SqY5}=kKftO+ygXG2T|9u(2<`1kjWLPtvRo zmSKgnf5ZVC>rq8hZV~Zh12ZPE-NY~i-LhNaN0i^|j>jPdPZSos57H_OjiF^@VRZ#+ zt)c{Ty(g_wP~s~ey_ZsQ+P`JC-)oc)LWV_~%R`iTiav}|l?brP`ci2)Gf%Uk*W5jQ z)Ej+IHQHe`UXP1-WkLC!=;Rc% zbdjH(#I-!z|IXB;#eRc_u^<`L^I)Tw$x_UbZ1z$Aq+vk3AVdL_iGXlnvwND(aB(JS zasmjBABqh7cro(C+sC2Bmn3=m1-=}lkuWLl5))DhuJy$jnme2KXM zO&%L(BU?pX(~(eNs8b`X@`0u$zQ?yz{g}2qrai?=q0$SFoJXx;GHTZ=L22z?y3}g0 z+2vMi`Z-b*1gWkMJa3ORO-CLk6Q5hkD8`txlN=pz!zRRIL!VEZL9+ASuAcD6ViwpR zCQ2imxypYHEe?3t00k1F7ZBWXq{DeVjfNzx===`&lL}$VZKZE1# zs#6@KB*3x28JKS8VOY2-O;lu@n-%YpqYWtuqis<~;T=zKb@HFYe0>JC-+h;MpNrzH zlS|^JxxscLzZPJ6k9w-wt8840H!=<-2& z7G!hd%k4U;ANZql9X`=;DaqmZ%MHqI%c9W`raj`h8!)7AiVf^Tqc#2H8+5UrPu22* z4+8S)iq)aPCN*b$jVI3A`3qF*sk6)yp|ExBxazY~nUuN+N~vt{In7gfNEt=D8OW!w zMv@MlXQ{sC)J13sfU3EXeHx+Ah!L9G&O~pR%EnV6 zNIZ7)yh`CHeDsXUC_io5=Qz;O`dm(ofPp|!e&IEn#&3b_D!m+>iS#Kla;sL(pytoV z<<*1X$?LE2;tpL7%Urzf(qaL6$L)j}5F(<9Q-{hL3UMbt-qqbkTxhv5spv8u>XCH= z=rt-S(8ulp^l}$}k-6c~L>VPYRPP7VD!sAk(DZTn>nH@oAZ~|SyI@taRc$y<)ZX)A zQYmzJ7Q33(Un2>|Z9gJv@_lFHUCQRuAKpfNB9U8NNz{xHh4uRx`!&A9>^F|07r{0u zj-Pe2WCU&2tN5kwKAMhy%iBH=%ROq*;T(oaGU=zz!lGkQb>nYPEHS+a&(;rMNt97@ zGJT(k04$cY{J|&)f`+bT5PDF~Vm&vP2!R>)hO{_3)QTO>!I|{x>|14POx9zK zPFmj@Y-4Ed$S7orL`?Ka{MzBfF-V0ibny0p#{LiG z7iklO=g3>rXtrzoW3YIE{R+s}eKfOjhVRB+jDS9?5V4Nd4y{6AMipTu0ay&=hKRsk z`8zQ+gbiyoOp5FE!lB;g*TiNJCEWX%UK&T;!(u&K8W(eg((k%Rj9KCl2a$Kx1eoVs|pABpX%wuAutnVXzbKW zlB|OR_Xok-UODo*=VFC5nONd7&DEo`E6h<6S`4ykHaX#_qApZX*ymiI%_ zQ4c7n^dmiw1*l8f_U)P@1QqVS1%!%mA%ztXt49{@@Aa{^rJq)&A|(0-(&kjsY$YYG z-Tp~p;(V9!K#|Bi>uXN4m|AMz#ePLGM*5>-l=HqcG_Q&tbL(z-4rQe z2@oLa8Eda5Pt$TzHL{jV9@dxyjibhWqE234)ES=*W#RgUflxA8CCeX&RS^a5w^_?+Z;MX`LvSoky`*w-zxAMl`Ql;s3odu+2Uw-Ouc6JF3xh=!pvxaS>IF9 z!3n3XA!lvk|v8fm7CQ*ALgn~<;6)P&7b7Kr)c`BlP8ttZ51x=d+J zZ(!-jW+*D*dwMbAEF$4BJZWp^uqv#a@gT$vo9JBpu~6W8H(>?`fr^0PnA<`f_#I76 z&QhG=_H$|I=RJ9h)J}$tPfoQE!Gh&jNXw9J__Qcz($aa;;1g{Q0w*~`dFdR|vt|j5 z@{M7l@G5#`lI>vB#pPk>gi|=;OWf?agqq(@*4gyD8o&LguBN*u5w+{RW*xr6T%gF( z@iz1?=KWDIHxAh3$>fIRO-SXLfufKA&ddjz6Uvj?N17X_Yg;L8co}CvO#{)*v!a^U z?JN)idR|%iMw;C4#)G9Glh8wZk5AWFYNh+=O2dj;!h(*Gr=UA zeZ!Eu`Ipje;!`y+;nkE!=+ovZ+^@-?7tpT=2b~}y$%b&qB;wbt6US)ZFeMJpGjLf? z(hCb(Jv4kJFgpx;PIIk<*H>fb@7qCKo0Y#{KL{ihX2&T@n}I_oIH8vx0M4TlnT!+MC6L+=QnuaJfOzTZ4I*)aamb!Qkquv=Y9EfH&f7Uo}v zE@POlQ1I(cYzWpP=~YnejFSPIj-M&fZV6kB+?3&VPTJ+v!^IL3QN3YGns%90vUa2l ziA4(6p9E)1L`na<&$o_D5^M|CERe#`&so2MN{;TvgNfsXW5K7Y? z);|w=MyB*zp2ghm+?Mzb8Rhio{$SaZ9l z5jj5*587ZR5w?+(T_wAvv9G@oE%4FJcf~GO{5m2VZ-g6O-eQIyV#v_E+h8TH#vEc( zL7qC0rRiSlFR22|jF_&tZsN%d&^sA}a?|n+p-K8otU%*PF{JjA(t)AziQ4Y$Q23Tm z*En(1`$Hr*IN8aGHbG~aW)m*}Vn{PZ2=>)HEb2cc4eXTzToRlNiH}tHLS%_h_1$qSc`Z|Mq@ON(xd`bPk#1H)r*fvQ>>V_-qUc zai{NSf3R$IFU0|(7{iM$E{m$9^{foE+XSVk5T<3T&c^8K{&VOl`f6NG$vS4 zYK|b-iCdYM<477XD+ky#`LtEz4dHQ>RrOCMZrpA27EEOWN+bkVGAYV35UX6=T?tg9 zLI0Hn^8Des*(S%J%wKM{FbjPZBX>LGX>_AiA$^5wAGArax$j2Hn(pNMxAd7o_0C zYNw=H?WLg^cSSUp&#dnali*!~| zn!r(8%~VqkZ+f`A+WnkZ+ia4RHiGD;rde^4d9E0KZhoA6zVTQlqus`E@M!C+#r!&T;-yLWeh zUuV*k7ViCAaZDcM5gfUkm+~s{?KfUNSKrbgoKL|FI`u{QV|seA)Dx~8zzQR?(l!A} z?#_BpUr;Mu+zo05EdkG>*Xamml=5ZTaZv)2qH=-}$XBFei_NM&40;EU6uapVq?s>> zq1v~KXC6*n5)A?D@=yxN{ght98}%HsE58TBKd1mLC-#|ne)VU~v7~MXG zaFED^QB2R@txlZ{%m2q-_%os%7Si)#T`i{52~!@M3X=(g==))X`Mb^WkPr}->sWy= z&CUZa)c*JcW~Dg_&Q9D+B5q=iWGCw$w{0qG`2>yMz?T1Em9l;TNfe+_fj?VzTV8cJ z_Vw*|W9n*1V5GjJQ<|S#*l;*llhc15TgEcuMo6c6MpxCS3 zd8YHnCLyJrFXzu}xzMAYN2~)b`d)9$bQ8l*6zk@3H2A;S#f}ugr(k?*tk`~P*=E7M znm!VE2V~ZI=Z3+Gla344H|w!T7;G8AI|B_+eP0gBqU%5DL~+-p<6RTYiAm|o`9q*A zR$nqo*)HMIb?nxT7{cNH)WK<>2KNSZL(Xot%|REbxp_4Jd(J|7j(CF-IDn!jWl{V| zcp7%FYqe#MR4x_BQ08|cj`KicdaUJLD(B8<3P#Lm4DbZ}6=yH}iziDSI>nz(hraxU zl+K488Li(&X#-{4ED;kBFH5qU11J?LXDv!o$L3NYBpeHrXr0=n`o3003Q<7Tkbvc1 zwFupR4=im+sLr6U%%FAIh4RRfEF%(#p$KH+R&(UXA|N28d=fjmV#kP5IpTM*=?a_7 zPB1msiCxpn%~GyF)Kos6@_C=yG3w4K_@KF_58E1KP-^qPmuy@vqn75T%V4%({>UkE` zC!(LqPa13f=rBq^5Nt&ZQD8CanCX6-WFB9zjeULT<=u(^*FQiwXikhSq>g=CN&q_M z`tl9N;r7C6tz!WNGI8e-P}o%T^ni(-!a@SNmxTEjg!$r@`!MM3An(lyg?yBa{m zvFY>s!x5X1D=ri{|GKN7%*6NfS5b?%x&SAp+vgNY6^%3Ds7o_=NxXmjvHWJgG1m z#iYUoY93*qOy;~Uym75`gmrrn4W-zfK;tSu>DHk!$KTT20ob19h2h>MP*x#D!#Hdd z)~X;ZA3>u+W?Y)2nPqH2Ve8HS%j{LiMD!F3$#`*k_fVK5%UV`3-EDZ68eKk!S0k2Si)fT)RSZ*F(XZ}LY7 zvtGENzbd=Ez|aB7b9o=>e2k~(_N$;!T<38V1n}6hi~!3xiJ}X@=v6tj20TVHL>a25 z8I>m=bs{rP2$OG}Tl4xGB?b5SG@BhOJw7p2i~zYZ;BIl_0)U&}*%3#gnU7sO#FSsy z=g`_lwF73#yJ~#onSmhYX;3{R;JJzPivusRGWnOJ@POEEwK^@ne| zqC)d!wBp2IJ7ah@qTh`nf@6mbk~xv1IZhvoZ-k7y;kFok3ldQ#$6!rfvpuile8q1h$av8W)M2nlcO3K(0BwE5BSb~=}lF^rZO zdi~rC>U&n>Z~-A1pF92D)JM`Rt4cO=(a2n6m9>ca?!)HlXX$onYWMCM5vbo5LdruQ z-cXt%Cdd%b`bD;z+sElCa4KJSCTEfQzAeI(NMd?bE2yVFCq`2%qy(l1@gnpS;5-|^ zl=sG-$rU@o7dTNRai<}Q4#}ptAmsN`?>#UEn~^Pb9I0jWtkDXzkKS6Yh*<)+J?2mI z_}XM)&$o6g?n2>cTpNjrRxPnoFKB#I|5wV*HR+dqZY#ZFiy}&iYc^bH>kxC~>%Rog zLk^4EH9WO`Z$P@GtCnmfG>)Q$XF@{}_WLvERQ=NfA~vh7o?Z&iNvc3(m;e~v)7=B` z#a{T2JGU3&&W7&3ED*Yc&GnYC(dI7uXV9Ho&$F6u`=|r6Ka>5GX2Pa49?ipf=(a1{ z%N+gc1_VxE)_#R^pJYyg`A>wpt%HzaX5B^PHAK*4p$`ri-9#IbV#{gr%2e8sV}XX8 z4?<2B|MfShEN3*12*g+I7(jkWzz(thgqH zWnk%L;WKNA<~uD6eKE^_JsoH|&7lrClSsT;tGa1DP>UND?)nY)2l!~`x01jzL^Me1 zj)uf=3&64`Aes)|1}~6TjHrMZ$*QDnWm5&j=8H%{9%V=xt1@z5-t>i})>Dz#%&0&n z-^O{<8$D$m022o-4u1P+jx*EUBjwA&!>8W`FGFffy^x zmIHo9BbhtnfPKUKLH9j!XA&>u8HKP{PZNq%yLZ#j`q!Ce?38gIUaOy?A+ArTsE#r` zF8jBz*KICgOTkU1q$kZHMgr=slX4>RJxWb$J1?(x-|jzPza%KK2(nWvjH9ue&BQ>= zalNo$;Xe{kW-}I+K28!sz?Zk(kFJLpokfYTOL}qnu_bFaFDFSR6p@3{Tp9+S>`_U(?kG=R z-eTA=D^jmrhR$6vYdtI=H9fvuqa$g^ z_Y(P7K2;1dU+ag(qnX#yxb8r?^*MslVba8CLWrT1&WAg61aPw50!bHXD^*-}q>D+i zl{_+1N_%J;e7OB6Siqp|FHvrHqO`%*5-A)ML#Zz&!bk#%W18{&V*hO8=Ga~CsCrO~ zdUd9es9uknuju9zoGTf^*D`xbOnY`LW9h*@*2vO59%a$YTeC7!rLK~zyzs|Cj@FE5 zLb;Qz!QkN-=WUxiUD-(M`ciJucdM2-&)mgj^(Z|1OsN`m9;0UN|@N7{J(99pqnY7D4Lwx!8?4fP#%W9pMAL-2{8u1OP(RwH*#@mK=8 z@|VYJ7R`r<;&jskA_}k?dr^0h*14v_T)U9$1RA>C9-i@*aEDW|D3u$eW%wsFzaha7 zA>q=>Q7=)d;ED0fgdAp@htk0eTH^nm#)E8xg`6~(dNs#s5qfc}6@gSv^a%aNotk+u>F!UN`-?ySL{&umG3%9JJAJfIXsHcpni`52n| zfa`JU-!c>T^)e*KEm5{gbB4*<{^P96&c;&V>E+Y>dH3NMjH**8!= zUbK?~C8y*^Oi# z%^7W|;KXK#;s-8vUM>;0$2*{n(=$5EUtPcn#>d6xB#+YXGybvH>DABDGsD~;32PY3 zg+qHxDmpc`BEg2sWMKBn*}@V}jnaf!ftU^iE#C7sv}SEyhIH%KI1v)>K4!=aA_pA0 zfbYLfsAcsPp0D(UR-jmEP`vMZnyer>0KqAEY~aBgSITH(3fo|82eyYY*^c3H(V1Wk z;Gsu2L~u|^tsu?fjPpBl;diT9UknpIE}9|`9m4d0f5xNP_KC`3-QiDIkOsBkT>kPn zOd)n_Df7j{l`H3R3*pB4b-PO_HkJaR{YjW)hMN^hMCm+vOHZLQw*T|JXs6?)8{wr+ zgq0ra*qNa%Czobtb*@Cc3@K|-f^eeFpZUuEGDDWawP^hVLMLqqfUB<7w&=r@UFZYf z9(jm*spl5eFY^>`2#6moqro@QDfbU`bY3vos4(%MEW{&9%Mg-pefSdmsh0h zobDbWWMvmyjN!1Z7hs|bgo>7nFA-6uSm*Zgb*(& zf7!-Vu!&T&*B2ak!!_}qJh#gIJs~!}IwZF#nJu)USb8^rQek*_7?_QEX(expS`$$) z7>#64X}i(hY$Bg`i1usu)?X2n6WuQIfcjW+$`t&wH*~NgSbzY*M5-a_nI^=NxvwoP z?qhYgF;V6;V92+Cn-dCpT{XA9U>}T(FWRay0zkCNS3*tZTi?7OtOQ!P-Jnh4=Bpgj zxuAtga8*Ksfb>YjQq)S}pOW0NKR1GSQ;QAM5~0?dEl-O(f1w)E)50LgZD~Ot%SY|8 zz>@GQ@QR5j_R>kKNLt9Dy-ra`Zt&kNNSS814>5K-;<2vH0F37Lr5k_GGyI|C(H%bB zE04`|A-=IBb@9t_(5u-<_^tWl%qfr`t?2B)np!o5ng$01LCS&bXr7xbiM?MX@P>@( zaef*o)PK)j@n@M&R5eR)e@Ir?OKcv7V}I%M`sqE$_v;H)UXXe8ibsFkx@5AE_GPgb zg!`Mk^<@2bfk4y8$YP5F9?MS}L{GXQt*|vKkb;eDuGf$w^_OEL=K_D< zSx7$7(rz4_Dj5c*2_NAo0SkZ5?0yeC{c;(&e;vrP84Fj25n$TKoM{zk?_R;ShE6;} z9EjM>Xy-MV=f+Q0w1lQbQo}V6accT2)5ka2!XPh2wisUmZi_ob`!6BsFk^1~TH&() zu9r{7%*R8A6vBdX}G^Hbs-GD#~KgCI;ylAgb2a{bzL$~H=GQW}!lfH|1 zjpHvqm&2~=V*EC1z4h6=?Ni5Vd>{)?KyGzs5|dk4-z;yI?3a9zYBrv>+v51t;h4`L z%eF(<;;7M=h`-`#M+=H8K#ePSo>^9^_rJjv_?1V5Vb5R$w=anp8s(B6#>y^(awB~< zm1I0mZG7~e2j~!QTcilKB?-?BJ*C!fei+WHeOU~6X%_Sw)Ouh1UWyzX&hAQ6MzG(! z7&S=FRLD_(S1%|e$1lx+>PmP?Rr-l!tiWa&f!bomE-Xk!Ex(s>Mv6V>A9Z%pBh`s+ z{qG+`y;QqVrw*U7mMJkqYuRmnGrF2+gPi_v6=8^MYb!zhu;{#~_)$iC7>iWCNmcVj z8Jf|qpN*6fG1P@*=woHJqzjQL_=LX0*_ct$cNJZnL}O9Gu1@2yE3zIFRrPGC;YGuE zt^}iTcz~c`Rt#@id&-y+WRndaj6mCa{n+H!gS2`-oO;qw3fDypUsFjb(M*t_0wg9W z?>U?UnX+7iXVj~7=d&f9FyX{K$2E6gF#d?}v3#BPf| zMJrg88C+hVPIB`cQCgW%1rb!CFL1uX3K&c?!&)Jm*I^6gL2TfsMX#s@pA-9v2;Nec zT!S`Zq?q)0r%*qZ(r^Uj0J=6eGWmfTeyWjQaBe*d_Xp?(wpD-x0l{N7`D;A7>h9BS z4^E~{+WJ1M&?UF%uqwI$0)jN34|@3DHJui7et#{zlpN0V>}sT(N^o}5z=j6i87VPj z{>J={H#?%Q&s(^xuds~n;BjgsEgu?nXXN_#M|eMC!4FPy4QVh@LW@nY(FA}a845=? zMW=$`^0uM0ON>J|>i($NAJu5*pQ8-S7(d*0y+i-%_5D77EOzgR8A+eD4?8#uOqr%GSnV zPj$R+3-WI*kR23SLQ~+|Dpb3e{Dv8=3R?REUwj^YUZ>X|CHgJSPT9j0kC~w%qD_N? zEIo@|ECYXyA54M9cP*w;m?RoU$z%NFiyKNidjHVn@>5$FdCbaBD(GgGn@Qj2qj=0V zec-;Hd8i+tLcCQeN&8sbccbvbwt+T-t{i_%{YccOaoDZ^s>ZpJ%z8jdMf2R?{K%LO z$T4x*-%sFN2~Vay2E$6kBbI0?eLULBlu>!POtXo}kok>O*aJ*pZOU-tB&~mMeVKFo z1^t6GOu0Xc#!7M7DA5h$rDFG{{wtY?F`%+=V5tw!L4Bc;P~Ds42oaD~q6ymh|X2tc_MUzZ)YXNq3KRM2y~uKP#xj zUrdI1L9Q8?8@rziC}3w06Y5 zYRS0`uJo+OY4MN{u`q~E=GKnnFdItLRZiTvC~`5m;V0kHmq;_tVTb1JELQdL5Ul|f z$7W$8UnU~aD!@ZQOQh`Y9TYY($qfCl zd+7+yEHk>%Y;<*~;*qUd64;_V=sdqhOKC*J4*L5 zzD=->L*wI%TCPpLH-^KBSq!uUt__-{GfmI=~S-k<^a(h7pjaW;mkI8zraR0uJ{ z5VOW_>aV}K1Aky@92MvxO8X+o7W2|-I~Onpb-oWBr)-VrMg(IMbLUni4<~E+Y3`SS zvZ{(ko?&^Oh~bwcl@{q^9G#SlEgO;|unn4ouXEy|u#e*!f5&q-ed8hdK}Pd)Ek!|A z=bI?;IDL|qjGoQ;-)qN#5!}j;qk4-OwO&f0$2kCwZs2j3JEL^57IwND5Q6i_v{6m& zS(Y{wg5#3zS@?$WlWx^~LFi{oEqmuMhv$4&AIx=YL3~oS>*_g*5FuY=u*{>T zH!wE?{{u7<@C15zo;k!;rtZkErMzPNEq>qv*+n$SIL#0j(w4W(k$Y#Kn>Jhoe$(<03_cp+(Z~^OKD<5-o zTG9K-qD$Ppybf_#h0;Q9ycUiBgR@!O^IVvR*vpxcR)14WMB{OxOR~6T zW0#k}j+*R#>rUKLhCSiiiB*AgJ46zqhv@!}OA07~nZubt7(+?m^h3?GiNWq&~=tOII4`t!oSLIP6sn_=`?uVqZkjpmdw`Lc|G`m(UhzbkuBhAxOY%*c@WZGlY!2T@QJ^gpW-FY?+N`(9|zEFsUsz3FzI@M86Tx5mL@x;d{izKiOMPW8*GhlYY z{;c4voZBvDEk5mti*K-5BJBBPsig+^L~sdoDL|#|Q~0*Xi5S@j=OacsTq|~99uZRA zkYRa^9@QH8O2tMe>4}Zh-MNy|Vt#RC$nT#qBWg;ih$FGp2!gYw^r6@!MFK4)=aG-8 zuBIg|s*NZ%O^@w=SN1V?A3>KIX0TX2Bf0MXFyD0U;ASfwLJT7#=yhHICw~d1JXV5^ zA1Zu0-#z&(8|m11)nQ9lLfR3lQ(bD0E7gHSTunwCJ zC-RZ!&*cQzt=nC^ApAY~@+i%$(xK=~BGw$M0Q!<9oBg-#owBr@Km8NkG@A>#$7*C_ z_G+oLfLY%zbVh|(jFe&t`H^Cf>*K1(NtNh`H9QiNPK%>ajInp&hnWpYoYDOvM#bQA z2wqBX9~S~^e|9rS-sJG)_Jo3mHIhor-c*Au>IM#Nu%s7bVP+$suI&jof8bp7hR~Ao zvQQ1#vV$%wnRZLpu-5H(D?7pz?uO;SXw#LHp6E4fA~a9rvVI^2odAJM>PEMLqI4E~ zkPAvuaP+)ekj>{KK#rzxhUFjI*Z4vlyi`FNBq%>yJSiE1{hh>nbx)qv1Uso~Wu&cD z-Bz7jnu?czD-Q=d7Vl1*Fkzu+chT|W@#^|t{nU==_}7j}_hk$hzxCPlY$fiiFr` z(uFF$QHx~`7e>rf33d|N{S6Wk#&2KYpS2LE;B1I!YueGaGzb@qZ=j_%h;lHV%$P;B zu^#zEaBw(m{1VP7EgU?1o!JNTUnSc@8EBcN=~{FreurXsg?lBi!7~2KPe9a>RKLuq zD3def{kOBYv+DCK0jtXU4)_@cA3zL67R{ z1ZA3zBgNtp>YTLaLyZ_O!ssJ5XpJ(^v_r~>rnmdClP*z{4wNBj)J4w_ENhmEO12fH zM3)Yg5&q<3PdQkdX_wJw?LZ1xi0YbaneLY+mLe2em(TT5@5;~@PU;?DD@GH+|-=|4czlJJ#u2^U!u2%*rs{E2h^xpgR z{8!VjeGM+GO0_9=ayWj{&g_s#K<`q2*_^>Z9?EP>S+SS(I*z_ucJ1t21}dcN*y{W} zC}~<7BTowB$Zg04c0kj5h$F6K=mFD>2Kr?5;`m#B{^c*L|7?T(!IbN|D+bApcPuhg~+-~-27cxx_#g@&KLXi1jVMle4d5Ks~ z<=@`J6C614XaJXt#!~cZdC8`ZvAN9B;E{-_M#vbD@LebA346!?_%tU+HA*XHrfwe} zhqHA`e)-bNx=2ztCT~21%B;9jiFj9{OV)xfWFbF;9rrK6lG9WUFKAT0wa#%29iP;zd_WFI*-1cUEbT!f8W;bb>0FbQ@^f1oM`ukD+# zq$Xn*kB<3QaFkz*GnT#Pq}Y5hn?{U!`u_nuK*PU-ML<(CWYg&ig9gP+6(x+Ushm0J zg)SGKt74kkXqHXnq05C1nV@mKu8#^EG|g6)iOkI{kb+Y#qm&T1>#W&YQJX%Q++hELkp)0rV9xa7XAPLKmbWZK~%RAe3#;2r950kmxUuzO{~;IIc@}$ zFtW}q7!nycvPvnWVp3dxIy{|EEGE4}7%;=5Luq-k=_4WoWD0}6boz37=_VJB$C9M+(qfJf#eqI(iLr7{Qa%F*EXmJ{a4wgv&yX40fJ;AFt^V#-Yq7TD1+{ z8jy&3ZoD**%7LQM>-p7hYv76*gs$Ncq;kX{Rh%SoJ{RTYJH`6jxGH&?_;qd3C>7wb zorj44+A#+WhCg-$SL(2wWY6izus@#_wa1lR7U1zV;STznRz zD}T{4xGa-eyoSNzveaM-C#%|sRJ>fh2B=3EsgOW2=Eb*?lf80(xje!f`x&PY;Q^v; z(I%}pPv+=Tmkgq?i(U&>h!_~nCaB*aTuW*>t-nmdG6aj1k8EqbBaIm~Pei><^2hB^tMMsRo;- zYA%=v(Ijg`kq#~7H~(`kk*7?W5NO!NC)o%R8N2`bsu-o#S)y)H2ZMOf-3cgRfcde_Cw6SDa~?7B7h?4G-KK zu#i{v{Ug%|6Nq7*S>bpxmXF8!9plgQElXef12RI5vSI`j7A$p16*uo9!bb~qZ_ z5q=5ag+BDCCNM^Y9+i4mn23$VpS&9v>Qu@)Yvl@U5Dx#ka=2K`Boq9y>n=!5Z1)2C z)o5JZXQK%q>H>kNA$Dag=vc8`NHUzt1ig@Vp(2>1tV9`=kmP8M$ss9X8xf;OuhWpn z4i2`ct5~i0E#8%0S2EhP5gOq-wS$>80i6Dr5{Dr!3_7yErD^qe0UoYk6rnEpY&4ah zB^jWFHEVPu>{gwQYK;>u0IBtyQ`oA7M+jr1NCm=+6@0_f!{g0z?@4*Q!|ND^g$!SK zls6(oX}01p)v>UJ_x#P#Wc>x;Ao0kYeS`%q~?-FAvrG)A-V z(ZIb8PJ!y>O77AKw(JQ=#> zPHXAOk9wMe)01~FfVk@)aq%oSK0}Pe18xx-!?iv3CkFfCLM0|&%Aa@#6Zjq`a z9LPk)p^t@eEcLNygFDmg09h0S7O>}zhHk{og;#bC*SGdp!p(+ArfBE}0Z!U%d_$0e zBO9C18oPS#ze$>7((yo-Ru`hfoY>+#5O|i_e(*2&F&35<`3foTgxgWwk`8vu4nAGn zSp0U0hdY`qLjW3J4lCzrkWBS5GCUXKlR|)&erF7)7J`({& zNXQ%l9jRdoPQXn|K*MVn2an4A2b@gm<1|Q8IalTg5H@Cr{}r~y$YG1B_~ZmxCNTp8 zGn@{{FGA|UihJRuWW^O+i%dhLDB6`fhnJ>=PR z6)GkpXu9nA6Um6oI#eZOa)@_tl{rv?#u4|eUVF<=OK8H)i+YvsmR*6;FP^3}dO;;L z3Ff#m8C|J27<1V|2*fC86_~5@pz^Iiz`#`xHPw-IXoBW%K}AVK4wZ3LH4r+5B&DlO zC=zkyFb4OT1ckWkl8Z*jnn(U@2o_BCJ2iBqTZ87y(oVIhfU4+UL&2G#j$^i%a}j@x&Hp zWlSbLlEa~7fEC1yZzk(ujn5{UC9_wvt9QA~I&bLQm{B`0B*!{P0Ant zQF;I8G{((w!IoN#LOaqzgNY;6>dWF>z8@QtNw{T1sT3HD;M6@_ z?yUWkpM&rMln>OXz|A@Vs~cnmBfgrJRTDxK#rXAf@&!5wDA|XY6Ld+gz=Jw%TwDPU zmx|r{p=$+h^yC6fh3?d6a_B@&EJX2(CC7w`8Gh~%FL-LmminqM_srZwk|}vAPhay% zCoEpmm3Qd zqkT5<9}~B+QXMWA;E+k0!w+^}3g#?+L5cgb3iA_%ZohMtPbIS*XD&iboq7OzQI5fi|CXDB!D zwSZ&oN9cH|PM~4CgzdKdE6vnBe@X}i*5xvUm044&Cq+pY;UUxr+(ER&oGQ*?AI1U% zy_`SyXPlVT!DtqXfmhjRfnbc7Mpps= zyX2$;CS1ZIUUy$lZ)1Ki+Gq4Z6a?IpZkLeQXe5t5Dt`ROoR!7PB{!EP8GWJ`bk*bYWqUcCJJYoGi5zQ!QlHiA)hr%)v%d<{~0f<6}eTkL)%*~86u z{^fiBD2|v-n((~IoaIniWx3-z_S-N0w_m;Sx2b?C<4cmrIeJ&Tj#ZHgL`K$KDIgJ_;#{tc}8q}GGn1w|Z5vL+0M2mRw5 z!;5?E6}&Kr`E;B$B^e&2FNW!Ok|H&iFpoaJ^38nmdHOC`(@}(IEajl)NGwuPMolwj|Kt#tXDSwC$8*VI z<6TaDPyxCcg;kybgGVyi&El%2p{W7v!tlP(z!E3B^()AZ^45 zYEYL5y!?+3zhFjAVN=# zd*&5`Nf5^^4X=0Mi37f_h@1Lhne2tHR^!9fpbyIAu)sq0$w>(rE?@z98=5j-0O`A& zfp^^PS`m|?CnS^s6}Fw!DtIgYASVPmTiYOP$Q}x)qAk@F3GUrNIEwN6``0hlvS#y*}b)&qK#g~T}CC$ zXM+62hyyxR7`tk>K@=@^wy@?UpW2+?y8Ps4}X;_N2g)Wr#M6io`B&}bOB>U6SuR)U*jiH zZDD%J`T6Eqpdh#C2f8vCxLSTQIa+2jRnw|WQj}J-$q_|>Nsdl596YLXo6>k!v40}J z^u=`Qd9KEf>ZEnDT<#?eTiC`O9+m6An?pA2|>e6^$`k3mmEwMKDo9#6=do z!iUUKI5~bZ9lMFOGgu;4Ql?qcAQ_8GejBFvSjPlYtoG1K%fkmr3mpPm$wK-p8ps+Q zlne?yvh83lhY~P8d4VI<5D3#!Az`W^jYs#;suI7-db#>}W1O9;#tb`EeB%tK669*V zUc)ip>S#~VaLX;2b-$i7CqX+nM+QzR&gC!prX)H>*44mTC+JAwbBgFf?Udy{`&H;? zu>XYb%7u3-L*ZB{sVsnOHvn_X&n6@(t`e)Xz%vdV4YUXZWa%Io(rV9LVoK7z#nn~X zP8&ij3K?UPaRex*1X72^?_uS_BvA!;Du=P6=)8M+uU)7m0IacmX`O&BW%IT({j@Pdi8bJf|J$alJy;v>iW@o(Nny$VVQk>Dfgoa>&|X+VEJqAJU3-y>IBc(R{yT?>0(P*(q77RF0|PYN6(DM= zOgEO2wa4t_4Pv2Pjw|ZAj}Q_5I<%-|QMHa@>m9xFD(s%@V3`}1gWGg-X02}15+Enh zG&?w4Ti^U}V*J`*-?%Yhh{+}p;K(G6pd4zB-kJQuquuupF%-g!n^Nk)lx5y(Etxbj z@ag7zd6r+9cn%+U=A%ICU2)V3p9ASMdU4P0wA$xwbglw+fekY&$JWDKEqr4)zY8qP=BXjM8V(rb&#?Jtu>xe^B$^9|X zLK$KL#R;1>vdP=|)o-K&Q(DxZYHTK|kTyeSd3`o^+_FQ+pv>n9Nhkhvkn95kbfTHTApg?%4g84X-%J!R^cCMnU30*$8*3E_!k zdd1N=7S4YRzx52KQ+KlYFK{hWOw3e)yFXHpp3J~=j}VcwSnidln=cG+rbe9D^wL*>Fagu&(ShmVQETxvEZprmFap;9Vi}X(kw-mh{*KQ2Mv>L)A|AIOQE-fPD7F$sjq+m z8}y}OM+)66t)%K@!K_&}l^sRvNy>QDmT8;zOwEgf@`S-=WlYL9aYN+d(GziC1{5Pr zF=bMeGmO)XfC4aiuZj?*e%BtvTrNQ3Xt_pc9j}nmF41?laj)b6-}Vj#h+fxO$r84w zrJRE1PF5DXe5B>L(WwyUF}PEw#bybUiBi#x6P+!5uAm1aTN79Wj*FFWfIpt05c{h) zU;&RI<-DvdN{;(MlM?8XG!B$h+EJG=D>e*Z@aul%&XeQ}>-3@%i`z8Er`eme%?wb% zGA2q%a?8Z{$SfP1OD8Y$)fSCraoQ*ffawx+xMv=Mt?2wSrND$^0LL=xyQ`eGkL5|R zS02d}#0(E%-7@ZOSZd)i7CIj00$1nfX;{aHZUz@XVdKrgL3pUA(ly2*r2tP+mLHT@ zx*eZ<#(aEq`*=cVqXY{*s8hjxLnmW)k&8I&Z6>EjDW7K{)e@cXf)`I!2MPTwBWl1z zePL|x@%@zF!=B0-_auW8={Or(aJ$FOp?*wu@|RbUpsubb+T$t9)()B zC5Acf#ys`2tq*`dKXwD(IxGs#yW;Q_ZY5dg`rYx7@xInM=3t>ORh0PpPKF=r?Hh|P zAGi0hercnp+1J-MG&nLbI(>Ei*57*Lcha85x8xGqCl>6UZ{GO32>A#`_cPdJH<)*B z^TLj#(M83fJb2Jq`jhfxoo!ugqM0~K035o_o4=|+>P*E`$gvFTPEEXkJ|cH)R1X_z z^%p2>|7nS@7q9+hvGV~|Y`0o6bm`Dc*y=QR7RBPF{n_;0Z0?JAnZLw1vz)SQnhD((BmNhHdXt^vH<&mN+ zY(@;k__W?WFAkT>jbD~0+jy2|pbFWbf<|CdnSRA2BM=IhCP<>QGP00OJ;xplu1eTw zS*b(_G&xpqs(qkfwErC6y1`8LCzSJ+Ovu_6qmhV-T^v-OOvO~Qg&g1&q=BS=94qOg z7s!TzU#KjgAgOGJXy8{&S>d-n&iG}X(`_zrikqDMxN;+&%~0Gx4($_G+)W*#QN)#4zKvgc=#-YDcP6QI7>?I6}Z$77E?% zS6UK+FEyA7@NYy#Op_*%SU|2gf$lzWn1W#_2G zx3e%o9%l!q<)UFwNM|Bl{S}*%LNAXiLC>jGn`X+<7a!h+{O!xyIkM^cQMS;iKgkX8P6)!L5ZidT=xClstcICKf`{e2!}t zjcz9S!P)j7eDFVgh~>xe3LQPNO~}e$%xF~<>iR(Vt2h77*Y13`+3Y>TQkP|`UA9hJ zCo@-uo_l^VYd5wwkM~awPg|$p<7R_(jq*n0osYkVPSjBU==9M1)u}s|#%3_om}fQz z3yWwCE;O$H4(8%0t8C1yW4grR_S)moIB*wp70|o-_gpD}w|^;E7AT_Hb74gd!`K6} z>|ISh&n2MDh)_)_Y6tUd3gyvqfhp~K_xRJFPT21Dl72AS@uMG!-O4yzB$f03h5 ze5yqm2Ek-dCX*RQeYB5@tzQ<)KgKAC7Oq4RQl#YgRJL78mP&^CqpabruhDGwE{BV- z04A?)f}s7{IWK7QnI|2PPIrpU56bm-G0!ZlK|o|C;Yd~NVFOdYGmxs5<4F{T7*CK6 z=9#9$bJ^V8bmBIi58_l;ickzPIA+RJ#fEl^VNrbfb^o(s>x1NUTUTwtx&tOhQ7P1k zz;Gi~)Uj2bq|qTDSY3Fsoj=~M+AI$rv02*J z7?FhH^8BdgsBD!JLXQeHW&}pTr(#r(et4Q&uOC3uYuz1iVc~R{L3{`y=^0P)5T|Dv zi>~Q*3sA^~3<@CxwVbi?0-ML^KxE22=i@qyNdqm+eNI!%m%`{29`hX(1$vnnEk_jd zsL;F8lPrG4zyVFIoc-?_$K}T5%wOFvc@VjY4!uQ|&^TuyRmAnv5JsDGt1mMkJ)pJ_`uvhGVHF4_J0q zdYe!6sT}U3z;o8?#From(9U2dFFi#Z{RVQT=M|_a?&)h@vL1vXEhchUOp+5)io}$a zrX1qF9O;Or|7k$Xx6R9eBI*;thR` zhfnM5ZQ~_hG^ErgW&tD%j!>HXEh3vib(r)0xa9mhr4Axizt-dU%BD({{GQ6<5xq2=ei8`G#m}g)5 zz|-e96GIcX=DxUdw8;maj|PW1#)3&~P7Mfl*7c?W3|T!{zk7JHe}4Mv$j~^;Wijch zsZO?bcBUt$Pu53{)`muoCa0>ox#5L{;l;WB!fZA7`K7PEvGBF)6Q5t`U8}Yx_W69# z;l3XcGRie|b?EwkUQJ)sE2c@a4{m4Dj#WnYR`3z2{ob5 z_De)UW}6E}V)IXStI9~k2tKVnajs%qZSH0@bwNEW!5^E=6VPtqqn!8oApZdHxkG}# z-KUyy&njFBAH#KM$~Ls7VJ%09y0E$JNSAzPOeBTcMI>@crwFATdP*ciNS=BOv*;c{ z6<0N$*HoiRtS8rF%}*`>Icn@`vd~x5)_9v2YE9xi-0{B6Qd900ja?9~?ae`XUhTNUgD{K#>Td%H-GD)3|_DT{}WaB&!E8HdN?sSA; ziwRrPYNGuy&BfFJ1UEB2=~^wYo!KNb`5=`@VM~<2K%T)H8928FpG_XXL*v1Av-LuA zv5yZGA@Nd+<`~iI>ae#KshVA}hDl(dWOA;Wzt|g}Q3t|(>=BV`Sa*u27@V2e8%)#% z4(3i){Yl08pUulh5>A*kHlc@f)I>58W$ar!15KAZHlc}G1VfBJ9qg);&;3tkNkYh~ z4W*Mu{8@Gj2;#T?vbVyzeLQ+%1+Q_tRMl{W%+zuk9p@nnYn{K!TA9v-iMymz>DVfM!8@Hp`qk^BDP{>?*3tK`sFyf>hVjYWimX+V9u1H<`iX0@Dd9K#_+^>F1f? z;PLmhG6MHrk`})pI|CyGOezY4s`)$hm0zz|Ig`aCgE?E8Db17k&`>v<_nW7GJ6QWT zzFK3hA~s}*HL6CMwU)|K#O=apz4T^%>8thB#hCBq+GGRWN_}bu+EWrC3JF4mj{u;m z!+CME+iW~yu2r-7z}*1@v0@4vf;DB$AmO>V?2}|0R7%5d>J~YmQ|IfstJVAs&5BcK zMPG>pp+(@St-YpNB1Y0rv5?gcz4H^IE3IC^2ELeTtBkbFxE85lk@c?tViaM*vlp=u z631U=5k>q(DegofH&>(8&{VCUYFa3V+ z;(0$Bi=wi6r;lMOA}ZiKK;^*zbjHv3mKK&ysJ4Pdg(y2)$`zBM?m^(*@(g{4)xyb} zS8@bI+wdtKGE3TWs+Mgo7@dXyK-^@6LDH>~aL5dCWpYCWS-8Y3N-p`^D@@YTD~G`J1`N9Et$dw0l#`}YAw)*STj3OP7c*VW zE?0zEJjNnqJmkhB>SFUxTN5Y?kcL8GpquT$RF+%TwP*UK4bKf3#~PdRaS2}(R-2m@ zP!?^mnqBNIU9ER6#@-(N23Mn^EI7q($EB>xbCCt{URtxcdcqvFrs>Zw z^F=}!R2v-!emY|AEK(}w!O7_O?DWEox*poyczmoWS?N@z(3@F1nG9-A4@=zheEpOC z!;N#ZH^zpi?6@Q!oiOLqBf-R2V?(1?=3eJ1;S*x4lLKDCl_jaVfC@{Du;*N+VvS=B zUT#0yKiWAzb9HoNoFx;PZZ$eFJTWwVv|aO|0Zm0YQoyX#05i2fGK_=z(aHYH`hI_C z>eq*^{~@1hNhe-tmU&X$=4^z$Omy`g(G}B@_yCdJXlDj-VFU~Q@a&jd+@(v5|L=QIHOAlWUL|41p0Y8inEC%O@wz0yDb zX0>=*x2?#J^H>t&uII1SbJwbgMav+~Io@w}S9&{7G_)y)8RfZr*9I_}RIz)mhzAVn6AL+j3 z#4$rtd=8;zsbPM6NF$!LX}n*9LzzoeVoM^0&q|{}C84;JO0|FK8lI0}GRc&tX*8bY z!Kd8~g<1PsinP!%Jl^OLSjg_2wjm)@$(S%gbOcyhE@5J(;_ET=W(N%A3f(c+CMC1O zK2d~@PMU;TdoD!`o+or$d&Wm{H0s9F$q_#BnYS=3%kzaOnWr9jWSGxI_h$L9Z@*%N zsxpS8OID~;`)8AY1f*QY!jKNaCG?o_V;+ysH38@KDIDJa0_*cWK@)JTn_e5p51Tuw}Uk#fgN8;g&)g;h z4B2cZU{x$|1?DVSxLsZOdbM!V5*SVpg|`H;Q`qdYKoVFslh4#Y``KXSz24p$518CU zGh5Q1dBv<2F0?HS69NU2bC~~XY`#AKxq9i1YU-Q_a}|IibE?p2m%OGMJlF%j65a7 z=g#4_zB0T0M1z{Vh|A0d`em7FjX{q9c_=WN^eVInLZ(Z=ne2?6%0ihMaN;nt&Tw^J z635v(K}1!JEjg}QsD@`e2H^eYXRw<UQGUvBpjG!TXG0ChxzP5ZYc?{czVeF7{dc2Ec(DyEnYMsi1!eC5@(L2K(Il? zTXG<>;wVZaffS)B(z_8GapE=l* zk`Z(gRL(`Cbf~MTncm_Bu`n^8MXJKT5-Hly5?sLEB9~x`%<^HtV+=&CJn3z$@ZO?k zS!t7^|2A1_W{)A9`-IkS96S8~;$yH~M<48zd(-7ct)qm;hj9uwt#+<9-F|lY|MRhM?cHZt{ZPbU~ zYhL`+(U_({+0kOiTWF3naKO$|@8R+K`giN)FEVu+=Z4_S_^N$9((F7NJp5s^`k`7k z(Xd(t#wGb~Ok#9CAyqDfuis*zp2OAUZ`2pQ$OA9U1Vlt^!QpIxW(1^x4h`1tHBW!i zY<#M>dlb;HA?_5RG-XWe38Df>=qTqr=f-I9c75>+dM3!*#h4K`*!XOS4^l@adYi-T z-pU7q)lYiceCbFtA(r-3x^vYJlYg46k2fsP){y9uA1)+GsAR5S2)^@DsMUi<_&o=$eZ_JKth1QFxX)|X$JeflWk73 z=47)O01#IZWAT`S@j33qEQ9`6R%+q^?!BK(I>V z7rIOwpz5ACptiCtIJ$R4R2ogGq$qMxVhcGgiUVE9C`q1HX*%d&x+=o7kde*Q zUV2Nu6a&DnBzJ2WV;(rjs}Z)F5sAmd32rG`2&I`)YSe|K3YexXEo9*J#4y%|P`tI* zJJ}hW?C@c7EeWAYbF;zdsd-7@v?B}|s}dDBv0$lIxij*D9vAS?aCo{Noo4+xLay{~ zkj9CFGZ^eNgNU&I$dsRteh`L&@K^Gh>MLn%1p{2@IVm7upnw32N!i=0Tnnm^aTdBX zgGqxprQUU6^}h^XOjOegtZTp|t%hiZbqXvQuW%cbdDsW1%<%9$Ltl3b1OMHXbsYa5T{VaAil}Iyh)(!P$7c0Un=5lSV_YVBLEGf~ JIasqHom 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

-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

xP$*i>1Vjm`s8u%w!sI0s@j6rAw{ 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%0A!`3rQb&%RNEwJ2|oXspR9_2}k(_ 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ð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

Ql+WM+uP&;~O_BF`SwwBzdW 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 F{{ZpWNwWX| diff --git a/localisation/es-es/README.md b/localisation/es-es/README.md index 99a2a0a..10c9542 100644 --- a/localisation/es-es/README.md +++ b/localisation/es-es/README.md @@ -1,6 +1,6 @@ # Taller de Programación Vibe con GitHub Copilot -![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) +![Taller de Programación Vibe con GitHub Copilot](../../images/banner.png) ¡Vamos a programar con vibe usando [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) y sus características más nuevas y mejores en varios lenguajes de programación como Python, JavaScript, Java y .NET, así como hacer que las aplicaciones sean nativas de la nube mediante contenedorización! ¿Estás listo para sumergirte? diff --git a/localisation/fr-fr/README.md b/localisation/fr-fr/README.md index aff1c49..850725c 100644 --- a/localisation/fr-fr/README.md +++ b/localisation/fr-fr/README.md @@ -1,6 +1,6 @@ # Atelier de Codage Vibe GitHub Copilot -![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) +![Atelier de Codage Vibe GitHub Copilot](../../images/banner.png) Vibrons-codons avec [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) et ses fonctionnalités les plus récentes et les plus avancées dans divers langages de programmation tels que Python, JavaScript, Java et .NET, ainsi que pour rendre les applications cloud-natives par conteneurisation. Êtes-vous prêt à vous lancer ? diff --git a/localisation/ja-jp/README.md b/localisation/ja-jp/README.md index 543b900..9a66112 100644 --- a/localisation/ja-jp/README.md +++ b/localisation/ja-jp/README.md @@ -1,6 +1,6 @@ # GitHub Copilot Vibe コーディングワークショップ -![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) +![GitHub Copilot Vibe コーディングワークショップ](../../images/banner.png) Python、JavaScript、Java、.NETなど様々なプログラミング言語で[GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)と最新かつ最高の機能を使ってバイブコーディングを行い、コンテナ化によってアプリをクラウドネイティブにしましょう。飛び込む準備はできていますか? diff --git a/localisation/ko-kr/README.md b/localisation/ko-kr/README.md index 07ee889..c524ff7 100644 --- a/localisation/ko-kr/README.md +++ b/localisation/ko-kr/README.md @@ -1,6 +1,6 @@ # GitHub Copilot Vibe 코딩 워크샵 -![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) +![GitHub Copilot Vibe 코딩 워크샵](../../images/banner.png) Python, JavaScript, Java, .NET 등 다양한 프로그래밍 언어에서 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot)과 최신 기능들로 바이브 코딩을 하고, 컨테이너화를 통해 앱을 클라우드 네이티브로 만들어 보세요. 뛰어들 준비가 되셨나요? diff --git a/localisation/pt-br/README.md b/localisation/pt-br/README.md index 203567f..18dd225 100644 --- a/localisation/pt-br/README.md +++ b/localisation/pt-br/README.md @@ -1,6 +1,6 @@ # Workshop de Codificação GitHub Copilot Vibe -![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) +![Workshop de Codificação GitHub Copilot Vibe](../../images/banner.png) Vamos codar com vibe usando o [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) e seus recursos mais novos e incríveis em várias linguagens de programação como Python, JavaScript, Java e .NET, além de tornar os aplicativos nativos da nuvem através da containerização. Você está pronto para mergulhar? diff --git a/localisation/zh-cn/README.md b/localisation/zh-cn/README.md index 56d8911..21e5d15 100644 --- a/localisation/zh-cn/README.md +++ b/localisation/zh-cn/README.md @@ -1,6 +1,6 @@ # GitHub Copilot Vibe 编程工作坊 -![GitHub Copilot - Ghiblifiled](../../images/ghcp.jpg) +![GitHub Copilot Vibe 编程工作坊](../../images/banner.png) 让我们使用 [GitHub Copilot](https://docs.github.com/copilot/about-github-copilot/what-is-github-copilot) 及其在 Python、JavaScript、Java 和 .NET 等各种编程语言中的最新最强大功能进行氛围编程,并通过容器化让应用程序变得云原生。你准备好开始了吗? From 962c7392a165fd92c266d455962d73537f953a30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 13:12:50 +0900 Subject: [PATCH 14/17] Bump form-data from 4.0.2 to 4.0.4 in /complete/javascript (#45) Bumps [form-data](https://github.com/form-data/form-data) from 4.0.2 to 4.0.4. - [Release notes](https://github.com/form-data/form-data/releases) - [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md) - [Commits](https://github.com/form-data/form-data/compare/v4.0.2...v4.0.4) --- updated-dependencies: - dependency-name: form-data dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- complete/javascript/package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/complete/javascript/package-lock.json b/complete/javascript/package-lock.json index 7504da7..00d7784 100644 --- a/complete/javascript/package-lock.json +++ b/complete/javascript/package-lock.json @@ -3052,14 +3052,15 @@ } }, "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { From 65e16c646427478487920120546991fc0b4e5128 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Tue, 5 Aug 2025 13:22:34 +0900 Subject: [PATCH 15/17] Add beast mode to the setup process --- docs/.vscode/mcp.json | 9 +++++++++ docs/.vscode/settings.json | 4 ++++ docs/00-setup.md | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 docs/.vscode/settings.json diff --git a/docs/.vscode/mcp.json b/docs/.vscode/mcp.json index f3a9b0e..d813a80 100644 --- a/docs/.vscode/mcp.json +++ b/docs/.vscode/mcp.json @@ -8,6 +8,15 @@ } ], "servers": { + "awesome-copilot": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "ghcr.io/microsoft/mcp-dotnet-samples/awesome-copilot:stdio" + ] + }, "context7": { "command": "npx", "args": [ diff --git a/docs/.vscode/settings.json b/docs/.vscode/settings.json new file mode 100644 index 0000000..51a564d --- /dev/null +++ b/docs/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "chat.tools.autoApprove": true, + "chat.agent.maxRequests": 100 +} \ No newline at end of file diff --git a/docs/00-setup.md b/docs/00-setup.md index 39d56c6..21bb9a8 100644 --- a/docs/00-setup.md +++ b/docs/00-setup.md @@ -18,6 +18,7 @@ Refer to the [README](../README.md) doc for preparation. - [Start Visual Studio Code](#start-visual-studio-code) - [Set-up MCP Servers](#set-up-mcp-servers) - [Check GitHub Copilot Agent Mode](#check-github-copilot-agent-mode) +- [Configure Beast Mode](#configure-beast-mode) - [Prepare Custom Instructions](#prepare-custom-instructions) - [Analyze Product Requirements Document (PRD) and Design API](#analyze-product-requirements-document-prd-and-design-api) @@ -256,6 +257,7 @@ Refer to the [README](../README.md) doc for preparation. ### Set-up MCP Servers +1. Make sure Docker Desktop is up and running if you use VS Code on your local machine. 1. Set the environment variable of `$REPOSITORY_ROOT`. ```bash @@ -284,6 +286,7 @@ Refer to the [README](../README.md) doc for preparation. 1. Open Command Palette by typing F1 or `Ctrl`+`Shift`+`P` on Windows or `Cmd`+`Shift`+`P` on Mac OS, and search `MCP: List Servers`. 1. Choose `context7` then click `Start Server`. +1. Choose `awesome-copilot` then click `Start Server`. ## Check GitHub Copilot Agent Mode @@ -298,6 +301,40 @@ Refer to the [README](../README.md) doc for preparation. 1. Select model to either `GPT-4.1` or `Claude Sonnet 4`. +## Configure Beast Mode + +1. Enter the `/mcp.awesome-copilot.get_search_prompt`, followed by entering keywords like "beast mode" + + It should show list of beast chatmodes. Enter a prompt similar to `4.1 Beast Chat Mode`. Then it will save it under the `.github/chatmodes` directory. + +1. Choose the `4.1-Beast` mode instead of the `Agent` mode. It will automatically change LLM to `GPT 4.1`. + +1. Set the environment variable of `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copy workspace settings. + + ```bash + # bash/zsh + cp $REPOSITORY_ROOT/docs/.vscode/settings.json \ + $REPOSITORY_ROOT/.vscode/settings.json + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/settings.json ` + -Destination $REPOSITORY_ROOT/.vscode/settings.json -Force + ``` + ## Prepare Custom Instructions 1. Set the environment variable of `$REPOSITORY_ROOT`. From 29bbe08289ffb5ca4700724490de00b347be2f27 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 Aug 2025 16:28:31 +0900 Subject: [PATCH 16/17] Update MCP Servers setup section and add Configure Beast Mode to all localized documentation (#47) * Initial plan * Add Configure Beast Mode section to all localized setup documents Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Update Set-up MCP Servers section in all localized docs to match English version Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> * Update ToC on all localised docs --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: justinyoo <1538528+justinyoo@users.noreply.github.com> Co-authored-by: Justin Yoo --- localisation/es-es/docs/00-setup.md | 37 +++++++++++++++++++++++++++++ localisation/fr-fr/docs/00-setup.md | 37 +++++++++++++++++++++++++++++ localisation/ja-jp/docs/00-setup.md | 37 +++++++++++++++++++++++++++++ localisation/ko-kr/docs/00-setup.md | 37 +++++++++++++++++++++++++++++ localisation/pt-br/docs/00-setup.md | 37 +++++++++++++++++++++++++++++ localisation/zh-cn/docs/00-setup.md | 37 +++++++++++++++++++++++++++++ 6 files changed, 222 insertions(+) diff --git a/localisation/es-es/docs/00-setup.md b/localisation/es-es/docs/00-setup.md index 8ae8989..7ea55a3 100644 --- a/localisation/es-es/docs/00-setup.md +++ b/localisation/es-es/docs/00-setup.md @@ -18,6 +18,7 @@ Consulta el documento [README](../README.md) para la preparación. - [Iniciar Visual Studio Code](#iniciar-visual-studio-code) - [Configurar Servidores MCP](#configurar-servidores-mcp) - [Verificar Modo Agente de GitHub Copilot](#verificar-modo-agente-de-github-copilot) +- [Configurar Modo Bestia](#configurar-modo-bestia) - [Preparar Instrucciones Personalizadas](#preparar-instrucciones-personalizadas) - [Analizar Documento de Requisitos del Producto (PRD) y Diseñar API](#analizar-documento-de-requisitos-del-producto-prd-y-diseñar-api) @@ -256,6 +257,7 @@ Consulta el documento [README](../README.md) para la preparación. ### Configurar Servidores MCP +1. Asegúrate de que Docker Desktop esté funcionando si usas VS Code en tu máquina local. 1. Establece la variable de entorno de `$REPOSITORY_ROOT`. ```bash @@ -284,6 +286,7 @@ Consulta el documento [README](../README.md) para la preparación. 1. Abre la Paleta de Comandos presionando F1 o `Ctrl`+`Shift`+`P` en Windows o `Cmd`+`Shift`+`P` en Mac OS, y busca `MCP: List Servers`. 1. Elige `context7` y luego haz clic en `Start Server`. +1. Elige `awesome-copilot` y luego haz clic en `Start Server`. ## Verificar Modo Agente de GitHub Copilot @@ -298,6 +301,40 @@ Consulta el documento [README](../README.md) para la preparación. 1. Selecciona el modelo ya sea `GPT-4.1` o `Claude Sonnet 4`. +## Configurar Modo Bestia + +1. Ingresa `/mcp.awesome-copilot.get_search_prompt`, seguido de palabras clave como "beast mode" + + Debería mostrar la lista de modos de chat bestia. Ingresa un prompt similar a `4.1 Beast Chat Mode`. Luego se guardará bajo el directorio `.github/chatmodes`. + +1. Elige el modo `4.1-Beast` en lugar del modo `Agent`. Automáticamente cambiará el LLM a `GPT 4.1`. + +1. Establece la variable de entorno de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copia la configuración del espacio de trabajo. + + ```bash + # bash/zsh + cp $REPOSITORY_ROOT/docs/.vscode/settings.json \ + $REPOSITORY_ROOT/.vscode/settings.json + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/settings.json ` + -Destination $REPOSITORY_ROOT/.vscode/settings.json -Force + ``` + ## Preparar Instrucciones Personalizadas 1. Establece la variable de entorno de `$REPOSITORY_ROOT`. diff --git a/localisation/fr-fr/docs/00-setup.md b/localisation/fr-fr/docs/00-setup.md index ca738b1..848cd34 100644 --- a/localisation/fr-fr/docs/00-setup.md +++ b/localisation/fr-fr/docs/00-setup.md @@ -18,6 +18,7 @@ Consultez le document [README](../README.md) pour la préparation. - [Démarrer Visual Studio Code](#démarrer-visual-studio-code) - [Configurer les Serveurs MCP](#configurer-les-serveurs-mcp) - [Vérifier le Mode Agent GitHub Copilot](#vérifier-le-mode-agent-github-copilot) +- [Configurer le Mode Bête](#configurer-le-mode-bête) - [Préparer les Instructions Personnalisées](#préparer-les-instructions-personnalisées) - [Analyser le Document d'Exigences Produit (PRD) et Concevoir l'API](#analyser-le-document-dexigences-produit-prd-et-concevoir-lapi) @@ -256,6 +257,7 @@ Consultez le document [README](../README.md) pour la préparation. ### Configurer les Serveurs MCP +1. Assurez-vous que Docker Desktop est en cours d'exécution si vous utilisez VS Code sur votre machine locale. 1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. ```bash @@ -284,6 +286,7 @@ Consultez le document [README](../README.md) pour la préparation. 1. Ouvrez la Palette de Commandes en tapant F1 ou `Ctrl`+`Shift`+`P` sur Windows ou `Cmd`+`Shift`+`P` sur Mac OS, et recherchez `MCP: List Servers`. 1. Choisissez `context7` puis cliquez sur `Start Server`. +1. Choisissez `awesome-copilot` puis cliquez sur `Start Server`. ## Vérifier le Mode Agent GitHub Copilot @@ -298,6 +301,40 @@ Consultez le document [README](../README.md) pour la préparation. 1. Sélectionnez le modèle soit `GPT-4.1` soit `Claude Sonnet 4`. +## Configurer le Mode Bête + +1. Entrez `/mcp.awesome-copilot.get_search_prompt`, suivi de mots-clés comme "beast mode" + + Cela devrait afficher la liste des modes de chat bête. Entrez un prompt similaire à `4.1 Beast Chat Mode`. Ensuite, il sera sauvegardé sous le répertoire `.github/chatmodes`. + +1. Choisissez le mode `4.1-Beast` au lieu du mode `Agent`. Il changera automatiquement le LLM vers `GPT 4.1`. + +1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copiez les paramètres de l'espace de travail. + + ```bash + # bash/zsh + cp $REPOSITORY_ROOT/docs/.vscode/settings.json \ + $REPOSITORY_ROOT/.vscode/settings.json + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/settings.json ` + -Destination $REPOSITORY_ROOT/.vscode/settings.json -Force + ``` + ## Préparer les Instructions Personnalisées 1. Définissez la variable d'environnement de `$REPOSITORY_ROOT`. diff --git a/localisation/ja-jp/docs/00-setup.md b/localisation/ja-jp/docs/00-setup.md index e69df6a..317fd61 100644 --- a/localisation/ja-jp/docs/00-setup.md +++ b/localisation/ja-jp/docs/00-setup.md @@ -18,6 +18,7 @@ - [Visual Studio Code を起動](#visual-studio-code-を起動) - [MCP サーバーを設定](#mcp-サーバーを設定) - [GitHub Copilot エージェントモードを確認](#github-copilot-エージェントモードを確認) +- [ビーストモードを設定](#ビーストモードを設定) - [カスタム指示を準備](#カスタム指示を準備) - [製品要求仕様書(PRD)を分析してAPIを設計](#製品要求仕様書prdを分析してapiを設計) @@ -256,6 +257,7 @@ ### MCP サーバーを設定 +1. ローカルマシンでVS Codeを使用している場合は、Docker Desktopが起動していることを確認してください。 1. `$REPOSITORY_ROOT` 環境変数を設定します。 ```bash @@ -284,6 +286,7 @@ 1. F1 キーまたは Windows では `Ctrl`+`Shift`+`P`、Mac OS では `Cmd`+`Shift`+`P` を入力してコマンドパレットを開き、`MCP: List Servers` を検索します。 1. `context7` を選択して `Start Server` をクリックします。 +1. `awesome-copilot` を選択して `Start Server` をクリックします。 ## GitHub Copilot エージェントモードを確認 @@ -298,6 +301,40 @@ 1. モデルを `GPT-4.1` または `Claude Sonnet 4` のいずれかに選択します。 +## ビーストモードを設定 + +1. `/mcp.awesome-copilot.get_search_prompt` を入力し、続いて "beast mode" のようなキーワードを入力します + + ビーストチャットモードのリストが表示されます。`4.1 Beast Chat Mode` のようなプロンプトを入力します。すると、`.github/chatmodes` ディレクトリに保存されます。 + +1. `Agent` モードの代わりに `4.1-Beast` モードを選択します。自動的にLLMが `GPT 4.1` に変更されます。 + +1. `$REPOSITORY_ROOT` 環境変数を設定します。 + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. ワークスペース設定をコピーします。 + + ```bash + # bash/zsh + cp $REPOSITORY_ROOT/docs/.vscode/settings.json \ + $REPOSITORY_ROOT/.vscode/settings.json + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/settings.json ` + -Destination $REPOSITORY_ROOT/.vscode/settings.json -Force + ``` + ## カスタム指示を準備 1. `$REPOSITORY_ROOT` 環境変数を設定します。 diff --git a/localisation/ko-kr/docs/00-setup.md b/localisation/ko-kr/docs/00-setup.md index 65303d1..c429659 100644 --- a/localisation/ko-kr/docs/00-setup.md +++ b/localisation/ko-kr/docs/00-setup.md @@ -18,6 +18,7 @@ - [Visual Studio Code 시작](#visual-studio-code-시작) - [MCP 서버 설정](#mcp-서버-설정) - [GitHub Copilot 에이전트 모드 확인](#github-copilot-에이전트-모드-확인) +- [비스트 모드 구성](#비스트-모드-구성) - [커스텀 지시사항 준비](#커스텀-지시사항-준비) - [제품 요구사항 문서(PRD) 분석 및 API 설계](#제품-요구사항-문서prd-분석-및-api-설계) @@ -256,6 +257,7 @@ ### MCP 서버 설정 +1. 로컬 머신에서 VS Code를 사용하는 경우 Docker Desktop이 실행 중인지 확인하세요. 1. `$REPOSITORY_ROOT` 환경 변수를 설정하세요. ```bash @@ -284,6 +286,7 @@ 1. F1을 입력하거나 Windows에서 `Ctrl`+`Shift`+`P`, Mac OS에서 `Cmd`+`Shift`+`P`를 눌러 명령 팔레트를 열고 `MCP: List Servers`를 검색하세요. 1. `context7`을 선택한 다음 `Start Server`를 클릭하세요. +1. `awesome-copilot`을 선택한 다음 `Start Server`를 클릭하세요. ## GitHub Copilot 에이전트 모드 확인 @@ -298,6 +301,40 @@ 1. 모델을 `GPT-4.1` 또는 `Claude Sonnet 4` 중 하나로 선택하세요. +## 비스트 모드 구성 + +1. `/mcp.awesome-copilot.get_search_prompt`를 입력한 후 "beast mode"와 같은 키워드를 입력하세요 + + 비스트 채팅 모드 목록이 표시됩니다. `4.1 Beast Chat Mode`와 유사한 프롬프트를 입력하세요. 그러면 `.github/chatmodes` 디렉토리에 저장됩니다. + +1. `Agent` 모드 대신 `4.1-Beast` 모드를 선택하세요. 자동으로 LLM이 `GPT 4.1`로 변경됩니다. + +1. `$REPOSITORY_ROOT` 환경 변수를 설정하세요. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. 워크스페이스 설정을 복사하세요. + + ```bash + # bash/zsh + cp $REPOSITORY_ROOT/docs/.vscode/settings.json \ + $REPOSITORY_ROOT/.vscode/settings.json + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/settings.json ` + -Destination $REPOSITORY_ROOT/.vscode/settings.json -Force + ``` + ## 커스텀 지시사항 준비 1. `$REPOSITORY_ROOT` 환경 변수를 설정하세요. diff --git a/localisation/pt-br/docs/00-setup.md b/localisation/pt-br/docs/00-setup.md index 0f66997..4ca836b 100644 --- a/localisation/pt-br/docs/00-setup.md +++ b/localisation/pt-br/docs/00-setup.md @@ -18,6 +18,7 @@ Consulte a documentação [README](../README.md) para preparação. - [Iniciar Visual Studio Code](#iniciar-visual-studio-code) - [Configurar Servidores MCP](#configurar-servidores-mcp) - [Verificar o Modo Agente do GitHub Copilot](#verificar-o-modo-agente-do-github-copilot) +- [Configurar Modo Fera](#configurar-modo-fera) - [Preparar Instruções Customizadas](#preparar-instruções-customizadas) - [Analisar Documento de Requisitos do Produto (PRD) e Projetar API](#analisar-documento-de-requisitos-do-produto-prd-e-projetar-api) @@ -256,6 +257,7 @@ Consulte a documentação [README](../README.md) para preparação. ### Configurar Servidores MCP +1. Certifique-se de que o Docker Desktop esteja em execução se você usar o VS Code em sua máquina local. 1. Defina a variável de ambiente `$REPOSITORY_ROOT`. ```bash @@ -284,6 +286,7 @@ Consulte a documentação [README](../README.md) para preparação. 1. Abra a Paleta de Comandos digitando F1 ou `Ctrl`+`Shift`+`P` no Windows ou `Cmd`+`Shift`+`P` no Mac OS, e procure `MCP: List Servers`. 1. Escolha `context7` e clique em `Start Server`. +1. Escolha `awesome-copilot` e clique em `Start Server`. ## Verificar o Modo Agente do GitHub Copilot @@ -298,6 +301,40 @@ Consulte a documentação [README](../README.md) para preparação. 1. Selecione o modelo para `GPT-4.1` ou `Claude Sonnet 4`. +## Configurar Modo Fera + +1. Digite `/mcp.awesome-copilot.get_search_prompt`, seguido de palavras-chave como "beast mode" + + Isso deve mostrar a lista de modos de chat fera. Digite um prompt similar a `4.1 Beast Chat Mode`. Em seguida, será salvo no diretório `.github/chatmodes`. + +1. Escolha o modo `4.1-Beast` em vez do modo `Agent`. Ele mudará automaticamente o LLM para `GPT 4.1`. + +1. Defina a variável de ambiente `$REPOSITORY_ROOT`. + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. Copie as configurações do workspace. + + ```bash + # bash/zsh + cp $REPOSITORY_ROOT/docs/.vscode/settings.json \ + $REPOSITORY_ROOT/.vscode/settings.json + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/settings.json ` + -Destination $REPOSITORY_ROOT/.vscode/settings.json -Force + ``` + ## Preparar Instruções Customizadas 1. Defina a variável de ambiente `$REPOSITORY_ROOT`. diff --git a/localisation/zh-cn/docs/00-setup.md b/localisation/zh-cn/docs/00-setup.md index 01c9976..f1588c0 100644 --- a/localisation/zh-cn/docs/00-setup.md +++ b/localisation/zh-cn/docs/00-setup.md @@ -18,6 +18,7 @@ - [启动 Visual Studio Code](#启动-visual-studio-code) - [设置 MCP 服务器](#设置-mcp-服务器) - [检查 GitHub Copilot 代理模式](#检查-github-copilot-代理模式) +- [配置野兽模式](#配置野兽模式) - [准备自定义指令](#准备自定义指令) - [分析产品需求文档 (PRD) 和设计 API](#分析产品需求文档-prd-和设计-api) @@ -256,6 +257,7 @@ ### 设置 MCP 服务器 +1. 如果您在本地机器上使用 VS Code,请确保 Docker Desktop 正在运行。 1. 设置 `$REPOSITORY_ROOT` 环境变量。 ```bash @@ -284,6 +286,7 @@ 1. 通过按 F1 或在 Windows 上按 `Ctrl`+`Shift`+`P` 或在 Mac OS 上按 `Cmd`+`Shift`+`P` 打开命令面板,然后搜索 `MCP: List Servers`。 1. 选择 `context7` 然后点击 `Start Server`。 +1. 选择 `awesome-copilot` 然后点击 `Start Server`。 ## 检查 GitHub Copilot 代理模式 @@ -298,6 +301,40 @@ 1. 选择模型为 `GPT-4.1` 或 `Claude Sonnet 4`。 +## 配置野兽模式 + +1. 输入 `/mcp.awesome-copilot.get_search_prompt`,然后输入类似 "beast mode" 的关键词 + + 它应该显示野兽聊天模式列表。输入类似 `4.1 Beast Chat Mode` 的提示。然后它将保存在 `.github/chatmodes` 目录下。 + +1. 选择 `4.1-Beast` 模式而不是 `Agent` 模式。它将自动将 LLM 更改为 `GPT 4.1`。 + +1. 设置 `$REPOSITORY_ROOT` 环境变量。 + + ```bash + # bash/zsh + REPOSITORY_ROOT=$(git rev-parse --show-toplevel) + ``` + + ```powershell + # PowerShell + $REPOSITORY_ROOT = git rev-parse --show-toplevel + ``` + +1. 复制工作区设置。 + + ```bash + # bash/zsh + cp $REPOSITORY_ROOT/docs/.vscode/settings.json \ + $REPOSITORY_ROOT/.vscode/settings.json + ``` + + ```powershell + # PowerShell + Copy-Item -Path $REPOSITORY_ROOT/docs/.vscode/settings.json ` + -Destination $REPOSITORY_ROOT/.vscode/settings.json -Force + ``` + ## 准备自定义指令 1. 设置 `$REPOSITORY_ROOT` 环境变量。 From 9d4b9f05ff04b181b7a7bb75f35a50aaac5aa087 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Sat, 9 Aug 2025 07:22:29 +0900 Subject: [PATCH 17/17] Update mcp.json --- docs/.vscode/mcp.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/.vscode/mcp.json b/docs/.vscode/mcp.json index d813a80..03dcf99 100644 --- a/docs/.vscode/mcp.json +++ b/docs/.vscode/mcp.json @@ -14,7 +14,7 @@ "run", "-i", "--rm", - "ghcr.io/microsoft/mcp-dotnet-samples/awesome-copilot:stdio" + "ghcr.io/microsoft/mcp-dotnet-samples/awesome-copilot:latest" ] }, "context7": {