esogu-ceng / internship-management-system

MIT License
7 stars 15 forks source link

Sistem genelinin kontrol edilmesi ingilizce yazılan metin değerlerin Türkçe ile güncelenmesi. Frontend+Backend #380

Closed ykartal closed 7 months ago

ykartal commented 8 months ago

Gönderilen mail içerikleri de buna dahil.

ykartal commented 8 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.

hakanyavaseng commented 8 months ago

@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?

ykartal commented 8 months ago

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.

hakanyavaseng commented 8 months ago

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.

ykartal commented 7 months ago

loglar değil de kullanıcıya giden mesajlar kstedilmişti bu sebeple loglar için olan mesajları iptal edebilirsin.