33import br .com .devsuperior .dev_xp_ai .dto .DeveloperCreateRequest ;
44import br .com .devsuperior .dev_xp_ai .dto .DeveloperResponse ;
55import br .com .devsuperior .dev_xp_ai .dto .UpdateExperienceRequest ;
6- import br .com .devsuperior .dev_xp_ai .entity .DeveloperEntity ;
6+ import br .com .devsuperior .dev_xp_ai .entity .DeveloperExperienceEntity ;
7+ import br .com .devsuperior .dev_xp_ai .entity .DeveloperUserEntity ;
78import br .com .devsuperior .dev_xp_ai .exception .ConflictException ;
89import br .com .devsuperior .dev_xp_ai .exception .DeveloperNotFoundException ;
9- import br .com .devsuperior .dev_xp_ai .repository .DeveloperRepository ;
10+ import br .com .devsuperior .dev_xp_ai .repository .DeveloperExperienceRepository ;
11+ import br .com .devsuperior .dev_xp_ai .repository .DeveloperUserRepository ;
1012import br .com .devsuperior .dev_xp_ai .util .TextNormalizer ;
1113import org .slf4j .Logger ;
1214import org .slf4j .LoggerFactory ;
@@ -32,10 +34,13 @@ public class DeveloperService {
3234 "RR" , "SC" , "SP" , "SE" , "TO"
3335 );
3436
35- private final DeveloperRepository developerRepository ;
37+ private final DeveloperUserRepository developerUserRepository ;
38+ private final DeveloperExperienceRepository developerExperienceRepository ;
3639
37- public DeveloperService (DeveloperRepository developerRepository ) {
38- this .developerRepository = developerRepository ;
40+ public DeveloperService (DeveloperUserRepository developerUserRepository ,
41+ DeveloperExperienceRepository developerExperienceRepository ) {
42+ this .developerUserRepository = developerUserRepository ;
43+ this .developerExperienceRepository = developerExperienceRepository ;
3944 }
4045
4146 public DeveloperResponse createDeveloper (DeveloperCreateRequest request ) {
@@ -56,32 +61,39 @@ public DeveloperResponse createDeveloper(DeveloperCreateRequest request) {
5661 .toList ();
5762 String skillsCsv = TextNormalizer .serializeSkills (normalizedSkillsList );
5863
59- if (developerRepository .existsByEmailIgnoreCase (normalizedEmail )) {
64+ if (developerUserRepository .existsByEmailIgnoreCase (normalizedEmail )) {
6065 throw new ConflictException ("Email ja cadastrado" ,
6166 List .of ("Ja existe um desenvolvedor com este email." ));
6267 }
6368
64- if (developerRepository .existsByNicknameIgnoreCase (normalizedNickname )) {
69+ if (developerUserRepository .existsByNicknameIgnoreCase (normalizedNickname )) {
6570 throw new ConflictException ("Nickname ja cadastrado" ,
6671 List .of ("Ja existe um desenvolvedor com este nickname." ));
6772 }
6873
69- DeveloperEntity entity = new DeveloperEntity (
74+ DeveloperUserEntity userEntity = new DeveloperUserEntity (
7075 null ,
7176 normalizedName ,
7277 normalizedEmail ,
7378 normalizedNickname ,
74- normalizedUf ,
79+ normalizedUf
80+ );
81+ DeveloperUserEntity savedUser = developerUserRepository .save (userEntity );
82+ log .info ("[correlationId={}] Dados de usuario persistidos: id={}" , MDC .get ("correlationId" ), savedUser .getId ());
83+
84+ DeveloperExperienceEntity experienceEntity = new DeveloperExperienceEntity (
85+ null ,
86+ savedUser .getId (),
7587 request .yearsOfExperience (),
7688 normalizedLanguage ,
7789 request .interestedInAi (),
7890 skillsCsv
7991 );
92+ DeveloperExperienceEntity savedExperience = developerExperienceRepository .save (experienceEntity );
93+ log .info ("[correlationId={}] Dados de experiencia persistidos: userId={}" , MDC .get ("correlationId" ), savedUser .getId ());
8094
81- DeveloperEntity saved = developerRepository .save (entity );
82-
83- log .info ("[correlationId={}] Developer criado com sucesso: id={}" , MDC .get ("correlationId" ), saved .getId ());
84- return toResponse (saved );
95+ log .info ("[correlationId={}] Developer criado com sucesso: id={}" , MDC .get ("correlationId" ), savedUser .getId ());
96+ return toResponse (savedUser , savedExperience );
8597 }
8698
8799 public List <DeveloperResponse > listDevelopers (String uf , String language ) {
@@ -97,10 +109,15 @@ public List<DeveloperResponse> listDevelopers(String uf, String language) {
97109
98110 String normalizedLanguage = (language != null && !language .isBlank ()) ? language .trim () : null ;
99111
100- List <DeveloperResponse > result = developerRepository
101- .findAllByFilters (normalizedUf , normalizedLanguage )
102- .stream ()
103- .map (this ::toResponse )
112+ List <DeveloperExperienceEntity > experiences = developerExperienceRepository
113+ .findAllByFilters (normalizedUf , normalizedLanguage );
114+
115+ List <DeveloperResponse > result = experiences .stream ()
116+ .map (exp -> {
117+ DeveloperUserEntity user = developerUserRepository .findById (exp .getUserId ())
118+ .orElseThrow (() -> new DeveloperNotFoundException (exp .getUserId ()));
119+ return toResponse (user , exp );
120+ })
104121 .toList ();
105122
106123 log .info ("[correlationId={}] Listagem concluida: {} resultado(s)" , MDC .get ("correlationId" ), result .size ());
@@ -110,11 +127,14 @@ public List<DeveloperResponse> listDevelopers(String uf, String language) {
110127 public DeveloperResponse getDeveloperById (Long id ) {
111128 log .info ("[correlationId={}] Buscando developer por id={}" , MDC .get ("correlationId" ), id );
112129
113- DeveloperEntity entity = developerRepository .findById (id )
130+ DeveloperUserEntity user = developerUserRepository .findById (id )
131+ .orElseThrow (() -> new DeveloperNotFoundException (id ));
132+
133+ DeveloperExperienceEntity experience = developerExperienceRepository .findByUserId (id )
114134 .orElseThrow (() -> new DeveloperNotFoundException (id ));
115135
116136 log .info ("[correlationId={}] Developer encontrado: id={}" , MDC .get ("correlationId" ), id );
117- return toResponse (entity );
137+ return toResponse (user , experience );
118138 }
119139
120140 public DeveloperResponse updateExperience (Long id , UpdateExperienceRequest request ) {
@@ -125,16 +145,24 @@ public DeveloperResponse updateExperience(Long id, UpdateExperienceRequest reque
125145 throw new IllegalArgumentException (String .join ("; " , errors ));
126146 }
127147
128- DeveloperEntity entity = developerRepository .findById (id )
148+ DeveloperUserEntity user = developerUserRepository .findById (id )
149+ .orElseThrow (() -> new DeveloperNotFoundException (id ));
150+
151+ DeveloperExperienceEntity experience = developerExperienceRepository .findByUserId (id )
129152 .orElseThrow (() -> new DeveloperNotFoundException (id ));
130153
131- entity .setYearsOfExperience (request .yearsOfExperience ());
132- DeveloperEntity updated = developerRepository .save (entity );
154+ experience .setYearsOfExperience (request .yearsOfExperience ());
155+ DeveloperExperienceEntity updatedExperience = developerExperienceRepository .save (experience );
133156
134- log .info ("[correlationId={}] Experiencia atualizada para id={}: yearsOfExperience={}" , MDC .get ("correlationId" ), id , updated .getYearsOfExperience ());
135- return toResponse (updated );
157+ log .info ("[correlationId={}] Experiencia atualizada para id={}: yearsOfExperience={}" ,
158+ MDC .get ("correlationId" ), id , updatedExperience .getYearsOfExperience ());
159+ return toResponse (user , updatedExperience );
136160 }
137161
162+ // -------------------------------------------------------------------------
163+ // Validações
164+ // -------------------------------------------------------------------------
165+
138166 private List <String > validateCreateRequest (DeveloperCreateRequest request ) {
139167 List <String > errors = new ArrayList <>();
140168 if (request == null ) {
@@ -190,22 +218,25 @@ private List<String> validateExperienceUpdate(UpdateExperienceRequest request) {
190218 return errors ;
191219 }
192220
193- private DeveloperResponse toResponse (DeveloperEntity entity ) {
221+ // -------------------------------------------------------------------------
222+ // Mapeamento
223+ // -------------------------------------------------------------------------
224+
225+ private DeveloperResponse toResponse (DeveloperUserEntity user , DeveloperExperienceEntity experience ) {
194226 return new DeveloperResponse (
195- entity .getId (),
196- entity .getFullName (),
197- entity .getEmail (),
198- entity .getNickname (),
199- entity .getUf (),
200- entity .getYearsOfExperience (),
201- entity .getPrimaryLanguage (),
202- entity .getInterestedInAi (),
203- TextNormalizer .deserializeSkills (entity .getSkills ())
227+ user .getId (),
228+ user .getFullName (),
229+ user .getEmail (),
230+ user .getNickname (),
231+ user .getUf (),
232+ experience .getYearsOfExperience (),
233+ experience .getPrimaryLanguage (),
234+ experience .getInterestedInAi (),
235+ TextNormalizer .deserializeSkills (experience .getSkills ())
204236 );
205237 }
206238
207239 private boolean hasText (String value ) {
208240 return value != null && !value .trim ().isEmpty ();
209241 }
210242}
211-
0 commit comments