Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.chatgpt.controllers;

import com.chatgpt.entity.database.LessonSuggestion;
import com.chatgpt.entity.requests.CreateLessonSuggestionRequest;
import com.chatgpt.entity.requests.UpdateLessonSuggestionRequest;
import com.chatgpt.services.LessonSuggestionService;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.UUID;

@RestController
public class LessonSuggestionController {

@Autowired
LessonSuggestionService lessonSuggestionService;

@PostMapping(path = "/lesson-suggestion")
public LessonSuggestion createLessonSuggestion(HttpServletRequest request, @RequestBody CreateLessonSuggestionRequest createLessonSuggestionRequest) {
return lessonSuggestionService.createLessonSuggestion((String) request.getAttribute("vkUserId"), createLessonSuggestionRequest);
}

@GetMapping(path = "/lesson-suggestion")
public List<LessonSuggestion> getLessonSuggestions(HttpServletRequest request) {
return lessonSuggestionService.getLessonSuggestions((String) request.getAttribute("vkUserId"));
}

@GetMapping(path = "/lesson-suggestion/all")
public List<LessonSuggestion> getAllLessonSuggestions() {
return lessonSuggestionService.getAllLessonSuggestions();
}

@GetMapping(path = "/lesson-suggestion/status/{status}")
public List<LessonSuggestion> getLessonSuggestionsByStatus(@PathVariable("status") LessonSuggestion.SuggestionStatus status) {
return lessonSuggestionService.getLessonSuggestionsByStatus(status);
}

@DeleteMapping(path = "/lesson-suggestion/{id}")
public void deleteLessonSuggestion(HttpServletRequest request, @PathVariable("id") UUID lessonSuggestionId) {
lessonSuggestionService.deleteLessonSuggestion((String) request.getAttribute("vkUserId"), lessonSuggestionId);
}

@PutMapping(path = "/lesson-suggestion")
public void updateLessonSuggestion(HttpServletRequest request, @RequestBody UpdateLessonSuggestionRequest updateLessonSuggestionRequest) {
lessonSuggestionService.updateLessonSuggestion((String) request.getAttribute("vkUserId"), updateLessonSuggestionRequest);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package com.chatgpt.entity.database;

import com.chatgpt.entity.VkUser;
import jakarta.persistence.*;

import java.time.LocalDateTime;
import java.util.UUID;

@Entity
public class LessonSuggestion {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;

@ManyToOne()
private VkUser vkUser;

private String lessonName;

private String description;

private String category;

@Column(columnDefinition = "TEXT")
private String content;

private LocalDateTime createdAt;

@Enumerated(EnumType.STRING)
private SuggestionStatus status;

public enum SuggestionStatus {
PENDING,
APPROVED,
REJECTED
}

public LessonSuggestion() {
this.createdAt = LocalDateTime.now();
this.status = SuggestionStatus.PENDING;
}

public UUID getId() {
return id;
}

public void setId(UUID id) {
this.id = id;
}

public VkUser getVkUser() {
return vkUser;
}

public void setVkUser(VkUser vkUser) {
this.vkUser = vkUser;
}

public String getLessonName() {
return lessonName;
}

public void setLessonName(String lessonName) {
this.lessonName = lessonName;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getCategory() {
return category;
}

public void setCategory(String category) {
this.category = category;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public LocalDateTime getCreatedAt() {
return createdAt;
}

public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}

public SuggestionStatus getStatus() {
return status;
}

public void setStatus(SuggestionStatus status) {
this.status = status;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.chatgpt.entity.requests;

public class CreateLessonSuggestionRequest {
private String lessonName;
private String description;
private String category;
private String content;

public String getLessonName() {
return lessonName;
}

public void setLessonName(String lessonName) {
this.lessonName = lessonName;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getCategory() {
return category;
}

public void setCategory(String category) {
this.category = category;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.chatgpt.entity.requests;

import com.chatgpt.entity.database.LessonSuggestion;

import java.util.UUID;

public class UpdateLessonSuggestionRequest {
private UUID id;
private String lessonName;
private String description;
private String category;
private String content;
private LessonSuggestion.SuggestionStatus status;

public UUID getId() {
return id;
}

public void setId(UUID id) {
this.id = id;
}

public String getLessonName() {
return lessonName;
}

public void setLessonName(String lessonName) {
this.lessonName = lessonName;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getCategory() {
return category;
}

public void setCategory(String category) {
this.category = category;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public LessonSuggestion.SuggestionStatus getStatus() {
return status;
}

public void setStatus(LessonSuggestion.SuggestionStatus status) {
this.status = status;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.chatgpt.repositories;

import com.chatgpt.entity.database.LessonSuggestion;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository;

import java.util.List;
import java.util.UUID;

public interface LessonSuggestionRepository extends CrudRepository<LessonSuggestion, UUID> {
List<LessonSuggestion> findAllByVkUserId(UUID vkId);
Page<LessonSuggestion> findAllByVkUserId(UUID vkId, PageRequest pageable);
List<LessonSuggestion> findAllByStatus(LessonSuggestion.SuggestionStatus status);
void deleteAllByVkUserId(UUID vkId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package com.chatgpt.services;

import com.chatgpt.entity.VkUser;
import com.chatgpt.entity.database.LessonSuggestion;
import com.chatgpt.entity.requests.CreateLessonSuggestionRequest;
import com.chatgpt.entity.requests.UpdateLessonSuggestionRequest;
import com.chatgpt.repositories.LessonSuggestionRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.server.ResponseStatusException;

import java.util.List;
import java.util.UUID;

@Service
public class LessonSuggestionService {
@Autowired
UserService userService;

@Autowired
LessonSuggestionRepository lessonSuggestionRepository;

public LessonSuggestion createLessonSuggestion(String vkUserId, CreateLessonSuggestionRequest createLessonSuggestionRequest) {
var user = userService.getOrCreateVkUser(vkUserId);
return saveLessonSuggestion(
user,
createLessonSuggestionRequest.getLessonName(),
createLessonSuggestionRequest.getDescription(),
createLessonSuggestionRequest.getCategory(),
createLessonSuggestionRequest.getContent()
);
}

public List<LessonSuggestion> getLessonSuggestions(String vkUserId) {
var user = userService.getOrCreateVkUser(vkUserId);
return lessonSuggestionRepository.findAllByVkUserId(user.getId());
}

public List<LessonSuggestion> getAllLessonSuggestions() {
return (List<LessonSuggestion>) lessonSuggestionRepository.findAll();
}

public List<LessonSuggestion> getLessonSuggestionsByStatus(LessonSuggestion.SuggestionStatus status) {
return lessonSuggestionRepository.findAllByStatus(status);
}

public void deleteLessonSuggestion(String vkUserId, UUID lessonSuggestionId) {
var user = userService.getOrCreateVkUser(vkUserId);
var foundLessonSuggestion = lessonSuggestionRepository.findById(lessonSuggestionId);

foundLessonSuggestion.ifPresent(lessonSuggestion -> checkAccess(user, lessonSuggestion));

lessonSuggestionRepository.deleteById(lessonSuggestionId);
}

public void updateLessonSuggestion(String vkUserId, UpdateLessonSuggestionRequest updateLessonSuggestionRequest) {
var user = userService.getOrCreateVkUser(vkUserId);
var foundLessonSuggestion = lessonSuggestionRepository.findById(updateLessonSuggestionRequest.getId());

foundLessonSuggestion.ifPresent(lessonSuggestion -> {
checkAccess(user, lessonSuggestion);

lessonSuggestion.setLessonName(updateLessonSuggestionRequest.getLessonName());
lessonSuggestion.setDescription(updateLessonSuggestionRequest.getDescription());
lessonSuggestion.setCategory(updateLessonSuggestionRequest.getCategory());
lessonSuggestion.setContent(updateLessonSuggestionRequest.getContent());

if (updateLessonSuggestionRequest.getStatus() != null) {
lessonSuggestion.setStatus(updateLessonSuggestionRequest.getStatus());
}

lessonSuggestionRepository.save(lessonSuggestion);
});
}

private void checkAccess(VkUser user, LessonSuggestion lessonSuggestion) {
if (!user.getId().equals(lessonSuggestion.getVkUser().getId())) {
throw new ResponseStatusException(HttpStatus.FORBIDDEN);
}
}

private LessonSuggestion saveLessonSuggestion(VkUser user, String lessonName, String description, String category, String content) {
var lessonSuggestion = new LessonSuggestion();

lessonSuggestion.setVkUser(user);
lessonSuggestion.setLessonName(lessonName);
lessonSuggestion.setDescription(description);
lessonSuggestion.setCategory(category);
lessonSuggestion.setContent(content);

lessonSuggestionRepository.save(lessonSuggestion);

return lessonSuggestion;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CREATE TABLE lesson_suggestion
(
id UUID NOT NULL,
vk_user_id UUID NOT NULL,
lesson_name VARCHAR(255),
description VARCHAR(1000),
category VARCHAR(255),
content TEXT,
created_at TIMESTAMP,
status VARCHAR(20) DEFAULT 'PENDING',
PRIMARY KEY (id)
);
Loading