Skip to content

Commit cce7d28

Browse files
committed
create PreviousJobTitleTranslation that stores a list of former job title that can be rendered by languages
1 parent 4db4679 commit cce7d28

File tree

8 files changed

+127
-93
lines changed

8 files changed

+127
-93
lines changed

api-contract/src/main/resources/api-contract.yaml

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ components:
246246
$ref: '#/components/schemas/GovernmentAdminModel'
247247
representativeTranslation:
248248
$ref: '#/components/schemas/RepresentativeTranslationManagerModel'
249+
previousJobTitle:
250+
type: array
251+
items:
252+
$ref: '#/components/schemas/PreviousJobTitleTranslationModel'
249253
phoneNumber:
250254
description: Phone number of the Representative entity
251255
type: string
@@ -284,6 +288,10 @@ components:
284288
description: Address of the Agency
285289
type: string
286290
example: "2011 Budakalász, Gerinc utca hrsz. 2287/3"
291+
country:
292+
description: country of the Agency
293+
type: string
294+
example: "Magyarország"
287295
phoneNumber:
288296
description: Phone number of the Representative entity
289297
type: string
@@ -304,9 +312,10 @@ components:
304312
RepresentativeTranslationManagerModel:
305313
type: object
306314
properties:
307-
type: string
308-
format: uuid
309-
example: '3a8ea9f1-1a95-4caf-932f-2f988052933b'
315+
id:
316+
type: string
317+
format: uuid
318+
example: '3a8ea9f1-1a95-4caf-932f-2f988052933b'
310319
languageShortName:
311320
type: string
312321
name:
@@ -321,8 +330,6 @@ components:
321330
description: Job title of the Government Representative
322331
type: string
323332
example: "Miniszterelnökséget vezető miniszter"
324-
previousJobTitle:
325-
$ref: '#/components/schemas/PreviousJobTitleModel'
326333
address:
327334
description: Address of the Agency
328335
type: string
@@ -339,17 +346,6 @@ components:
339346
description: Secret note that is only visible for the Managers
340347
example: 'Secret message'
341348

342-
PreviousJobTitleModel:
343-
type: object
344-
properties:
345-
id:
346-
type: integer
347-
format: int64
348-
name:
349-
type: string
350-
languageShortName:
351-
type: string
352-
353349
PreviousJobTitleTranslationModel:
354350
type: object
355351
properties:

government-service/src/main/java/com/csaba79coder/bestprotocol/controller/RepresentativeController.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@ public class RepresentativeController implements GovernmentRepresentativeApi {
1818

1919
private final RepresentativeService representativeService;
2020

21-
@Override
21+
/*@Override
2222
public ResponseEntity<RepresentativeAdminModel> addNewRepresentative(String languageShortName, String name, String government, String secretairat, String jobTitle, String address, String phoneNumber, String email, MultipartFile image, String note) {
2323
return ResponseEntity.status(201).body(representativeService.addNewRepresentative(languageShortName, name, government, secretairat, jobTitle, address, phoneNumber, email, image, note));
24+
}*/
25+
26+
@Override
27+
public ResponseEntity<RepresentativeAdminModel> addNewRepresentative(String languageShortName, String name, String government, String secretairat, String jobTitle, String address, String country, String phoneNumber, String email, MultipartFile image, String note) {
28+
return null;
2429
}
2530

2631
@Override

government-service/src/main/java/com/csaba79coder/bestprotocol/model/government/entity/PreviousJobTitle.java

Lines changed: 0 additions & 31 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,32 @@
11
package com.csaba79coder.bestprotocol.model.government.entity;
22

3-
public class PreviousJobTitleTranslation {
3+
import com.csaba79coder.bestprotocol.model.base.entity.IdentifierLong;
4+
import com.csaba79coder.bestprotocol.model.representative.entity.Representative;
5+
import jakarta.persistence.Column;
6+
import jakarta.persistence.Entity;
7+
import jakarta.persistence.JoinColumn;
8+
import jakarta.persistence.ManyToOne;
9+
import jakarta.persistence.Table;
10+
import lombok.AllArgsConstructor;
11+
import lombok.Getter;
12+
import lombok.NoArgsConstructor;
13+
import lombok.Setter;
14+
15+
@Entity
16+
@Getter
17+
@Setter
18+
@AllArgsConstructor
19+
@NoArgsConstructor
20+
@Table(name = "previous_job_title_translation")
21+
public class PreviousJobTitleTranslation extends IdentifierLong {
22+
23+
@ManyToOne
24+
@JoinColumn(name = "representative_id")
25+
private Representative representative;
26+
27+
@Column(name = "language_short_name")
28+
private String languageShortName;
29+
30+
@Column(name = "name")
31+
private String name;
432
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.csaba79coder.bestprotocol.model.government.persistence;
2+
3+
import com.csaba79coder.bestprotocol.model.government.entity.PreviousJobTitleTranslation;
4+
import com.csaba79coder.bestprotocol.model.representative.entity.Representative;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
import java.util.List;
9+
10+
@Repository
11+
public interface PreviousJobTitleTranslationRepository extends JpaRepository<PreviousJobTitleTranslation, Long> {
12+
13+
List<PreviousJobTitleTranslation> findByRepresentativeAndLanguageShortName(Representative representative, String languageShortName);
14+
}

government-service/src/main/java/com/csaba79coder/bestprotocol/model/representative/entity/Representative.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.csaba79coder.bestprotocol.model.base.entity.Auditable;
44
import com.csaba79coder.bestprotocol.model.government.entity.Government;
5+
import com.csaba79coder.bestprotocol.model.government.entity.PreviousJobTitleTranslation;
56
import com.csaba79coder.bestprotocol.model.value.Availability;
67
import jakarta.persistence.CascadeType;
78
import jakarta.persistence.Column;
@@ -41,13 +42,8 @@ public class Representative extends Auditable {
4142
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "representative")
4243
private List<RepresentativeTranslation> fieldTranslations = new ArrayList<>();
4344

44-
// TODO create a previous job title (store in a set for avoiding the duplication!)
45-
/*@Column(name= "previous_job_title")
46-
private List<String> previousJobTitles = new ArrayList<>();*/
47-
48-
// TODO refactor logic to remove the langShortName from here!
49-
@Column(name = "language_short_name")
50-
private String languageShortName;
45+
@OneToMany(mappedBy = "representative", cascade = CascadeType.ALL, orphanRemoval = true)
46+
private List<PreviousJobTitleTranslation> previousJobTitleTranslations = new ArrayList<>();
5147

5248
@Column(name = "phone_number")
5349
private String phoneNumber;
@@ -63,4 +59,7 @@ public class Representative extends Auditable {
6359
@Enumerated(EnumType.STRING)
6460
@Column(name = "availability")
6561
private Availability availability = Availability.AVAILABLE;
62+
63+
@Column(name = "language_short_name")
64+
private String languageShortName = null;
6665
}

government-service/src/main/java/com/csaba79coder/bestprotocol/model/representative/persistence/RepresentativeRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public interface RepresentativeRepository extends JpaRepository<Representative,
1515
List<Representative> findRepresentativeByLanguageShortNameAndGovernmentId(@Param("language_short_name") String languageShortname, @Param("government_id") Long governmentId);
1616
List<Representative> findAllByLanguageShortName(String languageShortName);
1717
Representative findRepresentativeByLanguageShortName(String languageShortName);
18+
19+
List<Representative> findRepresentativeByGovernmentId( @Param("government_id") Long governmentId);
1820
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.csaba79coder.bestprotocol.model.representative.service;
22

33
import com.csaba79coder.bestprotocol.model.Availability;
4+
import com.csaba79coder.bestprotocol.model.PreviousJobTitleTranslationModel;
45
import com.csaba79coder.bestprotocol.model.RepresentativeAdminModel;
56
import com.csaba79coder.bestprotocol.model.RepresentativeTranslationManagerModel;
67
import com.csaba79coder.bestprotocol.model.government.entity.Government;
78
import com.csaba79coder.bestprotocol.model.government.entity.GovernmentTranslation;
8-
import com.csaba79coder.bestprotocol.model.government.persistence.GovernmentRepository;
99
import com.csaba79coder.bestprotocol.model.government.persistence.GovernmentTranslationRepository;
10+
import com.csaba79coder.bestprotocol.model.government.persistence.PreviousJobTitleTranslationRepository;
1011
import com.csaba79coder.bestprotocol.model.representative.entity.Representative;
1112
import com.csaba79coder.bestprotocol.model.representative.entity.RepresentativeTranslation;
1213
import com.csaba79coder.bestprotocol.model.representative.persistence.RepresentativeRepository;
@@ -20,7 +21,7 @@
2021

2122
import java.util.List;
2223
import java.util.NoSuchElementException;
23-
import java.util.Optional;
24+
import java.util.UUID;
2425
import java.util.stream.Collectors;
2526

2627
@Service
@@ -29,18 +30,18 @@
2930
public class RepresentativeService {
3031

3132
private final RepresentativeRepository representativeRepository;
32-
private final GovernmentRepository governmentRepository;
3333
private final GovernmentTranslationRepository governmentTranslationRepository;
3434
private final RepresentativeTranslationRepository representativeTranslationRepository;
35+
private final PreviousJobTitleTranslationRepository previousJobTitleTranslationRepository;
3536

3637
public RepresentativeAdminModel addNewRepresentative(String languageShortName, String name, String jobTitle, String government, String secretairat, String address, String phoneNumber, String email, MultipartFile image, String note) {
3738
return Mapper.mapRepresentativeEntityToAdminModel(representativeRepository.save(Mapper.mapFieldIntoEntity(languageShortName, name, jobTitle, government, secretairat, address, phoneNumber, email, image, note)));
3839
}
3940

4041
public List<RepresentativeAdminModel> renderAllRepresentatives(String languageShortName) {
41-
return representativeRepository.findAllByLanguageShortName(languageShortName)
42+
return representativeRepository.findAll()
4243
.stream()
43-
.map(representative -> getRepresentativeWithTranslation(languageShortName))
44+
.map(representative -> getRepresentativeWithTranslation(representative.getId(), languageShortName))
4445
.collect(Collectors.toList());
4546
}
4647

@@ -55,42 +56,62 @@ public Government findGovernmentByName(String government) {
5556
}
5657

5758
public List<RepresentativeAdminModel> renderAllRepresentativesByGovernmentId(String languageShortName, Long governmentId) {
58-
return representativeRepository.findRepresentativeByLanguageShortNameAndGovernmentId(languageShortName, governmentId)
59+
return representativeRepository.findRepresentativeByGovernmentId(governmentId)
5960
.stream()
60-
.map(representative -> getRepresentativeWithTranslation(languageShortName))
61+
.map(representative -> getRepresentativeWithTranslation(representative.getId(), languageShortName))
6162
.collect(Collectors.toList());
6263
}
6364

64-
private RepresentativeAdminModel getRepresentativeWithTranslation(String languageShortName) {
65-
Representative currentRepresentative = representativeRepository.findRepresentativeByLanguageShortName(languageShortName);
66-
Optional<GovernmentTranslation> governmentTranslation = governmentTranslationRepository.findGovernmentTranslationById(currentRepresentative.getGovernment().getId());
67-
governmentTranslation.ifPresent(translation -> currentRepresentative.setGovernment(translation.getGovernment()));
65+
private RepresentativeAdminModel getRepresentativeWithTranslation(UUID representativeId, String languageShortName) {
66+
// TODO previous job title list!
67+
Representative currentRepresentative = representativeRepository.findById(representativeId).orElseThrow(() -> new NoSuchElementException("Representative not found"));
68+
GovernmentTranslation governmentTranslation = governmentTranslationRepository.findByGovernmentIdAndLanguageShortName(currentRepresentative.getGovernment().getId(), languageShortName);
6869
RepresentativeTranslation currentTranslation = representativeTranslationRepository.findRepresentativeTranslationByLanguageShortNameAndRepresentativeId(languageShortName, currentRepresentative.getId());
69-
RepresentativeTranslationManagerModel model = new RepresentativeTranslationManagerModel();
70-
model.setName(currentTranslation.getName());
71-
model.setLanguageShortName(currentTranslation.getLanguageShortName());
72-
model.setAddress(currentTranslation.getAddress());
73-
// TODO country to api contract
74-
model.setJobTitle(currentTranslation.getJobTitle());
75-
model.setSecretairat(currentTranslation.getSecretairat());
76-
// TODO previous jobtitle store in database
77-
model.setPreviousJobTitle(null);
78-
model.setNote(currentTranslation.getNote());
79-
model.setSecretNote(currentTranslation.getSecretNote());
80-
model.setCountry(currentTranslation.getCountry());
81-
return new RepresentativeAdminModel()
82-
.id(currentRepresentative.getId())
83-
.createdAt(String.valueOf(currentRepresentative.getCreatedAt()))
84-
.updatedAt(String.valueOf(currentRepresentative.getUpdatedAt()))
85-
.createdBy(currentRepresentative.getCreatedBy())
86-
.updatedBy(currentRepresentative.getUpdatedBy())
87-
.representativeTranslation(model)
88-
.government(Mapper.mapGovernmentTranslationToAdminModel(governmentTranslation.get()))
89-
.phoneNumber(currentRepresentative.getPhoneNumber())
90-
.email(currentRepresentative.getEmail())
91-
.image(ImageUtil.decompressImage(currentRepresentative.getImage()))
92-
// TODO add to api contract the secret note!
93-
//.note(currentRepresentative.getNote())
94-
.availability(Availability.valueOf(currentRepresentative.getAvailability().name()));
70+
71+
if (currentTranslation != null) {
72+
RepresentativeTranslationManagerModel model = new RepresentativeTranslationManagerModel();
73+
model.setId(currentTranslation.getId());
74+
model.setName(currentTranslation.getName());
75+
model.setLanguageShortName(currentTranslation.getLanguageShortName());
76+
model.setAddress(currentTranslation.getAddress());
77+
model.setJobTitle(currentTranslation.getJobTitle());
78+
model.setSecretairat(currentTranslation.getSecretairat());
79+
model.setNote(currentTranslation.getNote());
80+
model.setSecretNote(currentTranslation.getSecretNote());
81+
model.setCountry(currentTranslation.getCountry());
82+
return new RepresentativeAdminModel()
83+
.id(currentRepresentative.getId())
84+
.createdAt(String.valueOf(currentRepresentative.getCreatedAt()))
85+
.updatedAt(String.valueOf(currentRepresentative.getUpdatedAt()))
86+
.createdBy(currentRepresentative.getCreatedBy())
87+
.updatedBy(currentRepresentative.getUpdatedBy())
88+
.representativeTranslation(model)
89+
.government(Mapper.mapGovernmentTranslationToAdminModel(governmentTranslation))
90+
.phoneNumber(currentRepresentative.getPhoneNumber())
91+
.email(currentRepresentative.getEmail())
92+
.image(ImageUtil.decompressImage(currentRepresentative.getImage()))
93+
.previousJobTitle(previousJobTitleTranslationRepository.findByRepresentativeAndLanguageShortName(currentRepresentative, languageShortName)
94+
.stream()
95+
.map(previousJobTitleTranslation -> {
96+
PreviousJobTitleTranslationModel jobTitle = new PreviousJobTitleTranslationModel();
97+
jobTitle.setId(previousJobTitleTranslation.getId());
98+
jobTitle.setName(previousJobTitleTranslation.getName());
99+
jobTitle.setLanguageShortName(previousJobTitleTranslation.getLanguageShortName());
100+
return jobTitle;
101+
})
102+
.toList())
103+
.availability(Availability.valueOf(currentRepresentative.getAvailability().name()));
104+
} else {
105+
return new RepresentativeAdminModel()
106+
.id(currentRepresentative.getId())
107+
.createdAt(String.valueOf(currentRepresentative.getCreatedAt()))
108+
.updatedAt(String.valueOf(currentRepresentative.getUpdatedAt()))
109+
.createdBy(currentRepresentative.getCreatedBy())
110+
.updatedBy(currentRepresentative.getUpdatedBy())
111+
.phoneNumber(currentRepresentative.getPhoneNumber())
112+
.email(currentRepresentative.getEmail())
113+
.image(ImageUtil.decompressImage(currentRepresentative.getImage()))
114+
.availability(Availability.valueOf(currentRepresentative.getAvailability().name()));
115+
}
95116
}
96117
}

0 commit comments

Comments
 (0)