Skip to content

Commit de9aa19

Browse files
committed
implementa issue #2
1 parent 98bc663 commit de9aa19

13 files changed

Lines changed: 725 additions & 115 deletions

File tree

.github/skills/issue-to-brief/SKILL.md

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,29 @@
11
---
22
name: issue-to-brief
3-
description: Analisa uma issue do GitHub e transforma em um briefing tecnico acionavel para este projeto Spring Boot. Use quando o pedido mencionar issue, ticket, backlog, bug, feature, requisito ou criterios de aceite vindos do GitHub, especialmente antes de implementar com custom agents. Ajuda a ler a issue via MCP, identificar impacto no codigo, preservar contrato HTTP e preparar handoff para refatoracao e testes.
3+
description: Analisa uma issue do GitHub e transforma em um briefing tecnico acionavel para este projeto Spring Boot. Use antes de implementar, quando o pedido envolver issue, ticket, backlog, bug, feature, requisito ou criterios de aceite, para mapear impacto no codigo, preservar contrato HTTP e preparar handoff para refactor e testes.
4+
argument-hint: [issue] [contexto adicional] [restricoes ou contrato a preservar]
45
---
56

6-
# Skill issue-to-brief
7+
# Issue To Brief
78

8-
Conduza a etapa de entendimento e preparacao antes da implementacao.
9+
Esta skill conduz a etapa de entendimento e preparacao antes da implementacao.
910

10-
## Fluxo
11+
## Quando usar esta skill
12+
13+
Use esta skill quando precisar:
14+
15+
- ler uma issue do GitHub e converter em briefing tecnico objetivo
16+
- separar escopo confirmado de suposicoes antes de codar
17+
- mapear impacto provavel no backend Spring Boot deste repositorio
18+
- preparar handoff claro para refactor e para testes
19+
20+
Nao use esta skill para resumir o trabalho ja concluido. Nesse caso, use a skill `pr-summary`.
21+
22+
## Objetivo
23+
24+
Reduzir ambiguidade da issue e deixar a implementacao pronta para seguir com contexto suficiente para os proximos agents.
25+
26+
## Procedimento
1127

1228
1. Ler a issue e, se existirem, comentarios, checklist, labels e criterios de aceite via GitHub MCP.
1329
2. Resumir o objetivo funcional em linguagem direta.
@@ -17,7 +33,7 @@ Conduza a etapa de entendimento e preparacao antes da implementacao.
1733
6. Preparar um handoff explicito para o custom agent de refatoracao.
1834
7. Preparar um handoff explicito para o custom agent de testes.
1935

20-
## Estrutura de saida obrigatoria
36+
## Saida obrigatoria
2137

2238
Responder com estas secoes, nesta ordem:
2339

@@ -61,7 +77,7 @@ Handoff para test
6177
- Evidencias esperadas:
6278
```
6379

64-
## Heuristicas para este repositorio
80+
## Como analisar neste repositorio
6581

6682
Ao analisar impacto provavel, considerar primeiro:
6783

@@ -74,6 +90,15 @@ Ao analisar impacto provavel, considerar primeiro:
7490
- `src/main/java/br/com/devsuperior/dev_xp_ai/util`
7591
- `src/test/java/br/com/devsuperior/dev_xp_ai`
7692

93+
## Como preencher a saida
94+
95+
- Em `Resumo da issue`, priorize objetivo funcional, contexto operacional e criterios de aceite explicitos.
96+
- Em `Escopo confirmado`, diferencie pedido explicito de extrapolacao tecnica.
97+
- Em `Impacto provavel no codigo`, cite apenas camadas plausiveis; se uma camada nao parecer afetada, diga isso.
98+
- Em `Invariantes e restricoes`, trate contrato HTTP observavel como item critico: path, verbo, status, headers e JSON.
99+
- Em `Pontos em aberto`, registre lacunas reais antes de sugerir implementacao.
100+
- Nos handoffs, escreva instrucoes que possam ser usadas diretamente pelos agents `refactor` e `test`.
101+
77102
## Regras
78103

79104
1. Nao comecar implementando.
@@ -97,6 +122,20 @@ Para o `test`:
97122
- informar cenarios de sucesso e erro
98123
- cobrar validacao de status, body, headers e cobertura
99124

125+
## Exemplo de uso
126+
127+
Entrada:
128+
129+
```text
130+
/issue-to-brief issue #456 sobre ajuste de validacao no endpoint de clientes sem mudar o contrato HTTP
131+
```
132+
133+
Saida esperada:
134+
135+
- briefing com escopo confirmado e lacunas visiveis
136+
- impacto provavel no codigo deste projeto
137+
- handoff claro para refactor e para test
138+
100139
## Resultado esperado
101140

102141
Um bom resultado reduz ambiguidade da issue e deixa a implementacao pronta para seguir, com contexto suficiente para o agent de refatoracao atuar primeiro e o agent de testes atuar em seguida.

.github/skills/pr-summary/SKILL.md

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
---
22
name: pr-summary
3-
description: Gera um resumo tecnico final de implementacao pronto para demonstracao, comentario de pull request ou fechamento de tarefa. Use quando o trabalho ja tiver sido implementado e testado, especialmente apos usar custom agents de refatoracao e testes. Ajuda a consolidar mudancas, comandos executados, cobertura, riscos, relacao com a issue e proximos passos sem omitir evidencias.
3+
description: Gera um resumo tecnico final de implementacao para demo, comentario de pull request ou fechamento de tarefa. Use quando a mudanca ja tiver sido implementada e validada e voce precisar consolidar evidencias, testes, cobertura, riscos e relacao com a issue sem inventar fatos.
4+
argument-hint: [issue ou contexto] [arquivos alterados] [testes/comandos executados]
45
---
56

6-
# Skill pr-summary
7+
# PR Summary
78

8-
Conduza a etapa final de fechamento tecnico depois da implementacao e da validacao.
9+
Esta skill conduz o fechamento tecnico depois da implementacao e da validacao.
10+
11+
## Quando usar esta skill
12+
13+
Use esta skill quando precisar:
14+
15+
- transformar uma implementacao concluida em um resumo final apresentavel
16+
- preparar texto para comentario de PR, demo ou encerramento de tarefa
17+
- consolidar mudancas, testes executados, cobertura, riscos e pendencias com base em evidencia
18+
19+
Nao use esta skill para entender uma issue antes de implementar. Nesse caso, use a skill `issue-to-brief`.
920

1021
## Objetivo
1122

12-
Produzir um resumo final consistente, auditavel e facil de apresentar.
23+
Produzir um resumo final consistente, auditavel e facil de apresentar, preservando a separacao entre fato observado e inferencia.
1324

14-
## Fluxo
25+
## Procedimento
1526

1627
1. Reunir o contexto da issue original.
1728
2. Reunir o que foi alterado no codigo de producao.
@@ -21,7 +32,7 @@ Produzir um resumo final consistente, auditavel e facil de apresentar.
2132
6. Registrar riscos, limitacoes e pendencias.
2233
7. Fechar com uma relacao explicita entre issue, implementacao e validacao.
2334

24-
## Estrutura de saida obrigatoria
35+
## Saida obrigatoria
2536

2637
Responder com estas secoes, nesta ordem:
2738

@@ -51,6 +62,14 @@ Pronto para PR
5162
- Relacao com a issue:
5263
```
5364

65+
## Como preencher a saida
66+
67+
- Use apenas fatos que estejam visiveis no contexto, no diff, nos arquivos alterados ou nos resultados de comando.
68+
- Se algum ponto relevante nao estiver disponivel, diga explicitamente que a evidencia nao foi encontrada.
69+
- Ao mencionar cobertura, informe numeros somente quando houver relatorio ou saida concreta.
70+
- Ao mencionar contrato HTTP, deixe claro se o contrato foi preservado ou alterado e cite o que mudou.
71+
- Ao mencionar riscos, prefira riscos observaveis, regressivos ou de rollout, e nao frases genericas.
72+
5473
## Regras
5574

5675
1. Nao afirmar execucao, cobertura ou sucesso de testes sem evidencia no contexto.
@@ -59,9 +78,23 @@ Pronto para PR
5978
4. Se a issue tiver criterios de aceite, dizer como cada um foi atendido ou o que ficou pendente.
6079
5. Se houve mudanca de contrato HTTP, explicitar de forma objetiva e concreta.
6180

81+
## Exemplo de uso
82+
83+
Entrada:
84+
85+
```text
86+
/pr-summary issue #123, alteracoes no endpoint de pedidos, testes de integracao executados
87+
```
88+
89+
Saida esperada:
90+
91+
- resumo final com secoes fixas
92+
- relacao objetiva entre issue, implementacao e validacao
93+
- riscos e pendencias explicitados sem exagero
94+
6295
## Fechamento curto para demonstracao
6396

64-
Quando fizer sentido, terminar com um bloco curto de resumo executivo contendo:
97+
Quando fizer sentido, termine com um bloco curto de resumo executivo contendo:
6598

6699
- objetivo da issue
67100
- o que foi implementado

DEMO.md

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,15 @@ Execute os testes relevantes, informe os comandos executados, o resultado e a co
110110

111111
### Prompt 4: Gerar o fechamento final
112112

113+
Antes faça:
114+
- altere a branch para `feature/tabela`
115+
- git add e git commit das mudanças
116+
- git push
117+
113118
```text
114119
Use a skill `pr-summary` #file:.github/skills/pr-summary/SKILL.md para gerar o fechamento técnico desta execução.
115-
116-
Quero um resumo final com:
117-
- issue atendida
118-
- o que foi alterado
119-
- classes principais afetadas
120-
- testes criados ou ajustados
121-
- comandos executados
122-
- resultado dos testes
123-
- cobertura JaCoCo
124-
- riscos e limitações
125-
- um resumo curto pronto para PR
120+
O commit e push já foi feito, mapeie a branch atual e seguida para próxima tarefa.
121+
Faça o PR dessa branch para a main, usando via GitHub MCP, usando o resumo curto gerado e referenciando a issue #2.
126122
```
127123

128124
## O que observar durante a apresentação

src/main/java/br/com/devsuperior/dev_xp_ai/entity/DeveloperEntity.java renamed to src/main/java/br/com/devsuperior/dev_xp_ai/entity/DeveloperExperienceEntity.java

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,14 @@
44
import org.springframework.data.relational.core.mapping.Column;
55
import org.springframework.data.relational.core.mapping.Table;
66

7-
@Table("tb_developer")
8-
public class DeveloperEntity {
7+
@Table("tb_developer_experience")
8+
public class DeveloperExperienceEntity {
99

1010
@Id
1111
private Long id;
1212

13-
@Column("full_name")
14-
private String fullName;
15-
16-
@Column("email")
17-
private String email;
18-
19-
@Column("nickname")
20-
private String nickname;
21-
22-
@Column("uf")
23-
private String uf;
13+
@Column("user_id")
14+
private Long userId;
2415

2516
@Column("years_of_experience")
2617
private Integer yearsOfExperience;
@@ -34,17 +25,13 @@ public class DeveloperEntity {
3425
@Column("skills")
3526
private String skills;
3627

37-
public DeveloperEntity() {
28+
public DeveloperExperienceEntity() {
3829
}
3930

40-
public DeveloperEntity(Long id, String fullName, String email, String nickname,
41-
String uf, Integer yearsOfExperience, String primaryLanguage,
42-
Boolean interestedInAi, String skills) {
31+
public DeveloperExperienceEntity(Long id, Long userId, Integer yearsOfExperience,
32+
String primaryLanguage, Boolean interestedInAi, String skills) {
4333
this.id = id;
44-
this.fullName = fullName;
45-
this.email = email;
46-
this.nickname = nickname;
47-
this.uf = uf;
34+
this.userId = userId;
4835
this.yearsOfExperience = yearsOfExperience;
4936
this.primaryLanguage = primaryLanguage;
5037
this.interestedInAi = interestedInAi;
@@ -54,17 +41,8 @@ public DeveloperEntity(Long id, String fullName, String email, String nickname,
5441
public Long getId() { return id; }
5542
public void setId(Long id) { this.id = id; }
5643

57-
public String getFullName() { return fullName; }
58-
public void setFullName(String fullName) { this.fullName = fullName; }
59-
60-
public String getEmail() { return email; }
61-
public void setEmail(String email) { this.email = email; }
62-
63-
public String getNickname() { return nickname; }
64-
public void setNickname(String nickname) { this.nickname = nickname; }
65-
66-
public String getUf() { return uf; }
67-
public void setUf(String uf) { this.uf = uf; }
44+
public Long getUserId() { return userId; }
45+
public void setUserId(Long userId) { this.userId = userId; }
6846

6947
public Integer getYearsOfExperience() { return yearsOfExperience; }
7048
public void setYearsOfExperience(Integer yearsOfExperience) { this.yearsOfExperience = yearsOfExperience; }
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package br.com.devsuperior.dev_xp_ai.entity;
2+
3+
import org.springframework.data.annotation.Id;
4+
import org.springframework.data.relational.core.mapping.Column;
5+
import org.springframework.data.relational.core.mapping.Table;
6+
7+
@Table("tb_developer")
8+
public class DeveloperUserEntity {
9+
10+
@Id
11+
private Long id;
12+
13+
@Column("full_name")
14+
private String fullName;
15+
16+
@Column("email")
17+
private String email;
18+
19+
@Column("nickname")
20+
private String nickname;
21+
22+
@Column("uf")
23+
private String uf;
24+
25+
public DeveloperUserEntity() {
26+
}
27+
28+
public DeveloperUserEntity(Long id, String fullName, String email, String nickname, String uf) {
29+
this.id = id;
30+
this.fullName = fullName;
31+
this.email = email;
32+
this.nickname = nickname;
33+
this.uf = uf;
34+
}
35+
36+
public Long getId() { return id; }
37+
public void setId(Long id) { this.id = id; }
38+
39+
public String getFullName() { return fullName; }
40+
public void setFullName(String fullName) { this.fullName = fullName; }
41+
42+
public String getEmail() { return email; }
43+
public void setEmail(String email) { this.email = email; }
44+
45+
public String getNickname() { return nickname; }
46+
public void setNickname(String nickname) { this.nickname = nickname; }
47+
48+
public String getUf() { return uf; }
49+
public void setUf(String uf) { this.uf = uf; }
50+
}
51+
52+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package br.com.devsuperior.dev_xp_ai.repository;
2+
3+
import br.com.devsuperior.dev_xp_ai.entity.DeveloperExperienceEntity;
4+
import org.springframework.data.jdbc.repository.query.Query;
5+
import org.springframework.data.repository.CrudRepository;
6+
import org.springframework.data.repository.query.Param;
7+
import org.springframework.stereotype.Repository;
8+
9+
import java.util.List;
10+
import java.util.Optional;
11+
12+
@Repository
13+
public interface DeveloperExperienceRepository extends CrudRepository<DeveloperExperienceEntity, Long> {
14+
15+
Optional<DeveloperExperienceEntity> findByUserId(Long userId);
16+
17+
@Query("""
18+
SELECT e.* FROM tb_developer_experience e
19+
INNER JOIN tb_developer u ON u.id = e.user_id
20+
WHERE (:uf IS NULL OR u.uf = :uf)
21+
AND (:language IS NULL OR LOWER(e.primary_language) = LOWER(:language))
22+
ORDER BY u.id
23+
""")
24+
List<DeveloperExperienceEntity> findAllByFilters(@Param("uf") String uf, @Param("language") String language);
25+
}
26+
27+

src/main/java/br/com/devsuperior/dev_xp_ai/repository/DeveloperRepository.java

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package br.com.devsuperior.dev_xp_ai.repository;
2+
3+
import br.com.devsuperior.dev_xp_ai.entity.DeveloperUserEntity;
4+
import org.springframework.data.repository.CrudRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface DeveloperUserRepository extends CrudRepository<DeveloperUserEntity, Long> {
9+
10+
boolean existsByEmailIgnoreCase(String email);
11+
12+
boolean existsByNicknameIgnoreCase(String nickname);
13+
}
14+

0 commit comments

Comments
 (0)