Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 15

package com.verizon.

controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.verizon.dto.CustomerAddressRequest;
import com.verizon.dto.CustomerAddressResponse;
import com.verizon.dto.CustomerDetailsRequest;
import com.verizon.dto.CustomerDetailsResponse;
import com.verizon.dto.ServiceProviderDetailsRequest;
import com.verizon.entity.CustomerAddress;
import com.verizon.entity.CustomerDetails;
import com.verizon.mapper.CustomerAddressMapper;
import com.verizon.mapper.CustomerDetailsMapper;
import com.verizon.mapper.ServiceProviderDetailsMapper;
import com.verizon.service.CustomerDetailsService;
//Indicating that this class is a REST controller
@RestController
//URL mapping for this controller
@RequestMapping("/cust")
public class CustomerControl {
// Annotation for automatic dependency injection
// Dependency injection for CustomerAddressMapper
private CustomerAddressMapper customerAddressMapper;
@Autowired
private CustomerDetailsService customerDetailsService; // Dependency
injection for CustomerDetailsService
@Autowired
private CustomerDetailsMapper customerDetailsMapper;// Dependency injection
for CustomerDetailsMapper
// Endpoint for saving customer details
@Autowired
private ServiceProviderDetailsMapper serviceProviderDetailsMapper;

CustomerControl(CustomerAddressMapper customerAddressMapper) {
this.customerAddressMapper = customerAddressMapper;
}
// Endpoint for saving customer details
@PostMapping("/costomerdetails") // Annotation to handle HTTP POST requests
public CustomerDetailsResponse SaveCustomerDetails(@RequestBody
CustomerDetailsRequest customerDetailsRequest) {
CustomerDetailsResponse customerDetailsResponse = new
CustomerDetailsResponse(); // Initialize the response object
List<String> messages = new ArrayList();// Initialize the list to hold
validation messages
try
{
// Validate phone number
// Check if phone number is null
if(customerDetailsRequest.getPhoneNumber()==null)
{
messages.add("Phone Number Must Not null");
}
// Check if phone number is exactly 10 digits
if (customerDetailsRequest.getPhoneNumber().length()<10 ||
customerDetailsRequest.getPhoneNumber().length()>10 )
{
messages.add("Phone Number must be 10 digits");
}

// Validate PassPort
//Passport Must Not null
if (customerDetailsRequest.getPassport() ==null) {
messages.add(" Must Provide New service provider and
cannot be null.");

List<CustomerAddressRequest> addressRequests =
customerDetailsRequest.getCustomerAddressRequest();
if (addressRequests != null) {
for (CustomerAddressRequest addressRequest :
addressRequests) {
// Check each property of addressRequest for null or
empty values and add appropriate messages
if (addressRequest.getMandal() == null ||
addressRequest.getMandal().isEmpty())
{
messages.add("Mandal must not be null or
empty");
}

if (addressRequest.getDistrict() == null ||
addressRequest.getDistrict().isEmpty())
{
messages.add("Mandal must not be null or
empty");
}
if (addressRequest.getCity() == null ||
addressRequest.getCity().isEmpty())
{
messages.add("Mandal must not be null or
empty");
}
if (addressRequest.getState() == null ||
addressRequest.getState().isEmpty())
{
messages.add("Mandal must not be null or
empty");
}
if (addressRequest.getCountry() == null &&
addressRequest.getCountry().isEmpty())
{
messages.add("Mandal must not be null or
empty");

}
}
}
// Validate ServiceProviderDetails
List<ServiceProviderDetailsRequest> serviceProviderRequests =
customerDetailsRequest.getServiceProviderDetailsRequest();
if (serviceProviderRequests != null) {
for (ServiceProviderDetailsRequest serviceProviderRequest :
serviceProviderRequests) {
// Loop through each service provider request
// Check each property of serviceProviderRequest for null or
empty values and add appropriate messages
if (serviceProviderRequest.getProviderName() == null
|| serviceProviderRequest.getProviderName().isEmpty()) {
messages.add("Provider Name must not be null or
empty");
}
if (serviceProviderRequest.getProviderAddress() ==
null || serviceProviderRequest.getProviderAddress().isEmpty()) {
messages.add("Provider Address must not be null
or empty");
}
if (serviceProviderRequest.getProviderContact() ==
null || serviceProviderRequest.getProviderContact().isEmpty()) {
messages.add("Provider Contact must not be null
or empty");
}
if (serviceProviderRequest.getProviderType() == null
|| serviceProviderRequest.getProviderType().isEmpty()) {
messages.add("Provider Type must not be null or
empty");
}
// Add additional validations for other properties
}
}
else {
messages.add("Service Provider Details Request list must
not be null");
}

// If no validation errors, proceed with mapping and saving the


customer details
if (messages.isEmpty())
{

CustomerDetails customerDetails =
customerDetailsMapper.mapCustomerDetails(customerDetailsRequest);// Map the request
to entity

customerDetailsService.saveCustomerDetails(customerDetails);// Save the


customer details using the service

}
catch(Exception e)
{
messages.add("An error occurred: " + e.getMessage()); // Catch
and add any exceptions to messages
}
finally
{
customerDetailsResponse.setMessages(messages);// Set the messages
in the response object
}

return customerDetailsResponse;// Return the response object


}

ackage com.verizon.dto;

public class CustomerAddressRequest {


private Long addressId;
private String doorNumber;
private String street;
private String landmarks;
private String village;
private String mandal;
private String city;
private String district;
private String state;
private String country;

// Getters and setters


public Long getAddressId() {
return addressId;
}

public void setAddressId(Long addressId) {


this.addressId = addressId;
}

public String getDoorNumber() {


return doorNumber;
}

public void setDoorNumber(String doorNumber) {


this.doorNumber = doorNumber;
}

public String getStreet() {


return street;
}

public void setStreet(String street) {


this.street = street;
}

public String getLandmarks() {


return landmarks;
}

public void setLandmarks(String landmarks) {


this.landmarks = landmarks;
}
public String getVillage() {
return village;
}

public void setVillage(String village) {


this.village = village;
}

public String getMandal() {


return mandal;
}

public void setMandal(String mandal) {


this.mandal = mandal;
}

public String getCity() {


return city;
}

public void setCity(String city) {


this.city = city;
}

public String getDistrict() {


return district;
}

public void setDistrict(String district) {


this.district = district;
}

public String getState() {


return state;
}

public void setState(String state) {


this.state = state;
}

public String getCountry() {


return country;
}

public void setCountry(String country) {


this.country = country;
}
}

}
package com.verizon.dto;

import java.util.List;

public class CustomerAddressResponse {


private String village;
private String mandal;
private String city;
private String district;
private String state;
private String country;
private List<String> messages;
public List<String> getMessages() {
return messages;
}
public void setMessages(List<String> messages) {
this.messages = messages;
}
public String getVillage() {
return village;
}
public void setVillage(String village) {
this.village = village;
}
public String getMandal() {
return mandal;
}
public void setMandal(String mandal) {
this.mandal = mandal;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}

}
package com.verizon.dto;

import java.util.Date;
import java.util.List;

public class CustomerDetailsRequest {

private String customerName;


private String email;
private String phoneNumber;
private Long transactionId;
private Date dateOfBirth;
private String gender;
private String passport;
private Date customerActiveDate;
private Date customerDeactiveDate;
private List<CustomerAddressRequest> customerAddressRequest;
private List<ServiceProviderDetailsRequest> serviceProviderDetailsRequest;
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Long getTransactionId() {
return transactionId;
}
public void setTransactionId(Long transactionId) {
this.transactionId = transactionId;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getPassport() {
return passport;
}
public void setPassport(String passport) {
this.passport = passport;
}
public Date getCustomerActiveDate() {
return customerActiveDate;
}
public void setCustomerActiveDate(Date customerActiveDate) {
this.customerActiveDate = customerActiveDate;
}
public Date getCustomerDeactiveDate() {
return customerDeactiveDate;
}
public void setCustomerDeactiveDate(Date customerDeactiveDate) {
this.customerDeactiveDate = customerDeactiveDate;
}
public List<CustomerAddressRequest> getCustomerAddressRequest() {
return customerAddressRequest;
}
public void setCustomerAddressRequest(List<CustomerAddressRequest>
customerAddressRequest) {
this.customerAddressRequest = customerAddressRequest;
}
public List<ServiceProviderDetailsRequest> getServiceProviderDetailsRequest()
{
return serviceProviderDetailsRequest;
}
public void
setServiceProviderDetailsRequest(List<ServiceProviderDetailsRequest>
serviceProviderDetailsRequest) {
this.serviceProviderDetailsRequest = serviceProviderDetailsRequest;
}

package com.verizon.dto;

import java.util.List;

public class CustomerDetailsResponse {

private String customerName;


private String email;
private String phoneNumber;
private Long transactionId;
private List<String> messages;
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Long getTransactionId() {
return transactionId;
}
public void setTransactionId(Long transactionId) {
this.transactionId = transactionId;
}
public List<String> getMessages() {
return messages;
}
public void setMessages(List<String> messages) {
this.messages = messages;
}

}
package com.verizon.dto;

public class ServiceProvideDetailsResponse {


private Long spid;
private String providerName;
private String providerAddress;
private String providerContact;
private String providerType;
public Long getSpid() {
return spid;
}
public void setSpid(Long spid) {
this.spid = spid;
}
public String getProviderName() {
return providerName;
}
public void setProviderName(String providerName) {
this.providerName = providerName;
}
public String getProviderAddress() {
return providerAddress;
}
public void setProviderAddress(String providerAddress) {
this.providerAddress = providerAddress;
}
public String getProviderContact() {
return providerContact;
}
public void setProviderContact(String providerContact) {
this.providerContact = providerContact;
}
public String getProviderType() {
return providerType;
}
public void setProviderType(String providerType) {
this.providerType = providerType;
}

}
package com.verizon.dto;

import java.sql.Date;

public class ServiceProviderDetailsRequest {


private Long id;
private Long spid;
private String providerName;
private String providerAddress;
private String providerContact;
private String providerType;
private String website;
private String servicesOffered;
private Date establishedDate;
private double rating;

// Getters and setters


public Long getId() {
return id;
}

public void setId(Long id) {


this.id = id;
}

public Long getSpid() {


return spid;
}

public void setSpid(Long spid) {


this.spid = spid;
}

public String getProviderName() {


return providerName;
}

public void setProviderName(String providerName) {


this.providerName = providerName;
}

public String getProviderAddress() {


return providerAddress;
}

public void setProviderAddress(String providerAddress) {


this.providerAddress = providerAddress;
}

public String getProviderContact() {


return providerContact;
}

public void setProviderContact(String providerContact) {


this.providerContact = providerContact;
}

public String getProviderType() {


return providerType;
}

public void setProviderType(String providerType) {


this.providerType = providerType;
}

public String getWebsite() {


return website;
}

public void setWebsite(String website) {


this.website = website;
}
public String getServicesOffered() {
return servicesOffered;
}

public void setServicesOffered(String servicesOffered) {


this.servicesOffered = servicesOffered;
}

public Date getEstablishedDate() {


return establishedDate;
}

public void setEstablishedDate(Date establishedDate) {


this.establishedDate = establishedDate;
}

public double getRating() {


return rating;
}

public void setRating(double rating) {


this.rating = rating;
}

}
package com.verizon.mapper;

import org.springframework.stereotype.Component;
import com.verizon.dto.CustomerAddressRequest;
import com.verizon.entity.CustomerAddress;

@Component // Indicates that this class is a Spring component


public class CustomerAddressMapper {
// Method to map CustomerAddressRequest to CustomerAddress entity
public CustomerAddress mapAddress(CustomerAddressRequest
customerAddressRequest) {
// Creating a new CustomerAddress object
CustomerAddress customerAddress = new CustomerAddress();
// Mapping fields from CustomerAddressRequest to CustomerAddress entity
customerAddress.setAddressId(customerAddressRequest.getAddressId());
customerAddress.setDoorNumber(customerAddressRequest.getDoorNumber());
customerAddress.setStreet(customerAddressRequest.getStreet());
customerAddress.setVillage(customerAddressRequest.getVillage());
customerAddress.setLandmarks(customerAddressRequest.getLandmarks());
customerAddress.setMandal(customerAddressRequest.getMandal());
customerAddress.setCity(customerAddressRequest.getCity());
customerAddress.setDistrict(customerAddressRequest.getDistrict());
customerAddress.setState(customerAddressRequest.getState());
customerAddress.setCountry(customerAddressRequest.getCountry());

return customerAddress; // Returning the mapped CustomerAddress entity


}
}
package com.verizon.mapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.verizon.dto.CustomerDetailsRequest;
import com.verizon.dto.ServiceProviderDetailsRequest;
import com.verizon.entity.CustomerDetails;
import com.verizon.entity.CustomerAddress;
import com.verizon.entity.ServiceProviderDetails;

@Component // Indicates that this class is a Spring component


public class CustomerDetailsMapper {

@Autowired // Autowiring CustomerAddressMapper dependency


private CustomerAddressMapper customerAddressMapper;

@Autowired // Autowiring ServiceProviderDetailsMapper dependency


private ServiceProviderDetailsMapper serviceProviderDetailsMapper;

// Method to map CustomerDetailsRequest to CustomerDetails entity


public CustomerDetails mapCustomerDetails(CustomerDetailsRequest
customerDetailsRequest) {
// Creating a new CustomerDetails object
CustomerDetails customerDetails = new CustomerDetails();
// Mapping fields from CustomerDetailsRequest to CustomerDetails entity
customerDetails.setCustomerName(customerDetailsRequest.getCustomerName());
customerDetails.setEmail(customerDetailsRequest.getEmail());

customerDetails.setCustomerActiveDate(customerDetailsRequest.getCustomerActiveDate(
));
customerDetails.setDateOfBirth(customerDetailsRequest.getDateOfBirth());
customerDetails.setPhoneNumber(customerDetailsRequest.getPhoneNumber());

customerDetails.setCustomerDeactiveDate(customerDetailsRequest.getCustomerDeactiveD
ate());

customerDetails.setTransactionId(customerDetailsRequest.getTransactionId());
customerDetails.setGender(customerDetailsRequest.getGender());
customerDetails.setPassport(customerDetailsRequest.getPassport());

// Map Address
if (customerDetailsRequest.getCustomerAddressRequest() != null) {
// Mapping customer address if present
CustomerAddress customerAddress =
customerAddressMapper.mapAddress(customerDetailsRequest.getCustomerAddressRequest()
.get(0)); // Assuming only one address is present
customerDetails.setAddress(customerAddress); // Setting the mapped
customer address to customer details
}

// Map ServiceProviderDetails
if (customerDetailsRequest.getServiceProviderDetailsRequest() != null && !
customerDetailsRequest.getServiceProviderDetailsRequest().isEmpty()) {
// Mapping service provider details if present
ServiceProviderDetailsRequest serviceProviderRequest =
customerDetailsRequest.getServiceProviderDetailsRequest().get(0); // Assuming only
one service provider is present
ServiceProviderDetails serviceProviderDetails =
serviceProviderDetailsMapper.mapServiceProviderDetails(serviceProviderRequest); //
Mapping service provider details
customerDetails.setServiceProvider(serviceProviderDetails); // Setting
the mapped service provider details to customer details
}

return customerDetails; // Returning the mapped customerDetails object


}
}package com.verizon.mapper;

import org.springframework.stereotype.Component;
import com.verizon.dto.ServiceProviderDetailsRequest;
import com.verizon.entity.ServiceProviderDetails;

@Component // Indicates that this class is a Spring component


public class ServiceProviderDetailsMapper {

// Method to map ServiceProviderDetailsRequest to ServiceProviderDetails


entity
public ServiceProviderDetails
mapServiceProviderDetails(ServiceProviderDetailsRequest
serviceProviderDetailsRequest) {
// Creating a new ServiceProviderDetails object
ServiceProviderDetails serviceProviderDetails = new
ServiceProviderDetails();
// Mapping fields from ServiceProviderDetailsRequest to
ServiceProviderDetails entity

serviceProviderDetails.setSpid(serviceProviderDetailsRequest.getSpid());

serviceProviderDetails.setProviderName(serviceProviderDetailsRequest.getProviderNam
e());

serviceProviderDetails.setProviderAddress(serviceProviderDetailsRequest.getProvider
Address());

serviceProviderDetails.setProviderContact(serviceProviderDetailsRequest.getProvider
Contact());

serviceProviderDetails.setProviderType(serviceProviderDetailsRequest.getProviderTyp
e());

serviceProviderDetails.setWebsite(serviceProviderDetailsRequest.getWebsite());

serviceProviderDetails.setServicesOffered(serviceProviderDetailsRequest.getServices
Offered());

serviceProviderDetails.setEstablishedDate(serviceProviderDetailsRequest.getEstablis
hedDate());

serviceProviderDetails.setRating(serviceProviderDetailsRequest.getRating());

return serviceProviderDetails; // Returning the mapped


serviceProviderDetails object
}
}

package com.verizon.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.verizon.entity.CustomerDetails;

@Repository // Indicates that this interface is a Spring repository


public interface CustomerDetailsRepository extends JpaRepository<CustomerDetails,
Long> {
// Define custom query methods if needed
}
package com.verizon.service;

import com.verizon.entity.CustomerDetails;

public interface CustomerDetailsService {

/** Method to save customer details


Parameters:
- customerDetails: The customer details to be saved
Returns:
- The saved customer details

*/

CustomerDetails saveCustomerDetails(CustomerDetails customerDetails);

package com.verizon.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.verizon.entity.CustomerDetails;
import com.verizon.repository.CustomerDetailsRepository;

@Service // Spring service annotation to indicate this class as a service component


public class CustomerDetailsServiceImpl implements CustomerDetailsService {

@Autowired // Spring annotation for automatic dependency injection


private CustomerDetailsRepository customerDetailsRepository; // Repository for
customer details

@Override
public CustomerDetails saveCustomerDetails(CustomerDetails customerDetails) {
// Method to save customer details using the repository
return customerDetailsRepository.save(customerDetails); // Saving and
returning the customer details
}
}

You might also like