diff --git a/sql/data.sql b/sql/data.sql deleted file mode 100644 index 3766846..0000000 --- a/sql/data.sql +++ /dev/null @@ -1,4 +0,0 @@ -INSERT INTO Clients (email, first_name, image, last_name, password, role) -VALUES( - 'dignissim.tempor.arcu@aol.ca', 'Diana', 'null', 'Harrison', 'password', 'USER' - ) \ No newline at end of file diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Controller/ArtisanConnectController.java b/src/main/java/_11/asktpk/artisanconnectbackend/Controller/ArtisanConnectController.java index e2b2033..49b4aa5 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Controller/ArtisanConnectController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Controller/ArtisanConnectController.java @@ -1,29 +1,70 @@ package _11.asktpk.artisanconnectbackend.Controller; -import _11.asktpk.artisanconnectbackend.Model.Notice; +import _11.asktpk.artisanconnectbackend.Entities.Notice; +import _11.asktpk.artisanconnectbackend.Repository.ClientRepository; import _11.asktpk.artisanconnectbackend.Service.NoticeService; +import _11.asktpk.artisanconnectbackend.DTO.NoticeDTO; +import okhttp3.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; +import static org.springframework.web.servlet.function.ServerResponse.status; + @RequestMapping("/api/v1") @RestController public class ArtisanConnectController { @Autowired private NoticeService noticeService; + @Autowired + private ClientRepository clientRepository; @GetMapping("/notices/all") public List getAllNotices() { return noticeService.getAllNotices(); } - @ResponseStatus(HttpStatus.CREATED) @PostMapping("/notices/add") - public void addNotice(@RequestBody List notices_list) { - for (Notice notice : notices_list) { - noticeService.addNotice(notice); + public ResponseEntity addNotice(@RequestBody NoticeDTO dto) { + if (!clientRepository.existsById(dto.getClientId())) { + return ResponseEntity + .status(HttpStatus.BAD_REQUEST) + .body("Nie znaleziono klienta o ID: " + dto.getClientId()); } + noticeService.addNotice(noticeService.createFromDTO(dto)); + return ResponseEntity.status(HttpStatus.CREATED).body("Dodano ogłoszenie."); + } + + + // TODO: zamiast dodawać tutaj pętlą, musi to robić NoticeService, trzeba zaimplementować odpowienią metodę + @PostMapping("/notices/bulk_add") + public ResponseEntity addNotice(@RequestBody List notices_list) { + List errors = new ArrayList<>(); + boolean isError = false; + if (notices_list.isEmpty()) { + return ResponseEntity + .status(HttpStatus.BAD_REQUEST) + .body("Lista ogłoszeń jest pusta."); + } + for (NoticeDTO dto : notices_list) { + if (!clientRepository.existsById(dto.getClientId())) { + isError = true; + errors.add("Nie znaleziono klienta o ID: " + dto.getClientId()); + } + } + if(isError) { + return ResponseEntity + .status(HttpStatus.BAD_REQUEST) + .body(errors.toString()); + } + + for(NoticeDTO dto : notices_list) { + noticeService.addNotice(noticeService.createFromDTO(dto)); + } + return ResponseEntity.status(HttpStatus.CREATED).body("Dodano ogłoszenia."); } } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/DTO/NoticeDTO.java similarity index 84% rename from src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeDTO.java rename to src/main/java/_11/asktpk/artisanconnectbackend/DTO/NoticeDTO.java index 904fa56..0dd7e1a 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeDTO.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/DTO/NoticeDTO.java @@ -1,9 +1,8 @@ -package _11.asktpk.artisanconnectbackend.dto; +package _11.asktpk.artisanconnectbackend.DTO; -import _11.asktpk.artisanconnectbackend.Model.AttributesNotice; -import _11.asktpk.artisanconnectbackend.Model.Client; -import _11.asktpk.artisanconnectbackend.Model.Orders; -import _11.asktpk.artisanconnectbackend.Model.Payments; +import _11.asktpk.artisanconnectbackend.Entities.AttributesNotice; +import _11.asktpk.artisanconnectbackend.Entities.Orders; +import _11.asktpk.artisanconnectbackend.Entities.Payments; import _11.asktpk.artisanconnectbackend.Utils.Enums; import java.time.LocalDate; @@ -11,7 +10,7 @@ import java.util.List; public class NoticeDTO { private String title; - private Client client; + private Long clientId; private String description; private Double price; private Enums.Category category; @@ -22,12 +21,12 @@ public class NoticeDTO { private List orders; private List payments; - public NoticeDTO(String title, Client client, String description, Double price, + public NoticeDTO(String title, Long clientId, String description, Double price, Enums.Category category, List images, Enums.Status status, LocalDate publishDate, List attributesNotices, List orders, List payments) { this.title = title; - this.client = client; + this.clientId = clientId; this.description = description; this.price = price; this.category = category; @@ -47,14 +46,6 @@ public class NoticeDTO { this.title = title; } - public Client getClient() { - return client; - } - - public void setClient(Client client) { - this.client = client; - } - public String getDescription() { return description; } @@ -126,4 +117,12 @@ public class NoticeDTO { public void setPayments(List payments) { this.payments = payments; } + + public Long getClientId() { + return clientId; + } + + public void setClientId(Long clientId) { + this.clientId = clientId; + } } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/AttributeValues.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/AttributeValues.java similarity index 87% rename from src/main/java/_11/asktpk/artisanconnectbackend/Model/AttributeValues.java rename to src/main/java/_11/asktpk/artisanconnectbackend/Entities/AttributeValues.java index 9e12408..609aff2 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/AttributeValues.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/AttributeValues.java @@ -1,4 +1,4 @@ -package _11.asktpk.artisanconnectbackend.Model; +package _11.asktpk.artisanconnectbackend.Entities; import jakarta.persistence.*; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Attributes.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Attributes.java similarity index 88% rename from src/main/java/_11/asktpk/artisanconnectbackend/Model/Attributes.java rename to src/main/java/_11/asktpk/artisanconnectbackend/Entities/Attributes.java index 3977de2..d521c2c 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Attributes.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Attributes.java @@ -1,4 +1,4 @@ -package _11.asktpk.artisanconnectbackend.Model; +package _11.asktpk.artisanconnectbackend.Entities; import jakarta.persistence.*; import java.util.List; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/AttributesNotice.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/AttributesNotice.java similarity index 88% rename from src/main/java/_11/asktpk/artisanconnectbackend/Model/AttributesNotice.java rename to src/main/java/_11/asktpk/artisanconnectbackend/Entities/AttributesNotice.java index ca81745..290645d 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/AttributesNotice.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/AttributesNotice.java @@ -1,4 +1,4 @@ -package _11.asktpk.artisanconnectbackend.Model; +package _11.asktpk.artisanconnectbackend.Entities; import jakarta.persistence.*; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Client.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Client.java new file mode 100644 index 0000000..a174da5 --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Client.java @@ -0,0 +1,102 @@ +package _11.asktpk.artisanconnectbackend.Entities; + +import _11.asktpk.artisanconnectbackend.Utils.Enums.Role; + +import jakarta.persistence.*; +import java.util.List; + +@Entity +@Table(name = "clients") +public class Client { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String email; + private String password; + private String firstName; + private String lastName; + private String image; // Optional field + @Enumerated(EnumType.STRING) + private Role role; + +// @OneToMany(mappedBy = "client", cascade = CascadeType.ALL) +// private List notices; + + @OneToMany(mappedBy = "client", cascade = CascadeType.ALL) + private List orders; + + public Long getId() { + return id; + } + + public void setId(Long idUser) { + this.id = idUser; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public Role getRole() { + return role; + } + + public void setRole(Role role) { + this.role = role; + } + +// public List getNotices() { +// return notices; +// } +// +// public void setNotices(List notices) { +// this.notices = notices; +// } + + public List getOrders() { + return orders; + } + + public void setOrders(List orders) { + this.orders = orders; + } + + // Getters, setters, and constructors +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/GlobalVariables.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/GlobalVariables.java similarity index 84% rename from src/main/java/_11/asktpk/artisanconnectbackend/Model/GlobalVariables.java rename to src/main/java/_11/asktpk/artisanconnectbackend/Entities/GlobalVariables.java index d2e88cf..b1d8676 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/GlobalVariables.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/GlobalVariables.java @@ -1,4 +1,4 @@ -package _11.asktpk.artisanconnectbackend.Model; +package _11.asktpk.artisanconnectbackend.Entities; import jakarta.persistence.*; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Notice.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Notice.java similarity index 98% rename from src/main/java/_11/asktpk/artisanconnectbackend/Model/Notice.java rename to src/main/java/_11/asktpk/artisanconnectbackend/Entities/Notice.java index 92cd0d3..d0180bd 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Notice.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Notice.java @@ -1,4 +1,4 @@ -package _11.asktpk.artisanconnectbackend.Model; +package _11.asktpk.artisanconnectbackend.Entities; import jakarta.persistence.*; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Orders.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Orders.java similarity index 90% rename from src/main/java/_11/asktpk/artisanconnectbackend/Model/Orders.java rename to src/main/java/_11/asktpk/artisanconnectbackend/Entities/Orders.java index 8e8aa2a..9d01112 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Orders.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Orders.java @@ -1,4 +1,4 @@ -package _11.asktpk.artisanconnectbackend.Model; +package _11.asktpk.artisanconnectbackend.Entities; import _11.asktpk.artisanconnectbackend.Utils.Enums.Status; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Payments.java b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Payments.java similarity index 91% rename from src/main/java/_11/asktpk/artisanconnectbackend/Model/Payments.java rename to src/main/java/_11/asktpk/artisanconnectbackend/Entities/Payments.java index 4ee6750..9f4cd2e 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Payments.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Entities/Payments.java @@ -1,4 +1,4 @@ -package _11.asktpk.artisanconnectbackend.Model; +package _11.asktpk.artisanconnectbackend.Entities; import _11.asktpk.artisanconnectbackend.Utils.Enums.Status; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Client.java b/src/main/java/_11/asktpk/artisanconnectbackend/Model/Client.java deleted file mode 100644 index b73990b..0000000 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Client.java +++ /dev/null @@ -1,30 +0,0 @@ -package _11.asktpk.artisanconnectbackend.Model; - -import _11.asktpk.artisanconnectbackend.Utils.Enums.Role; - -import jakarta.persistence.*; -import java.util.List; - -@Entity -@Table(name = "clients") -public class Client { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long idUser; - - private String email; - private String password; - private String firstName; - private String lastName; - private String image; // Optional field - @Enumerated(EnumType.STRING) - private Role role; - - @OneToMany(mappedBy = "client", cascade = CascadeType.ALL) - private List notices; - - @OneToMany(mappedBy = "client", cascade = CascadeType.ALL) - private List orders; - - // Getters, setters, and constructors -} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Repository/ClientRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/Repository/ClientRepository.java new file mode 100644 index 0000000..5c7bd16 --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Repository/ClientRepository.java @@ -0,0 +1,7 @@ +package _11.asktpk.artisanconnectbackend.Repository; + +import _11.asktpk.artisanconnectbackend.Entities.Client; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ClientRepository extends JpaRepository { +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Repository/NoticeRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/Repository/NoticeRepository.java index ed19f4f..a2d8626 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Repository/NoticeRepository.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Repository/NoticeRepository.java @@ -1,6 +1,6 @@ package _11.asktpk.artisanconnectbackend.Repository; -import _11.asktpk.artisanconnectbackend.Model.Notice; +import _11.asktpk.artisanconnectbackend.Entities.Notice; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Service/IDatabase.java b/src/main/java/_11/asktpk/artisanconnectbackend/Service/IDatabase.java index 622d594..962c55c 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Service/IDatabase.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Service/IDatabase.java @@ -1,6 +1,6 @@ package _11.asktpk.artisanconnectbackend.Service; -import _11.asktpk.artisanconnectbackend.Model.Notice; +import _11.asktpk.artisanconnectbackend.Entities.Notice; import java.util.List; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Service/NoticeService.java b/src/main/java/_11/asktpk/artisanconnectbackend/Service/NoticeService.java index b698061..768ce8f 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Service/NoticeService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Service/NoticeService.java @@ -1,8 +1,11 @@ package _11.asktpk.artisanconnectbackend.Service; -import _11.asktpk.artisanconnectbackend.Model.Notice; +import _11.asktpk.artisanconnectbackend.Entities.Client; +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.DTO.NoticeDTO; +import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,17 +17,45 @@ public class NoticeService { @Autowired private NoticeRepository noticeRepository; -// private NoticeDTO mapToDTO(Notice notice) { -// return new NoticeDTO( -// -// ); -// } -// -// private Notice mapToEntity(NoticeDTO productDTO) { -// return new Notice( -// -// ); -// } + @Autowired + private ClientRepository clientRepository; + + public Notice createFromDTO(NoticeDTO dto) { + Notice notice = new Notice(); + notice.setTitle(dto.getTitle()); + notice.setDescription(dto.getDescription()); + notice.setPrice(dto.getPrice()); + notice.setCategory(dto.getCategory()); + notice.setImages(dto.getImages()); + notice.setStatus(dto.getStatus()); + notice.setPublishDate(dto.getPublishDate()); + notice.setAttributesNotices(dto.getAttributesNotices()); + notice.setOrders(dto.getOrders()); + notice.setPayments(dto.getPayments()); + + Client client = clientRepository.findById(dto.getClientId()) + .orElseThrow(() -> new EntityNotFoundException("Nie znaleziono klienta o ID: " + dto.getClientId())); + notice.setClient(client); + + return notice; + } + + // Metoda do konwersji Notice na DTO + public NoticeDTO toDTO(Notice notice) { + return new NoticeDTO( + notice.getTitle(), + notice.getClient().getId(), + notice.getDescription(), + notice.getPrice(), + notice.getCategory(), + notice.getImages(), + notice.getStatus(), + notice.getPublishDate(), + notice.getAttributesNotices(), + notice.getOrders(), + notice.getPayments() + ); + } public List getAllNotices() { return noticeRepository.findAll(); diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Service/PostgresDatabase.java b/src/main/java/_11/asktpk/artisanconnectbackend/Service/PostgresDatabase.java deleted file mode 100644 index d78ce5a..0000000 --- a/src/main/java/_11/asktpk/artisanconnectbackend/Service/PostgresDatabase.java +++ /dev/null @@ -1,24 +0,0 @@ -package _11.asktpk.artisanconnectbackend.Service; - -import _11.asktpk.artisanconnectbackend.Model.Notice; -import _11.asktpk.artisanconnectbackend.Repository.NoticeRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class PostgresDatabase implements IDatabase{ - @Autowired - private NoticeRepository noticeRepository; - - @Override - public void add(Notice newNotice) { - noticeRepository.save(newNotice); - } - - @Override - public List get() { - return noticeRepository.findAll(); - } -} diff --git a/src/main/resources/sql/data.sql b/src/main/resources/sql/data.sql new file mode 100644 index 0000000..eaed99a --- /dev/null +++ b/src/main/resources/sql/data.sql @@ -0,0 +1,2 @@ +INSERT INTO clients (email, first_name, image, last_name, password, role) +VALUES ('dignissim.tempor.arcu@aol.ca', 'Diana', 'null', 'Harrison', 'password', 'USER'); \ No newline at end of file diff --git a/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java b/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java index b26a99f..227b6a0 100644 --- a/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java +++ b/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java @@ -1,23 +1,13 @@ package _11.asktpk.artisanconnectbackend; -import _11.asktpk.artisanconnectbackend.Model.Notice; -import _11.asktpk.artisanconnectbackend.Service.PostgresDatabase; -import okhttp3.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import java.io.IOException; - @SpringBootTest class ArtisanConnectBackendApplicationTests { private static final Logger logger = LogManager.getLogger(ArtisanConnectBackendApplicationTests.class); - @Autowired - PostgresDatabase postgresDatabase; - // @Test // void testPostgresDatabase() { // postgresDatabase.add(new Notice("Test Notice", "Username", "Test Description"));