Repository: acir-junior/playlist-book-backend
Pull request #5: CHORE: automatization review in prs
Author: login: acir-junior
Created: 2025-04-04T19:07:11Z | Merged: 2025-04-04T19:49:01Z

Esta solicitação de pull inclui várias alterações importantes destinadas a melhorar a propriedade do código, aprimorar o processo de revisão da solicitação de pull e garantir melhor qualidade do código por meio de verificações automatizadas. Abaixo estão as alterações mais significativas agrupadas por seus temas:

### Propriedade do código:

* Adicionado o arquivo `CODEOWNERS` para atribuir diretórios específicos ao membro da equipe `@acir-junior` com instruções claras para manter a qualidade e a validação do código. (`.github/codeowners`)

### Processo de revisão da solicitação de pull:

* Atualizado o modelo de solicitação de pull para incluir seções para descrições de alterações, tipo de alteração e uma lista de verificação para revisores para garantir a qualidade do código e ajustes de documentação. (`.github/pull_request_template.md`)

### Verificações automatizadas de qualidade do código:

* Introduzido um novo fluxo de trabalho do GitHub Actions para automatizar as revisões de solicitação de pull, incluindo etapas para configurar o Node.js, instalar dependências, executar testes e linting do código. (`.github/workflows/copilot-reviews.yml`)
* Adicionada uma etapa no fluxo de trabalho para validar as principais regras de negócios, verificando dependências impróprias no diretório `src/core` e gerando um relatório com base nas descobertas. (`.github/workflows/copilot-reviews.yml`)
* Implementado um script para gerar um relatório abrangente que inclui análise de código, violações de arquitetura e estatísticas sobre linhas de código adicionadas ou removidas, e publica o relatório como um comentário na solicitação de pull. (`.github/workflows/copilot-reviews.yml`)


Diff:
diff --git a/.github/codeowners b/.github/codeowners
new file mode 100644
index 0000000..857d9da
--- /dev/null
+++ b/.github/codeowners
@@ -0,0 +1,8 @@
+# Camada de domínio (mantenha limpa!)
+/src/core/ @acir-junior # ✅ Lembre-se de testar!
+
+# Controllers (valide inputs!)
+/src/controllers/ @acir-junior # 🛡️ Checar sanitização
+
+# Módulos (evite acoplamento)
+/src/modules/ @acir-junior # 🔗 Manter interfaces claras
\ No newline at end of file
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..10e6d1e
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,18 @@
+# Descrição das mudanças feitas
+
+/copilot-summary
+
+## Tipo de Mudança
+- [ ] Feature
+- [ ] Bugfix
+- [ ] Refactor
+- [ ] Documentação
+
+## Checklist da Revisão
+- [ ] O código está limpo e segue as diretrizes de estilo do projeto?
+- [ ] Documentação ajustada
+- [ ] Confirmei as sugestões do Copilot:
+  - [ ] Sim
+  - [ ] Não
+
+/copilot-review
\ No newline at end of file
diff --git a/.github/workflows/copilot-reviews.yml b/.github/workflows/copilot-reviews.yml
new file mode 100644
index 0000000..8c5a0ef
--- /dev/null
+++ b/.github/workflows/copilot-reviews.yml
@@ -0,0 +1,82 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+permissions:
+    pull-requests: write
+    contents: read
+    issues: write
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acoplamentos indevidos na pasta core
+                CORE_VIOLATIONS=$(find src/core -type f \( -name "*.ts" -o -name "*.js" \) \
+                -exec grep -lE "(from ['\"]src/(application|domain|infra))|(@Injectable)|(@Controller)" {} + || true)
+                if [ -n "$CORE_VIOLATIONS" ]; then
+                    echo "::warning:: Possíveis violações na camada core:"
+                    echo "$CORE_VIOLATIONS"
+                    echo "core_violations=true" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## 🔴 Violações de Arquitetura\n'$CORE_VIOLATIONS | jq -Rs .)" >> $GITHUB_OUTPUT
+                else
+                    echo "core_violations=false" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## ✅ Nenhuma violação encontrada na camada core' | jq -Rs .)" >> $GITHUB_OUTPUT
+                fi
+
+            - name: Generate Full Report
+              uses: actions/github-script@v6
+              env:
+                CORE_REPORT: ${{ steps.core_check.outputs.CORE_REPORT }}
+              with:
+                github-token: ${{ secrets.GITHUB_TOKEN }}
+                script: |
+                  const { data: diff } = await github.rest.pulls.get({
+                      owner: context.repo.owner,
+                      repo: context.repo.repo,
+                      pull_number: context.payload.pull_request.number,
+                      mediaType: { format: 'diff' },
+                  });
+                
+                  const nestAnalysis = `
+                    ## 🔍 Análise de Código
+                    ${diff.includes('@Controller') ? '✅ Novos Controllers encontrados' : '❌ Nenhum novo Controller encontrado'}
+                    ${diff.includes('@Injectable') ? '✅ Novos Serviços encontrados' : '❌ Nenhum novo Serviço encontrado'}
+                    ${diff.includes('@Module') ? '✅ Novos Módulos encontrados' : '❌ Nenhum novo Módulo encontrado'}
+                  `;
+
+                  const fullReport = `
+                    ## 🚀 Relatório Completo
+                    ${process.env.CORE_REPORT}
+                    ${nestAnalysis}
+                    ## 📈 Estatísticas
+                    - ${diff.split('\n').filter(line => !line.startsWith('diff --git') && !line.startsWith('index') && !line.startsWith('---') && !line.startsWith('+++') && !line.startsWith('@@')).length} linhas de código alteradas
+                    - ${(diff.match(/\+/g) || []).length} linhas adicionadas
+                    - ${(diff.match(/\-/g) || []).length} linhas removidas
+                  `;
+
+                  await github.rest.issues.createComment({
+                      owner: context.repo.owner,
+                      repo: context.repo.repo,
+                      issue_number: context.payload.pull_request.number,
+                      body: fullReport,
+                  });
+              
+
+            
\ No newline at end of file


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 2 out of 3 changed files in this pull request and generated 4 comments.

<details>
<summary>Files not reviewed (1)</summary>

* **.github/codeowners**: Language not supported
</details>



state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T19:08:19Z
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 2 out of 3 changed files in this pull request and generated 1 comment.

<details>
<summary>Files not reviewed (1)</summary>

* **.github/codeowners**: Language not supported
</details>



state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T19:35:39Z
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 2 out of 3 changed files in this pull request and generated 2 comments.

<details>
<summary>Files not reviewed (1)</summary>

* **.github/codeowners**: Language not supported
</details>



state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T19:37:31Z
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 2 out of 3 changed files in this pull request and generated no comments.

<details>
<summary>Files not reviewed (1)</summary>

* **.github/codeowners**: Language not supported
</details>

<details>
<summary>Comments suppressed due to low confidence (1)</summary>

**.github/pull_request_template.md:3**
* [nitpick] Consider capitalizing 'Copilot' for consistency with its usage elsewhere in the documentation.
```
<!-- O copilot preencherá automaticamente -->
```
</details>


state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T19:41:36Z
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 2 out of 3 changed files in this pull request and generated no comments.

<details>
<summary>Files not reviewed (1)</summary>

* **.github/codeowners**: Language not supported
</details>

<details>
<summary>Comments suppressed due to low confidence (1)</summary>

**.github/workflows/copilot-reviews.yml:69**
* [nitpick] Consider adding tests to validate that the diff statistics logic accurately counts all lines impacted by changes across different diff formats.
```
                    - ${diff.split('\n').filter(line => !line.startsWith('diff --git') && !line.startsWith('index') && !line.startsWith('---') && !line.startsWith('+++') && !line.startsWith('@@')).length} linhas de código alteradas
```
</details>


state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T19:47:52Z

Review comments:
diff_hunk: @@ -0,0 +1,81 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run NestJS tests
+              run: npm run test -- --watch=false --passWithNoTests
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acomplamentos indevidos na pasta core
+                CORE_VIOLATIONS=$(find src/core -type f \( -name "*.ts" -o -name "*.js" \) \
+                -exec grep -lE "from ['\"]src/(application|domain|infra)|@Injectable|@Controller" {} + || true)
+
+                if [ -n "$CORE_VIOLATIONS" ]; then
+                    echo "::warning:: Possíveis violações na camada core:"
+                    echo "$CORE_VIOLATIONS"
+                    echo "core_violations=true" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## 🔴 Violações de Arquitetura\n'$CORE_VIOLATIONS | jq -Rs .)" >> $GITHUB_OUTPUT)
path: .github/workflows/copilot-reviews.yml
user: login: Copilot
body: Extra closing parenthesis detected at the end of the echo command. Remove the trailing ')' to correct the syntax.
```suggestion
                    echo "CORE_REPORT=$(echo -e '## 🔴 Violações de Arquitetura\n'$CORE_VIOLATIONS | jq -Rs .)" >> $GITHUB_OUTPUT
```
created_at: 2025-04-04T19:08:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,81 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run NestJS tests
+              run: npm run test -- --watch=false --passWithNoTests
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acomplamentos indevidos na pasta core
+                CORE_VIOLATIONS=$(find src/core -type f \( -name "*.ts" -o -name "*.js" \) \
+                -exec grep -lE "from ['\"]src/(application|domain|infra)|@Injectable|@Controller" {} + || true)
+
+                if [ -n "$CORE_VIOLATIONS" ]; then
+                    echo "::warning:: Possíveis violações na camada core:"
+                    echo "$CORE_VIOLATIONS"
+                    echo "core_violations=true" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## 🔴 Violações de Arquitetura\n'$CORE_VIOLATIONS | jq -Rs .)" >> $GITHUB_OUTPUT)
+                else
+                    echo "core_violations=false" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## ✅ Nenhuma violação encontrada na camada core' | jq -Rs .)" >> $GITHUB_OUTPUT
+                fi
+
+            - name: Generate Full Report
+              uses: actions/github-script@v6
+              env:
+                CORE_REPORT: ${{ steps.core_check.outputs.CORE_REPORT }}
+              with:
+                script: |
+                  const { data: diff } = await github.rest.pulls.get({
+                      owner: context.repo.owner,
+                      repo: context.repo.repo,
+                      pull_number: context.payload.pull_request.number,
+                      mediaType: { format: 'diff' },
+                  });
+                
+                  const nestAnalysis = `
+                    ## 🔍 Análise de Código
+                    ${diff.includes('@Controller') ? '✅ Novos Controllers encontrados' : '❌ Nenhum novo Controller encontrado'}
+                    ${diff.includes('@Injectable') ? '✅ Novos Serviços encontrados' : '❌ Nenhum novo Serviço encontrado'}
+                    ${diff.includes('@Module') ? '✅ Novos Módulos encontrados' : '❌ Nenhum novo Módulo encontrado'}
+                  `;
+
+                  const fullReport = `
+                    ## 🚀 Relatório Completo
+                    ${process.env.CORE_REPORT}
+                    ${nestAnalysis}
+                    ## 📈 Estatísticas
+                    - ${diff.split('\n').length} linhas de código alteradas
+                    - ${(diff.match(/\+g) || []).length} linhas adicionadas
+                    - ${(diff.match(/\+g) || []).length} linhas adicionadas
+                    - ${(diff.match(/\-g) || []).length} linhas removidas
path: .github/workflows/copilot-reviews.yml
user: login: Copilot
body: The regex pattern appears to be incorrect. It likely should be '/\+/g' to properly match '+' characters when counting added lines.
```suggestion
                    - ${(diff.match(/\+/g) || []).length} linhas adicionadas
                    - ${(diff.match(/\+/g) || []).length} linhas adicionadas
                    - ${(diff.match(/\-/g) || []).length} linhas removidas
```
created_at: 2025-04-04T19:08:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,81 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run NestJS tests
+              run: npm run test -- --watch=false --passWithNoTests
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acomplamentos indevidos na pasta core
+                CORE_VIOLATIONS=$(find src/core -type f \( -name "*.ts" -o -name "*.js" \) \
+                -exec grep -lE "from ['\"]src/(application|domain|infra)|@Injectable|@Controller" {} + || true)
+
+                if [ -n "$CORE_VIOLATIONS" ]; then
+                    echo "::warning:: Possíveis violações na camada core:"
+                    echo "$CORE_VIOLATIONS"
+                    echo "core_violations=true" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## 🔴 Violações de Arquitetura\n'$CORE_VIOLATIONS | jq -Rs .)" >> $GITHUB_OUTPUT)
+                else
+                    echo "core_violations=false" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## ✅ Nenhuma violação encontrada na camada core' | jq -Rs .)" >> $GITHUB_OUTPUT
+                fi
+
+            - name: Generate Full Report
+              uses: actions/github-script@v6
+              env:
+                CORE_REPORT: ${{ steps.core_check.outputs.CORE_REPORT }}
+              with:
+                script: |
+                  const { data: diff } = await github.rest.pulls.get({
+                      owner: context.repo.owner,
+                      repo: context.repo.repo,
+                      pull_number: context.payload.pull_request.number,
+                      mediaType: { format: 'diff' },
+                  });
+                
+                  const nestAnalysis = `
+                    ## 🔍 Análise de Código
+                    ${diff.includes('@Controller') ? '✅ Novos Controllers encontrados' : '❌ Nenhum novo Controller encontrado'}
+                    ${diff.includes('@Injectable') ? '✅ Novos Serviços encontrados' : '❌ Nenhum novo Serviço encontrado'}
+                    ${diff.includes('@Module') ? '✅ Novos Módulos encontrados' : '❌ Nenhum novo Módulo encontrado'}
+                  `;
+
+                  const fullReport = `
+                    ## 🚀 Relatório Completo
+                    ${process.env.CORE_REPORT}
+                    ${nestAnalysis}
+                    ## 📈 Estatísticas
+                    - ${diff.split('\n').length} linhas de código alteradas
+                    - ${(diff.match(/\+g) || []).length} linhas adicionadas
+                    - ${(diff.match(/\+g) || []).length} linhas adicionadas
path: .github/workflows/copilot-reviews.yml
user: login: Copilot
body: This line duplicates the count of added lines. Remove or modify this duplicated metric to avoid redundancy.
```suggestion

```
created_at: 2025-04-04T19:08:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,81 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run NestJS tests
+              run: npm run test -- --watch=false --passWithNoTests
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acomplamentos indevidos na pasta core
+                CORE_VIOLATIONS=$(find src/core -type f \( -name "*.ts" -o -name "*.js" \) \
+                -exec grep -lE "from ['\"]src/(application|domain|infra)|@Injectable|@Controller" {} + || true)
+
+                if [ -n "$CORE_VIOLATIONS" ]; then
+                    echo "::warning:: Possíveis violações na camada core:"
+                    echo "$CORE_VIOLATIONS"
+                    echo "core_violations=true" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## 🔴 Violações de Arquitetura\n'$CORE_VIOLATIONS | jq -Rs .)" >> $GITHUB_OUTPUT)
+                else
+                    echo "core_violations=false" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## ✅ Nenhuma violação encontrada na camada core' | jq -Rs .)" >> $GITHUB_OUTPUT
+                fi
+
+            - name: Generate Full Report
+              uses: actions/github-script@v6
+              env:
+                CORE_REPORT: ${{ steps.core_check.outputs.CORE_REPORT }}
+              with:
+                script: |
+                  const { data: diff } = await github.rest.pulls.get({
+                      owner: context.repo.owner,
+                      repo: context.repo.repo,
+                      pull_number: context.payload.pull_request.number,
+                      mediaType: { format: 'diff' },
+                  });
+                
+                  const nestAnalysis = `
+                    ## 🔍 Análise de Código
+                    ${diff.includes('@Controller') ? '✅ Novos Controllers encontrados' : '❌ Nenhum novo Controller encontrado'}
+                    ${diff.includes('@Injectable') ? '✅ Novos Serviços encontrados' : '❌ Nenhum novo Serviço encontrado'}
+                    ${diff.includes('@Module') ? '✅ Novos Módulos encontrados' : '❌ Nenhum novo Módulo encontrado'}
+                  `;
+
+                  const fullReport = `
+                    ## 🚀 Relatório Completo
+                    ${process.env.CORE_REPORT}
+                    ${nestAnalysis}
+                    ## 📈 Estatísticas
+                    - ${diff.split('\n').length} linhas de código alteradas
+                    - ${(diff.match(/\+g) || []).length} linhas adicionadas
+                    - ${(diff.match(/\+g) || []).length} linhas adicionadas
+                    - ${(diff.match(/\-g) || []).length} linhas removidas
path: .github/workflows/copilot-reviews.yml
user: login: Copilot
body: The regex used for counting removed lines appears to be incorrect. It likely should be '/\-/g' to properly match '-' characters.
```suggestion
                    - ${(diff.match(/\+/g) || []).length} linhas adicionadas
                    - ${(diff.match(/\+/g) || []).length} linhas adicionadas
                    - ${(diff.match(/\-/g) || []).length} linhas removidas
```
created_at: 2025-04-04T19:08:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,83 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+permissions:
+    pull-requests: write
+    contents: read
+    issues: write
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acomplamentos indevidos na pasta core
path: .github/workflows/copilot-reviews.yml
user: login: Copilot
body: Typo in comment: 'Acomplamentos' should be corrected to 'Acoplamentos' for clarity.
```suggestion
                # Acoplamentos indevidos na pasta core
```
created_at: 2025-04-04T19:35:39Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,83 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+permissions:
+    pull-requests: write
+    contents: read
+    issues: write
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acoplamentos indevidos na pasta core
+                CORE_VIOLATIONS=$(find src/core -type f \( -name "*.ts" -o -name "*.js" \) \
+                -exec grep -lE "from ['\"]src/(application|domain|infra)|@Injectable|@Controller" {} + || true)
+
path: .github/workflows/copilot-reviews.yml
user: login: Copilot
body: Consider grouping the alternatives in the regular expression with parentheses to ensure the intended operator precedence, for example: "(from ['\"]src/(application|domain|infra))|(@Injectable)|(@Controller)".
```suggestion
                -exec grep -lE "(from ['\"]src/(application|domain|infra))|(@Injectable)|(@Controller)" {} + || true)
```
created_at: 2025-04-04T19:37:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,83 @@
+name: Copilot PR Reviews
+on: [pull_request]
+
+permissions:
+    pull-requests: write
+    contents: read
+    issues: write
+
+jobs:
+    analyze:
+        runs-on: ubuntu-latest
+        steps:
+            - uses: actions/checkout@v4
+
+            - name: Set up Node.js
+              uses: actions/setup-node@v3
+              with:
+                  node-version: '22'
+                  cache: 'npm'
+
+            - name: Install dependencies
+              run: npm ci
+
+            - name: Run ESLint
+              run: npm run lint -- --max-warnings=0
+
+            - name: Core Business Rules Validation
+              id: core_check
+              run: |
+                # Acoplamentos indevidos na pasta core
+                CORE_VIOLATIONS=$(find src/core -type f \( -name "*.ts" -o -name "*.js" \) \
+                -exec grep -lE "from ['\"]src/(application|domain|infra)|@Injectable|@Controller" {} + || true)
+
+                if [ -n "$CORE_VIOLATIONS" ]; then
+                    echo "::warning:: Possíveis violações na camada core:"
+                    echo "$CORE_VIOLATIONS"
+                    echo "core_violations=true" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## 🔴 Violações de Arquitetura\n'$CORE_VIOLATIONS | jq -Rs .)" >> $GITHUB_OUTPUT
+                else
+                    echo "core_violations=false" >> $GITHUB_OUTPUT
+                    echo "CORE_REPORT=$(echo -e '## ✅ Nenhuma violação encontrada na camada core' | jq -Rs .)" >> $GITHUB_OUTPUT
+                fi
+
+            - name: Generate Full Report
+              uses: actions/github-script@v6
+              env:
+                CORE_REPORT: ${{ steps.core_check.outputs.CORE_REPORT }}
+              with:
+                github-token: ${{ secrets.GITHUB_TOKEN }}
+                script: |
+                  const { data: diff } = await github.rest.pulls.get({
+                      owner: context.repo.owner,
+                      repo: context.repo.repo,
+                      pull_number: context.payload.pull_request.number,
+                      mediaType: { format: 'diff' },
+                  });
+                
+                  const nestAnalysis = `
+                    ## 🔍 Análise de Código
+                    ${diff.includes('@Controller') ? '✅ Novos Controllers encontrados' : '❌ Nenhum novo Controller encontrado'}
+                    ${diff.includes('@Injectable') ? '✅ Novos Serviços encontrados' : '❌ Nenhum novo Serviço encontrado'}
+                    ${diff.includes('@Module') ? '✅ Novos Módulos encontrados' : '❌ Nenhum novo Módulo encontrado'}
+                  `;
+
+                  const fullReport = `
+                    ## 🚀 Relatório Completo
+                    ${process.env.CORE_REPORT}
+                    ${nestAnalysis}
+                    ## 📈 Estatísticas
+                    - ${diff.split('\n').length} linhas de código alteradas
path: .github/workflows/copilot-reviews.yml
user: login: Copilot
body: [nitpick] The calculation of total changed lines using `diff.split('\n').length` may include diff header lines and context markers. Consider filtering out non-code lines to provide a more accurate statistic.
```suggestion
                    - ${diff.split('\n').filter(line => !line.startsWith('diff --git') && !line.startsWith('index') && !line.startsWith('---') && !line.startsWith('+++') && !line.startsWith('@@')).length} linhas de código alteradas
```
created_at: 2025-04-04T19:37:30Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-04T19:30:14Z
body: 
  ## 🚀 Relatório Completo
  "## ✅ Nenhuma violação encontrada na camada core\n"
  
  ## 🔍 Análise de Código
  ✅ Novos Controllers encontrados
  ✅ Novos Serviços encontrados
  ✅ Novos Módulos encontrados

  ## 📈 Estatísticas
  - 132 linhas de código alteradas
  - 124 linhas adicionadas
  - 73 linhas removidas

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-04T19:36:55Z
body: 
  ## 🚀 Relatório Completo
  "## ✅ Nenhuma violação encontrada na camada core\n"
  
  ## 🔍 Análise de Código
  ✅ Novos Controllers encontrados
  ✅ Novos Serviços encontrados
  ✅ Novos Módulos encontrados

  ## 📈 Estatísticas
  - 132 linhas de código alteradas
  - 124 linhas adicionadas
  - 73 linhas removidas

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-04T19:40:18Z
body: 
  ## 🚀 Relatório Completo
  "## ✅ Nenhuma violação encontrada na camada core\n"
  
  ## 🔍 Análise de Código
  ✅ Novos Controllers encontrados
  ✅ Novos Serviços encontrados
  ✅ Novos Módulos encontrados

  ## 📈 Estatísticas
  - 131 linhas de código alteradas
  - 126 linhas adicionadas
  - 78 linhas removidas

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-04T19:40:36Z
body: 
  ## 🚀 Relatório Completo
  "## ✅ Nenhuma violação encontrada na camada core\n"
  
  ## 🔍 Análise de Código
  ✅ Novos Controllers encontrados
  ✅ Novos Serviços encontrados
  ✅ Novos Módulos encontrados

  ## 📈 Estatísticas
  - 116 linhas de código alteradas
  - 126 linhas adicionadas
  - 78 linhas removidas

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-04T19:45:49Z
body: 
  ## 🚀 Relatório Completo
  "## ✅ Nenhuma violação encontrada na camada core\n"
  
  ## 🔍 Análise de Código
  ✅ Novos Controllers encontrados
  ✅ Novos Serviços encontrados
  ✅ Novos Módulos encontrados

  ## 📈 Estatísticas
  - 115 linhas de código alteradas
  - 125 linhas adicionadas
  - 74 linhas removidas

author_association: NONE