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 List<AttributesNotice> attributesNotices;
|
||||||
|
|
||||||
|
private boolean isWishlisted;
|
||||||
|
|
||||||
public NoticeDTO() {
|
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.ClientRepository;
|
||||||
import _11.asktpk.artisanconnectbackend.repository.NoticeRepository;
|
import _11.asktpk.artisanconnectbackend.repository.NoticeRepository;
|
||||||
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
|
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
|
||||||
|
import _11.asktpk.artisanconnectbackend.repository.WishlistRepository;
|
||||||
import jakarta.persistence.EntityNotFoundException;
|
import jakarta.persistence.EntityNotFoundException;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class NoticeService {
|
public class NoticeService {
|
||||||
|
|
||||||
private final NoticeRepository noticeRepository;
|
private final NoticeRepository noticeRepository;
|
||||||
private final ClientRepository clientRepository;
|
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.noticeRepository = noticeRepository;
|
||||||
this.clientRepository = clientRepository;
|
this.clientRepository = clientRepository;
|
||||||
|
this.wishlistRepository = wishlistRepository;//serwis zamiast repository
|
||||||
}
|
}
|
||||||
|
|
||||||
private Notice fromDTO(NoticeDTO dto) {
|
public Notice fromDTO(NoticeDTO dto) {
|
||||||
Notice notice = new Notice();
|
Notice notice = new Notice();
|
||||||
notice.setTitle(dto.getTitle());
|
notice.setTitle(dto.getTitle());
|
||||||
notice.setDescription(dto.getDescription());
|
notice.setDescription(dto.getDescription());
|
||||||
@@ -41,6 +45,12 @@ public class NoticeService {
|
|||||||
|
|
||||||
private NoticeDTO toDTO(Notice notice) {
|
private NoticeDTO toDTO(Notice notice) {
|
||||||
NoticeDTO dto = new NoticeDTO();
|
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.setNoticeId(notice.getIdNotice());
|
||||||
dto.setTitle(notice.getTitle());
|
dto.setTitle(notice.getTitle());
|
||||||
dto.setClientId(notice.getClient().getId());
|
dto.setClientId(notice.getClient().getId());
|
||||||
@@ -50,7 +60,7 @@ public class NoticeService {
|
|||||||
dto.setStatus(notice.getStatus());
|
dto.setStatus(notice.getStatus());
|
||||||
dto.setPublishDate(notice.getPublishDate());
|
dto.setPublishDate(notice.getPublishDate());
|
||||||
dto.setAttributesNotices(notice.getAttributesNotices());
|
dto.setAttributesNotices(notice.getAttributesNotices());
|
||||||
|
dto.setWishlisted(isWishlisted);
|
||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +77,11 @@ public class NoticeService {
|
|||||||
.orElseThrow(() -> new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + id));
|
.orElseThrow(() -> new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + id));
|
||||||
return toDTO(notice);
|
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) {
|
public Long addNotice(NoticeDTO dto) {
|
||||||
return noticeRepository.save(fromDTO(dto)).getIdNotice();
|
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