init wishlist files
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package _11.asktpk.artisanconnectbackend.controller;
|
||||
|
||||
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
|
||||
import _11.asktpk.artisanconnectbackend.dto.RequestResponseDTO;
|
||||
import _11.asktpk.artisanconnectbackend.dto.WishlistDTO;
|
||||
import _11.asktpk.artisanconnectbackend.entities.Wishlist;
|
||||
import _11.asktpk.artisanconnectbackend.service.ClientService;
|
||||
import _11.asktpk.artisanconnectbackend.service.NoticeService;
|
||||
import _11.asktpk.artisanconnectbackend.service.WishlistService;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/wishlist")
|
||||
public class WishlistController {
|
||||
|
||||
private final WishlistService wishlistService;
|
||||
private final ClientService clientService;
|
||||
private final NoticeService noticeService;
|
||||
|
||||
public WishlistController(WishlistService wishlistService, ClientService clientService, NoticeService noticeService) {
|
||||
this.wishlistService = wishlistService;
|
||||
this.clientService = clientService;
|
||||
this.noticeService = noticeService;
|
||||
}
|
||||
|
||||
@PostMapping("/toggle")
|
||||
public ResponseEntity<RequestResponseDTO> toggleWishlist(@RequestBody WishlistDTO wishlistDTO) {
|
||||
Long noticeId = wishlistDTO.getNoticeId();
|
||||
Long clientId = wishlistDTO.getClientId();
|
||||
|
||||
NoticeDTO noticeDTO = noticeService.getNoticeById(noticeId);
|
||||
if (noticeDTO == null) {
|
||||
return ResponseEntity.badRequest().body(new RequestResponseDTO("Notice not found"));
|
||||
}
|
||||
boolean added = wishlistService.toggleWishlist(
|
||||
clientService.getClientById(clientId),
|
||||
noticeService.getNoticeByIdEntity(noticeId)
|
||||
);
|
||||
|
||||
if (added) {
|
||||
return ResponseEntity.ok(new RequestResponseDTO("Wishlist entry added"));
|
||||
} else {
|
||||
return ResponseEntity.ok(new RequestResponseDTO("Wishlist entry removed"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("/{clientId}")
|
||||
public ResponseEntity<List<WishlistDTO>> getWishlist(@PathVariable Long clientId) {
|
||||
List<WishlistDTO> wishlist = wishlistService.getWishlistForClientId(clientId);
|
||||
return ResponseEntity.ok(wishlist);
|
||||
}
|
||||
//
|
||||
// @GetMapping("/get/all")
|
||||
// public List<NoticeDTO> getAllNotices() {
|
||||
// return noticeService.getAllNotices();
|
||||
// }
|
||||
@GetMapping("/")
|
||||
public List<NoticeDTO> getWishlistForClient() {
|
||||
Long clientId =1L;
|
||||
return wishlistService.getNoticesInWishlist(clientId);
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,8 @@ public class NoticeDTO {
|
||||
|
||||
private List<AttributesNotice> attributesNotices;
|
||||
|
||||
private boolean isWishlisted;
|
||||
|
||||
public NoticeDTO() {
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package _11.asktpk.artisanconnectbackend.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class WishlistDTO {
|
||||
private Long id;
|
||||
private Long clientId;
|
||||
private Long noticeId;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package _11.asktpk.artisanconnectbackend.entities;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Entity
|
||||
@Table(name = "wishlist")
|
||||
@Getter
|
||||
@Setter
|
||||
public class Wishlist {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "client_id", nullable = false)
|
||||
private Client client;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "notice_id", nullable = false)
|
||||
private Notice notice;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package _11.asktpk.artisanconnectbackend.repository;
|
||||
|
||||
import _11.asktpk.artisanconnectbackend.entities.Client;
|
||||
import _11.asktpk.artisanconnectbackend.entities.Notice;
|
||||
import _11.asktpk.artisanconnectbackend.entities.Wishlist;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface WishlistRepository extends JpaRepository<Wishlist, Long> {
|
||||
|
||||
List<Wishlist> findAllByClientId(Long clientId);
|
||||
|
||||
Optional<Wishlist> findByClientAndNotice(Client client, Notice notice);
|
||||
|
||||
Boolean existsByClientAndNotice(Client client, Notice notice);
|
||||
}
|
||||
@@ -5,24 +5,28 @@ import _11.asktpk.artisanconnectbackend.entities.Notice;
|
||||
import _11.asktpk.artisanconnectbackend.repository.ClientRepository;
|
||||
import _11.asktpk.artisanconnectbackend.repository.NoticeRepository;
|
||||
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
|
||||
import _11.asktpk.artisanconnectbackend.repository.WishlistRepository;
|
||||
import jakarta.persistence.EntityNotFoundException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class NoticeService {
|
||||
|
||||
private final NoticeRepository noticeRepository;
|
||||
private final ClientRepository clientRepository;
|
||||
private final WishlistRepository wishlistRepository;
|
||||
|
||||
public NoticeService(NoticeRepository noticeRepository, ClientRepository clientRepository) {
|
||||
public NoticeService(NoticeRepository noticeRepository, ClientRepository clientRepository,WishlistRepository wishlistRepository) {
|
||||
this.noticeRepository = noticeRepository;
|
||||
this.clientRepository = clientRepository;
|
||||
this.wishlistRepository = wishlistRepository;//serwis zamiast repository
|
||||
}
|
||||
|
||||
private Notice fromDTO(NoticeDTO dto) {
|
||||
public Notice fromDTO(NoticeDTO dto) {
|
||||
Notice notice = new Notice();
|
||||
notice.setTitle(dto.getTitle());
|
||||
notice.setDescription(dto.getDescription());
|
||||
@@ -41,6 +45,12 @@ public class NoticeService {
|
||||
|
||||
private NoticeDTO toDTO(Notice notice) {
|
||||
NoticeDTO dto = new NoticeDTO();
|
||||
Optional<Client> client = clientRepository.findById(1L);
|
||||
boolean isWishlisted = false;
|
||||
if (client.isPresent()) {
|
||||
Client c = client.get();
|
||||
isWishlisted = wishlistRepository.existsByClientAndNotice(c,notice);
|
||||
}
|
||||
dto.setNoticeId(notice.getIdNotice());
|
||||
dto.setTitle(notice.getTitle());
|
||||
dto.setClientId(notice.getClient().getId());
|
||||
@@ -50,7 +60,7 @@ public class NoticeService {
|
||||
dto.setStatus(notice.getStatus());
|
||||
dto.setPublishDate(notice.getPublishDate());
|
||||
dto.setAttributesNotices(notice.getAttributesNotices());
|
||||
|
||||
dto.setWishlisted(isWishlisted);
|
||||
return dto;
|
||||
}
|
||||
|
||||
@@ -67,6 +77,11 @@ public class NoticeService {
|
||||
.orElseThrow(() -> new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + id));
|
||||
return toDTO(notice);
|
||||
}
|
||||
public Notice getNoticeByIdEntity(Long id) {
|
||||
Notice notice = noticeRepository.findById(id)
|
||||
.orElseThrow(() -> new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + id));
|
||||
return notice;
|
||||
}
|
||||
|
||||
public Long addNotice(NoticeDTO dto) {
|
||||
return noticeRepository.save(fromDTO(dto)).getIdNotice();
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
package _11.asktpk.artisanconnectbackend.service;
|
||||
|
||||
import _11.asktpk.artisanconnectbackend.dto.WishlistDTO;
|
||||
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
|
||||
import _11.asktpk.artisanconnectbackend.service.NoticeService;
|
||||
import _11.asktpk.artisanconnectbackend.entities.Client;
|
||||
import _11.asktpk.artisanconnectbackend.entities.Notice;
|
||||
import _11.asktpk.artisanconnectbackend.entities.Wishlist;
|
||||
import _11.asktpk.artisanconnectbackend.repository.WishlistRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class WishlistService {
|
||||
|
||||
private final WishlistRepository wishlistRepository;
|
||||
private final NoticeService noticeService;
|
||||
|
||||
public WishlistService(WishlistRepository wishlistRepository, NoticeService noticeService) {
|
||||
this.wishlistRepository = wishlistRepository;
|
||||
this.noticeService = noticeService;//tak robimy
|
||||
}
|
||||
|
||||
public List<WishlistDTO> getWishlistForClientId(Long clientId) {
|
||||
List<Wishlist> wishlistEntities = wishlistRepository.findAllByClientId(clientId);
|
||||
return wishlistEntities.stream()
|
||||
.map(this::toDTO)
|
||||
.toList();
|
||||
}
|
||||
|
||||
public boolean isWishlisted(Client client, Notice notice) {
|
||||
Optional<Wishlist> existingEntry = wishlistRepository.findByClientAndNotice(client, notice);
|
||||
|
||||
if (existingEntry.isPresent()) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean toggleWishlist(Client client, Notice notice) {
|
||||
Optional<Wishlist> existingEntry = wishlistRepository.findByClientAndNotice(client, notice);
|
||||
|
||||
if (existingEntry.isPresent()) {
|
||||
wishlistRepository.delete(existingEntry.get());
|
||||
return false;
|
||||
} else {
|
||||
Wishlist wishlist = new Wishlist();
|
||||
wishlist.setClient(client);
|
||||
wishlist.setNotice(notice);
|
||||
wishlistRepository.save(wishlist);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private WishlistDTO toDTO(Wishlist wishlist) {
|
||||
WishlistDTO dto = new WishlistDTO();
|
||||
dto.setId(wishlist.getId());
|
||||
dto.setClientId(wishlist.getClient().getId());
|
||||
dto.setNoticeId(wishlist.getNotice().getIdNotice());
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
public List<NoticeDTO> getNoticesInWishlist(Long clientId) {
|
||||
List<Wishlist> wishlistEntries = wishlistRepository.findAllByClientId(clientId);
|
||||
|
||||
return wishlistEntries.stream()
|
||||
.map(wishlist -> noticeService.getNoticeById(wishlist.getNotice().getIdNotice()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user