// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.core.service;
import static fi.hsl.parkandride.core.domain.Permission.CONTACT_CREATE;
import static fi.hsl.parkandride.core.domain.Permission.CONTACT_UPDATE;
import static fi.hsl.parkandride.core.service.AuthenticationService.authorize;
import fi.hsl.parkandride.core.back.ContactRepository;
import fi.hsl.parkandride.core.domain.Contact;
import fi.hsl.parkandride.core.domain.ContactSearch;
import fi.hsl.parkandride.core.domain.SearchResults;
import fi.hsl.parkandride.core.domain.User;
public class ContactService {
private final ContactRepository repository;
private final ValidationService validationService;
public ContactService(ContactRepository repository, ValidationService validationService) {
this.repository = repository;
this.validationService = validationService;
}
@TransactionalWrite
public Contact createContact(Contact contact, User currentUser) {
authorize(currentUser, contact, CONTACT_CREATE);
validationService.validate(contact);
return getContact(repository.insertContact(contact));
}
@TransactionalWrite
public Contact updateContact(long contactId, Contact contact, User currentUser) {
authorize(currentUser, contact, CONTACT_UPDATE);
Contact oldContact = repository.getContactForUpdate(contactId);
authorize(currentUser, oldContact, CONTACT_UPDATE);
validationService.validate(contact);
repository.updateContact(contactId, contact);
return getContact(contactId);
}
@TransactionalRead
public Contact getContact(long id) {
return repository.getContact(id);
}
@TransactionalRead
public SearchResults<Contact> search(ContactSearch search) {
return repository.findContacts(search);
}
}