diff --git a/back/src/main/java/be/naaturel/letsmeet/LetsmeetApplication.java b/back/src/main/java/be/naaturel/letsmeet/LetsmeetApplication.java index b868ab8..3e7cdb6 100644 --- a/back/src/main/java/be/naaturel/letsmeet/LetsmeetApplication.java +++ b/back/src/main/java/be/naaturel/letsmeet/LetsmeetApplication.java @@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class LetsmeetApplication { - public static void main(String[] args) { - SpringApplication.run(LetsmeetApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(LetsmeetApplication.class, args); + } } \ No newline at end of file diff --git a/back/src/main/java/be/naaturel/letsmeet/configurations/AppSecurity.java b/back/src/main/java/be/naaturel/letsmeet/configurations/AppSecurity.java index 7d25f09..76c39ae 100644 --- a/back/src/main/java/be/naaturel/letsmeet/configurations/AppSecurity.java +++ b/back/src/main/java/be/naaturel/letsmeet/configurations/AppSecurity.java @@ -8,6 +8,7 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.LogoutConfigurer; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @@ -16,6 +17,7 @@ import java.util.Arrays; @Configuration @EnableWebSecurity +@EnableTransactionManagement public class AppSecurity { private final AppConfigurations conf; @@ -29,10 +31,11 @@ public class AppSecurity { public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http - .cors(cors -> {}) + .cors(cors -> { + }) .csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests((requests) -> requests - .requestMatchers("/**" ).permitAll() + .requestMatchers("/**").permitAll() //.anyRequest().authenticated() ) .formLogin((form) -> form diff --git a/back/src/main/java/be/naaturel/letsmeet/configurations/HttpRequests.java b/back/src/main/java/be/naaturel/letsmeet/configurations/HttpRequests.java index 89f3dbb..54f3987 100644 --- a/back/src/main/java/be/naaturel/letsmeet/configurations/HttpRequests.java +++ b/back/src/main/java/be/naaturel/letsmeet/configurations/HttpRequests.java @@ -1,9 +1,6 @@ package be.naaturel.letsmeet.configurations; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/back/src/main/java/be/naaturel/letsmeet/configurations/Interceptor.java b/back/src/main/java/be/naaturel/letsmeet/configurations/Interceptor.java index fc9bd3a..47f5563 100644 --- a/back/src/main/java/be/naaturel/letsmeet/configurations/Interceptor.java +++ b/back/src/main/java/be/naaturel/letsmeet/configurations/Interceptor.java @@ -4,8 +4,6 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; -import java.io.Console; - public class Interceptor implements HandlerInterceptor { // Request is intercepted by this method before reaching the Controller diff --git a/back/src/main/java/be/naaturel/letsmeet/controllers/EventController.java b/back/src/main/java/be/naaturel/letsmeet/controllers/EventController.java index 66245c0..935732d 100644 --- a/back/src/main/java/be/naaturel/letsmeet/controllers/EventController.java +++ b/back/src/main/java/be/naaturel/letsmeet/controllers/EventController.java @@ -13,18 +13,18 @@ public class EventController { private final EventService service; @Autowired - public EventController(EventService service){ + public EventController(EventService service) { this.service = service; } @GetMapping({"/event/{token}/", "/event/{token}"}) - public ResponseEntity get(@PathVariable String token){ + public ResponseEntity get(@PathVariable String token) { - try{ + try { EventDTO dto = service.getEvent(token); return ResponseEntity.ok(dto); - } catch (Exception e){ + } catch (Exception e) { return ResponseEntity .internalServerError() .body("An error has occured : " + e.getMessage()); @@ -32,12 +32,12 @@ public class EventController { } @PostMapping({"/create", "/create/"}) - public ResponseEntity create(@RequestBody EventDTO dto){ + public ResponseEntity create(@RequestBody EventDTO dto) { try { Result res = service.save(dto); return ResponseEntity.ok(res); - } catch (Exception e){ + } catch (Exception e) { return ResponseEntity .internalServerError() .body("An error has occured : " + e.getMessage()); diff --git a/back/src/main/java/be/naaturel/letsmeet/core/Result.java b/back/src/main/java/be/naaturel/letsmeet/core/Result.java index 7cbf73d..4c467b2 100644 --- a/back/src/main/java/be/naaturel/letsmeet/core/Result.java +++ b/back/src/main/java/be/naaturel/letsmeet/core/Result.java @@ -7,7 +7,7 @@ public class Result { private T value; - public Result(T value){ + public Result(T value) { this.value = value; } diff --git a/back/src/main/java/be/naaturel/letsmeet/core/helpers/TokenGenerator.java b/back/src/main/java/be/naaturel/letsmeet/core/helpers/TokenGenerator.java index 2c5d2d7..b6f5a84 100644 --- a/back/src/main/java/be/naaturel/letsmeet/core/helpers/TokenGenerator.java +++ b/back/src/main/java/be/naaturel/letsmeet/core/helpers/TokenGenerator.java @@ -7,7 +7,7 @@ public class TokenGenerator { private static int length = 6; - public static String generate(){ + public static String generate() { return UUID.randomUUID().toString().replace("-", "").substring(0, length); } diff --git a/back/src/main/java/be/naaturel/letsmeet/core/models/Attendance.java b/back/src/main/java/be/naaturel/letsmeet/core/models/Attendance.java new file mode 100644 index 0000000..4d71623 --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/core/models/Attendance.java @@ -0,0 +1,20 @@ +package be.naaturel.letsmeet.core.models; + +public class Attendance { + + private EventDate date; + private Attendee attendee; + + public Attendance(EventDate date, Attendee attendee) { + this.date = date; + this.attendee = attendee; + } + + public Attendee getAttendee() { + return attendee; + } + + public EventDate getDate() { + return date; + } +} diff --git a/back/src/main/java/be/naaturel/letsmeet/core/models/Attendee.java b/back/src/main/java/be/naaturel/letsmeet/core/models/Attendee.java index 68add02..afc6890 100644 --- a/back/src/main/java/be/naaturel/letsmeet/core/models/Attendee.java +++ b/back/src/main/java/be/naaturel/letsmeet/core/models/Attendee.java @@ -1,38 +1,19 @@ package be.naaturel.letsmeet.core.models; -import java.util.HashSet; import java.util.Objects; -import java.util.Set; public class Attendee { private String name; - private Set dates; - - public Attendee(String name){ - this(name, new HashSet<>()); - } - - public Attendee(String name, Set dates){ + public Attendee(String name) { this.name = name; - this.dates = dates; } - public String getName() { return name; } - public Set getDates() { - return new HashSet<>(this.dates); - } - - public void replaceDate(EventDate oldDate, EventDate newDate){ - dates.remove(oldDate); - dates.add(newDate); - } - @Override public boolean equals(Object obj) { if (this == obj) return true; diff --git a/back/src/main/java/be/naaturel/letsmeet/core/models/Event.java b/back/src/main/java/be/naaturel/letsmeet/core/models/Event.java index acedaee..9565d1a 100644 --- a/back/src/main/java/be/naaturel/letsmeet/core/models/Event.java +++ b/back/src/main/java/be/naaturel/letsmeet/core/models/Event.java @@ -1,30 +1,24 @@ package be.naaturel.letsmeet.core.models; -import java.util.*; +import java.util.Set; public class Event { private String name; - private Set attendees; - public Event(String name, Set attendees){ + private Set attendances; + + public Event(String name, Set attendances) { this.name = name; - this.attendees = attendees; + this.attendances = attendances; } public String getName() { return name; } - public Set getAttendees(){ - return new HashSet<>(this.attendees); + public Set getAttendances() { + return this.attendances; } - public Set getDates() { - Set dates = new HashSet<>(); - for (Attendee p : this.attendees) { - dates.addAll(p.getDates()); - } - return dates; - } } diff --git a/back/src/main/java/be/naaturel/letsmeet/core/models/EventDate.java b/back/src/main/java/be/naaturel/letsmeet/core/models/EventDate.java index 13a26c1..67d9dd8 100644 --- a/back/src/main/java/be/naaturel/letsmeet/core/models/EventDate.java +++ b/back/src/main/java/be/naaturel/letsmeet/core/models/EventDate.java @@ -1,12 +1,10 @@ package be.naaturel.letsmeet.core.models; -import java.util.Objects; - public class EventDate { private long timeStamp; - public EventDate(long timeStamp){ + public EventDate(long timeStamp) { this.timeStamp = timeStamp; } diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/database/AttendanceEntity.java b/back/src/main/java/be/naaturel/letsmeet/dto/database/AttendanceEntity.java new file mode 100644 index 0000000..b1bcb4f --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/dto/database/AttendanceEntity.java @@ -0,0 +1,34 @@ +package be.naaturel.letsmeet.dto.database; + +import jakarta.persistence.*; + +import java.util.Objects; + +@Entity(name = "Attendances") +public class AttendanceEntity { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + public String id; + + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "event_date_id", nullable = false) + public EventDateEntity date; + + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "attendee_id", nullable = false) + public AttendeeEntity attendee; + + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + AttendanceEntity a = (AttendanceEntity) obj; + return a.date.timeStamp == ((AttendanceEntity) obj).date.timeStamp && + a.attendee.name == ((AttendanceEntity) obj).attendee.name; + } + + @Override + public int hashCode() { + return Objects.hash(date, attendee); + } +} diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/database/AttendeeEntity.java b/back/src/main/java/be/naaturel/letsmeet/dto/database/AttendeeEntity.java index 42be972..97d6e24 100644 --- a/back/src/main/java/be/naaturel/letsmeet/dto/database/AttendeeEntity.java +++ b/back/src/main/java/be/naaturel/letsmeet/dto/database/AttendeeEntity.java @@ -2,7 +2,7 @@ package be.naaturel.letsmeet.dto.database; import jakarta.persistence.*; -import java.util.Set; +import java.util.Objects; @Entity(name = "Attendees") public class AttendeeEntity { @@ -14,12 +14,17 @@ public class AttendeeEntity { @Column public String name; - @ManyToMany(cascade = {CascadeType.ALL}) - @JoinTable - public Set dates; + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + AttendeeEntity a = (AttendeeEntity) obj; + return Objects.equals(name, a.name); + } - @ManyToOne - @JoinColumn(nullable=true) - public EventEntity event; + @Override + public int hashCode() { + return Objects.hash(name); + } } diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/database/EventDateEntity.java b/back/src/main/java/be/naaturel/letsmeet/dto/database/EventDateEntity.java index 5602f06..c640478 100644 --- a/back/src/main/java/be/naaturel/letsmeet/dto/database/EventDateEntity.java +++ b/back/src/main/java/be/naaturel/letsmeet/dto/database/EventDateEntity.java @@ -3,7 +3,6 @@ package be.naaturel.letsmeet.dto.database; import jakarta.persistence.*; import java.util.Objects; -import java.util.Set; @Entity(name = "Dates") @Table(uniqueConstraints = { @@ -18,13 +17,6 @@ public class EventDateEntity { @Column public long timeStamp; - @ManyToOne - @JoinColumn(nullable=true) - public EventEntity event; - - @ManyToMany(mappedBy = "dates") - public Set attendees; - @Override public boolean equals(Object obj) { if (this == obj) return true; diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/database/EventEntity.java b/back/src/main/java/be/naaturel/letsmeet/dto/database/EventEntity.java index d6c0b95..4feb1e5 100644 --- a/back/src/main/java/be/naaturel/letsmeet/dto/database/EventEntity.java +++ b/back/src/main/java/be/naaturel/letsmeet/dto/database/EventEntity.java @@ -2,7 +2,7 @@ package be.naaturel.letsmeet.dto.database; import jakarta.persistence.*; -import java.util.*; +import java.util.Set; @Entity(name = "Events") public class EventEntity { @@ -17,36 +17,9 @@ public class EventEntity { @Column(unique = true) public String token; - @Column - @OneToMany(targetEntity=EventDateEntity.class, cascade=CascadeType.ALL, mappedBy="event") - public Set dates; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "event_id") + public Set attendances; - @Column - @OneToMany(targetEntity=AttendeeEntity.class, cascade=CascadeType.ALL, mappedBy="event") - public Set attendees; - - public void linkDates(){ - for (EventDateEntity date : this.dates) { - date.event = this; - } - } - - public void linkAttendees(){ - for (AttendeeEntity attendee : this.attendees) { - attendee.event = this; - } - } - - public void removeDuplicatedDates(){ - - for (EventDateEntity ede: dates) { - for (AttendeeEntity pe : attendees) { - if(pe.dates.contains(ede)){ - pe.dates.remove(ede); - pe.dates.add(ede); - } - } - } - } } diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/database/factories/DatabasePropsFactory.java b/back/src/main/java/be/naaturel/letsmeet/dto/database/factories/DatabasePropsFactory.java deleted file mode 100644 index 6613b95..0000000 --- a/back/src/main/java/be/naaturel/letsmeet/dto/database/factories/DatabasePropsFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -package be.naaturel.letsmeet.dto.database.factories; - -import be.naaturel.letsmeet.core.helpers.TokenGenerator; -import be.naaturel.letsmeet.dto.database.EventDateEntity; -import be.naaturel.letsmeet.dto.database.EventEntity; -import be.naaturel.letsmeet.dto.database.AttendeeEntity; - -import java.util.HashSet; -import java.util.Set; - -public class DatabasePropsFactory { - - public static EventEntity createEvent(String name, Set attendees){ - - EventEntity entity = new EventEntity(); - entity.name = name; - entity.token = TokenGenerator.generate(); - entity.attendees = attendees; - entity.dates = new HashSet<>(); - for (AttendeeEntity pe : entity.attendees) { - entity.dates.addAll(pe.dates); - } - entity.linkDates(); - entity.linkAttendees(); - entity.removeDuplicatedDates(); - return entity; - } - - public static AttendeeEntity createAttendee(String name, Set dates){ - AttendeeEntity entity = new AttendeeEntity(); - entity.name = name; - entity.dates = dates; - return entity; - } - - public static EventDateEntity createDate(long timestamp){ - EventDateEntity entity = new EventDateEntity(); - entity.timeStamp = timestamp; - return entity; - } - -} diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/AttendanceDTO.java b/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/AttendanceDTO.java new file mode 100644 index 0000000..54bc290 --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/AttendanceDTO.java @@ -0,0 +1,21 @@ +package be.naaturel.letsmeet.dto.httpRequest; + +import java.util.Objects; + +public class AttendanceDTO { + public EventDateDTO date; + public AttendeeDTO attendee; + + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + AttendanceDTO a = (AttendanceDTO) obj; + return a.date.timestamp == ((AttendanceDTO) obj).date.timestamp && + a.attendee.name == ((AttendanceDTO) obj).attendee.name; + } + + @Override + public int hashCode() { + return Objects.hash(date, attendee); + } +} diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/AttendeeDTO.java b/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/AttendeeDTO.java index 5e64752..30150fd 100644 --- a/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/AttendeeDTO.java +++ b/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/AttendeeDTO.java @@ -1,7 +1,5 @@ package be.naaturel.letsmeet.dto.httpRequest; -import java.util.Set; - public class AttendeeDTO { public String name; diff --git a/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/EventDTO.java b/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/EventDTO.java index a93d28f..2be844e 100644 --- a/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/EventDTO.java +++ b/back/src/main/java/be/naaturel/letsmeet/dto/httpRequest/EventDTO.java @@ -1,12 +1,11 @@ package be.naaturel.letsmeet.dto.httpRequest; -import java.util.Map; import java.util.Set; public class EventDTO { public String name; public String token; - public Map> dates; + public Set attendances; } diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/Mapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/Mapper.java index 4c02408..28a548c 100644 --- a/back/src/main/java/be/naaturel/letsmeet/mappers/Mapper.java +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/Mapper.java @@ -3,7 +3,7 @@ package be.naaturel.letsmeet.mappers; import java.util.Collection; import java.util.function.Supplier; -public interface Mapper { +public interface Mapper { T_ENTITY toEntity(T d); diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/database/AttendanceMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/database/AttendanceMapper.java new file mode 100644 index 0000000..e4ecba6 --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/database/AttendanceMapper.java @@ -0,0 +1,51 @@ +package be.naaturel.letsmeet.mappers.database; + +import be.naaturel.letsmeet.core.models.Attendance; +import be.naaturel.letsmeet.core.models.Attendee; +import be.naaturel.letsmeet.core.models.EventDate; +import be.naaturel.letsmeet.dto.database.AttendanceEntity; +import be.naaturel.letsmeet.dto.database.AttendeeEntity; +import be.naaturel.letsmeet.dto.database.EventDateEntity; +import be.naaturel.letsmeet.mappers.Mapper; + +import java.util.Collection; +import java.util.function.Supplier; + +public class AttendanceMapper implements Mapper { + private final Mapper attendeeMapper; + private final Mapper dateMapper; + + public AttendanceMapper() { + this.attendeeMapper = new AttendeeMapper(); + this.dateMapper = new EventDateMapper(); + } + + @Override + public AttendanceEntity toEntity(Attendance d) { + AttendanceEntity dto = new AttendanceEntity(); + dto.attendee = attendeeMapper.toEntity(d.getAttendee()); + dto.date = dateMapper.toEntity(d.getDate()); + return dto; + } + + @Override + public Attendance toModel(AttendanceEntity d) { + Attendee attendee = attendeeMapper.toModel(d.attendee); + EventDate date = dateMapper.toModel(d.date); + return new Attendance(date, attendee); + } + + @Override + public > C toEntities(Collection attendances, Supplier collectionSupplier) { + C result = collectionSupplier.get(); + attendances.forEach(p -> result.add(toEntity(p))); + return result; + } + + @Override + public > C toModels(Collection attendances, Supplier collectionSupplier) { + C result = collectionSupplier.get(); + attendances.forEach(p -> result.add(toModel(p))); + return result; + } +} diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/database/AttendeeMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/database/AttendeeMapper.java index 7e2ade7..8c3f8b3 100644 --- a/back/src/main/java/be/naaturel/letsmeet/mappers/database/AttendeeMapper.java +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/database/AttendeeMapper.java @@ -1,14 +1,12 @@ package be.naaturel.letsmeet.mappers.database; -import be.naaturel.letsmeet.dto.database.EventDateEntity; -import be.naaturel.letsmeet.dto.database.AttendeeEntity; -import be.naaturel.letsmeet.dto.database.factories.DatabasePropsFactory; -import be.naaturel.letsmeet.mappers.Mapper; -import be.naaturel.letsmeet.core.models.EventDate; import be.naaturel.letsmeet.core.models.Attendee; +import be.naaturel.letsmeet.core.models.EventDate; +import be.naaturel.letsmeet.dto.database.AttendeeEntity; +import be.naaturel.letsmeet.dto.database.EventDateEntity; +import be.naaturel.letsmeet.mappers.Mapper; import java.util.Collection; -import java.util.HashSet; import java.util.function.Supplier; public class AttendeeMapper implements Mapper { @@ -16,18 +14,21 @@ public class AttendeeMapper implements Mapper { private final Mapper dateMapper; - public AttendeeMapper(){ + public AttendeeMapper() { dateMapper = new EventDateMapper(); } @Override - public AttendeeEntity toEntity(Attendee d) { - return DatabasePropsFactory.createAttendee(d.getName(), dateMapper.toEntities(d.getDates(), HashSet::new)); + public AttendeeEntity toEntity(Attendee a) { + //return DatabasePropsFactory.createAttendee(d.getName(), dateMapper.toEntities(d.getDates(), HashSet::new)); + AttendeeEntity ae = new AttendeeEntity(); + ae.name = a.getName(); + return ae; } @Override public Attendee toModel(AttendeeEntity d) { - return new Attendee(d.name, dateMapper.toModels(d.dates, HashSet::new)); + return new Attendee(d.name); } @Override diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventDateMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventDateMapper.java index 3a27bd9..27f6f1a 100644 --- a/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventDateMapper.java +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventDateMapper.java @@ -1,9 +1,8 @@ package be.naaturel.letsmeet.mappers.database; -import be.naaturel.letsmeet.dto.database.EventDateEntity; -import be.naaturel.letsmeet.dto.database.factories.DatabasePropsFactory; -import be.naaturel.letsmeet.mappers.Mapper; import be.naaturel.letsmeet.core.models.EventDate; +import be.naaturel.letsmeet.dto.database.EventDateEntity; +import be.naaturel.letsmeet.mappers.Mapper; import java.util.Collection; import java.util.function.Supplier; @@ -13,7 +12,9 @@ public class EventDateMapper implements Mapper { @Override public EventDateEntity toEntity(EventDate d) { - return DatabasePropsFactory.createDate(d.getTimeStamp()); + EventDateEntity ede = new EventDateEntity(); + ede.timeStamp = d.getTimeStamp(); + return ede; } @Override diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventMapper.java index f406287..1e3c240 100644 --- a/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventMapper.java +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/database/EventMapper.java @@ -1,33 +1,41 @@ package be.naaturel.letsmeet.mappers.database; -import be.naaturel.letsmeet.dto.database.EventEntity; -import be.naaturel.letsmeet.dto.database.AttendeeEntity; -import be.naaturel.letsmeet.dto.database.factories.DatabasePropsFactory; -import be.naaturel.letsmeet.mappers.Mapper; +import be.naaturel.letsmeet.core.helpers.TokenGenerator; +import be.naaturel.letsmeet.core.models.Attendance; import be.naaturel.letsmeet.core.models.Event; -import be.naaturel.letsmeet.core.models.Attendee; +import be.naaturel.letsmeet.dto.database.AttendanceEntity; +import be.naaturel.letsmeet.dto.database.EventEntity; +import be.naaturel.letsmeet.mappers.Mapper; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; import java.util.function.Supplier; public class EventMapper implements Mapper { - private final Mapper attendeeMapper; + private final Mapper attendanceMapper; - public EventMapper(){ - this.attendeeMapper = new AttendeeMapper(); + public EventMapper() { + this.attendanceMapper = new AttendanceMapper(); } @Override public EventEntity toEntity(Event event) { - return DatabasePropsFactory.createEvent(event.getName(), attendeeMapper.toEntities(event.getAttendees(), HashSet::new)); + EventEntity entity = new EventEntity(); + entity.name = event.getName(); + entity.token = TokenGenerator.generate(); + entity.attendances = attendanceMapper.toEntities(event.getAttendances(), HashSet::new); + return entity; } @Override public Event toModel(EventEntity eventEntity) { - return new Event(eventEntity.name, attendeeMapper.toModels(eventEntity.attendees, HashSet::new)); + Set attendances = attendanceMapper.toModels(eventEntity.attendances, HashSet::new); + return new Event(eventEntity.name, attendances); } + @Override public > C toEntities(Collection events, Supplier collectionSupplier) { C result = collectionSupplier.get(); diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/requests/AttendanceDTOMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/AttendanceDTOMapper.java new file mode 100644 index 0000000..425a1a7 --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/AttendanceDTOMapper.java @@ -0,0 +1,52 @@ +package be.naaturel.letsmeet.mappers.requests; + +import be.naaturel.letsmeet.core.models.Attendance; +import be.naaturel.letsmeet.core.models.Attendee; +import be.naaturel.letsmeet.core.models.EventDate; +import be.naaturel.letsmeet.dto.httpRequest.AttendanceDTO; +import be.naaturel.letsmeet.dto.httpRequest.AttendeeDTO; +import be.naaturel.letsmeet.dto.httpRequest.EventDateDTO; +import be.naaturel.letsmeet.mappers.Mapper; + +import java.util.Collection; +import java.util.function.Supplier; + +public class AttendanceDTOMapper implements Mapper { + + private final Mapper attendeeMapper; + private final Mapper dateMapper; + + public AttendanceDTOMapper() { + this.attendeeMapper = new AttendeeDTOMapper(); + this.dateMapper = new EventDateDTOMapper(); + } + + @Override + public AttendanceDTO toEntity(Attendance d) { + AttendanceDTO dto = new AttendanceDTO(); + dto.attendee = attendeeMapper.toEntity(d.getAttendee()); + dto.date = dateMapper.toEntity(d.getDate()); + return dto; + } + + @Override + public Attendance toModel(AttendanceDTO d) { + Attendee attendee = attendeeMapper.toModel(d.attendee); + EventDate date = dateMapper.toModel(d.date); + return new Attendance(date, attendee); + } + + @Override + public > C toEntities(Collection attendances, Supplier collectionSupplier) { + C result = collectionSupplier.get(); + attendances.forEach(p -> result.add(toEntity(p))); + return result; + } + + @Override + public > C toModels(Collection attendances, Supplier collectionSupplier) { + C result = collectionSupplier.get(); + attendances.forEach(p -> result.add(toModel(p))); + return result; + } +} diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/requests/AttendeeDTOMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/AttendeeDTOMapper.java index deef14c..24cd4fd 100644 --- a/back/src/main/java/be/naaturel/letsmeet/mappers/requests/AttendeeDTOMapper.java +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/AttendeeDTOMapper.java @@ -1,20 +1,19 @@ package be.naaturel.letsmeet.mappers.requests; -import be.naaturel.letsmeet.dto.httpRequest.EventDateDTO; -import be.naaturel.letsmeet.dto.httpRequest.AttendeeDTO; -import be.naaturel.letsmeet.mappers.Mapper; -import be.naaturel.letsmeet.core.models.EventDate; import be.naaturel.letsmeet.core.models.Attendee; +import be.naaturel.letsmeet.core.models.EventDate; +import be.naaturel.letsmeet.dto.httpRequest.AttendeeDTO; +import be.naaturel.letsmeet.dto.httpRequest.EventDateDTO; +import be.naaturel.letsmeet.mappers.Mapper; import java.util.Collection; -import java.util.HashSet; import java.util.function.Supplier; public class AttendeeDTOMapper implements Mapper { private final Mapper dateMapper; - public AttendeeDTOMapper(){ + public AttendeeDTOMapper() { this.dateMapper = new EventDateDTOMapper(); } @@ -27,7 +26,7 @@ public class AttendeeDTOMapper implements Mapper { @Override public Attendee toModel(AttendeeDTO d) { - return null; + return new Attendee(d.name); } @Override diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDTOMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDTOMapper.java index 311713c..f4fe329 100644 --- a/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDTOMapper.java +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDTOMapper.java @@ -1,58 +1,36 @@ package be.naaturel.letsmeet.mappers.requests; -import be.naaturel.letsmeet.core.models.EventDate; -import be.naaturel.letsmeet.dto.httpRequest.EventDTO; -import be.naaturel.letsmeet.dto.httpRequest.AttendeeDTO; -import be.naaturel.letsmeet.dto.httpRequest.EventDateDTO; -import be.naaturel.letsmeet.mappers.Mapper; +import be.naaturel.letsmeet.core.models.Attendance; import be.naaturel.letsmeet.core.models.Event; -import be.naaturel.letsmeet.core.models.Attendee; +import be.naaturel.letsmeet.dto.httpRequest.AttendanceDTO; +import be.naaturel.letsmeet.dto.httpRequest.EventDTO; +import be.naaturel.letsmeet.mappers.Mapper; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; import java.util.Set; import java.util.function.Supplier; public class EventDTOMapper implements Mapper { - private final Mapper attendeeMapper = new AttendeeDTOMapper(); - private final Mapper dateMapper = new EventDateDTOMapper(); + private final Mapper attendanceMapper; + + public EventDTOMapper() { + this.attendanceMapper = new AttendanceDTOMapper(); + } @Override public EventDTO toEntity(Event event) { EventDTO eventDTO = new EventDTO(); eventDTO.name = event.getName(); - //eventDTO.dates = attendeeMapper.toEntities(event.getAttendees(), HashSet::new); - - //TODO : MUST BE CLEANED - eventDTO.dates = new HashMap<>(); - event.getAttendees().forEach(a -> { - a.getDates().forEach(d -> { - EventDateDTO dtoD = dateMapper.toEntity(d); - AttendeeDTO dtoA = attendeeMapper.toEntity(a); - String key = String.valueOf(d.getTimeStamp()); - if(eventDTO.dates.containsKey(key)){ - eventDTO.dates.get(key).add(dtoA); - } else { - Set s = new HashSet<>(); - s.add(dtoA); - eventDTO.dates.put(key, s); - } - }); - }); - + eventDTO.attendances = attendanceMapper.toEntities(event.getAttendances(), HashSet::new); return eventDTO; } @Override public Event toModel(EventDTO dto) { - //return new Event(dto.name, attendeeMapper.toModels(dto.dates, HashSet::new)); - Set set = new HashSet<>(); - for (String key : dto.dates.keySet()) { - set.addAll(attendeeMapper.toModels(dto.dates.get(key), HashSet::new)); - } - return new Event(dto.name, set); + Set attendances = attendanceMapper.toModels(dto.attendances, HashSet::new); + return new Event(dto.name, attendances); } @Override diff --git a/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDateDTOMapper.java b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDateDTOMapper.java index e5168f5..51c7db2 100644 --- a/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDateDTOMapper.java +++ b/back/src/main/java/be/naaturel/letsmeet/mappers/requests/EventDateDTOMapper.java @@ -1,8 +1,8 @@ package be.naaturel.letsmeet.mappers.requests; +import be.naaturel.letsmeet.core.models.EventDate; import be.naaturel.letsmeet.dto.httpRequest.EventDateDTO; import be.naaturel.letsmeet.mappers.Mapper; -import be.naaturel.letsmeet.core.models.EventDate; import java.util.Collection; import java.util.function.Supplier; diff --git a/back/src/main/java/be/naaturel/letsmeet/repositories/EventRepo.java b/back/src/main/java/be/naaturel/letsmeet/repositories/EventRepo.java index b7eaaaf..13c555b 100644 --- a/back/src/main/java/be/naaturel/letsmeet/repositories/EventRepo.java +++ b/back/src/main/java/be/naaturel/letsmeet/repositories/EventRepo.java @@ -1,15 +1,88 @@ package be.naaturel.letsmeet.repositories; +import be.naaturel.letsmeet.core.models.Event; +import be.naaturel.letsmeet.dto.database.AttendanceEntity; +import be.naaturel.letsmeet.dto.database.AttendeeEntity; +import be.naaturel.letsmeet.dto.database.EventDateEntity; import be.naaturel.letsmeet.dto.database.EventEntity; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; +import be.naaturel.letsmeet.mappers.Mapper; +import be.naaturel.letsmeet.mappers.database.EventMapper; +import be.naaturel.letsmeet.repositories.interfaces.AttendanceEntityRepo; +import be.naaturel.letsmeet.repositories.interfaces.AttendeeEntityRepo; +import be.naaturel.letsmeet.repositories.interfaces.EventDateEntityRepo; +import be.naaturel.letsmeet.repositories.interfaces.EventEntityRepo; +import jakarta.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; -import java.util.List; +import java.util.HashMap; +import java.util.Map; + +@Component +public class EventRepo { + + private final EventEntityRepo eventRepo; + private final AttendeeEntityRepo attendeeRepo; + private final EventDateEntityRepo dateRepo; + private final AttendanceEntityRepo attendanceRepo; + private final Mapper mapper; + + @Autowired + public EventRepo(EventEntityRepo eventRepo, AttendeeEntityRepo attendeeRepo, + EventDateEntityRepo dateRepo, AttendanceEntityRepo attendanceRepo) { + this.eventRepo = eventRepo; + this.attendeeRepo = attendeeRepo; + this.dateRepo = dateRepo; + this.attendanceRepo = attendanceRepo; + this.mapper = new EventMapper(); + } + + @Transactional + public String save(Event e) { + //Hacky way to avoid duplication through relationship insertion. + //I didn't want to do that, but after going through the five stages + // of grief and spending many hours (like way too much) looking for a cleaner + // solution, it seems JPA has no built-in way to achieve it + + EventEntity event = getAsEntity(e); + Map insertedAttendees = new HashMap<>(); + Map insertedDates = new HashMap<>(); + + for (AttendanceEntity attendance : event.attendances) { + AttendeeEntity attendee = attendance.attendee; + EventDateEntity date = attendance.date; + + if (!insertedAttendees.containsKey(attendee)) { + insertedAttendees.put(attendee, attendee); + attendeeRepo.save(attendee); + } else { + attendance.attendee = insertedAttendees.get(attendee); + } + + if (!insertedDates.containsKey(date)) { + insertedDates.put(date, date); + dateRepo.save(date); + } else { + attendance.date = insertedDates.get(date); + } + } + EventEntity result = eventRepo.save(event); + return result.token; + } + + + public Event getByToken(String token) { + EventEntity entity = this.eventRepo.findEventEntityByToken(token); + return mapper.toModel(entity); + } + + public void delete(Event event) { + + } + + private EventEntity getAsEntity(Event e) { + return mapper.toEntity(e); + } -public interface EventRepo - extends JpaRepository { - @Query(value = "SELECT * FROM events e WHERE e.token = :#{#token};", nativeQuery = true) - EventEntity findEventEntityByToken(@Param("token") String token); } diff --git a/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/AttendanceEntityRepo.java b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/AttendanceEntityRepo.java new file mode 100644 index 0000000..b90b099 --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/AttendanceEntityRepo.java @@ -0,0 +1,13 @@ +package be.naaturel.letsmeet.repositories.interfaces; + +import be.naaturel.letsmeet.dto.database.AttendanceEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AttendanceEntityRepo extends JpaRepository { + + //@Query(value = "SELECT * FROM events e WHERE e.token = :#{#token};", nativeQuery = true) + //EventEntity findEventEntityByToken(@Param("token") String token); + +} diff --git a/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/AttendeeEntityRepo.java b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/AttendeeEntityRepo.java new file mode 100644 index 0000000..ec8c7be --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/AttendeeEntityRepo.java @@ -0,0 +1,13 @@ +package be.naaturel.letsmeet.repositories.interfaces; + +import be.naaturel.letsmeet.dto.database.AttendeeEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AttendeeEntityRepo extends JpaRepository { + + //@Query(value = "SELECT * FROM events e WHERE e.token = :#{#token};", nativeQuery = true) + //EventEntity findEventEntityByToken(@Param("token") String token); + +} diff --git a/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/EventDateEntityRepo.java b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/EventDateEntityRepo.java new file mode 100644 index 0000000..4a218cc --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/EventDateEntityRepo.java @@ -0,0 +1,13 @@ +package be.naaturel.letsmeet.repositories.interfaces; + +import be.naaturel.letsmeet.dto.database.EventDateEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EventDateEntityRepo extends JpaRepository { + + //@Query(value = "SELECT * FROM events e WHERE e.token = :#{#token};", nativeQuery = true) + //EventEntity findEventEntityByToken(@Param("token") String token); + +} diff --git a/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/EventEntityRepo.java b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/EventEntityRepo.java new file mode 100644 index 0000000..37ae21f --- /dev/null +++ b/back/src/main/java/be/naaturel/letsmeet/repositories/interfaces/EventEntityRepo.java @@ -0,0 +1,15 @@ +package be.naaturel.letsmeet.repositories.interfaces; + +import be.naaturel.letsmeet.dto.database.EventEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +@Repository +public interface EventEntityRepo extends JpaRepository { + + @Query(value = "SELECT * FROM events e WHERE e.token = :#{#token};", nativeQuery = true) + EventEntity findEventEntityByToken(@Param("token") String token); + +} diff --git a/back/src/main/java/be/naaturel/letsmeet/services/AbstractService.java b/back/src/main/java/be/naaturel/letsmeet/services/AbstractService.java index bdfdfc8..4d05357 100644 --- a/back/src/main/java/be/naaturel/letsmeet/services/AbstractService.java +++ b/back/src/main/java/be/naaturel/letsmeet/services/AbstractService.java @@ -8,12 +8,13 @@ public abstract class AbstractService { protected Mapper dataBaseMapper; protected Mapper requestMapper; - AbstractService(Mapper dataBaseMapper, Mapper requestMapper){ + AbstractService(Mapper dataBaseMapper, Mapper requestMapper) { this.dataBaseMapper = dataBaseMapper; this.requestMapper = requestMapper; } public abstract Result save(T_DTO prop) throws Exception; + public abstract boolean delete(T_DTO prop); diff --git a/back/src/main/java/be/naaturel/letsmeet/services/EventService.java b/back/src/main/java/be/naaturel/letsmeet/services/EventService.java index aa558dd..b5729e7 100644 --- a/back/src/main/java/be/naaturel/letsmeet/services/EventService.java +++ b/back/src/main/java/be/naaturel/letsmeet/services/EventService.java @@ -1,11 +1,11 @@ package be.naaturel.letsmeet.services; import be.naaturel.letsmeet.core.Result; +import be.naaturel.letsmeet.core.models.Event; import be.naaturel.letsmeet.dto.database.EventEntity; import be.naaturel.letsmeet.dto.httpRequest.EventDTO; import be.naaturel.letsmeet.mappers.database.EventMapper; import be.naaturel.letsmeet.mappers.requests.EventDTOMapper; -import be.naaturel.letsmeet.core.models.Event; import be.naaturel.letsmeet.repositories.EventRepo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.OptimisticLockingFailureException; @@ -17,7 +17,7 @@ public class EventService extends AbstractService protected EventRepo repo; @Autowired - public EventService(EventRepo eventRepo){ + public EventService(EventRepo eventRepo) { super(new EventMapper(), new EventDTOMapper()); this.repo = eventRepo; } @@ -25,36 +25,32 @@ public class EventService extends AbstractService @Override public Result save(EventDTO dto) throws Exception { Event event = this.requestMapper.toModel(dto); - EventEntity entity = this.dataBaseMapper.toEntity(event); - try{ - this.repo.save(entity); - return new Result<>(entity.token); + try { + String res = this.repo.save(event); + return new Result<>(res); } catch (Exception e) { - throw new Exception("Something went wrong"); + throw new Exception("Something went wrong : " + e.getMessage()); } } @Override public boolean delete(EventDTO dto) { Event event = this.requestMapper.toModel(dto); - EventEntity entity = this.dataBaseMapper.toEntity(event); - try{ - this.repo.delete(entity); + try { + this.repo.delete(event); return true; - } catch (IllegalArgumentException iae){ + } catch (IllegalArgumentException iae) { return false; - } catch (OptimisticLockingFailureException olfe){ + } catch (OptimisticLockingFailureException olfe) { return false; } } - public EventDTO getEvent(String token){ - try{ - EventEntity entity = this.repo.findEventEntityByToken(token); - Event model = dataBaseMapper.toModel(entity); - EventDTO dto = requestMapper.toEntity(model); - return dto; - } catch (Exception e){ + public EventDTO getEvent(String token) { + try { + Event event = this.repo.getByToken(token); + return requestMapper.toEntity(event); + } catch (Exception e) { return null; } } diff --git a/back/src/test/java/be/naaturel/letsmeet/mappers/DateMapperTest.java b/back/src/test/java/be/naaturel/letsmeet/mappers/DateMapperTest.java deleted file mode 100644 index c41f208..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/mappers/DateMapperTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package be.naaturel.letsmeet.mappers; - -import be.naaturel.letsmeet.dto.database.EventDateEntity; -import be.naaturel.letsmeet.mappers.Mapper; -import be.naaturel.letsmeet.mappers.database.EventDateMapper; -import be.naaturel.letsmeet.core.models.EventDate; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.util.HashSet; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class DateMapperTest { - - private static final Mapper mapper = new EventDateMapper(); - private static final EventDate model = new EventDate(0); - private static final Set models = Set.of(new EventDate(0), new EventDate(1), new EventDate(2)); - private static final EventDateEntity entity = new EventDateEntity(); - private static final Set entities = new HashSet<>(); - - @BeforeAll - static void setup(){ - entity.timeStamp = 0; - - entities.add(new EventDateEntity()); - entities.add(new EventDateEntity()); - entities.add(new EventDateEntity()); - } - - @Test - void single_model_to_entity() { - EventDateEntity converted = mapper.toEntity(model); - assertEquals(converted.timeStamp, model.getTimeStamp()); - } - - @Test - void single_entity_to_model() { - EventDate converted = mapper.toModel(entity); - assertEquals(converted.getTimeStamp(), entity.timeStamp); - } - - @Test - void multiple_entities_to_models() { - Set dates = mapper.toModels(entities, HashSet::new); - assertEquals(dates.size(), entities.size()); - } - - @Test - void multiple_models_to_entities() { - Set dates = mapper.toEntities(models, HashSet::new); - assertEquals(dates.size(), models.size()); - } - -} diff --git a/back/src/test/java/be/naaturel/letsmeet/mappers/EventMapperTest.java b/back/src/test/java/be/naaturel/letsmeet/mappers/EventMapperTest.java deleted file mode 100644 index 5254d22..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/mappers/EventMapperTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package be.naaturel.letsmeet.mappers; - -import be.naaturel.letsmeet.core.models.Event; -import be.naaturel.letsmeet.core.models.EventDate; -import be.naaturel.letsmeet.dto.database.EventDateEntity; -import be.naaturel.letsmeet.dto.database.EventEntity; -import be.naaturel.letsmeet.mappers.database.EventMapper; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class EventMapperTest { - /*private static final Mapper mapper = new EventMapper(); - - private static final Set dates = Set.of(new EventDate(0, new HashSet<>())); - - private static final Event model = new Event("Event for tests", dates); - - private static final List models = List.of(model, model, model); - - private static final EventEntity entity = new EventEntity(); - private static final List entities = new ArrayList<>(); - - @BeforeAll - static void setup(){ - entity.id = "BLA BLA BLA FAKE ID"; - entity.name = "Event entity for tests"; - entity.dates = Set.of(new EventDateEntity(), new EventDateEntity(), new EventDateEntity()); - - entities.add(entity); - entities.add(entity); - entities.add(entity); - } - - - @Test - void single_model_to_entity() { - EventEntity converted = mapper.toEntity(model); - assertEquals(converted.name, model.getName()); - assertEquals(converted.dates.size(), model.getDates().size()); - } - - @Test - void single_entity_to_model() { - Event converted = mapper.toModel(entity); - assertEquals(converted.getName(), entity.name); - //assertEquals(converted.getDates().size(), entity.dates.size()); - } - - @Test - void multiple_entities_to_models() { - List events = mapper.toModels(entities, ArrayList::new); - assertEquals(events.size(), entities.size()); - } - - @Test - void multiple_models_to_entities() { - List eventEntities = mapper.toEntities(models, ArrayList::new); - assertEquals(eventEntities.size(), models.size()); - }*/ - -} diff --git a/back/src/test/java/be/naaturel/letsmeet/mappers/dto/EventDTOMapperTest.java b/back/src/test/java/be/naaturel/letsmeet/mappers/dto/EventDTOMapperTest.java deleted file mode 100644 index 8eea992..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/mappers/dto/EventDTOMapperTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package be.naaturel.letsmeet.mappers.dto; - -import be.naaturel.letsmeet.core.models.Event; -import be.naaturel.letsmeet.dto.httpRequest.EventDTO; -import be.naaturel.letsmeet.mappers.Mapper; -import be.naaturel.letsmeet.mappers.requests.EventDTOMapper; -import be.naaturel.letsmeet.mock.dto.MockEventDTO; -import be.naaturel.letsmeet.mock.models.MockEventModel; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class EventDTOMapperTest { - - private static MockEventDTO mockDto; - private static MockEventModel mockModel; - private static Mapper mapper; - - @BeforeAll - static void setup(){ - mockDto = new MockEventDTO(); - mockModel = new MockEventModel(); - mapper = new EventDTOMapper(); - } - - @Test - void single_dto_to_model_test(){ - Event res = mapper.toModel(mockDto); - assertEquals(res.getName(), mockDto.name); - } - - @Test - void single_model_to_dto_test(){ - EventDTO res = mapper.toEntity(mockModel); - assertEquals(res.name, mockModel.getName()); - } - - @Test - void multiple_dto_to_models_test(){ - List res = mapper.toModels(Set.of(mockDto), ArrayList::new); - assertEquals(res.size(), 1); - assertEquals(res.getFirst().getName(), mockDto.name); - } - - @Test - void mulitple_models_to_dto_test(){ - List res = mapper.toEntities(Set.of(mockModel), ArrayList::new); - assertEquals(res.size(), 1); - assertEquals(res.getFirst().name, mockModel.getName()); - } -} diff --git a/back/src/test/java/be/naaturel/letsmeet/mock/dto/MockAttendeeDTO.java b/back/src/test/java/be/naaturel/letsmeet/mock/dto/MockAttendeeDTO.java deleted file mode 100644 index ad7906a..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/mock/dto/MockAttendeeDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package be.naaturel.letsmeet.mock.dto; - -import be.naaturel.letsmeet.dto.httpRequest.AttendeeDTO; - -public class MockAttendeeDTO extends AttendeeDTO { - - public MockAttendeeDTO(){ - - } - -} diff --git a/back/src/test/java/be/naaturel/letsmeet/mock/dto/MockEventDTO.java b/back/src/test/java/be/naaturel/letsmeet/mock/dto/MockEventDTO.java deleted file mode 100644 index cb29643..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/mock/dto/MockEventDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package be.naaturel.letsmeet.mock.dto; - -import be.naaturel.letsmeet.core.models.Attendee; -import be.naaturel.letsmeet.dto.httpRequest.AttendeeDTO; -import be.naaturel.letsmeet.dto.httpRequest.EventDTO; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; - -public class MockEventDTO extends EventDTO { - - public MockEventDTO() { - this.name = "Mocked event"; - this.dates = new HashMap<>(); - populate(0, new HashSet<>()); - populate(1, new HashSet<>()); - populate(2, new HashSet<>()); - } - - private void populate(long timestamp, Set attendees){ - this.dates.put(String.valueOf(timestamp), attendees); - } -} diff --git a/back/src/test/java/be/naaturel/letsmeet/mock/jpa/MockEventEntity.java b/back/src/test/java/be/naaturel/letsmeet/mock/jpa/MockEventEntity.java deleted file mode 100644 index 27a1c98..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/mock/jpa/MockEventEntity.java +++ /dev/null @@ -1,11 +0,0 @@ -package be.naaturel.letsmeet.mock.jpa; - -import be.naaturel.letsmeet.dto.database.EventEntity; - -public class MockEventEntity extends EventEntity { - - public MockEventEntity(){ - - } - -} diff --git a/back/src/test/java/be/naaturel/letsmeet/mock/models/MockEventModel.java b/back/src/test/java/be/naaturel/letsmeet/mock/models/MockEventModel.java deleted file mode 100644 index 82a0a94..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/mock/models/MockEventModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package be.naaturel.letsmeet.mock.models; - -import be.naaturel.letsmeet.core.models.Attendee; -import be.naaturel.letsmeet.core.models.Event; - -import java.util.HashSet; -import java.util.Set; - -public class MockEventModel extends Event { - public MockEventModel() { - super("Mock event model", new HashSet<>()); - } -} diff --git a/back/src/test/java/be/naaturel/letsmeet/repositories/EventRepoTest.java b/back/src/test/java/be/naaturel/letsmeet/repositories/EventRepoTest.java deleted file mode 100644 index a99fc50..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/repositories/EventRepoTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package be.naaturel.letsmeet.repositories; - -public class EventRepoTest { -} diff --git a/back/src/test/java/be/naaturel/letsmeet/repositories/Seeder.java b/back/src/test/java/be/naaturel/letsmeet/repositories/Seeder.java deleted file mode 100644 index a824ae9..0000000 --- a/back/src/test/java/be/naaturel/letsmeet/repositories/Seeder.java +++ /dev/null @@ -1,20 +0,0 @@ -package be.naaturel.letsmeet.repositories; - -import be.naaturel.letsmeet.dto.database.EventEntity; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.boot.CommandLineRunner; -import org.springframework.context.annotation.Bean; - -@TestConfiguration -public class Seeder { - - @Bean - public CommandLineRunner seedDatabase(EventRepo eventRepo) { - return args -> { - if (eventRepo.count() == 0) { - eventRepo.save(new EventEntity()); - eventRepo.save(new EventEntity()); - } - }; - } -} \ No newline at end of file diff --git a/front/src/dto/AttendanceDto.ts b/front/src/dto/AttendanceDto.ts new file mode 100644 index 0000000..3e2b580 --- /dev/null +++ b/front/src/dto/AttendanceDto.ts @@ -0,0 +1,15 @@ +import type {AttendeeDto} from "@/dto/AttendeeDto.ts"; +import type {TimeStampDto} from "@/dto/TimeStampDto.ts"; + +export class AttendanceDto { + + public date : TimeStampDto + public attendee : AttendeeDto + + public constructor(date : TimeStampDto, attendee : AttendeeDto) { + this.date = date; + this.attendee = attendee; + } + + +} diff --git a/front/src/dto/EventDto.ts b/front/src/dto/EventDto.ts index 15e4fbb..486558a 100644 --- a/front/src/dto/EventDto.ts +++ b/front/src/dto/EventDto.ts @@ -1,17 +1,18 @@ import type {Attendee} from "@/models/Attendee.ts"; import type {EventDate} from "@/models/EventDate.ts"; import type {AttendeeDto} from "@/dto/AttendeeDto.ts"; +import { AttendanceDto } from "./AttendanceDto.ts"; export class EventDto { public name: string; public token: string; - public dates : Map + public attendances : AttendanceDto[]; - public constructor(name: string, token: string, dates: Map) { + public constructor(name: string, token: string, attendances : AttendanceDto[]) { this.name = name; this.token = token; - this.dates = dates; + this.attendances = attendances; } } diff --git a/front/src/models/Attendance.ts b/front/src/models/Attendance.ts new file mode 100644 index 0000000..5fe7b30 --- /dev/null +++ b/front/src/models/Attendance.ts @@ -0,0 +1,12 @@ +import type {EventDate} from "@/models/EventDate.ts"; +import type {Attendee} from "@/models/Attendee.ts"; + +export class Attendance { + public date : EventDate + public attendee : Attendee + + public constructor(date : EventDate, attendee : Attendee) { + this.date = date; + this.attendee = attendee; + } +} diff --git a/front/src/requests/EventRequests.ts b/front/src/requests/EventRequests.ts index c5bc0f0..e2bb787 100644 --- a/front/src/requests/EventRequests.ts +++ b/front/src/requests/EventRequests.ts @@ -25,7 +25,8 @@ export class EventRequests { return fetch(url) .then(response => response.json()) .then(data => { - return new EventDto(data.name, data.token, data.dates) + console.log(data); + return new EventDto(data.name, data.token, data.attendances); }) .catch(error => console.error(error)); } diff --git a/front/src/stores/EventCreationStore.ts b/front/src/stores/EventCreationStore.ts index 2bfb751..da7f0ea 100644 --- a/front/src/stores/EventCreationStore.ts +++ b/front/src/stores/EventCreationStore.ts @@ -3,14 +3,17 @@ import {EventRequests} from "@/requests/EventRequests.ts"; import {EventDto} from "@/dto/EventDto.ts"; import {Event, type EventState} from "@/models/Event.ts"; import {Attendee, type AttendeeState} from "@/models/Attendee.ts"; -import type {AttendeeDto} from "@/dto/AttendeeDto.ts"; +import {AttendanceDto} from "@/dto/AttendanceDto.ts"; +import {TimeStampDto} from "@/dto/TimeStampDto.ts"; +import {AttendeeDto} from "@/dto/AttendeeDto.ts"; const requests = new EventRequests(); function mapToDto(state : EventState) : EventDto{ - let dates : Map = new Map(); + let dates : AttendanceDto[] = []; for (let [date, attendeesState] of state.dates.entries()) { - dates.set(date, []); + let attendance : AttendanceDto = new AttendanceDto(new TimeStampDto(new Date(date)), new AttendeeDto("")); + dates.push(attendance); } return new EventDto(state.name, state.token, dates); } @@ -27,12 +30,15 @@ function mapToModel(state : EventState) : Event{ } function mapToState(dto : EventDto) : EventState { - let event : EventState = {name : "", token : "", dates: new Map()}; + let event : EventState = { name : "", token : "", dates: new Map() }; event.name = dto.name; event.token = dto.token; - Object.entries(dto.dates).forEach(([key, attendees]) => { + dto.attendances.forEach(value => { + + }) + /*Object.entries(dto.dates).forEach(([key, attendees]) => { event.dates.set(Number(key), attendees); - }); + });*/ return event; } @@ -90,14 +96,15 @@ export const eventCreationStore = defineStore('eventStore', { async createEvent() : Promise { try { let event = mapToDto(this.event); - let res = await requests.createEvent(event) + console.log(JSON.stringify(event)); + //let res = await requests.createEvent(event) + let res = ""; if(res) return res; throw new Error("Unable to create event"); } catch (error){ console.error(error); throw new Error("Unable to post. " + error); } - } }, });