From 31c0efeed59e5a0aa073950bd6bf0f8513ca6d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aaron=20Ebn=C3=B6ther?= Date: Sun, 29 Oct 2023 12:51:45 +0100 Subject: [PATCH] Add mock data --- api-docs.json | 2 +- .../relive/controllers/CommentController.java | 7 ++-- .../relive/controllers/EventController.java | 6 +++ .../relive/dtos/CommentControllerDto.java | 12 ++++++ .../relive/dtos/EventControllerDtos.java | 25 ++++++++++++ .../ch/relievers/relive/entities/Event.java | 2 + .../relievers/relive/entities/MediaItem.java | 3 ++ .../repositories/MediaItemRepository.java | 5 +++ .../relive/services/CommentService.java | 13 ++++--- .../relive/services/EventService.java | 16 ++++++++ .../relive/services/MediaItemService.java | 12 +++--- .../src/main/resources/application.properties | 2 + backend/src/main/resources/data.sql | 38 +++++++++++++++++++ 13 files changed, 129 insertions(+), 14 deletions(-) create mode 100644 backend/src/main/resources/data.sql diff --git a/api-docs.json b/api-docs.json index 409a396..c75a9d5 100644 --- a/api-docs.json +++ b/api-docs.json @@ -1 +1 @@ -{"openapi":"3.0.1","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://localhost:8080","description":"Generated server url"}],"paths":{"/users/":{"put":{"tags":["user-controller"],"operationId":"registerUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterUserRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RegisterUserResponse"}}}}}},"post":{"tags":["user-controller"],"operationId":"requestAutoUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestAutoUserRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RequestAutoUserResponse"}}}}}}},"/events/{id}":{"put":{"tags":["event-controller"],"operationId":"updateEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GenericEventResponse"}}}}}}},"/media-items/":{"post":{"tags":["media-item-controller"],"operationId":"uploadNewMediaItem","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/events/{id}/participations":{"post":{"tags":["event-controller"],"operationId":"participateEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}}}},"/events/{event_id}/medias/{media_id}/comments/":{"get":{"tags":["comment-controller"],"operationId":"receiveCommentsForMediaItem","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}}}}}},"post":{"tags":["comment-controller"],"operationId":"createNewComment","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Comment"}}}}}}},"/events/":{"get":{"tags":["event-controller"],"operationId":"getEvents","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GenericEventResponse"}}}}}}},"post":{"tags":["event-controller"],"operationId":"createEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GenericEventResponse"}}}}}}},"/events/{id}/medias":{"get":{"tags":["event-controller"],"operationId":"getAllMedias","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReLivePostItem"}}}}}}}}},"components":{"schemas":{"RegisterUserRequest":{"type":"object","properties":{"email":{"type":"string"},"password":{"maxLength":2147483647,"minLength":10,"type":"string"}}},"RegisterUserResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"email":{"type":"string"},"registrationState":{"type":"string"}}},"CreateEventRequest":{"type":"object","properties":{"displayName":{"type":"string"},"description":{"type":"string"},"startDateTime":{"type":"string","format":"date-time"},"duration":{"type":"integer","format":"int32"}}},"GenericEventResponse":{"type":"object","properties":{"displayName":{"type":"string"},"description":{"type":"string"},"startDateTime":{"type":"string","format":"date-time"},"duration":{"type":"integer","format":"int32"},"state":{"type":"string","enum":["PLANNED","ONGOING","PAST"]}}},"RequestAutoUserRequest":{"type":"object","properties":{"name":{"maxLength":100,"minLength":2,"type":"string"}}},"RequestAutoUserResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"registrationState":{"type":"string"}}},"CreateRequest":{"type":"object","properties":{"dateTime":{"type":"string","format":"date-time"},"imgDataBase64":{"type":"string"},"eventId":{"type":"integer","format":"int32"},"creatorId":{"type":"integer","format":"int32"}}},"CreateCommentRequest":{"type":"object","properties":{"content":{"type":"string"},"mediaId":{"type":"integer","format":"int32"},"userId":{"type":"integer","format":"int32"}}},"Comment":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"mediaItem":{"$ref":"#/components/schemas/MediaItem"},"owner":{"$ref":"#/components/schemas/User"},"content":{"type":"string"},"dateTime":{"type":"string","format":"date-time"}}},"Event":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"owner":{"$ref":"#/components/schemas/User"},"medias":{"type":"array","items":{"$ref":"#/components/schemas/MediaItem"}},"displayName":{"type":"string"},"description":{"type":"string"},"startDateTime":{"type":"string","format":"date-time"},"duration":{"type":"integer","format":"int32"}}},"MediaItem":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"time":{"type":"string","format":"date-time"},"hash":{"type":"string"},"event":{"$ref":"#/components/schemas/Event"},"creator":{"$ref":"#/components/schemas/User"},"comments":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}}},"User":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"email":{"type":"string"},"pwHash":{"type":"string"},"name":{"type":"string"},"registrationState":{"type":"string","enum":["AUTO_CREATED","REGISTERED"]}}},"ReLivePostItem":{"type":"object","properties":{"mediaItemId":{"type":"integer","format":"int32"},"imageHash":{"type":"string"},"creatorName":{"type":"string"},"comments":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}}}}}} \ No newline at end of file +{"openapi":"3.0.1","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://localhost:8080","description":"Generated server url"}],"paths":{"/users/":{"put":{"tags":["user-controller"],"operationId":"registerUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterUserRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RegisterUserResponse"}}}}}},"post":{"tags":["user-controller"],"operationId":"requestAutoUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestAutoUserRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RequestAutoUserResponse"}}}}}}},"/events/{id}":{"put":{"tags":["event-controller"],"operationId":"updateEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Event"}}}}}}},"/media-items/":{"post":{"tags":["media-item-controller"],"operationId":"uploadNewMediaItem","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/events/{id}/participations":{"post":{"tags":["event-controller"],"operationId":"participateEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Participation"}}}}}}},"/events/{event_id}/medias/{media_id}/comments/":{"get":{"tags":["comment-controller"],"operationId":"receiveCommentsForMediaItem","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}}}}}},"post":{"tags":["comment-controller"],"operationId":"createNewComment","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Comment"}}}}}}},"/events/":{"get":{"tags":["event-controller"],"operationId":"getEvents","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}}}},"post":{"tags":["event-controller"],"operationId":"createEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Event"}}}}}}},"/events/{id}/medias":{"get":{"tags":["event-controller"],"operationId":"getAllMedias","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReLivePostItem"}}}}}}}}},"components":{"schemas":{"RegisterUserRequest":{"type":"object","properties":{"email":{"type":"string"},"password":{"maxLength":2147483647,"minLength":10,"type":"string"}}},"RegisterUserResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"email":{"type":"string"},"registrationState":{"type":"string"}}},"CreateEventRequest":{"type":"object","properties":{"displayName":{"type":"string"},"description":{"type":"string"},"startDateTime":{"type":"string","format":"date-time"},"duration":{"type":"integer","format":"int32"}}},"Comment":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"mediaItem":{"$ref":"#/components/schemas/MediaItem"},"owner":{"$ref":"#/components/schemas/User"},"content":{"type":"string"},"dateTime":{"type":"string","format":"date-time"}}},"Event":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"owner":{"$ref":"#/components/schemas/User"},"medias":{"type":"array","items":{"$ref":"#/components/schemas/MediaItem"}},"displayName":{"type":"string"},"description":{"type":"string"},"startDateTime":{"type":"string","format":"date-time"},"duration":{"type":"integer","format":"int32"},"state":{"type":"string","enum":["PLANNED","ONGOING","PAST"]}}},"MediaItem":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"time":{"type":"string","format":"date-time"},"hash":{"type":"string"},"event":{"$ref":"#/components/schemas/Event"},"creator":{"$ref":"#/components/schemas/User"},"comments":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}}},"User":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"email":{"type":"string"},"pwHash":{"type":"string"},"name":{"type":"string"},"registrationState":{"type":"string","enum":["AUTO_CREATED","REGISTERED"]}}},"RequestAutoUserRequest":{"type":"object","properties":{"name":{"maxLength":100,"minLength":2,"type":"string"}}},"RequestAutoUserResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"registrationState":{"type":"string"}}},"CreateRequest":{"type":"object","properties":{"dateTime":{"type":"string","format":"date-time"},"imgDataBase64":{"type":"string"},"eventId":{"type":"integer","format":"int32"},"creatorId":{"type":"integer","format":"int32"}}},"Participation":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"user":{"$ref":"#/components/schemas/User"},"event":{"$ref":"#/components/schemas/Event"}}},"CreateCommentRequest":{"type":"object","properties":{"content":{"type":"string"},"mediaId":{"type":"integer","format":"int32"},"userId":{"type":"integer","format":"int32"}}},"ReLivePostItem":{"type":"object","properties":{"mediaItemId":{"type":"integer","format":"int32"},"imageHash":{"type":"string"},"creatorName":{"type":"string"},"comments":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}}}}}} \ No newline at end of file diff --git a/backend/src/main/java/ch/relievers/relive/controllers/CommentController.java b/backend/src/main/java/ch/relievers/relive/controllers/CommentController.java index 4c94d26..076af1b 100644 --- a/backend/src/main/java/ch/relievers/relive/controllers/CommentController.java +++ b/backend/src/main/java/ch/relievers/relive/controllers/CommentController.java @@ -14,7 +14,7 @@ @RequiredArgsConstructor public class CommentController { - private CommentService commentService; + private final CommentService commentService; @GetMapping("/") public List receiveCommentsForMediaItem( @@ -23,11 +23,12 @@ public List receiveCommentsForMediaItem( } @PostMapping("/") - public Comment createNewComment( + public CommentControllerDto.CreateCommentResponse createNewComment( @RequestBody CommentControllerDto.CreateCommentRequest commentRequest, - @PathVariable String media_id, + @PathVariable int media_id, Principal principal) { commentRequest.setUserId(Integer.valueOf(principal.getName())); + commentRequest.setMediaId(media_id); return commentService.createComment(commentRequest); } } diff --git a/backend/src/main/java/ch/relievers/relive/controllers/EventController.java b/backend/src/main/java/ch/relievers/relive/controllers/EventController.java index d0c159e..999f9bf 100644 --- a/backend/src/main/java/ch/relievers/relive/controllers/EventController.java +++ b/backend/src/main/java/ch/relievers/relive/controllers/EventController.java @@ -1,6 +1,7 @@ package ch.relievers.relive.controllers; import ch.relievers.relive.dtos.EventControllerDtos; +import ch.relievers.relive.dtos.EventControllerDtos.ReLivePostItem; import ch.relievers.relive.entities.Event; import ch.relievers.relive.entities.Participation; import ch.relievers.relive.services.EventService; @@ -42,4 +43,9 @@ public Event updateEvent( public Participation participateEvent(@PathVariable Integer id, Principal principal) { return eventService.participateEvent(id, Integer.valueOf(principal.getName())); } + + @GetMapping("/{id}/medias") + public List getAllMedias(@PathVariable int id){ + return eventService.getAllPosts(id); + } } diff --git a/backend/src/main/java/ch/relievers/relive/dtos/CommentControllerDto.java b/backend/src/main/java/ch/relievers/relive/dtos/CommentControllerDto.java index ea0870c..49293e7 100644 --- a/backend/src/main/java/ch/relievers/relive/dtos/CommentControllerDto.java +++ b/backend/src/main/java/ch/relievers/relive/dtos/CommentControllerDto.java @@ -4,6 +4,8 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + public class CommentControllerDto { @Data @@ -15,4 +17,14 @@ public static class CreateCommentRequest { private Integer userId; } + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class CreateCommentResponse { + private int commentId; + private String content; + private String authorName; + private LocalDateTime dateTime; + } + } diff --git a/backend/src/main/java/ch/relievers/relive/dtos/EventControllerDtos.java b/backend/src/main/java/ch/relievers/relive/dtos/EventControllerDtos.java index b890cd1..6f5cae4 100644 --- a/backend/src/main/java/ch/relievers/relive/dtos/EventControllerDtos.java +++ b/backend/src/main/java/ch/relievers/relive/dtos/EventControllerDtos.java @@ -5,6 +5,7 @@ import lombok.NoArgsConstructor; import java.time.LocalDateTime; +import java.util.List; public class EventControllerDtos { @@ -17,4 +18,28 @@ public static class CreateEventRequest { private LocalDateTime startDateTime; private Integer duration; } + + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class ReLivePostItem { + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Comment { + private int commentId; + private int authorId; + private String authorName; + private LocalDateTime dateTime; + private String content; + } + + private int mediaItemId; + private LocalDateTime dateTime; + private String imageHash; + private String creatorName; + private List comments; + } } diff --git a/backend/src/main/java/ch/relievers/relive/entities/Event.java b/backend/src/main/java/ch/relievers/relive/entities/Event.java index 3016d2a..b932586 100644 --- a/backend/src/main/java/ch/relievers/relive/entities/Event.java +++ b/backend/src/main/java/ch/relievers/relive/entities/Event.java @@ -1,5 +1,6 @@ package ch.relievers.relive.entities; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; @@ -32,6 +33,7 @@ public Event(String displayName, String description, LocalDateTime startDateTime private User owner; @OneToMany(mappedBy = "event") + @JsonIgnore private List medias; private String displayName; diff --git a/backend/src/main/java/ch/relievers/relive/entities/MediaItem.java b/backend/src/main/java/ch/relievers/relive/entities/MediaItem.java index 94b93cd..9f6811f 100644 --- a/backend/src/main/java/ch/relievers/relive/entities/MediaItem.java +++ b/backend/src/main/java/ch/relievers/relive/entities/MediaItem.java @@ -6,6 +6,7 @@ import lombok.Setter; import java.time.LocalDateTime; +import java.util.List; @Entity(name = "`media`") @NoArgsConstructor @@ -36,5 +37,7 @@ public MediaItem(LocalDateTime time, String hash, Event event, User creator) { @JoinColumn(name = "creator_id") private User creator; + @OneToMany(mappedBy = "mediaItem") + private List comments; } diff --git a/backend/src/main/java/ch/relievers/relive/repositories/MediaItemRepository.java b/backend/src/main/java/ch/relievers/relive/repositories/MediaItemRepository.java index 74de956..9cbab1a 100644 --- a/backend/src/main/java/ch/relievers/relive/repositories/MediaItemRepository.java +++ b/backend/src/main/java/ch/relievers/relive/repositories/MediaItemRepository.java @@ -1,7 +1,12 @@ package ch.relievers.relive.repositories; +import ch.relievers.relive.entities.Event; import ch.relievers.relive.entities.MediaItem; import org.springframework.data.repository.CrudRepository; +import java.util.List; + public interface MediaItemRepository extends CrudRepository { + + List getAllByEvent(Event event); } diff --git a/backend/src/main/java/ch/relievers/relive/services/CommentService.java b/backend/src/main/java/ch/relievers/relive/services/CommentService.java index a07d730..3ebadf1 100644 --- a/backend/src/main/java/ch/relievers/relive/services/CommentService.java +++ b/backend/src/main/java/ch/relievers/relive/services/CommentService.java @@ -8,20 +8,22 @@ import ch.relievers.relive.repositories.MediaItemRepository; import ch.relievers.relive.repositories.UserRepository; import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.List; @Service +@RequiredArgsConstructor public class CommentService { - private UserRepository userRepository; - private MediaItemRepository mediaItemRepository; - private CommentRepository commentRepository; + private final UserRepository userRepository; + private final MediaItemRepository mediaItemRepository; + private final CommentRepository commentRepository; @Transactional - public Comment createComment(CommentControllerDto.CreateCommentRequest commentRequest) { + public CommentControllerDto.CreateCommentResponse createComment(CommentControllerDto.CreateCommentRequest commentRequest) { User owner = userRepository.findById(commentRequest.getUserId()).orElseThrow(); MediaItem mediaItem = mediaItemRepository .findById(commentRequest.getMediaId()).orElseThrow(); @@ -31,7 +33,8 @@ public Comment createComment(CommentControllerDto.CreateCommentRequest commentRe commentRequest.getContent(), LocalDateTime.now() ); - return commentRepository.save(comment); + var newComment = commentRepository.save(comment); + return new CommentControllerDto.CreateCommentResponse(newComment.getId(), newComment.getContent(), newComment.getOwner().getName(), newComment.getDateTime()); } public List getCommentsForMediaItem(Integer mediaId) { diff --git a/backend/src/main/java/ch/relievers/relive/services/EventService.java b/backend/src/main/java/ch/relievers/relive/services/EventService.java index 3151f10..dbb87d2 100644 --- a/backend/src/main/java/ch/relievers/relive/services/EventService.java +++ b/backend/src/main/java/ch/relievers/relive/services/EventService.java @@ -1,10 +1,13 @@ package ch.relievers.relive.services; import ch.relievers.relive.dtos.EventControllerDtos; +import ch.relievers.relive.dtos.EventControllerDtos.ReLivePostItem; import ch.relievers.relive.entities.Event; +import ch.relievers.relive.entities.MediaItem; import ch.relievers.relive.entities.Participation; import ch.relievers.relive.entities.User; import ch.relievers.relive.repositories.EventRepository; +import ch.relievers.relive.repositories.MediaItemRepository; import ch.relievers.relive.repositories.ParticipationRepository; import ch.relievers.relive.repositories.UserRepository; import jakarta.persistence.EntityNotFoundException; @@ -24,6 +27,7 @@ public class EventService { private final EventRepository eventRepository; private final UserRepository userRepository; private final ParticipationRepository participationRepository; + private final MediaItemRepository mediaItemRepository; @Transactional public Event createEvent(EventControllerDtos.CreateEventRequest eventRequest, Integer ownerId) { @@ -79,4 +83,16 @@ public Event.EventState calcEventState(Event event) { if(now.isBefore(event.getStartDateTime().plusMinutes(event.getDuration()))) return Event.EventState.ONGOING; return Event.EventState.PAST; } + + public List getAllPosts(int eventId) { + Event event = eventRepository.findById(eventId).orElseThrow(); + List mediaItems = mediaItemRepository.getAllByEvent(event); + + return mediaItems.stream().map(mediaItem -> { + var comments = mediaItem.getComments().stream() + .map(comment -> new ReLivePostItem.Comment(comment.getId(), comment.getOwner().getId(), comment.getOwner().getName(), comment.getDateTime(), comment.getContent())) + .toList(); + return new ReLivePostItem(mediaItem.getId(), mediaItem.getTime(), mediaItem.getHash(), mediaItem.getCreator().getName(), comments); + }).toList(); + } } diff --git a/backend/src/main/java/ch/relievers/relive/services/MediaItemService.java b/backend/src/main/java/ch/relievers/relive/services/MediaItemService.java index 38199e2..8f37efd 100644 --- a/backend/src/main/java/ch/relievers/relive/services/MediaItemService.java +++ b/backend/src/main/java/ch/relievers/relive/services/MediaItemService.java @@ -1,7 +1,9 @@ package ch.relievers.relive.services; import ch.relievers.relive.dtos.MediaItemDtos.CreateRequest; +import ch.relievers.relive.entities.Event; import ch.relievers.relive.entities.MediaItem; +import ch.relievers.relive.entities.User; import ch.relievers.relive.repositories.EventRepository; import ch.relievers.relive.repositories.MediaItemRepository; import ch.relievers.relive.repositories.UserRepository; @@ -35,17 +37,17 @@ public class MediaItemService { public void create(CreateRequest data) throws IOException, NoSuchAlgorithmException { byte[] imgData = Base64.getDecoder().decode(data.getImgDataBase64()); - String imgHashBase64 = Base64.getEncoder().encodeToString(MessageDigest.getInstance("SHA-256").digest(imgData)); + String imgHashBase64 = Base64.getUrlEncoder().encodeToString(MessageDigest.getInstance("SHA-256").digest(imgData)); // TODO: Remove comments as soon as event can be created - // Event event = eventRepository.findById(data.getEventId()).orElseThrow(); - // User user = userRepository.findById(data.getCreatorId()).orElseThrow(); + Event event = eventRepository.findById(data.getEventId()).orElseThrow(); + User user = userRepository.findById(data.getCreatorId()).orElseThrow(); - MediaItem mediaItem = new MediaItem(LocalDateTime.now(), imgHashBase64, null, null); + MediaItem mediaItem = new MediaItem(LocalDateTime.now(), imgHashBase64, event, user); mediaItemRepository.save(mediaItem); // write img to file Files.createDirectories(Paths.get(mediaDir)); - Files.write(Path.of(mediaDir + imgHashBase64 + ".png"), imgData); + Files.write(Path.of(mediaDir + imgHashBase64 + ".jpg"), imgData); } } diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index d4fbb08..3e82374 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -4,6 +4,8 @@ spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=update +spring.jpa.defer-datasource-initialization=true +spring.sql.init.mode=always relive.app.jwtSecret=rvy/HJAAXB5VS4jCnlkoJkpaTj4icg7lWTogFa0Wrqk= relive.app.jwtExpirationMs=#{5 * 365 * 24 * 60 * 60} diff --git a/backend/src/main/resources/data.sql b/backend/src/main/resources/data.sql new file mode 100644 index 0000000..4825818 --- /dev/null +++ b/backend/src/main/resources/data.sql @@ -0,0 +1,38 @@ +INSERT INTO PUBLIC."user" (EMAIL, NAME, PW_HASH, REGISTRATION_STATE) VALUES ('linus@degel2.com', 'Linus', '$2a$10$IVO143LMfNc12ZAxUKx8MuNGRhcjJvr9sCAQYEO.2vfjnJ9zw4rja', 1); +INSERT INTO PUBLIC."user" (EMAIL, NAME, PW_HASH, REGISTRATION_STATE) VALUES ('aaron.ebnoether@gmx.de', 'Aaron', '$2a$10$0IIA4j.ld11oQMcamJptsOy2TfQswNR5/vbCpkxmQX8G7KvT55uYm', 1); +INSERT INTO PUBLIC."user" (EMAIL, NAME, PW_HASH, REGISTRATION_STATE) VALUES ('amar@bfh.ch', 'Amar', '$2a$10$0IIA4j.ld11oQMcamJptsOy2TfQswNR5/vbCpkxmQX8G7KvT55uYm', 1); + + +INSERT INTO PUBLIC."event" (DESCRIPTION, DISPLAY_NAME, DURATION, START_DATE_TIME, STATE, "owner_id") VALUES ('Basel Hack 23', '48 hours of intense innovation? Let''s collaborate, create, and turn ideas into reality. The hackathon is more than a competition – it''s a celebration of innovation, problem-solving, and teamwork. ', 2880, '2023-10-28 09:00:00.000000', 2, 1); +INSERT INTO PUBLIC."event" (DESCRIPTION, DISPLAY_NAME, DURATION, START_DATE_TIME, STATE, "owner_id") VALUES ('Vincis Birthday', 'Let''s Party guys!!!', 480, '2023-05-02 20:00:00.000000', 2, 2); +INSERT INTO PUBLIC."event" (DESCRIPTION, DISPLAY_NAME, DURATION, START_DATE_TIME, STATE, "owner_id") VALUES ('Linus''s Wedding <3 ', 'Let''s get married!', 480, '2023-12-02 17:00:00.000000', 2, 1); + +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (1, 1); +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (1, 2); +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (1, 3); + +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (2, 1); +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (2, 2); + +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (3, 1); +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (3, 2); +INSERT INTO PUBLIC."participation" ("event_id", "user_id") VALUES (3, 3); + +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 09:30:19.184116', 1, 1, 'jU4e1YowzBfnxnQDrYSUy7RlXn88_zrNMnASeXGzmHE='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 11:02:19.184116', 2, 1, 'Gb8kiODD13iF0J5RdAbEsr-6RmjfeuOVQmyIilRVgTI='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 11:33:19.184116', 1, 1, '4zkmtAqebY4Gw8JcSlCuAv8dl6V-8TIQY2IZGgTMlGw='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 12:16:19.184116', 1, 1, 'BcnNajnr-AbYqE1MTasoDIMGxQcu60bY47bHrnxXvZ0='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 12:50:40.184116', 3, 1, '1aTCYxJtxZB6fwt2fCShkeIAZoRf94yXP8QSbWlQpY0='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 14:58:19.184116', 3, 1, '1-p7J-P-M0lIWcNUUvy0eu9XT3AdxaWLisIHWd4XTeU='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 19:41:19.184116', 3, 1, 'FKyEJLz2NPqPY9s3nJYbKqDvVKjLuDFwu9cKL992Qcw='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 19:47:19.184116', 3, 1, 'SX5WZcLRdoxE0+kLQwWL5cFpn70zYzEKvYLWQCbZjXQ='); +INSERT INTO PUBLIC."media" (TIME, CREATOR_ID, EVENT_ID, HASH) VALUES ('2023-10-28 23:38:19.184116', 1, 1, 'Zal5G4EQjbCis4iQsRQhjYI7ZSzyKxiCu6_35aeyKog='); + + +INSERT INTO PUBLIC."comment" (CONTENT, DATE_TIME, "media_item_id", "owner_id") VALUES ('Sooo Tasty!!!', '2023-10-29 11:03:06.023666', 5, 1); +INSERT INTO PUBLIC."comment" (CONTENT, DATE_TIME, "media_item_id", "owner_id") VALUES ('Yummy <3', '2023-10-29 11:03:06.023666', 5, 2); +INSERT INTO PUBLIC."comment" (CONTENT, DATE_TIME, "media_item_id", "owner_id") VALUES ('Cool Picture', '2023-10-29 11:08:02.648643', 1, 3); +INSERT INTO PUBLIC."comment" (CONTENT, DATE_TIME, "media_item_id", "owner_id") VALUES ('👍', '2023-10-29 11:08:02.648643', 1, 2); + + +