comment работает, массив tages в news не работает + тест commenta
This commit is contained in:
parent
01782c75c3
commit
55284eacbc
@ -1,7 +1,9 @@
|
|||||||
package com.example.demo;
|
package com.example.demo;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -9,8 +11,13 @@ import org.springframework.boot.CommandLineRunner;
|
|||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
import com.example.demo.comment.model.CommentEntity;
|
||||||
|
import com.example.demo.comment.service.CommentService;
|
||||||
import com.example.demo.news.model.NewEntity;
|
import com.example.demo.news.model.NewEntity;
|
||||||
import com.example.demo.news.service.NewService;
|
import com.example.demo.news.service.NewService;
|
||||||
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
import com.example.demo.tage.service.TageService;
|
||||||
|
import com.example.demo.users.model.UserEntity;
|
||||||
import com.example.demo.users.service.UserService;
|
import com.example.demo.users.service.UserService;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@ -19,10 +26,14 @@ public class DemoApplication implements CommandLineRunner {
|
|||||||
|
|
||||||
private final NewService newService;
|
private final NewService newService;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
private final CommentService commentService;
|
||||||
|
private final TageService tageService;
|
||||||
|
|
||||||
public DemoApplication(NewService newService, UserService userService) {
|
public DemoApplication(NewService newService, UserService userService, CommentService commentService, TageService tageService) {
|
||||||
this.newService = newService;
|
this.newService = newService;
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
|
this.commentService = commentService;
|
||||||
|
this.tageService = tageService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -31,15 +42,31 @@ public class DemoApplication implements CommandLineRunner {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(String... args) throws Exception {
|
public void run(String... args) throws Exception {
|
||||||
if (args.length > 0 && Objects.equals("--populate", args[0])) {
|
// if (args.length > 0 && Objects.equals("--populate", args[0])) {
|
||||||
log.info("Create default news values");
|
log.info("Create default news values");
|
||||||
newService.create(new NewEntity(null, "День знаний", new Date(2023 - 9 - 01), "праздник",
|
|
||||||
"Университет торжественно отпраздновал День Знаний. На мероприятии присутствовало более 900 абитуриентов."));
|
// tage
|
||||||
newService.create(
|
final var tage1 = tageService.create(new TageEntity(null, "праздник"));
|
||||||
new NewEntity(null, "Чемпионат ICPC", new Date(2023 - 10 - 11), "соревнование программирование",
|
final var tage2 = tageService.create(new TageEntity(null, "сессия"));
|
||||||
|
final var tage3 = tageService.create(new TageEntity(null, "конкурс"));
|
||||||
|
final var tage4 = tageService.create(new TageEntity(null, "программирование"));
|
||||||
|
|
||||||
|
// new
|
||||||
|
final NewEntity new1 = newService.create(new NewEntity(null, "Чемпионат ICPC", new Date(), Arrays.asList(tage1, tage2),
|
||||||
"Студенты выступят на Чемпионате мира по программированию в Северной Евразии."));
|
"Студенты выступят на Чемпионате мира по программированию в Северной Евразии."));
|
||||||
newService.create(new NewEntity(null, "Новый год 2024", new Date(2024 - 1 - 01), "праздник",
|
final NewEntity new2 = newService.create(new NewEntity(null, "Новый год 2024", new Date(2024 - 1 - 01), Arrays.asList(tage3, tage4),
|
||||||
"Администрация ulstu поздравляет студентов и преподавателей с Новым годом и желает крепкого здоровья и успешного Года Дракона!"));
|
"Администрация ulstu поздравляет студентов и преподавателей с Новым годом и желает крепкого здоровья и успешного Года Дракона!"));
|
||||||
}
|
|
||||||
|
|
||||||
|
// user
|
||||||
|
final var user1 = userService.create(new UserEntity(null, "beko", "111", "ddwwdd",
|
||||||
|
"beko@mail.ru", new Date()));
|
||||||
|
final var user2 = userService.create(new UserEntity(null, "rara", "rara", "dererere",
|
||||||
|
"rara@mail.ru", new Date()));
|
||||||
|
|
||||||
|
// comment
|
||||||
|
commentService.create(new CommentEntity(null, new Date(2024-4-04), "очень интересно", new1, user1));
|
||||||
|
commentService.create(new CommentEntity(null, new Date(2024-4-04), "очень интересно", new2, user2));
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
package com.example.demo.comment.api;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.modelmapper.ModelMapper;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.example.demo.core.configuration.Constants;
|
||||||
|
import com.example.demo.news.service.NewService;
|
||||||
|
import com.example.demo.comment.model.CommentEntity;
|
||||||
|
import com.example.demo.comment.service.CommentService;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(Constants.API_URL + "/comment")
|
||||||
|
public class CommentController {
|
||||||
|
private final CommentService commentService;
|
||||||
|
private final NewService newService;
|
||||||
|
private final ModelMapper modelMapper;
|
||||||
|
|
||||||
|
public CommentController(CommentService commentService, NewService newService, ModelMapper modelMapper) {
|
||||||
|
this.commentService = commentService;
|
||||||
|
this.newService = newService;
|
||||||
|
this.modelMapper = modelMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CommentDto toDto(CommentEntity entity) {
|
||||||
|
return modelMapper.map(entity, CommentDto.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CommentEntity toEntity(CommentDto dto) {
|
||||||
|
final var entity = modelMapper.map(dto, CommentEntity.class);
|
||||||
|
entity.setNew(newService.get(dto.getId()));
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public List<CommentDto> getAll(@RequestParam(name = "newId", defaultValue = "0") Long newId) {
|
||||||
|
return commentService.getAll(newId).stream().map(this::toDto).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public CommentDto get(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(commentService.get(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public CommentDto create(@RequestBody @Valid CommentDto dto) {
|
||||||
|
return toDto(commentService.create(toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public CommentDto update(@PathVariable(name = "id") Long id, @RequestBody CommentDto dto) {
|
||||||
|
return toDto(commentService.update(id, toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public CommentDto delete(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(commentService.delete(id));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package com.example.demo.comment.api;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import com.example.demo.news.model.NewEntity;
|
||||||
|
import com.example.demo.users.model.UserEntity;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.PastOrPresent;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
public class CommentDto {
|
||||||
|
private Long id;
|
||||||
|
@NotNull
|
||||||
|
@PastOrPresent
|
||||||
|
private Date date;
|
||||||
|
@NotBlank
|
||||||
|
@Size(min = 1, max = 200)
|
||||||
|
private String text;
|
||||||
|
@NotNull
|
||||||
|
@Min(1)
|
||||||
|
private Long userId;
|
||||||
|
@NotNull
|
||||||
|
@Min(1)
|
||||||
|
private Long newsId;
|
||||||
|
|
||||||
|
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDate() {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDate(Date date) {
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewId(Long newsId) {
|
||||||
|
this.newsId = newsId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getNewId() {
|
||||||
|
return newsId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(Long userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
package com.example.demo.comment.model;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
import com.example.demo.news.model.NewEntity;
|
||||||
|
import com.example.demo.users.model.UserEntity;
|
||||||
|
|
||||||
|
public class CommentEntity extends BaseEntity {
|
||||||
|
private Date date;
|
||||||
|
private String text;
|
||||||
|
private NewEntity news;
|
||||||
|
private UserEntity user;
|
||||||
|
|
||||||
|
public CommentEntity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommentEntity(Long id, Date date, String text, NewEntity news, UserEntity user) {
|
||||||
|
super(id);
|
||||||
|
this.date = date;
|
||||||
|
this.text = text;
|
||||||
|
this.news = news;
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDate() {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDate(Date date) {
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNew(NewEntity news) {
|
||||||
|
this.news = news;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NewEntity getNew() {
|
||||||
|
return news;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(UserEntity user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, date, text, user, news);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
final CommentEntity other = (CommentEntity) obj;
|
||||||
|
return Objects.equals(other.getId(), id)
|
||||||
|
&& Objects.equals(other.getDate(), date)
|
||||||
|
&& Objects.equals(other.getText(), text)
|
||||||
|
&& Objects.equals(other.getNew(), news)
|
||||||
|
&& Objects.equals(other.getUser(), user);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.example.demo.comment.repository;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.example.demo.comment.model.CommentEntity;
|
||||||
|
import com.example.demo.core.repository.MapRepository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class CommentRepository extends MapRepository<CommentEntity> {
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.example.demo.comment.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.example.demo.core.error.NotFoundException;
|
||||||
|
import com.example.demo.comment.model.CommentEntity;
|
||||||
|
import com.example.demo.comment.repository.CommentRepository;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class CommentService {
|
||||||
|
private final CommentRepository repository;
|
||||||
|
|
||||||
|
public CommentService(CommentRepository repository) {
|
||||||
|
this.repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CommentEntity> getAll(Long newId) {
|
||||||
|
if (Objects.equals(newId, 0L)) {
|
||||||
|
return repository.getAll();
|
||||||
|
}
|
||||||
|
return repository.getAll().stream()
|
||||||
|
.filter(item -> item.getNew().getId().equals(newId))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommentEntity get(Long id) {
|
||||||
|
return Optional.ofNullable(repository.get(id))
|
||||||
|
.orElseThrow(() -> new NotFoundException(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommentEntity create(CommentEntity entity) {
|
||||||
|
return repository.create(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommentEntity update(Long id, CommentEntity entity) {
|
||||||
|
final CommentEntity existsEntity = get(id);
|
||||||
|
existsEntity.setDate(entity.getDate());
|
||||||
|
existsEntity.setText(entity.getText());
|
||||||
|
return repository.update(existsEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommentEntity delete(Long id) {
|
||||||
|
final CommentEntity existsEntity = get(id);
|
||||||
|
return repository.delete(existsEntity);
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,11 @@
|
|||||||
package com.example.demo.news.api;
|
package com.example.demo.news.api;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.modelmapper.ModelMapper;
|
import org.modelmapper.ModelMapper;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
@ -12,9 +15,12 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.example.demo.DemoApplication;
|
||||||
import com.example.demo.core.configuration.Constants;
|
import com.example.demo.core.configuration.Constants;
|
||||||
import com.example.demo.news.model.NewEntity;
|
import com.example.demo.news.model.NewEntity;
|
||||||
import com.example.demo.news.service.NewService;
|
import com.example.demo.news.service.NewService;
|
||||||
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
import com.example.demo.tage.service.TageService;
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
@ -22,11 +28,14 @@ import jakarta.validation.Valid;
|
|||||||
@RequestMapping(Constants.API_URL + "/new")
|
@RequestMapping(Constants.API_URL + "/new")
|
||||||
public class NewController {
|
public class NewController {
|
||||||
private final NewService newService;
|
private final NewService newService;
|
||||||
|
private final TageService tageService;
|
||||||
private final ModelMapper modelMapper;
|
private final ModelMapper modelMapper;
|
||||||
|
private final Logger log = LoggerFactory.getLogger(NewController.class);
|
||||||
|
|
||||||
public NewController(NewService newService, ModelMapper modelMapper) {
|
public NewController(NewService newService, TageService tageService, ModelMapper modelMapper) {
|
||||||
this.newService = newService;
|
this.newService = newService;
|
||||||
this.modelMapper = modelMapper;
|
this.modelMapper = modelMapper;
|
||||||
|
this.tageService = tageService;
|
||||||
}
|
}
|
||||||
|
|
||||||
private NewDto toDto(NewEntity entity) {
|
private NewDto toDto(NewEntity entity) {
|
||||||
@ -34,7 +43,15 @@ public class NewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private NewEntity toEntity(NewDto dto) {
|
private NewEntity toEntity(NewDto dto) {
|
||||||
return modelMapper.map(dto, NewEntity.class);
|
final var entity = modelMapper.map(dto, NewEntity.class);
|
||||||
|
List<Long> tagesId = dto.getTagesId();
|
||||||
|
List<TageEntity> tages = Arrays.asList();
|
||||||
|
for (var tageId : tagesId)
|
||||||
|
{
|
||||||
|
tages.add(tageService.get(tageId));
|
||||||
|
}
|
||||||
|
entity.setTage(tages);
|
||||||
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
|
@ -6,6 +6,7 @@ import java.util.List;
|
|||||||
import com.example.demo.tage.model.TageEntity;
|
import com.example.demo.tage.model.TageEntity;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import jakarta.validation.constraints.PastOrPresent;
|
import jakarta.validation.constraints.PastOrPresent;
|
||||||
@ -19,7 +20,7 @@ public class NewDto {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@PastOrPresent
|
@PastOrPresent
|
||||||
private Date date;
|
private Date date;
|
||||||
private List<TageEntity> tages;
|
private List<Long> tagesId;
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(min = 1, max = 30)
|
@Size(min = 1, max = 30)
|
||||||
private String text;
|
private String text;
|
||||||
@ -49,12 +50,12 @@ public class NewDto {
|
|||||||
this.date = date;
|
this.date = date;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TageEntity> getTage() {
|
public List<Long> getTagesId() {
|
||||||
return tages;
|
return tagesId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTage(List<TageEntity> tages) {
|
public void setTagesId(List<Long> tagesId) {
|
||||||
this.tages = tages;
|
this.tagesId = tagesId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getText() {
|
public String getText() {
|
||||||
|
@ -2,9 +2,7 @@ package com.example.demo.news.model;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import com.example.demo.core.model.BaseEntity;
|
import com.example.demo.core.model.BaseEntity;
|
||||||
import com.example.demo.tage.model.TageEntity;
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
@ -0,0 +1,64 @@
|
|||||||
|
package com.example.demo.tage.api;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.modelmapper.ModelMapper;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.example.demo.core.configuration.Constants;
|
||||||
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
import com.example.demo.tage.service.TageService;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(Constants.API_URL + "/tage")
|
||||||
|
public class TageController {
|
||||||
|
private final TageService tageService;
|
||||||
|
private final ModelMapper modelMapper;
|
||||||
|
|
||||||
|
public TageController(TageService tageService, ModelMapper modelMapper) {
|
||||||
|
this.tageService = tageService;
|
||||||
|
this.modelMapper = modelMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TageDto toDto(TageEntity entity) {
|
||||||
|
return modelMapper.map(entity, TageDto.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TageEntity toEntity(TageDto dto) {
|
||||||
|
return modelMapper.map(dto, TageEntity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public List<TageDto> getAll() {
|
||||||
|
return tageService.getAll().stream().map(this::toDto).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public TageDto get(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(tageService.get(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public TageDto create(@RequestBody @Valid TageDto dto) {
|
||||||
|
return toDto(tageService.create(toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public TageDto update(@PathVariable(name = "id") Long id, @RequestBody TageDto dto) {
|
||||||
|
return toDto(tageService.update(id, toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public TageDto delete(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(tageService.delete(id));
|
||||||
|
}
|
||||||
|
}
|
30
lab2/src/main/java/com/example/demo/tage/api/TageDto.java
Normal file
30
lab2/src/main/java/com/example/demo/tage/api/TageDto.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package com.example.demo.tage.api;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
public class TageDto {
|
||||||
|
private Long id;
|
||||||
|
@NotBlank
|
||||||
|
@Size(min = 1, max = 30)
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.demo.tage.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
import com.example.demo.news.model.NewEntity;
|
||||||
|
|
||||||
|
public class TageEntity extends BaseEntity{
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
public TageEntity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TageEntity(Long id, String text) {
|
||||||
|
super(id);
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
final NewEntity other = (NewEntity) obj;
|
||||||
|
return Objects.equals(other.getId(), id)
|
||||||
|
&& Objects.equals(other.getText(), text);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.example.demo.tage.repository;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.example.demo.core.repository.MapRepository;
|
||||||
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class TageRepository extends MapRepository<TageEntity> {
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.demo.tage.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.example.demo.core.error.NotFoundException;
|
||||||
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
import com.example.demo.tage.repository.TageRepository;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TageService {
|
||||||
|
private final TageRepository repository;
|
||||||
|
|
||||||
|
public TageService(TageRepository repository) {
|
||||||
|
this.repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TageEntity> getAll() {
|
||||||
|
return repository.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TageEntity get(Long id) {
|
||||||
|
return Optional.ofNullable(repository.get(id))
|
||||||
|
.orElseThrow(() -> new NotFoundException(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public TageEntity create(TageEntity entity) {
|
||||||
|
return repository.create(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TageEntity update(Long id, TageEntity entity) {
|
||||||
|
final TageEntity existsEntity = get(id);
|
||||||
|
existsEntity.setText(entity.getText());
|
||||||
|
return repository.update(existsEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TageEntity delete(Long id) {
|
||||||
|
final TageEntity existsEntity = get(id);
|
||||||
|
return repository.delete(existsEntity);
|
||||||
|
}
|
||||||
|
}
|
51
lab2/src/test/java/com/example/demo/CommentServiceTest.java
Normal file
51
lab2/src/test/java/com/example/demo/CommentServiceTest.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package com.example.demo;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestMethodOrder;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
import com.example.demo.comment.model.CommentEntity;
|
||||||
|
import com.example.demo.comment.service.CommentService;
|
||||||
|
import com.example.demo.core.error.NotFoundException;
|
||||||
|
import com.example.demo.news.model.NewEntity;
|
||||||
|
import com.example.demo.news.service.NewService;
|
||||||
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
import com.example.demo.tage.service.TageService;
|
||||||
|
import com.example.demo.users.model.UserEntity;
|
||||||
|
import com.example.demo.users.service.UserService;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
@TestMethodOrder(OrderAnnotation.class)
|
||||||
|
public class CommentServiceTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CommentService commentService;
|
||||||
|
private NewService newService;
|
||||||
|
private UserService userService;
|
||||||
|
private TageService tageService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getTest() {
|
||||||
|
Assertions.assertThrows(NotFoundException.class, () -> commentService.get(0L));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void createTest() {
|
||||||
|
var tage1 = tageService.create(new TageEntity(null, "праздник"));
|
||||||
|
|
||||||
|
NewEntity new1 = newService.create(new NewEntity(null, "Чемпионат ICPC", new Date(), Arrays.asList(tage1),
|
||||||
|
"Студенты выступят на Чемпионате мира по программированию в Северной Евразии."));
|
||||||
|
var user1 = userService.create(new UserEntity(null, "beko", "111", "ddwwdd",
|
||||||
|
"beko@mail.ru", new Date()));
|
||||||
|
commentService.create(new CommentEntity(null, new Date(), "как красиво весной", new1, user1));
|
||||||
|
var last = commentService.create(new CommentEntity(null, new Date(), "и ещё птицы поют", new1, user1));
|
||||||
|
Assertions.assertEquals(2L, commentService.getAll(null).size());
|
||||||
|
Assertions.assertEquals(last, commentService.get(2L));
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,9 @@
|
|||||||
package com.example.demo;
|
package com.example.demo;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
|
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -11,6 +14,7 @@ import org.springframework.boot.test.context.SpringBootTest;
|
|||||||
import com.example.demo.core.error.NotFoundException;
|
import com.example.demo.core.error.NotFoundException;
|
||||||
import com.example.demo.news.model.NewEntity;
|
import com.example.demo.news.model.NewEntity;
|
||||||
import com.example.demo.news.service.NewService;
|
import com.example.demo.news.service.NewService;
|
||||||
|
import com.example.demo.tage.model.TageEntity;;
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@TestMethodOrder(OrderAnnotation.class)
|
@TestMethodOrder(OrderAnnotation.class)
|
||||||
@ -25,10 +29,16 @@ class NewsServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void createTest() {
|
void createTest() {
|
||||||
newsService.create(new NewEntity(null, "Название", new Date(), "тэг", "текст новости"));
|
List<TageEntity> list1 = Arrays.asList
|
||||||
final NewEntity last = newsService
|
(new TageEntity(null, "праздник"), new TageEntity(null, "сессия"));
|
||||||
.create(new NewEntity(null, "9 апреля", new Date(), "весна", "просто наступил апрель"));
|
List<TageEntity> list2 = Arrays.asList
|
||||||
Assertions.assertEquals(2L, newsService.getAll().size());
|
(new TageEntity(null, "конкурс"), new TageEntity(null, "программирование"));
|
||||||
Assertions.assertEquals(last, newsService.get(2L));
|
|
||||||
|
newsService.create(new NewEntity(null, "Название", new Date(), list1, "текст новости"));
|
||||||
|
final NewEntity last = newsService.create
|
||||||
|
(new NewEntity(null, "9 апреля", new Date(), list2, "просто наступил апрель"));
|
||||||
|
|
||||||
|
Assertions.assertEquals(4L, newsService.getAll().size());
|
||||||
|
Assertions.assertEquals(last, newsService.get(4L));
|
||||||
}
|
}
|
||||||
}
|
}
|
33
lab2/src/test/java/com/example/demo/TageServiceTest.java
Normal file
33
lab2/src/test/java/com/example/demo/TageServiceTest.java
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package com.example.demo;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestMethodOrder;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
import com.example.demo.core.error.NotFoundException;
|
||||||
|
import com.example.demo.tage.model.TageEntity;
|
||||||
|
import com.example.demo.tage.service.TageService;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
@TestMethodOrder(OrderAnnotation.class)
|
||||||
|
public class TageServiceTest {
|
||||||
|
@Autowired
|
||||||
|
private TageService tageService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getTest() {
|
||||||
|
Assertions.assertThrows(NotFoundException.class, () -> tageService.get(0L));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void createTest() {
|
||||||
|
tageService.create(new TageEntity(null, "праздник"));
|
||||||
|
final var last = tageService.create(new TageEntity(null, "конкурс"));
|
||||||
|
|
||||||
|
Assertions.assertEquals(2L, tageService.getAll().size());
|
||||||
|
Assertions.assertEquals(last, tageService.get(2L));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user