Skip to content

Commit 942ccff

Browse files
committed
Setting, Contact profile are implemented
1 parent 4ebd51f commit 942ccff

23 files changed

+497
-1
lines changed

src/main/java/com/manir/springbootecommercerestapi/config/SecurityConfig.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ protected void configure(HttpSecurity http) throws Exception {
4848
//to permit all get request and secure post put and delete methods
4949
.antMatchers(HttpMethod.GET, "/api/**").permitAll()
5050
//authorize singIn and signUp
51-
.antMatchers("/api/v1/auth/**").permitAll()
51+
.antMatchers("/api/v*/auth/**").permitAll()
52+
.antMatchers(HttpMethod.POST, "/api/v*/contact/**").permitAll()
5253
.anyRequest()
5354
.authenticated();
5455

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.manir.springbootecommercerestapi.controller;
2+
3+
import com.manir.springbootecommercerestapi.dto.ContactDto;
4+
import com.manir.springbootecommercerestapi.service.ContactService;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.http.HttpStatus;
7+
import org.springframework.http.ResponseEntity;
8+
import org.springframework.security.access.prepost.PreAuthorize;
9+
import org.springframework.web.bind.annotation.*;
10+
11+
import javax.servlet.http.HttpServletRequest;
12+
import java.util.List;
13+
14+
@RestController
15+
@RequestMapping(value = "api/v1/contact")
16+
public class ContactController {
17+
@Autowired
18+
private ContactService contactService;
19+
20+
@PostMapping("/sendMessage")
21+
public ResponseEntity<ContactDto> sendMessage(@RequestBody ContactDto contactDto,
22+
HttpServletRequest request){
23+
ContactDto responseMessage = contactService.sendMessage(contactDto, request);
24+
return new ResponseEntity<>(responseMessage, HttpStatus.CREATED);
25+
}
26+
27+
//get messages api
28+
@PreAuthorize("hasRole('ADMIN')")
29+
@GetMapping("/allMessages")
30+
public List<ContactDto> getAllMessages(){
31+
return contactService.getMessages();
32+
}
33+
}

src/main/java/com/manir/springbootecommercerestapi/controller/ProductController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,10 @@ public ResponseEntity<String> deleteProduct(@PathVariable Long productId){
7777
return new ResponseEntity<>("Product with id: "+ productId +" is deleted successfully:)", HttpStatus.OK);
7878
}
7979

80+
//search product api
81+
@GetMapping("/search")
82+
public List<ProductDto> searchProduct(@RequestParam(value = "query") String query){
83+
return productService.searchProduct(query);
84+
}
85+
8086
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.manir.springbootecommercerestapi.controller;
2+
3+
import com.manir.springbootecommercerestapi.dto.SettingDto;
4+
import com.manir.springbootecommercerestapi.model.Setting;
5+
import com.manir.springbootecommercerestapi.repository.SettingRepository;
6+
import com.manir.springbootecommercerestapi.service.SettingService;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.http.HttpStatus;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.security.access.prepost.PreAuthorize;
11+
import org.springframework.web.bind.annotation.*;
12+
13+
import java.util.Optional;
14+
15+
@RestController
16+
@RequestMapping(value = "api/v1/setting")
17+
public class SettingController {
18+
@Autowired
19+
private SettingService settingService;
20+
@Autowired
21+
private SettingRepository settingRepository;
22+
23+
//post first setting api
24+
@PreAuthorize("hasRole('ADMIN')")
25+
@PostMapping("/createSetting")
26+
public ResponseEntity<SettingDto> createSetting(@RequestBody SettingDto settingDto){
27+
SettingDto createdSetting = settingService.addSettingFirstTime(settingDto);
28+
return new ResponseEntity<>(createdSetting, HttpStatus.CREATED);
29+
}
30+
31+
//edit existing setting api
32+
@PreAuthorize("hasRole('ADMIN')")
33+
@PutMapping("/editSetting")
34+
public ResponseEntity<SettingDto> editSetting(@RequestBody SettingDto settingDto){
35+
Optional<Setting> existingSetting = settingRepository.findAll().stream().findFirst();
36+
SettingDto editedSetting = settingService.updateSetting(settingDto, existingSetting.get().getId());
37+
38+
return ResponseEntity.ok(editedSetting);
39+
}
40+
41+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.manir.springbootecommercerestapi.dto;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class ContactDto {
7+
private Long id;
8+
private String name;
9+
private String email;
10+
private String phone;
11+
private String subject;
12+
private String message;
13+
private String ipAddress;
14+
private String status;
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.manir.springbootecommercerestapi.dto;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class FaqDto {
7+
private Long id;
8+
private String question;
9+
private String answer;
10+
private String status;
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.manir.springbootecommercerestapi.dto;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class ProfileDto {
7+
private Long id;
8+
private String image;
9+
private String address;
10+
private String phone;
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.manir.springbootecommercerestapi.dto;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class SettingDto {
7+
private Long id;
8+
private String title;
9+
private String keywords;
10+
private String description;
11+
private String company;
12+
private String address;
13+
private String phone;
14+
private String fax;
15+
private String email;
16+
private String smtpServer;
17+
private String smtpEmail;
18+
private String smtpPassword;
19+
private Integer smtpPort;
20+
private String facebook;
21+
private String instagram;
22+
private String twitter;
23+
private String aboutUs;
24+
private String contact;
25+
private String reference;
26+
private String status;
27+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.manir.springbootecommercerestapi.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
import javax.persistence.*;
8+
9+
@AllArgsConstructor
10+
@NoArgsConstructor
11+
@Data
12+
@Entity
13+
@Table(name = "contact")
14+
public class Contact extends BaseEntity{
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
private String name;
19+
private String email;
20+
private String phone;
21+
private String subject;
22+
private String message;
23+
private String ipAddress;
24+
private String status;
25+
26+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.manir.springbootecommercerestapi.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
import javax.persistence.*;
8+
9+
@AllArgsConstructor
10+
@NoArgsConstructor
11+
@Data
12+
@Entity
13+
@Table(name = "faqs")
14+
public class Faq extends BaseEntity{
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
private String question;
19+
private String answer;
20+
private String status;
21+
22+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.manir.springbootecommercerestapi.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
import javax.persistence.*;
8+
9+
@AllArgsConstructor
10+
@NoArgsConstructor
11+
@Data
12+
@Entity
13+
@Table(name = "user_profile")
14+
public class Profile extends BaseEntity{
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
private String image;
19+
private String address;
20+
private String phone;
21+
22+
//relation with user
23+
@OneToOne(cascade = CascadeType.ALL)
24+
@JoinColumn(name = "user_id", referencedColumnName = "id")
25+
private User user;
26+
27+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.manir.springbootecommercerestapi.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
import javax.persistence.*;
8+
9+
@AllArgsConstructor
10+
@NoArgsConstructor
11+
@Data
12+
@Entity
13+
@Table(name = "settings")
14+
public class Setting extends BaseEntity{
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
private String title;
19+
private String keywords;
20+
private String description;
21+
private String company;
22+
private String address;
23+
private String phone;
24+
private String fax;
25+
private String email;
26+
private String smtpServer;
27+
private String smtpEmail;
28+
private String smtpPassword;
29+
private Integer smtpPort;
30+
private String facebook;
31+
private String instagram;
32+
private String twitter;
33+
private String aboutUs;
34+
private String contact;
35+
private String reference;
36+
private String status;
37+
38+
}

src/main/java/com/manir/springbootecommercerestapi/model/User.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,8 @@ public class User extends BaseEntity{
5252
fetch = FetchType.LAZY, orphanRemoval = true,
5353
mappedBy = "customer")
5454
private Set<Comment> comments;
55+
56+
//relation with profile
57+
@OneToOne(mappedBy = "user")
58+
private Profile user_profile;
5559
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.manir.springbootecommercerestapi.repository;
2+
3+
import com.manir.springbootecommercerestapi.model.Contact;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface ContactRepository extends JpaRepository<Contact, Long> {
7+
}

src/main/java/com/manir/springbootecommercerestapi/repository/ProductRepository.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,19 @@
22

33
import com.manir.springbootecommercerestapi.model.Product;
44
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.jpa.repository.Query;
6+
7+
import java.util.List;
58

69
public interface ProductRepository extends JpaRepository<Product, Long> {
710

11+
@Query(
12+
"SELECT p FROM Product p WHERE " +
13+
"p.title LIKE CONCAT('%', :query, '%') " +
14+
"or p.description LIKE CONCAT('%', :query, '%')" +
15+
"or p.keywords LIKE CONCAT('%', :query, '%')" +
16+
"or p.detail LIKE CONCAT('%', :query, '%')"
17+
)
18+
List<Product> searchProduct(String query);
19+
820
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.manir.springbootecommercerestapi.repository;
2+
3+
import com.manir.springbootecommercerestapi.model.Setting;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface SettingRepository extends JpaRepository<Setting, Long> {
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.manir.springbootecommercerestapi.service;
2+
3+
import com.manir.springbootecommercerestapi.dto.ContactDto;
4+
5+
import javax.servlet.http.HttpServletRequest;
6+
import java.util.List;
7+
8+
public interface ContactService {
9+
ContactDto sendMessage(ContactDto contactDto, HttpServletRequest request);
10+
List<ContactDto> getMessages();
11+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.manir.springbootecommercerestapi.service.Impl;
2+
3+
import com.manir.springbootecommercerestapi.dto.ContactDto;
4+
import com.manir.springbootecommercerestapi.model.Contact;
5+
import com.manir.springbootecommercerestapi.repository.ContactRepository;
6+
import com.manir.springbootecommercerestapi.service.ContactService;
7+
import com.manir.springbootecommercerestapi.utils.RequestClientIP;
8+
import lombok.AllArgsConstructor;
9+
import org.modelmapper.ModelMapper;
10+
import org.springframework.stereotype.Service;
11+
import org.springframework.web.context.request.RequestContextHolder;
12+
import org.springframework.web.context.request.ServletRequestAttributes;
13+
14+
import javax.annotation.Resource;
15+
import javax.servlet.http.HttpServletRequest;
16+
import java.util.List;
17+
import java.util.stream.Collectors;
18+
19+
@Service
20+
@AllArgsConstructor
21+
public class ContactServiceImpl implements ContactService {
22+
23+
@Resource(name = "contactRepository")
24+
private final ContactRepository contactRepository;
25+
@Resource(name = "modelMapper")
26+
private final ModelMapper modelMapper;
27+
@Override
28+
public ContactDto sendMessage(ContactDto contactDto, HttpServletRequest request) {
29+
30+
Contact contact = mapToEntity(contactDto);
31+
String ipAddress = RequestClientIP.getClientIpAddress(request);
32+
contact.setIpAddress(ipAddress);
33+
Contact createdMessage = contactRepository.save(contact);
34+
35+
return mapToDto(createdMessage);
36+
}
37+
38+
@Override
39+
public List<ContactDto> getMessages() {
40+
List<Contact> messages = contactRepository.findAll();
41+
42+
return messages.stream()
43+
.map(message -> mapToDto(message))
44+
.collect(Collectors.toList());
45+
}
46+
47+
//map to entity
48+
private Contact mapToEntity(ContactDto contactDto){
49+
Contact contact = modelMapper.map(contactDto, Contact.class);
50+
return contact;
51+
}
52+
//map to dto
53+
private ContactDto mapToDto(Contact contact){
54+
ContactDto contactDto = modelMapper.map(contact, ContactDto.class);
55+
return contactDto;
56+
}
57+
}

0 commit comments

Comments
 (0)