package service; import api.v1.Recipient; import com.avaje.ebean.Ebean; import com.avaje.ebean.Query; import com.avaje.ebean.RawSql; import com.avaje.ebean.RawSqlBuilder; import exceptions.PoseidonException; import mapper.RecipientMapper; import models.RecipientModel; import play.mvc.Http; import validators.RecipientValidator; import validators.ValidationResult; import java.util.Date; import java.util.List; public class RecipientService extends PoseidonService { public RecipientService(String username) { super(username); } public List<RecipientModel> findAll() { return RecipientModel.find.all(); } public RecipientModel getById(long id) { return RecipientModel.find.byId(id); } public RecipientModel findByEmail(String email) { return RecipientModel.find.where().ieq("email", email).findUnique(); } public RecipientModel createOrUpdate(Recipient apiRecipient) { RecipientModel mRecipient; if ((apiRecipient.id != null) && (apiRecipient.id > 0)) { mRecipient = updateExisting(apiRecipient); } else { RecipientModel p = findByEmail(apiRecipient.email); if (p != null) { throw new PoseidonException(Http.Status.BAD_REQUEST, "Posisjonens navn er ikke unikt"); } mRecipient = new RecipientMapper().mapToModel(apiRecipient, getUser()); mRecipient.created = PoseidonService.getNow().toDate(); mRecipient.createdBy = getUser(); } ValidationResult validationResult = new RecipientValidator().validateModel(mRecipient); if (!validationResult.ok){ throw new PoseidonException(Http.Status.BAD_REQUEST,"Validering av epost-adresse feilet: " + validationResult.getMessage()); } mRecipient.save(); return mRecipient; } private RecipientModel updateExisting(Recipient aRecipient) { RecipientModel mRecipient = getById(aRecipient.id); mRecipient.email = aRecipient.email; mRecipient.updated = PoseidonService.getNow().toDate(); mRecipient.updatedBy = getUser(); return mRecipient; } public List<RecipientModel> getRecipientsForCustomer(Long id) { String recipientsSql = "select distinct r.id, r.email " + " from pos_recipient r, pos_order o , POS_ORDER_RECIPIENTS pr, pos_customer c " + " where r.id = pr.recipient_id" + " and pr.order_id = o.id" + " and o.customer_id = c.id "; RawSql rawSql = RawSqlBuilder.parse(recipientsSql). columnMapping("r.id", "id") .columnMapping("r.email", "email") .create(); Query<RecipientModel> query = Ebean.find(RecipientModel.class); query.setRawSql(rawSql) .where().eq("c.id", id); List<RecipientModel> recipients = query.findList(); return recipients; } }