Closed ykartal closed 7 months ago
İsteğe bağlı; Backend için dil dosyasına odaklanılabilir. Frontend için dil seçimi için alt yapı oluşturulabilir.
@ykartal Merhaba hocam, back-end kısmında bu düzenlemeyi gerçekleştirmeye başladım. Aklıma takılan bir durum mevcut. Şöyle ki: messages_tr.properties içerisinde her bir servis/controller/exception için şu şekilde bölümlere ayırmayı ve yönetmeyi düşündüm.
//CompanyService mesajları
company.service.pageable.companies.fetched=Sayfalama işlemiyle şirketler getirildi.
company.service.warn.no.company.with.id=Girilen ID'ye sahip şirket bulunmamaktadır.
company.service.info.company.updated=ID'si {0} olan şirket güncellendi: {1}, {2}
company.service.warn.company.not.found=ID {0} ile şirket bulunamadı.
company.service.warn.company.name.length.less.than.three=Şirket adı 3 karakterden az uzunluktadır.
company.service.error.failed.to.add.company=Şirket eklenirken hata oluştu. Hata mesajı: {0}
company.service.info.company.added=Şirket başarıyla eklendi.
company.service.warn.company.not.found.with.id=ID {0} ile şirket bulunamadı.
company.service.info.company.deleted=Şirket başarıyla silindi.
Bu şekilde Türkçe karakterler ile ekleme yaptığımda kodlama hatası alarak UTF-8'e çektiğimde sorun düzeldi. Uygulama genelindeki kodlama standardı ile çakışıp çakışmadığından emin değilim.
Servis kısmında ise bu şekilde bir düzenleme yaptım:
@Slf4j
@Service
@AllArgsConstructor
public class CompanyService {
@Autowired
private CompanyRepository companyRepository;
@Autowired
private MessageResource messageResource;
public Page<CompanyDto> getAllCompanies(Pageable pageable) {
ModelMapper modelMapper = new ModelMapper();
Page<Company> companies = companyRepository.findAll(pageable);
Page<CompanyDto> companyDtos = companies.map(company -> modelMapper.map(company, CompanyDto.class));
log.info(messageResource.getMessage("company.service.pageable.companies.fetched"));
return companyDtos;
}
public CompanyDto updateCompany(CompanyDto companyDto) {
try {
if (!companyRepository.existsById(companyDto.getId())) {
log.warn(messageResource.getMessage("company.service.warn.no.company.with.id", companyDto.getId()));
throw new tr.edu.ogu.ceng.service.Exception.EntityNotFoundException();
}
ModelMapper modelMapper = new ModelMapper();
Company company = modelMapper.map(companyDto, Company.class);
LocalDateTime dateTime = LocalDateTime.now();
company.setUpdateDate(dateTime);
company.setCreateDate(companyRepository.getById(companyDto.getId()).getCreateDate());
company = companyRepository.save(company);
log.info(messageResource.getMessage("company.service.info.company.updated", company.getId(), company.getName(),
company.getDescription()));
return modelMapper.map(company, CompanyDto.class);
} catch (EntityNotFoundException e) {
throw new tr.edu.ogu.ceng.service.Exception.EntityNotFoundException();
}
}
public CompanyDto getCompany(long id) throws EntityNotFoundException {
Company company = companyRepository.findById(id).orElse(null);
if (company == null) {
log.warn(messageResource.getMessage("company.service.warn.company.not.found", id));
throw new EntityNotFoundException();
}
ModelMapper modelMapper = new ModelMapper();
return modelMapper.map(company, CompanyDto.class);
}
public Page<CompanyDto> searchCompanies(String name, Pageable pageable) {
if (name.length() < 3) {
log.warn(messageResource.getMessage("company.service.warn.company.name.length.less.than.three"));
throw new InvalidArgumentException("Name should be at least 3 characters long.");
}
ModelMapper modelMapper = new ModelMapper();
Page<Company> companies = companyRepository.findByNameContainingIgnoreCase(name, pageable);
Page<CompanyDto> companyDtos = companies.map(company -> modelMapper.map(company, CompanyDto.class));
return companyDtos;
}
public CompanyDto addCompany(CompanyDto companyDto) {
try {
ModelMapper modelMapper = new ModelMapper();
Company company = modelMapper.map(companyDto, Company.class);
LocalDateTime dateTime = LocalDateTime.now();
company.setCreateDate(dateTime);
company.setUpdateDate(dateTime);
companyRepository.save(company);
log.info(messageResource.getMessage("company.service.info.company.added"));
return modelMapper.map(company, CompanyDto.class);
} catch (Exception e) {
log.error(messageResource.getMessage("company.service.error.failed.to.add.company", e.getMessage()));
throw e;
}
}
public boolean deleteCompany(long id) {
if (!companyRepository.existsById(id)) {
log.warn(messageResource.getMessage("company.service.warn.company.not.found.with.id", id));
return false;
}
companyRepository.deleteById(id);
log.info(messageResource.getMessage("company.service.info.company.deleted"));
return true;
}
public Long countCompanies() {
return companyRepository.count();
}
}
Bu şekilde devam etmemde bir sakınıca yoksa her bir kısım için aynı işlemleri tekrarlamayı düşünüyorum. Ayrıca @yunsturann 'da şu anda Log mesajları üzerinde düzenleme yaptığından bu işlemin sağlanması için merge sıralaması nasıl olabilir?
Bu şekilde takip etmek o kadar zor ki; Tüm kodu baştan okumamız gerekiyor. Eğer bir Pull Request açarsan bu değişikliklerini görebilir, daha kolay yorumlayabiliriz.
company.service. şeklinde kategorilendirmemizde bir sakınca olmaz elbette ama genel/ortak mesajlar olabileceğiniz de göz önünde bulundurmak lazım. Şirket yerine Firma kullanalım.
Bu şekilde takip etmek o kadar zor ki; Tüm kodu baştan okumamız gerekiyor. Eğer bir Pull Request açarsan bu değişikliklerini görebilir, daha kolay yorumlayabiliriz.
company.service. şeklinde kategorilendirmemizde bir sakınca olmaz elbette ama genel/ortak mesajlar olabileceğiniz de göz önünde bulundurmak lazım. Şirket yerine Firma kullanalım.
Firma olarak düzenledim ve değişiklikleri görebilmeniz adına PR açtım hocam.
loglar değil de kullanıcıya giden mesajlar kstedilmişti bu sebeple loglar için olan mesajları iptal edebilirsin.
Gönderilen mail içerikleri de buna dahil.