| Version 3 (modified by , 5 days ago) ( diff ) |
|---|
Напредни апликативен развој (Трансакции, Pooling)
Трансакции
Зошто ни се потребни трансакции? При креирање на корисници, како што се благајник, родител, наставник, записот мора да биде запишан прво во наткласата Корисник а потоа во поткласите. Овој процес мора да биде конзистентен и да се изврши без прекини. Затоа при креирање на овие корисници ја користиме анотацијата @Transactional. Оваа анотација се користи за да му се каже на Spring Boot автоматски да се грижи за COMMIT и ROLLBACK кој може да се случи доколку настане некоја грешка.
Креирање на благајник
@Value("${wallet.receiver}")
private String metamusk_adresa;
@Override
@Transactional
public BlagajnikResponseDTO createBlagajnik(BlagajnikRequestDTO blagajnikRequestDTO) {
System.out.println("Пристигнат DTO: " + blagajnikRequestDTO);
if(blagajnikRequestDTO.getE_posta() == null || blagajnikRequestDTO.getE_posta().isEmpty() ||
blagajnikRequestDTO.getLozinka() == null || blagajnikRequestDTO.getLozinka().isEmpty() ||
blagajnikRequestDTO.getIme() == null || blagajnikRequestDTO.getIme().isEmpty() ||
blagajnikRequestDTO.getPrezime() == null || blagajnikRequestDTO.getPrezime().isEmpty() ||
blagajnikRequestDTO.getPol() == null || blagajnikRequestDTO.getPol().isEmpty() ||
blagajnikRequestDTO.getAdresa() == null || blagajnikRequestDTO.getAdresa().isEmpty() ||
blagajnikRequestDTO.getKreiranOdId() == null
){
throw new IllegalArgumentException("invalid blagajnik data");
}
String encodedPass = passwordEncoder.encode( blagajnikRequestDTO.getLozinka());
this.direktorAdminService.getDirektorAdminById(blagajnikRequestDTO.getKreiranOdId());
KorisnikRequestDTO korisnikDto = new KorisnikRequestDTO(
blagajnikRequestDTO.getE_posta(),
encodedPass,
blagajnikRequestDTO.getIme(),
blagajnikRequestDTO.getPrezime(),
blagajnikRequestDTO.getPol(),
blagajnikRequestDTO.getAdresa(),
blagajnikRequestDTO.getKreiranOdId()
);
KorisnikResponseDTO korisnik = korisnikService.createKorisnik(korisnikDto);
UUID korisnikId = korisnik.getId();
this.blagajnikRepository.createBlagajnik(korisnikId,metamusk_adresa, true);
BlagajnikResponseDTO blagajnikResponseDTO = this.getBlagajnikById(korisnikId);
return blagajnikResponseDTO;
}
Креирање на наставник
@Override
@Transactional
public NastavnikResponseDTO createNastavnik(NastavnikRequestDTO dto) {
if (dto.getE_posta() == null || dto.getE_posta().isEmpty() ||
dto.getLozinka() == null || dto.getLozinka().isEmpty() ||
dto.getIme() == null || dto.getIme().isEmpty() ||
dto.getPrezime() == null || dto.getPrezime().isEmpty() ||
dto.getPol() == null || dto.getPol().isEmpty() ||
dto.getAdresa() == null || dto.getAdresa().isEmpty() ||
dto.getKreiranOdId() == null) {
throw new IllegalArgumentException("Invalid nastavnik data");
}
String encodedPass = passwordEncoder.encode( dto.getLozinka());
direktorAdminService.getDirektorAdminById(dto.getKreiranOdId());
KorisnikRequestDTO korisnikDto = new KorisnikRequestDTO(
dto.getE_posta(),
encodedPass,
dto.getIme(),
dto.getPrezime(),
dto.getPol(),
dto.getAdresa(),
dto.getKreiranOdId()
);
KorisnikResponseDTO korisnik = korisnikService.createKorisnik(korisnikDto);
UUID korisnikId = korisnik.getId();
this.nastavnikRepository.createNastavnik(korisnikId, true);
NastavnikResponseDTO nastavnikResponseDTO = this.getNastavnikById(korisnikId);
return nastavnikResponseDTO;
}
Креирање на родител
@Override
@Transactional
public RoditelResponseDTO createRoditel(RoditelRequestDTO roditelRequestDTO) {
String encodedPass = passwordEncoder.encode( roditelRequestDTO.getLozinka());
this.direktorAdminService.getDirektorAdminById(roditelRequestDTO.getKreiranOdId());
KorisnikRequestDTO korisnikDto = new KorisnikRequestDTO(
roditelRequestDTO.getE_posta(),
encodedPass,
roditelRequestDTO.getIme(),
roditelRequestDTO.getPrezime(),
roditelRequestDTO.getPol(),
roditelRequestDTO.getAdresa(),
roditelRequestDTO.getKreiranOdId()
);
KorisnikResponseDTO korisnik = korisnikService.createKorisnik(korisnikDto);
UUID korisnikId = korisnik.getId();
String metamusk = "SET LATER";
this.roditelRepository.createRoditel(korisnikId,true,metamusk);
RoditelResponseDTO roditelResponseDTO = this.roditelRepository.findRoditelById(korisnikId);
return roditelResponseDTO;
}
Внесување на усна оценка
Внесување на писмена оценка
Внесување на крајна оценка
Note:
See TracWiki
for help on using the wiki.
