From 6d61248e34a32d0a3a45e585b73955bd011ac111 Mon Sep 17 00:00:00 2001 From: Jadel20 Date: Sun, 17 Nov 2024 12:02:18 +0100 Subject: [PATCH] Done --- .../example/task1/Dataloader/DataLoader.java | 144 ++++++++++++++++++ .../com/example/task1/Model/Conference.java | 27 ++++ .../java/com/example/task1/Model/Event.java | 36 +++++ .../com/example/task1/Model/Exposition.java | 17 +++ .../java/com/example/task1/Model/Guest.java | 30 ++++ .../com/example/task1/Model/GuestStatus.java | 5 + .../java/com/example/task1/Model/Speaker.java | 27 ++++ .../Repositoty/ConferenceRepository.java | 7 + .../task1/Repositoty/EventRepository.java | 7 + .../Repositoty/ExpositionRepository.java | 7 + .../task1/Repositoty/GuestRepository.java | 7 + .../task1/Repositoty/SpeakerRepository.java | 7 + .../task1/Service/ConferenceService.java | 28 ++++ .../example/task1/Service/EventService.java | 22 +++ .../task1/Service/ExpositionService.java | 28 ++++ .../example/task1/Service/GuestService.java | 34 +++++ .../example/task1/Service/SpeakerService.java | 34 +++++ .../com/example/task1/Task1Application.java | 13 ++ src/main/resources/application.properties | 6 + .../example/task1/Task1ApplicationTests.java | 13 ++ 20 files changed, 499 insertions(+) create mode 100644 src/main/java/com/example/task1/Dataloader/DataLoader.java create mode 100644 src/main/java/com/example/task1/Model/Conference.java create mode 100644 src/main/java/com/example/task1/Model/Event.java create mode 100644 src/main/java/com/example/task1/Model/Exposition.java create mode 100644 src/main/java/com/example/task1/Model/Guest.java create mode 100644 src/main/java/com/example/task1/Model/GuestStatus.java create mode 100644 src/main/java/com/example/task1/Model/Speaker.java create mode 100644 src/main/java/com/example/task1/Repositoty/ConferenceRepository.java create mode 100644 src/main/java/com/example/task1/Repositoty/EventRepository.java create mode 100644 src/main/java/com/example/task1/Repositoty/ExpositionRepository.java create mode 100644 src/main/java/com/example/task1/Repositoty/GuestRepository.java create mode 100644 src/main/java/com/example/task1/Repositoty/SpeakerRepository.java create mode 100644 src/main/java/com/example/task1/Service/ConferenceService.java create mode 100644 src/main/java/com/example/task1/Service/EventService.java create mode 100644 src/main/java/com/example/task1/Service/ExpositionService.java create mode 100644 src/main/java/com/example/task1/Service/GuestService.java create mode 100644 src/main/java/com/example/task1/Service/SpeakerService.java create mode 100644 src/main/java/com/example/task1/Task1Application.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/com/example/task1/Task1ApplicationTests.java diff --git a/src/main/java/com/example/task1/Dataloader/DataLoader.java b/src/main/java/com/example/task1/Dataloader/DataLoader.java new file mode 100644 index 0000000..eafa1d5 --- /dev/null +++ b/src/main/java/com/example/task1/Dataloader/DataLoader.java @@ -0,0 +1,144 @@ +package com.example.task1.Dataloader; + +import com.example.task1.Model.*; +import com.example.task1.Service.*; +import jdk.jfr.Event; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class DataLoader implements CommandLineRunner { + private final SpeakerService speakerService; + private final GuestService guestService; + private final EventService eventService; + private final ExpositionService expositionService; + private final ConferenceService conferenceService; + + + @Override + public void run(String... args) throws Exception { + Event event = new Event(); + event.setDuration(32); + event.setLocation("paris"); + event.setTitle("mondial tattoo"); + event.setDate(LocalDate.now()); + eventService.save(event); + + testCreateExposition(); + testCreateExpositionWithGuest(); + testDeleteGuestFromExposition(); + testCreateConference(); + testCreateConferenceWithSpeaker(); + testDeletingSpeakerFromConference(); + testCreatingConferenceWithGuest(); + testDeletingGuestFromConference(); + } + + public void testCreateExposition() { + Exposition expositionSaved = createNewExposition(); + Optional result = expositionService.findById(expositionSaved.getId().longValue()); + if(result.isPresent()) { + System.out.println(result.get().getId() == expositionSaved.getId()); + } + } + + public void testCreateExpositionWithGuest() { + Guest guest = createNewGuest(createNewExposition()); + Optional result = guestService.findById(guest.getId().longValue()); + if(result.isPresent()) { + System.out.println(result.get().getId() == guest.getId()); + } + } + + public void testDeleteGuestFromExposition() { + Guest guest = createNewGuest(createNewExposition()); + guestService.deleteById(guest.getId()); + Optional result = guestService.findById(guest.getId().longValue()); + if(result.isEmpty()) { + System.out.println("TEST deleting exposition guest : OK"); + } + } + + public void testCreateConference() { + Conference confSaved = createNewConference(); + Optional conferenceRetrieved = conferenceService.findById(confSaved.getId().longValue()); + if(conferenceRetrieved.isPresent()) { + System.out.println(conferenceRetrieved.get().getId() == confSaved.getId()); + } + } + + public void testCreateConferenceWithSpeaker() { + Speaker speaker = createNewSpeaker(createNewConference()); + Optional result = speakerService.findById(speaker.getId().longValue()); + if(result.isPresent()) { + System.out.println(result.get().getId() == speaker.getId()); + } + } + + public void testDeletingSpeakerFromConference() { + Speaker speaker = createNewSpeaker(createNewConference()); + speakerService.deleteById(speaker.getId()); + Optional result = speakerService.findById(speaker.getId().longValue()); + if(result.isEmpty()) { + System.out.println("TEST deleting speaker : OK"); + } + } + + public void testCreatingConferenceWithGuest() { + Guest guest = createNewGuest(createNewConference()); + Optional result = guestService.findById(guest.getId().longValue()); + if(result.isPresent()) { + System.out.println(result.get().getId() == guest.getId()); + } + } + + public void testDeletingGuestFromConference() { + Guest guest = createNewGuest(createNewConference()); + guestService.deleteById(guest.getId()); + Optional result = guestService.findById(guest.getId().longValue()); + if(result.isEmpty()) { + System.out.println("TEST deleting conference guest : OK"); + } + } + + private Guest createNewGuest( Event event) { + Guest guest = new Guest(); + guest.setName(faker.name().femaleFirstName()); + guest.setStatus(GuestStatus.ATTENDING); + guest.setEvent(event); + return guestService.save(guest); + } + + private Exposition createNewExposition() { + Exposition exposition = new Exposition(); + exposition.setDuration(faker.number().positive()); + exposition.setLocation(faker.address().city()); + exposition.setTitle(faker.artist().name()); + exposition.setDate(LocalDate.now()); + return expositionService.save(exposition); + } + + private Speaker createNewSpeaker(Conference confSaved) { + Speaker speaker = new Speaker(); + speaker.setName(faker.name().fullName()); + speaker.setPresentationDuration(faker.number().positive()); + speaker.setConference(confSaved); + return speakerService.save(speaker); + } + + private Conference createNewConference() { + Conference conference = new Conference(); + conference.setDuration(faker.number().positive()); + conference.setLocation(faker.address().city()); + conference.setTitle(faker.community().character()); + conference.setDate(LocalDate.now()); + return conferenceService.save(conference); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/example/task1/Model/Conference.java b/src/main/java/com/example/task1/Model/Conference.java new file mode 100644 index 0000000..7cddb40 --- /dev/null +++ b/src/main/java/com/example/task1/Model/Conference.java @@ -0,0 +1,27 @@ +package com.example.task1.Model; + +import jakarta.persistence.Entity; +import jakarta.persistence.OneToMany; +import jakarta.persistence.PrimaryKeyJoinColumn; +import jdk.jfr.Event; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Data +@NoArgsConstructor +@Entity + +@PrimaryKeyJoinColumn(name="id") +public class Conference extends Event { + + @OneToMany(mappedBy = "id") + private List speakers = new ArrayList<>(); + + public Conference(String title, String description, LocalDate startDate, LocalDate endDate) { + super (title, location, date, duration) + } +} \ No newline at end of file diff --git a/src/main/java/com/example/task1/Model/Event.java b/src/main/java/com/example/task1/Model/Event.java new file mode 100644 index 0000000..0d9ebdc --- /dev/null +++ b/src/main/java/com/example/task1/Model/Event.java @@ -0,0 +1,36 @@ +package com.example.task1.Model; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Data +@NoArgsConstructor +@Entity + +@Inheritance(strategy= InheritanceType.JOINED) +public class Event { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String title; + private String location; + private LocalDate date; + private Integer duration; + + @OneToMany(mappedBy = "event") + private List guests = new ArrayList<>(); + + public Event(String title, String location, LocalDate date, Integer duration) { + this.title = title; + this.location = location; + this.date = date; + this.duration = duration; + } +} diff --git a/src/main/java/com/example/task1/Model/Exposition.java b/src/main/java/com/example/task1/Model/Exposition.java new file mode 100644 index 0000000..6a1d8aa --- /dev/null +++ b/src/main/java/com/example/task1/Model/Exposition.java @@ -0,0 +1,17 @@ +package com.example.task1.Model; + +import jakarta.persistence.Entity; +import jakarta.persistence.PrimaryKeyJoinColumn; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@Entity +@PrimaryKeyJoinColumn(name="id") +public class Exposition extends Event { + + public Exposition(String title, String location, LocalDate date, Integer duration) { + super(title, location, date, duration); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/task1/Model/Guest.java b/src/main/java/com/example/task1/Model/Guest.java new file mode 100644 index 0000000..d101903 --- /dev/null +++ b/src/main/java/com/example/task1/Model/Guest.java @@ -0,0 +1,30 @@ +package com.example.task1.Model; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@Entity +public class Guest { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + + @Enumerated(EnumType.STRING) + private GuestStatus status; + + //we want a lazy loading by default eager + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "eventId", referencedColumnName = "id") + private Event event; + + public Guest(String name, GuestStatus status) { + this.name = name; + this.status = status; + } +} diff --git a/src/main/java/com/example/task1/Model/GuestStatus.java b/src/main/java/com/example/task1/Model/GuestStatus.java new file mode 100644 index 0000000..0cc23af --- /dev/null +++ b/src/main/java/com/example/task1/Model/GuestStatus.java @@ -0,0 +1,5 @@ +package com.example.task1.Model; + +public enum GuestStatus { + ATTENDING, NOT_ATTENDING, NO_RESPONSE +} diff --git a/src/main/java/com/example/task1/Model/Speaker.java b/src/main/java/com/example/task1/Model/Speaker.java new file mode 100644 index 0000000..b996b3f --- /dev/null +++ b/src/main/java/com/example/task1/Model/Speaker.java @@ -0,0 +1,27 @@ +package com.example.task1.Model; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@Entity +public class Speaker { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String name; + private Integer presentationDuration; + + //we want a lazy loading by default eager + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "conferenceId" , referencedColumnName = "id") + private Conference conference; + + public Speaker(String name, Integer presentationDuration) { + this.name = name; + this.presentationDuration = presentationDuration; + } +} diff --git a/src/main/java/com/example/task1/Repositoty/ConferenceRepository.java b/src/main/java/com/example/task1/Repositoty/ConferenceRepository.java new file mode 100644 index 0000000..df48d76 --- /dev/null +++ b/src/main/java/com/example/task1/Repositoty/ConferenceRepository.java @@ -0,0 +1,7 @@ +package com.example.task1.Repositoty; + +import com.example.task1.Model.Conference; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ConferenceRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/task1/Repositoty/EventRepository.java b/src/main/java/com/example/task1/Repositoty/EventRepository.java new file mode 100644 index 0000000..d5e3956 --- /dev/null +++ b/src/main/java/com/example/task1/Repositoty/EventRepository.java @@ -0,0 +1,7 @@ +package com.example.task1.Repositoty; + +import jdk.jfr.Event; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EventRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/task1/Repositoty/ExpositionRepository.java b/src/main/java/com/example/task1/Repositoty/ExpositionRepository.java new file mode 100644 index 0000000..9ef75e7 --- /dev/null +++ b/src/main/java/com/example/task1/Repositoty/ExpositionRepository.java @@ -0,0 +1,7 @@ +package com.example.task1.Repositoty; + +import com.example.task1.Model.Exposition; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ExpositionRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/task1/Repositoty/GuestRepository.java b/src/main/java/com/example/task1/Repositoty/GuestRepository.java new file mode 100644 index 0000000..7407073 --- /dev/null +++ b/src/main/java/com/example/task1/Repositoty/GuestRepository.java @@ -0,0 +1,7 @@ +package com.example.task1.Repositoty; + +import com.example.task1.Model.Guest; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface GuestRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/task1/Repositoty/SpeakerRepository.java b/src/main/java/com/example/task1/Repositoty/SpeakerRepository.java new file mode 100644 index 0000000..e0d436b --- /dev/null +++ b/src/main/java/com/example/task1/Repositoty/SpeakerRepository.java @@ -0,0 +1,7 @@ +package com.example.task1.Repositoty; + +import com.example.task1.Model.Speaker; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface SpeakerRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/task1/Service/ConferenceService.java b/src/main/java/com/example/task1/Service/ConferenceService.java new file mode 100644 index 0000000..a0c1551 --- /dev/null +++ b/src/main/java/com/example/task1/Service/ConferenceService.java @@ -0,0 +1,28 @@ +package com.example.task1.Service; + +import com.example.task1.Model.Conference; +import com.example.task1.Repositoty.ConferenceRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class ConferenceService { + private final ConferenceRepository conferenceRepository; + + @Transactional + public Conference save(Conference conference) { + return conferenceRepository.save(conference); + } + + public long count() { + return conferenceRepository.count(); + } + + public Optional findById(long id) { + return conferenceRepository.findById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/task1/Service/EventService.java b/src/main/java/com/example/task1/Service/EventService.java new file mode 100644 index 0000000..78087cf --- /dev/null +++ b/src/main/java/com/example/task1/Service/EventService.java @@ -0,0 +1,22 @@ +package com.example.task1.Service; + +import com.example.task1.Repositoty.EventRepository; +import jakarta.transaction.Transactional; +import jdk.jfr.Event; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class EventService { + private final EventRepository eventRepository; + + @Transactional + public Event save(Event event) { + return eventRepository.save(event); + } + + public long count() { + return eventRepository.count(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/task1/Service/ExpositionService.java b/src/main/java/com/example/task1/Service/ExpositionService.java new file mode 100644 index 0000000..fdeb70b --- /dev/null +++ b/src/main/java/com/example/task1/Service/ExpositionService.java @@ -0,0 +1,28 @@ +package com.example.task1.Service; + +import com.example.task1.Model.Exposition; +import com.example.task1.Repositoty.ExpositionRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class ExpositionService { + private final ExpositionRepository expositionRepository; + + @Transactional + public Exposition save(Exposition exposition) { + return expositionRepository.save(exposition); + } + + public long count() { + return expositionRepository.count(); + } + + public Optional findById(long id) { + return expositionRepository.findById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/task1/Service/GuestService.java b/src/main/java/com/example/task1/Service/GuestService.java new file mode 100644 index 0000000..5b9e3e1 --- /dev/null +++ b/src/main/java/com/example/task1/Service/GuestService.java @@ -0,0 +1,34 @@ +package com.example.task1.Service; + +import com.example.task1.Model.Guest; +import com.example.task1.Repositoty.GuestRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class GuestService { + private final GuestRepository guestRepository; + + @Transactional + public Guest save(Guest guest) { + return guestRepository.save(guest); + } + + public List findAll() { + return guestRepository.findAll(); + } + + @Transactional + public void deleteById(Long id) { + guestRepository.deleteById(id); + } + + public Optional findById(Long id) { + return guestRepository.findById(id); + } +} diff --git a/src/main/java/com/example/task1/Service/SpeakerService.java b/src/main/java/com/example/task1/Service/SpeakerService.java new file mode 100644 index 0000000..2b93acc --- /dev/null +++ b/src/main/java/com/example/task1/Service/SpeakerService.java @@ -0,0 +1,34 @@ +package com.example.task1.Service; + +import com.example.task1.Model.Speaker; +import com.example.task1.Repositoty.SpeakerRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class SpeakerService { + private final SpeakerRepository speakerRepository; + + @Transactional + public Speaker save(Speaker speaker) { + return speakerRepository.save(speaker); + } + + public List findAll() { + return speakerRepository.findAll(); + } + + @Transactional + public void deleteById(Long id) { + speakerRepository.deleteById(id); + } + + public Optional findById(Long id) { + return speakerRepository.findById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/task1/Task1Application.java b/src/main/java/com/example/task1/Task1Application.java new file mode 100644 index 0000000..52938c7 --- /dev/null +++ b/src/main/java/com/example/task1/Task1Application.java @@ -0,0 +1,13 @@ +package com.example.task1; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Task1Application { + + public static void main(String[] args) { + SpringApplication.run(Task1Application.class, args); + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..e8969b8 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,6 @@ +spring.application.name=Task1 +spring.datasource.url=jdbc:mysql://localhost:3306/associations_db +spring.datasource.username=root +spring.datasource.password=JD20avfl59@ +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true \ No newline at end of file diff --git a/src/test/java/com/example/task1/Task1ApplicationTests.java b/src/test/java/com/example/task1/Task1ApplicationTests.java new file mode 100644 index 0000000..3676a32 --- /dev/null +++ b/src/test/java/com/example/task1/Task1ApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.task1; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Task1ApplicationTests { + + @Test + void contextLoads() { + } + +}