// Copyright © 2015 HSL <https://www.hsl.fi> // This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses. package fi.hsl.parkandride.front; 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; import fi.hsl.parkandride.core.service.ContactService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.util.UriComponentsBuilder; import javax.inject.Inject; import static fi.hsl.parkandride.front.UrlSchema.*; import static org.springframework.http.HttpStatus.CREATED; import static org.springframework.http.HttpStatus.OK; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; import static org.springframework.web.bind.annotation.RequestMethod.*; @RestController public class ContactController { private final Logger log = LoggerFactory.getLogger(ContactController.class); @Inject ContactService contactService; @RequestMapping(method = POST, value = CONTACTS, produces = APPLICATION_JSON_VALUE) public ResponseEntity<Contact> createContact(@RequestBody Contact contact, User currentUser, UriComponentsBuilder builder) { log.info("createContact"); Contact newContact = contactService.createContact(contact, currentUser); log.info("createContact({})", newContact.id); HttpHeaders headers = new HttpHeaders(); headers.setLocation(builder.path(CONTACT).buildAndExpand(newContact.id).toUri()); return new ResponseEntity<>(newContact, headers, CREATED); } @RequestMapping(method = GET, value = CONTACT, produces = APPLICATION_JSON_VALUE) public ResponseEntity<Contact> getContact(@PathVariable(CONTACT_ID) long contactId) { Contact contact = contactService.getContact(contactId); return new ResponseEntity<>(contact, OK); } @RequestMapping(method = PUT, value = CONTACT, produces = APPLICATION_JSON_VALUE) public ResponseEntity<Contact> updateContact(@PathVariable(CONTACT_ID) long contactId, @RequestBody Contact contact, User currentUser) { log.info("updateContact({})", contactId); Contact response = contactService.updateContact(contactId, contact, currentUser); return new ResponseEntity<>(response, OK); } @RequestMapping(method = GET, value = CONTACTS, produces = APPLICATION_JSON_VALUE) public ResponseEntity<SearchResults<Contact>> findContacts(ContactSearch search) { SearchResults<Contact> results = contactService.search(search); return new ResponseEntity<>(results, OK); } }