diff --git a/association/src/main/java/com/ironhack/association/AssociationApplication.java b/association/src/main/java/com/ironhack/association/AssociationApplication.java new file mode 100644 index 0000000..1720730 --- /dev/null +++ b/association/src/main/java/com/ironhack/association/AssociationApplication.java @@ -0,0 +1,13 @@ +package com.ironhack.association; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AssociationApplication { + + public static void main(String[] args) { + SpringApplication.run(AssociationApplication.class, args); + } + +} diff --git a/association/src/main/java/com/ironhack/association/model/Chapter.java b/association/src/main/java/com/ironhack/association/model/Chapter.java new file mode 100644 index 0000000..1a31481 --- /dev/null +++ b/association/src/main/java/com/ironhack/association/model/Chapter.java @@ -0,0 +1,87 @@ +package com.ironhack.association.model; + +import jakarta.persistence.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Chapter { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer chapterId; + private String name; + private String district; + + @ManyToOne(cascade = CascadeType.ALL) + private Member president; + + @OneToMany(mappedBy = "chapter") + private List members = new ArrayList<>(); + + public Chapter() { + } + + public Chapter(String name, String district) { + this.name = name; + this.district = district; + } + + public Chapter(String name, String district, Member president, List members) { + this.name = name; + this.district = district; + this.president = president; + this.members = members; + } + + public Integer getChapterId() { + return chapterId; + } + + public void setChapterId(Integer chapterId) { + this.chapterId = chapterId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public Member getPresident() { + return president; + } + + public void setPresident(Member president) { + this.president = president; + } + + public List getMembers() { + return members; + } + + public void setMembers(List members) { + this.members = members; + } + + @Override + public String toString() { + return "Chapter{" + + "chapterId=" + chapterId + + ", name='" + name + '\'' + + ", district='" + district + '\'' + + ", president=" + president + + ", members=" + members + + '}'; + } +} diff --git a/association/src/main/java/com/ironhack/association/model/Member.java b/association/src/main/java/com/ironhack/association/model/Member.java new file mode 100644 index 0000000..8a7ed04 --- /dev/null +++ b/association/src/main/java/com/ironhack/association/model/Member.java @@ -0,0 +1,83 @@ +package com.ironhack.association.model; + +import jakarta.persistence.*; + +import java.time.LocalDate; + +@Entity +public class Member { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer memberId; + private String name; + + @Enumerated(EnumType.STRING) + private Status status; + + private LocalDate renewalDate; + + @ManyToOne + @JoinColumn(name = "chapter_id") + private Chapter chapter; + + public Member() { + } + + public Member(String name, Status status, LocalDate renewalDate, Chapter chapter) { + this.name = name; + this.status = status; + this.renewalDate = renewalDate; + this.chapter = chapter; + } + + public Integer getMemberId() { + return memberId; + } + + public void setMemberId(Integer memberId) { + this.memberId = memberId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public LocalDate getRenewalDate() { + return renewalDate; + } + + public void setRenewalDate(LocalDate renewalDate) { + this.renewalDate = renewalDate; + } + + public Chapter getChapter() { + return chapter; + } + + public void setChapter(Chapter chapter) { + this.chapter = chapter; + } + + @Override + public String toString() { + return "Member{" + + "memberId=" + memberId + + ", name='" + name + '\'' + + ", status=" + status + + ", renewalDate=" + renewalDate + + ", chapter=" + chapter + + '}'; + } +} \ No newline at end of file diff --git a/association/src/main/java/com/ironhack/association/model/Status.java b/association/src/main/java/com/ironhack/association/model/Status.java new file mode 100644 index 0000000..9bf24f2 --- /dev/null +++ b/association/src/main/java/com/ironhack/association/model/Status.java @@ -0,0 +1,6 @@ +package com.ironhack.association.model; + +public enum Status { + ACTIVE, + LAPSED +} diff --git a/association/src/main/java/com/ironhack/association/repository/ChapterRepository.java b/association/src/main/java/com/ironhack/association/repository/ChapterRepository.java new file mode 100644 index 0000000..5d6d4df --- /dev/null +++ b/association/src/main/java/com/ironhack/association/repository/ChapterRepository.java @@ -0,0 +1,9 @@ +package com.ironhack.association.repository; + +import com.ironhack.association.model.Chapter; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ChapterRepository extends JpaRepository { +} diff --git a/association/src/main/java/com/ironhack/association/repository/MemberRepository.java b/association/src/main/java/com/ironhack/association/repository/MemberRepository.java new file mode 100644 index 0000000..06ab9ac --- /dev/null +++ b/association/src/main/java/com/ironhack/association/repository/MemberRepository.java @@ -0,0 +1,9 @@ +package com.ironhack.association.repository; + +import com.ironhack.association.model.Member; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MemberRepository extends JpaRepository { +} diff --git a/association/src/main/resources/application.properties b/association/src/main/resources/application.properties new file mode 100644 index 0000000..5f91d54 --- /dev/null +++ b/association/src/main/resources/application.properties @@ -0,0 +1,17 @@ +spring.application.name=association + +spring.datasource.url=jdbc:mysql://localhost:3306/nurse_association?createDatabaseIfNotExist=true&serverTimezone=UTC +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true + +#PARA OCULTAR EL BANNER DE SPRING +spring.main.banner-mode=off +#PARA HABILITAR COLORES +spring.output.ansi.enabled=ALWAYS + +// PARA QUE NO SALGA TANTO CONTENIDO CUANDO SALE UN ERROR +server.error.include-stacktrace=never \ No newline at end of file diff --git a/association/src/test/java/com/ironhack/association/AssociationApplicationTests.java b/association/src/test/java/com/ironhack/association/AssociationApplicationTests.java new file mode 100644 index 0000000..14758b7 --- /dev/null +++ b/association/src/test/java/com/ironhack/association/AssociationApplicationTests.java @@ -0,0 +1,49 @@ +package com.ironhack.association; + +import com.ironhack.association.model.Chapter; +import com.ironhack.association.model.Member; +import com.ironhack.association.model.Status; +import com.ironhack.association.repository.ChapterRepository; +import com.ironhack.association.repository.MemberRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.time.LocalDate; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +class AssociationApplicationTests { + + + @Autowired + private ChapterRepository chapterRepository; + + @Autowired + private MemberRepository memberRepository; + + @Test + public void saveChapters_chapterAndMembers_correctSave() { + Chapter chapter = new Chapter("Chapter 1 Test", "Madrid"); + + Member member1 = new Member("Bob", Status.ACTIVE, LocalDate.of(2025, 8, 20), chapter); + + Member member2 = new Member("John", Status.LAPSED, LocalDate.of(2025, 10, 15), chapter); + + Member president = new Member("Sara", Status.ACTIVE, LocalDate.of(2025, 5, 10), chapter); + + chapter.setPresident(president); + chapter.getMembers().add(member1); + chapter.getMembers().add(member2); + + chapterRepository.save(chapter); + memberRepository.save(president); + memberRepository.save(member1); + memberRepository.save(member2); + + Optional chapterOptional = chapterRepository.findById(chapter.getChapterId()); + assertTrue(chapterOptional.isPresent()); + } +} diff --git a/event/src/main/java/com/ironhack/event/EventApplication.java b/event/src/main/java/com/ironhack/event/EventApplication.java new file mode 100644 index 0000000..8738719 --- /dev/null +++ b/event/src/main/java/com/ironhack/event/EventApplication.java @@ -0,0 +1,13 @@ +package com.ironhack.event; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EventApplication { + + public static void main(String[] args) { + SpringApplication.run(EventApplication.class, args); + } + +} diff --git a/event/src/main/java/com/ironhack/event/model/Conference.java b/event/src/main/java/com/ironhack/event/model/Conference.java new file mode 100644 index 0000000..370ba89 --- /dev/null +++ b/event/src/main/java/com/ironhack/event/model/Conference.java @@ -0,0 +1,33 @@ +package com.ironhack.event.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.OneToMany; +import jakarta.persistence.PrimaryKeyJoinColumn; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@PrimaryKeyJoinColumn(name = "conference_id") +public class Conference extends Event{ + + @OneToMany(mappedBy = "conference", fetch = FetchType.LAZY) + private List speakers = new ArrayList<>(); + + public Conference() { + } + + public Conference(LocalDate date, Integer duration, String location, String title) { + super(date, duration, location, title); + } + + public List getSpeakers() { + return speakers; + } + + public void setSpeakers(List speakers) { + this.speakers = speakers; + } +} diff --git a/event/src/main/java/com/ironhack/event/model/Event.java b/event/src/main/java/com/ironhack/event/model/Event.java new file mode 100644 index 0000000..872a61c --- /dev/null +++ b/event/src/main/java/com/ironhack/event/model/Event.java @@ -0,0 +1,101 @@ +package com.ironhack.event.model; + +import jakarta.persistence.*; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +public class Event { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer eventId; + + private LocalDate date; + private Integer duration; + private String location; + private String title; + + @OneToMany(mappedBy = "event", fetch = FetchType.LAZY) + private List guests = new ArrayList<>(); + + public Event() { + } + + public Event(LocalDate date, Integer duration, String location, String title) { + this.date = date; + this.duration = duration; + this.location = location; + this.title = title; + } + + public Event(LocalDate date, Integer duration, String location, String title, List guests) { + this.date = date; + this.duration = duration; + this.location = location; + this.title = title; + this.guests = guests; + } + + public Integer getEventId() { + return eventId; + } + + public void setEventId(Integer eventId) { + this.eventId = eventId; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public Integer getDuration() { + return duration; + } + + public void setDuration(Integer duration) { + this.duration = duration; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getGuests() { + return guests; + } + + public void setGuests(List guests) { + this.guests = guests; + } + + @Override + public String toString() { + return "Event{" + + "eventId=" + eventId + + ", date=" + date + + ", duration=" + duration + + ", location='" + location + '\'' + + ", title='" + title + '\'' + + ", guests=" + guests + + '}'; + } +} diff --git a/event/src/main/java/com/ironhack/event/model/Exposition.java b/event/src/main/java/com/ironhack/event/model/Exposition.java new file mode 100644 index 0000000..a6f04bb --- /dev/null +++ b/event/src/main/java/com/ironhack/event/model/Exposition.java @@ -0,0 +1,19 @@ +package com.ironhack.event.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.PrimaryKeyJoinColumn; + +import java.time.LocalDate; +import java.util.List; + +@Entity +@PrimaryKeyJoinColumn(name = "exposition_id") +public class Exposition extends Event{ + + public Exposition() { + } + + public Exposition(LocalDate date, Integer duration, String location, String title) { + super(date, duration, location, title); + } +} diff --git a/event/src/main/java/com/ironhack/event/model/Guest.java b/event/src/main/java/com/ironhack/event/model/Guest.java new file mode 100644 index 0000000..2f2cf27 --- /dev/null +++ b/event/src/main/java/com/ironhack/event/model/Guest.java @@ -0,0 +1,59 @@ +package com.ironhack.event.model; + +import jakarta.persistence.*; + +@Entity +public class Guest { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer guestId; + private String name; + + @Enumerated(EnumType.STRING) + private Status status; + + @ManyToOne + @JoinColumn(name = "event_id") + private Event event; + + public Guest() { + } + + public Guest(String name, Status status, Event event) { + this.name = name; + this.status = status; + this.event = event; + } + + public Integer getGuestId() { + return guestId; + } + + public void setGuestId(Integer guestId) { + this.guestId = guestId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Event getEvent() { + return event; + } + + public void setEvent(Event event) { + this.event = event; + } +} diff --git a/event/src/main/java/com/ironhack/event/model/Speaker.java b/event/src/main/java/com/ironhack/event/model/Speaker.java new file mode 100644 index 0000000..30337fd --- /dev/null +++ b/event/src/main/java/com/ironhack/event/model/Speaker.java @@ -0,0 +1,58 @@ +package com.ironhack.event.model; + +import jakarta.persistence.*; + +@Entity +public class Speaker { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer speakerId; + + private String name; + private int presentationDuration; + + @ManyToOne + @JoinColumn(name = "conference_id") + private Conference conference; + + public Speaker() { + } + + public Speaker(String name, int presentationDuration, Conference conference) { + this.name = name; + this.presentationDuration = presentationDuration; + this.conference = conference; + } + + public Integer getSpeakerId() { + return speakerId; + } + + public void setSpeakerId(Integer speakerId) { + this.speakerId = speakerId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getPresentationDuration() { + return presentationDuration; + } + + public void setPresentationDuration(int presentationDuration) { + this.presentationDuration = presentationDuration; + } + + public Conference getConference() { + return conference; + } + + public void setConference(Conference conference) { + this.conference = conference; + } +} diff --git a/event/src/main/java/com/ironhack/event/model/Status.java b/event/src/main/java/com/ironhack/event/model/Status.java new file mode 100644 index 0000000..51996df --- /dev/null +++ b/event/src/main/java/com/ironhack/event/model/Status.java @@ -0,0 +1,7 @@ +package com.ironhack.event.model; + +public enum Status { + ATTENDING, + NOT_ATTENDING, + NO_RESPONSE +} diff --git a/event/src/main/java/com/ironhack/event/repository/ConferenceRepository.java b/event/src/main/java/com/ironhack/event/repository/ConferenceRepository.java new file mode 100644 index 0000000..846559f --- /dev/null +++ b/event/src/main/java/com/ironhack/event/repository/ConferenceRepository.java @@ -0,0 +1,9 @@ +package com.ironhack.event.repository; + +import com.ironhack.event.model.Conference; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ConferenceRepository extends JpaRepository { +} diff --git a/event/src/main/java/com/ironhack/event/repository/EventRepository.java b/event/src/main/java/com/ironhack/event/repository/EventRepository.java new file mode 100644 index 0000000..1c77393 --- /dev/null +++ b/event/src/main/java/com/ironhack/event/repository/EventRepository.java @@ -0,0 +1,10 @@ +package com.ironhack.event.repository; + +import com.ironhack.event.model.Event; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EventRepository extends JpaRepository { + +} diff --git a/event/src/main/java/com/ironhack/event/repository/ExpositionRepository.java b/event/src/main/java/com/ironhack/event/repository/ExpositionRepository.java new file mode 100644 index 0000000..38fa598 --- /dev/null +++ b/event/src/main/java/com/ironhack/event/repository/ExpositionRepository.java @@ -0,0 +1,9 @@ +package com.ironhack.event.repository; + +import com.ironhack.event.model.Exposition; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ExpositionRepository extends JpaRepository { +} diff --git a/event/src/main/java/com/ironhack/event/repository/GuestRepository.java b/event/src/main/java/com/ironhack/event/repository/GuestRepository.java new file mode 100644 index 0000000..28897eb --- /dev/null +++ b/event/src/main/java/com/ironhack/event/repository/GuestRepository.java @@ -0,0 +1,9 @@ +package com.ironhack.event.repository; + +import com.ironhack.event.model.Guest; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface GuestRepository extends JpaRepository { +} diff --git a/event/src/main/java/com/ironhack/event/repository/SpeakerRepository.java b/event/src/main/java/com/ironhack/event/repository/SpeakerRepository.java new file mode 100644 index 0000000..b22d1af --- /dev/null +++ b/event/src/main/java/com/ironhack/event/repository/SpeakerRepository.java @@ -0,0 +1,9 @@ +package com.ironhack.event.repository; + +import com.ironhack.event.model.Speaker; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface SpeakerRepository extends JpaRepository { +} diff --git a/event/src/main/resources/application.properties b/event/src/main/resources/application.properties new file mode 100644 index 0000000..1eff14b --- /dev/null +++ b/event/src/main/resources/application.properties @@ -0,0 +1,17 @@ +spring.application.name=event + +spring.datasource.url=jdbc:mysql://localhost:3306/events?createDatabaseIfNotExist=true&serverTimezone=UTC +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true + +#PARA OCULTAR EL BANNER DE SPRING +spring.main.banner-mode=off +#PARA HABILITAR COLORES +spring.output.ansi.enabled=ALWAYS + +// PARA QUE NO SALGA TANTO CONTENIDO CUANDO SALE UN ERROR +server.error.include-stacktrace=never \ No newline at end of file diff --git a/event/src/test/java/com/ironhack/event/EventApplicationTests.java b/event/src/test/java/com/ironhack/event/EventApplicationTests.java new file mode 100644 index 0000000..c940de1 --- /dev/null +++ b/event/src/test/java/com/ironhack/event/EventApplicationTests.java @@ -0,0 +1,83 @@ +package com.ironhack.event; + +import com.ironhack.event.model.*; +import com.ironhack.event.repository.*; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@SpringBootTest +class EventApplicationTests { + + @Autowired + private EventRepository eventRepository; + + @Autowired + private ConferenceRepository conferenceRepository; + + @Autowired + private ExpositionRepository expositionRepository; + + @Autowired + private GuestRepository guestRepository; + + @Autowired + private SpeakerRepository speakerRepository; + + @Test + public void saveConference_conferenceAndGuestsAndSpeakers_correctSave() { + Conference conference = new Conference(LocalDate.of(2025, 3, 20), 75, "Madrid", "Conference Test"); + + Guest guest1 = new Guest("John", Status.ATTENDING, conference); + Guest guest2 = new Guest("David", Status.NOT_ATTENDING, conference); + Guest guest3 = new Guest("Alice", Status.NO_RESPONSE, conference); + conference.getGuests().add(guest1); + conference.getGuests().add(guest2); + conference.getGuests().add(guest3); + + Speaker speaker1 = new Speaker("Diego", 45, conference); + Speaker speaker2 = new Speaker("Bob", 30, conference); + conference.getSpeakers().add(speaker1); + conference.getSpeakers().add(speaker2); + + conferenceRepository.save(conference); + guestRepository.save(guest1); + guestRepository.save(guest2); + guestRepository.save(guest3); + speakerRepository.save(speaker1); + speakerRepository.save(speaker2); + + Optional conferenceOptional = conferenceRepository.findById(conference.getEventId()); + assertTrue(conferenceOptional.isPresent()); + } + + @Test + public void saveExposition_expositionAndGuests_correctSave() { + Exposition exposition = new Exposition(LocalDate.of(2025, 6, 15), 90, "Barcelona", "Exposition Test"); + + Guest guest1 = new Guest("Diego", Status.ATTENDING, exposition); + Guest guest2 = new Guest("Alejandro", Status.NOT_ATTENDING, exposition); + Guest guest3 = new Guest("Sara", Status.NO_RESPONSE, exposition); + exposition.getGuests().add(guest1); + exposition.getGuests().add(guest2); + exposition.getGuests().add(guest3); + + expositionRepository.save(exposition); + guestRepository.save(guest1); + guestRepository.save(guest2); + guestRepository.save(guest3); + + Optional expositionOptional = expositionRepository.findById(exposition.getEventId()); + assertTrue(expositionOptional.isPresent()); + } + + +}