package com.github.rojanu.contact.server; import com.github.rojanu.contact.api.ContactService; 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 com.github.rojanu.service.ThriftServiceException; import com.twitter.finagle.stats.Counter; import com.twitter.finagle.stats.LoadedStatsReceiver; import com.twitter.finagle.stats.StatsReceiver; import com.twitter.util.Future; import com.twitter.util.Promise; import org.apache.commons.lang3.StringUtils; import java.util.List; import java.util.UUID; public class ContactServiceImpl implements ContactService { private ContactRepository contactRepository; private final StatsReceiver statsReceiver = LoadedStatsReceiver.scope("contact-manager"); private final Counter contactCnt = statsReceiver.counter0("contact-cnt"); public ContactServiceImpl(final ContactRepository contactRepository) { this.contactRepository = contactRepository; } @Override public Future<Contact> create(ContactRequest contactRequest) { final Promise<Contact> promise = new Promise<>(); try { promise.setValue(contactRepository.save(contactRequest)); contactCnt.incr(); } catch (DaoException | ValidationException e) { promise.setException(e); } return promise; } @Override public Future<Contact> get(String id){ if(StringUtils.isBlank(id)){ return Future.exception(new ContactNotFoundException()); } try { return Future.value(contactRepository.find(UUID.fromString(id))); } catch (ContactNotFoundException e) { return Future.exception(e); } } @Override public Future<List<Contact>> getAll() throws ContactNotFoundException { final Promise<List<Contact>> promise = new Promise<>(); promise.setValue(contactRepository.findAll()); return promise; } @Override public Future<String> delete(String id) { if(StringUtils.isBlank(id)){ return Future.exception(new ContactNotFoundException()); } try { contactRepository.delete(UUID.fromString(id)); return Future.value(""); } catch (ContactNotFoundException e) { return Future.exception(e); } } @Override public Future<Contact> update(String id, ContactRequest contactRequest) { if(StringUtils.isBlank(id)){ return Future.exception(new ContactNotFoundException()); } final Promise<Contact> promise = new Promise<>(); try { promise.setValue(contactRepository.update(UUID.fromString(id), contactRequest)); } catch (ContactNotFoundException e) { return Future.exception(e); } return promise; } @Override public Future<String> getName() { return Future.value("contact-service"); } @Override public Future<String> getVersion() { return Future.value("1.0.0"); } @Override public Future<String> getBuildInfo() throws ThriftServiceException { return Future.value("abcde-efddlldl-ds1333"); } }