Compare commits

...

2 Commits

  1. 5
      pom.xml
  2. 11
      src/main/java/com/singlestone/contacts/controller/ContactController.java
  3. 2
      src/main/java/com/singlestone/contacts/model/Contact.java
  4. 6
      src/main/java/com/singlestone/contacts/model/Phone.java
  5. 11
      src/main/java/com/singlestone/contacts/model/dto/CallListDTO.java
  6. 50
      src/main/java/com/singlestone/contacts/model/dto/ContactDTO.java
  7. 6
      src/main/java/com/singlestone/contacts/model/dto/PhoneDTO.java
  8. 55
      src/main/java/com/singlestone/contacts/service/ContactService.java
  9. 3
      src/main/resources/application.properties
  10. 25
      src/main/resources/data.sql

5
pom.xml

@ -40,6 +40,11 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.4.5</version>
</dependency>
</dependencies>
<build>

11
src/main/java/com/singlestone/contacts/controller/ContactController.java

@ -3,8 +3,11 @@ package com.singlestone.contacts.controller;
import com.singlestone.contacts.model.CallListEntry;
import com.singlestone.contacts.model.Contact;
import com.singlestone.contacts.model.Phone;
import com.singlestone.contacts.model.dto.ContactDTO;
import com.singlestone.contacts.repository.ContactRepository;
import com.singlestone.contacts.repository.PhoneRepository;
import com.singlestone.contacts.service.ContactService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.http.HttpStatus;
@ -19,15 +22,15 @@ import java.util.Optional;
public class ContactController {
@Autowired
private ContactRepository contactRepository;
private ContactService contactService;
@Autowired
private PhoneRepository phoneRepository;
//Get All Contacts
@GetMapping("/contacts")
public List<Contact> getAllContacts() {
return contactRepository.findAll();
public List<ContactDTO> getAllContacts() {
return contactService.getAllContacts();
}
//Create a new contact
@ -76,4 +79,4 @@ public class ContactController {
Sort sortByFirst = Sort.by("contact.name.first").ascending();
return phoneRepository.findByType(Phone.Type.home, sortByLast.and(sortByFirst));
}
}
}

2
src/main/java/com/singlestone/contacts/model/Contact.java

@ -11,7 +11,7 @@ public class Contact {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
private long id;
@Embedded
private Name name;

6
src/main/java/com/singlestone/contacts/model/Phone.java

@ -61,8 +61,8 @@ public class Phone {
}
public enum Type {
home,
work,
mobile
HOME,
WORK,
MOBILE
}
}

11
src/main/java/com/singlestone/contacts/model/dto/CallListDTO.java

@ -0,0 +1,11 @@
package com.singlestone.contacts.model.dto;
import com.singlestone.contacts.model.Address;
import com.singlestone.contacts.model.Name;
public class CallListDTO {
private Name name;
private String phone;
}

50
src/main/java/com/singlestone/contacts/model/dto/ContactDTO.java

@ -0,0 +1,50 @@
package com.singlestone.contacts.model.dto;
import java.util.List;
import com.singlestone.contacts.model.Address;
import com.singlestone.contacts.model.Name;
import com.singlestone.contacts.model.Phone;
public class ContactDTO {
private Name name;
private Address address;
private List<String> phone;
private String email;
public void setName(Name name) {
this.name = name;
}
public Name getName() {
return name;
}
public void setAddress(Address address) {
this.address = address;
}
public Address getAddress() {
return address;
}
public void setPhone(List<Phone> phone) {
this.phone.clear();
for (Phone p : phone) {
this.phone.add(p.getNumber());
}
}
public List<String> getPhone() {
return phone;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}

6
src/main/java/com/singlestone/contacts/model/dto/PhoneDTO.java

@ -0,0 +1,6 @@
package com.singlestone.contacts.model.dto;
public class PhoneDTO {
private String number;
private Type type;
}

55
src/main/java/com/singlestone/contacts/service/ContactService.java

@ -0,0 +1,55 @@
package com.singlestone.contacts.service;
import java.util.List;
import java.util.stream.Collectors;
import com.singlestone.contacts.model.Contact;
import com.singlestone.contacts.model.Phone;
import com.singlestone.contacts.model.dto.ContactDTO;
import com.singlestone.contacts.repository.ContactRepository;
import com.singlestone.contacts.repository.PhoneRepository;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ContactService {
@Autowired
private ContactRepository contactRepository;
@Autowired
private PhoneRepository phoneRepository;
@Autowired
private ModelMapper modelMapper;
public List<ContactDTO> getAllContacts() {
List<Contact> contacts = contactRepository.findAll();
return contacts.stream().map(this::convertToDTO).collect(Collectors.toList());
}
public void newContact(ContactDTO newContact) {
Contact contact = new Contact();
}
private ContactDTO convertToDTO(Contact contact) {
ContactDTO dto = new ContactDTO();
dto.setName(contact.getName());
dto.setAddress(contact.getAddress());
dto.setEmail(contact.getEmail());
dto.setPhone(contact.getPhone());
return dto;
}
private Contact convertToEntity(ContactDTO contactDTO) {
Contact contact = new Contact();
contact.setName(contactDTO.getName());
contact.setAddress(contactDTO.getAddress());
contact.setEmail(contactDTO.getEmail());
contact.setPhone(contactDTO.getPhone().stream().map(phone -> new Phone(phone)).collect(Collectors.toList()));
return contact;
}
}

3
src/main/resources/application.properties

@ -9,5 +9,6 @@ spring.jpa.show-sql=true
spring.datasource.url=jdbc:h2:mem:contactsdb
spring.data.jpa.repositories.bootstrap-mode=default
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.defer-datasource-initialization=true
logging.level.org.hibernate.type=trace
server.error.include-message=always
server.error.include-message=always

25
src/main/resources/data.sql

@ -0,0 +1,25 @@
-- Contacts
insert into CONTACTS (street, city, state, zip, email, middle, first, last)
values('street1', 'city1', 'state1', 'zip1', 'e1@mail.com', 'a', 'a', 'a');
insert into CONTACTS (street, city, state, zip, email, middle, first, last)
values('street2', 'city2', 'state2', 'zip2', 'e2@mail.com', 'a', 'b', 'a');
insert into CONTACTS (street, city, state, zip, email, middle, first, last)
values('street3', 'city3', 'state3', 'zip3', 'e3@mail.com', 'a', 'b', 'b');
insert into CONTACTS (street, city, state, zip, email, middle, first, last)
values('street4', 'city4', 'state4', 'zip4', 'e4@mail.com', 'a', 'a', 'b');
-- Phones
insert into PHONES (number, type, contact_id)
values('111-111-1111', 'home', 1);
insert into PHONES (number, type, contact_id)
values('222-222-2222', 'work', 1);
insert into PHONES (number, type, contact_id)
values('333-333-3333', 'work', 2);
insert into PHONES (number, type, contact_id)
values('444-444-4444', 'home', 2);
insert into PHONES (number, type, contact_id)
values('555-555-5555', 'mobile', 3);
insert into PHONES (number, type, contact_id)
values('777-777-7777', 'work', 4);
insert into PHONES (number, type, contact_id)
values('888-888-8888', 'home', 4);
Loading…
Cancel
Save