From 908660c67f86d1119224b234370f2fd119476224 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= <xpokorn8@fi.muni.cz>
Date: Tue, 21 Mar 2023 23:11:33 +0100
Subject: [PATCH] Lecture Controller CRUD

---
 .../model/dto/lecture/LectureCreateDto.java   | 20 ++++++
 .../fuseri/model/dto/lecture/LectureDto.java  | 25 +++++++
 .../modulelanguageschool/lecture/Lecture.java | 49 +++++++++++++
 .../lecture/LectureController.java            | 70 +++++++++++++++++++
 4 files changed, 164 insertions(+)
 create mode 100644 application/model/src/main/java/org/fuseri/model/dto/lecture/LectureCreateDto.java
 create mode 100644 application/model/src/main/java/org/fuseri/model/dto/lecture/LectureDto.java
 create mode 100644 application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/Lecture.java
 create mode 100644 application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/LectureController.java

diff --git a/application/model/src/main/java/org/fuseri/model/dto/lecture/LectureCreateDto.java b/application/model/src/main/java/org/fuseri/model/dto/lecture/LectureCreateDto.java
new file mode 100644
index 00000000..36b7bf9b
--- /dev/null
+++ b/application/model/src/main/java/org/fuseri/model/dto/lecture/LectureCreateDto.java
@@ -0,0 +1,20 @@
+package org.fuseri.model.dto.lecture;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.fuseri.model.dto.common.DomainObjectDto;
+import org.fuseri.model.dto.course.CourseDto;
+
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+public class LectureCreateDto extends DomainObjectDto {
+
+    private LocalDateTime from;
+    private LocalDateTime to;
+
+    private Integer capacity;
+
+    private CourseDto course;
+}
diff --git a/application/model/src/main/java/org/fuseri/model/dto/lecture/LectureDto.java b/application/model/src/main/java/org/fuseri/model/dto/lecture/LectureDto.java
new file mode 100644
index 00000000..4ebf4eb3
--- /dev/null
+++ b/application/model/src/main/java/org/fuseri/model/dto/lecture/LectureDto.java
@@ -0,0 +1,25 @@
+package org.fuseri.model.dto.lecture;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.fuseri.model.dto.common.DomainObjectDto;
+import org.fuseri.model.dto.user.UserDto;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Getter
+@Setter
+public class LectureDto extends DomainObjectDto {
+
+    private LocalDateTime from;
+    private LocalDateTime to;
+
+    private Integer capacity;
+
+    private UserDto lecturer;
+
+    private String courseId;
+
+    private List<UserDto> users;
+}
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/Lecture.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/Lecture.java
new file mode 100644
index 00000000..cafca6ec
--- /dev/null
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/Lecture.java
@@ -0,0 +1,49 @@
+package org.fuseri.modulelanguageschool.lecture;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import lombok.*;
+import org.fuseri.modulelanguageschool.common.DomainObject;
+import org.fuseri.modulelanguageschool.course.Course;
+import org.fuseri.modulelanguageschool.user.User;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * This class represents a lecture entity in the domain model.
+ */
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+public class Lecture extends DomainObject {
+
+    /**
+     * The start time of the lecture.
+     */
+    @Column(name = "lecture_from")
+    private LocalDateTime from;
+
+    /**
+     * The end time of the lecture.
+     */
+    @Column(name = "lecture_to")
+    private LocalDateTime to;
+
+    /**
+     * The course that the lecture is associated with.
+     */
+    @ManyToOne
+    private Course course;
+
+    /**
+     * The list of users attending the lecture.
+     */
+    @ManyToMany
+    private List<User> user;
+}
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/LectureController.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/LectureController.java
new file mode 100644
index 00000000..54c0f1d3
--- /dev/null
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/lecture/LectureController.java
@@ -0,0 +1,70 @@
+package org.fuseri.modulelanguageschool.lecture;
+
+import org.fuseri.model.dto.common.Result;
+import org.fuseri.model.dto.lecture.LectureCreateDto;
+import org.fuseri.model.dto.lecture.LectureDto;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * This class represents a RESTful controller for Lecture resources.
+ * It handles incoming HTTP requests related to lectures, and delegates them to the appropriate service method.
+ */
+@RestController
+@RequestMapping("/lectures")
+public class LectureController {
+
+    /**
+     * Finds a lecture resource by its ID.
+     *
+     * @param id the ID of the lecture to find
+     * @return the LectureDto representing the found lecture
+     */
+    @GetMapping("/{id}")
+    public LectureDto find(@PathVariable String id) {
+        return new LectureDto();
+    }
+
+    /**
+     * Creates a new lecture resource by delegating to the LectureService's create method.
+     *
+     * @param lecture the LectureDto representing the lecture to be created
+     * @return the LectureDto representing the newly created lecture
+     */
+    @PostMapping("/create")
+    public LectureDto create(@RequestBody LectureCreateDto lecture) {
+        return new LectureDto();
+    }
+
+    /**
+     * Updates an existing lecture resource by delegating to the LectureService's update method.
+     *
+     * @param lecture the CourseCreateDto representing the updated lecture
+     * @return the LectureDto representing the updated lecture
+     */
+    @PutMapping("/update/{id}")
+    public LectureDto update(@PathVariable String id, @RequestBody LectureCreateDto lecture) {
+        return new LectureDto();
+    }
+
+    /**
+     * Deletes a lecture resource by its ID.
+     *
+     * @param id the ID of the lecture to delete
+     * @return a boolean indicating whether the deletion was successful or not
+     */
+    @DeleteMapping("/delete/{id}")
+    public boolean delete(@PathVariable String id) {
+        return true;
+    }
+
+    /**
+     * Retrieves a paginated list of lecture resources by delegating to the LectureService's findAll method.
+     *
+     * @param page the page number to retrieve
+     * @return the Result object containing a list of LectureDtos and pagination information
+     */
+    @GetMapping("/findAll")
+    public Result<LectureDto> findAll(@RequestParam int page) {
+        return new Result<>();
+    }
+}
\ No newline at end of file
-- 
GitLab