package com.github.rojanu.contact.server.dao.impl;
import com.github.rojanu.contact.api.exception.ContactNotFoundException;
import com.github.rojanu.contact.api.exception.DaoException;
import com.github.rojanu.contact.api.exception.ValidationException;
import com.github.rojanu.contact.api.model.Contact;
import com.github.rojanu.contact.api.model.ContactRequest;
import com.github.rojanu.contact.server.dao.ContactRepository;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import javax.inject.Singleton;
@Singleton
public class InMemoryRepository implements ContactRepository {
private HashMap<UUID, Contact> repository = new HashMap<>();
@Override
public Contact save(ContactRequest contactRequest) throws DaoException, ValidationException {
UUID id = UUID.randomUUID();
Contact.Builder contactBuilder = Contact.builder()
.id(id.toString())
.name(contactRequest.getName())
.surname(contactRequest.getSurname());
if (contactRequest.getDob() != null) {
contactBuilder.dob(contactRequest.getDob());
}
if (StringUtils.isNotBlank(contactRequest.getNumber())) {
contactBuilder.number(contactRequest.getNumber());
}
if (StringUtils.isNotBlank(contactRequest.getEmail())) {
contactBuilder.email(contactRequest.getEmail());
}
Contact contact = contactBuilder.build();
repository.put(id, contact);
return contact;
}
@Override
public Contact find(UUID id) throws ContactNotFoundException {
Contact contact = repository.get(id);
if(contact == null){
throw new ContactNotFoundException();
}
return contact;
}
@Override
public List<Contact> findAll() {
return new ArrayList<>(repository.values());
}
@Override
public Contact update(UUID id, ContactRequest contactRequest) throws ContactNotFoundException {
Contact contact = repository.get(id);
if(contact == null){
throw new ContactNotFoundException();
}
Contact.Builder contactBuilder = Contact.builder()
.id(contact.getId())
.name(contactRequest.getName())
.surname(contactRequest.getSurname());
if (contactRequest.getDob() != null) {
contactBuilder.dob(contactRequest.getDob());
}
if (StringUtils.isNotBlank(contactRequest.getNumber())) {
contactBuilder.number(contactRequest.getNumber());
}
if (StringUtils.isNotBlank(contactRequest.getEmail())) {
contactBuilder.email(contactRequest.getEmail());
}
return repository.put(id, contactBuilder.build());
}
@Override
public void delete(UUID id) throws ContactNotFoundException {
Contact contact = repository.get(id);
if(contact == null){
throw new ContactNotFoundException();
}
repository.remove(id);
}
}