lab2
This commit is contained in:
parent
7491df6761
commit
5775804908
@ -17,7 +17,9 @@ repositories {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||||
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
|
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
|
||||||
|
implementation 'org.modelmapper:modelmapper:3.2.0'
|
||||||
|
|
||||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||||
}
|
}
|
||||||
|
18
gradle/wrapper/gradle-wrapper.properties
vendored
18
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,22 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2012-2024 the original author or authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
61
index.html
61
index.html
@ -1,61 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Document</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p id="out">Push the button</p>
|
|
||||||
<input id="name"/>
|
|
||||||
<br/>
|
|
||||||
<button onclick="get()">Get</button>
|
|
||||||
<br/>
|
|
||||||
<button onclick="getTest()">Get Test</button>
|
|
||||||
<br/>
|
|
||||||
<button onclick="post()">Post</button>
|
|
||||||
<br/>
|
|
||||||
<button onclick="put()">Put</button>
|
|
||||||
</body>
|
|
||||||
<script>
|
|
||||||
const url = "http://localhost:8080/api";
|
|
||||||
const out = document.getElementById("out");
|
|
||||||
const name = document.getElementById("name");
|
|
||||||
const get = async () => {
|
|
||||||
const res = await fetch(`${url}?name=${name.value}`);
|
|
||||||
const text = await res.text();
|
|
||||||
out.innerText = text;
|
|
||||||
}
|
|
||||||
const getTest = async () => {
|
|
||||||
const res = await fetch(`${url}/test`);
|
|
||||||
const text = await res.text();
|
|
||||||
out.innerText = text;
|
|
||||||
}
|
|
||||||
const post = async () => {
|
|
||||||
if (!name.value) {
|
|
||||||
alert("Name is required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const res = await fetch(url, {
|
|
||||||
method: 'post',
|
|
||||||
headers: {'Content-Type': 'application/json'},
|
|
||||||
body: name.value
|
|
||||||
});
|
|
||||||
const text = await res.text();
|
|
||||||
out.innerText = text;
|
|
||||||
}
|
|
||||||
const put = async () => {
|
|
||||||
if (!name.value) {
|
|
||||||
alert("Name is required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const res = await fetch(`${url}/${name.value}`, {
|
|
||||||
method: 'put',
|
|
||||||
headers: {'Content-Type': 'application/json'},
|
|
||||||
body: name.value
|
|
||||||
});
|
|
||||||
const text = await res.text();
|
|
||||||
out.innerText = text;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</html>
|
|
@ -1,49 +0,0 @@
|
|||||||
package com.example.demo;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/api")
|
|
||||||
public class ApiController {
|
|
||||||
List<UserInfo> objects = new ArrayList<>();
|
|
||||||
|
|
||||||
@GetMapping
|
|
||||||
public List<UserInfo> getAll() {
|
|
||||||
return objects;
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/{id}")
|
|
||||||
public UserInfo getId(@PathVariable(name = "id") int id) {
|
|
||||||
return objects.get(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping
|
|
||||||
public UserInfo create(@RequestBody UserInfo UserInfo) {
|
|
||||||
objects.add(UserInfo);
|
|
||||||
return UserInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PutMapping("/{id}")
|
|
||||||
public UserInfo update(@PathVariable(name = "id") int id, @RequestBody UserInfo entity) {
|
|
||||||
objects.get(id);
|
|
||||||
objects.add(id, entity);
|
|
||||||
return entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
|
||||||
public UserInfo delete(@PathVariable(name = "id") int id) {
|
|
||||||
var data = objects.get(id);
|
|
||||||
objects.remove(id);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +1,50 @@
|
|||||||
package com.example.demo;
|
package com.example.demo;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
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.itemUsers.model.ItemEntity;
|
||||||
|
import com.example.demo.itemUsers.service.UserService;
|
||||||
|
import com.example.demo.types.model.TypeEntity;
|
||||||
|
import com.example.demo.types.service.TypeService;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class DemoApplication {
|
public class DemoApplication implements CommandLineRunner {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(DemoApplication.class);
|
||||||
|
|
||||||
|
private final TypeService typeService;
|
||||||
|
private final UserService itemService;
|
||||||
|
|
||||||
|
public DemoApplication(TypeService typeService, UserService itemService) {
|
||||||
|
this.typeService = typeService;
|
||||||
|
this.itemService = itemService;
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(DemoApplication.class, args);
|
SpringApplication.run(DemoApplication.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(String... args) throws Exception {
|
||||||
|
if (args.length > 0 && Objects.equals("--populate", args[0])) {
|
||||||
|
log.info("Create default types values");
|
||||||
|
final var type1 = typeService.create(new TypeEntity(null, "Ноутбук"));
|
||||||
|
final var type2 = typeService.create(new TypeEntity(null, "Телефон"));
|
||||||
|
final var type3 = typeService.create(new TypeEntity(null, "Игровая приставка"));
|
||||||
|
|
||||||
|
log.info("Create default items values");
|
||||||
|
itemService.create(new OrderEntity(null, type1, 49999.00, 20));
|
||||||
|
itemService.create(new OrderEntity(null, type1, 129999.00, 3));
|
||||||
|
itemService.create(new OrderEntity(null, type2, 15450.50, 30));
|
||||||
|
itemService.create(new OrderEntity(null, type2, 69900.50, 10));
|
||||||
|
itemService.create(new OrderEntity(null, type2, 150000.00, 6));
|
||||||
|
itemService.create(new OrderEntity(null, type3, 75000.00, 6));
|
||||||
|
itemService.create(new OrderEntity(null, type3, 67800.00, 3));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
package com.example.demo;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
|
|
||||||
public class UserInfo {
|
|
||||||
private String login;
|
|
||||||
private String password;
|
|
||||||
private String email;
|
|
||||||
private String name;
|
|
||||||
private Integer age;
|
|
||||||
|
|
||||||
public UserInfo() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonCreator
|
|
||||||
public UserInfo(
|
|
||||||
@JsonProperty(value = "login") String login,
|
|
||||||
@JsonProperty(value = "password") String password,
|
|
||||||
@JsonProperty(value = "email") String email,
|
|
||||||
@JsonProperty(value = "name") String name,
|
|
||||||
@JsonProperty(value = "age") Integer age) {
|
|
||||||
this.login = login;
|
|
||||||
this.password = password;
|
|
||||||
this.email = email;
|
|
||||||
this.name = name;
|
|
||||||
this.age = age;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLogin() {
|
|
||||||
return login;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPassword() {
|
|
||||||
return password;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEmail() {
|
|
||||||
return email;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getAge() {
|
|
||||||
return age;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.example.demo.core.configuration;
|
||||||
|
|
||||||
|
public class Constants {
|
||||||
|
public static final String API_URL = "/api/1.0";
|
||||||
|
|
||||||
|
private Constants() {
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.example.demo.core.configuration;
|
||||||
|
|
||||||
|
import org.modelmapper.ModelMapper;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class MapperConfiguration {
|
||||||
|
@Bean
|
||||||
|
ModelMapper modelMapper() {
|
||||||
|
return new ModelMapper();
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.demo;
|
package com.example.demo.core.configuration;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
@ -6,7 +6,7 @@ import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
|||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class WebConfig implements WebMvcConfigurer {
|
public class WebConfiguration implements WebMvcConfigurer {
|
||||||
@Override
|
@Override
|
||||||
public void addCorsMappings(@NonNull CorsRegistry registry) {
|
public void addCorsMappings(@NonNull CorsRegistry registry) {
|
||||||
registry.addMapping("/**")
|
registry.addMapping("/**")
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.example.demo.core.error;
|
||||||
|
|
||||||
|
public class NotFoundException extends RuntimeException {
|
||||||
|
public NotFoundException(Long id) {
|
||||||
|
super(String.format("Entity with id [%s] is not found or not exists", id));
|
||||||
|
}
|
||||||
|
}
|
20
src/main/java/com/example/demo/core/model/BaseEntity.java
Normal file
20
src/main/java/com/example/demo/core/model/BaseEntity.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.example.demo.core.model;
|
||||||
|
|
||||||
|
public abstract class BaseEntity {
|
||||||
|
protected Long id;
|
||||||
|
|
||||||
|
protected BaseEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected BaseEntity(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.example.demo.core.repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface CommonRepository<E, T> {
|
||||||
|
List<E> getAll();
|
||||||
|
|
||||||
|
E get(T id);
|
||||||
|
|
||||||
|
E create(E entity);
|
||||||
|
|
||||||
|
E update(E entity);
|
||||||
|
|
||||||
|
E delete(E entity);
|
||||||
|
|
||||||
|
void deleteAll();
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package com.example.demo.core.repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
|
||||||
|
public abstract class MapRepository<E extends BaseEntity> implements CommonRepository<E, Long> {
|
||||||
|
private final Map<Long, E> entities = new TreeMap<>();
|
||||||
|
private Long lastId = 0L;
|
||||||
|
|
||||||
|
protected MapRepository() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<E> getAll() {
|
||||||
|
return entities.values().stream().toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E get(Long id) {
|
||||||
|
return entities.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E create(E entity) {
|
||||||
|
lastId++;
|
||||||
|
entity.setId(lastId);
|
||||||
|
entities.put(lastId, entity);
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E update(E entity) {
|
||||||
|
if (get(entity.getId()) == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
entities.put(entity.getId(), entity);
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E delete(E entity) {
|
||||||
|
if (get(entity.getId()) == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
entities.remove(entity.getId());
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteAll() {
|
||||||
|
lastId = 0L;
|
||||||
|
entities.clear();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.example.demo.itemCategories.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
import com.example.demo.types.model.TypeEntity;
|
||||||
|
|
||||||
|
public class ItemEntity extends BaseEntity {
|
||||||
|
private TypeEntity type;
|
||||||
|
// private Double price;
|
||||||
|
// private Integer count;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public ItemEntity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemEntity(Long id, TypeEntity type, String name) {
|
||||||
|
super(id);
|
||||||
|
this.type = type;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(TypeEntity type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, type, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
final ItemEntity other = (ItemEntity) obj;
|
||||||
|
return Objects.equals(other.getId(), id)
|
||||||
|
&& Objects.equals(other.getType(), type)
|
||||||
|
&& Objects.equals(other.getName(), name);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
package com.example.demo.itemOrders.model;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
import com.example.demo.itemProducts.model.ProductsEntity;
|
||||||
|
import com.example.demo.itemUsers.model.UserEntity;
|
||||||
|
import com.example.demo.types.model.TypeEntity;
|
||||||
|
|
||||||
|
public class OrderEntity extends BaseEntity {
|
||||||
|
private TypeEntity type;
|
||||||
|
private UserEntity user;
|
||||||
|
private List<ProductsEntity> products = new ArrayList<>();
|
||||||
|
|
||||||
|
public OrderEntity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrderEntity(Long id, TypeEntity type, UserEntity user, List<ProductsEntity> products) {
|
||||||
|
super(id);
|
||||||
|
this.type = type;
|
||||||
|
this.user = user;
|
||||||
|
this.products = products;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(TypeEntity type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(UserEntity user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
// добавить методы добавить и удалить продукт, и получить продукт
|
||||||
|
public List<ProductsEntity> getProducts() {
|
||||||
|
return products;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, type, login, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
final OrderEntity other = (OrderEntity) obj;
|
||||||
|
return Objects.equals(other.getId(), id)
|
||||||
|
&& Objects.equals(other.getType(), type)
|
||||||
|
&& Objects.equals(other.getLogin(), login)
|
||||||
|
&& Objects.equals(other.getPassword(), password);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
package com.example.demo.itemProducts.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
import com.example.demo.types.model.TypeEntity;
|
||||||
|
|
||||||
|
public class ProductsEntity extends BaseEntity {
|
||||||
|
private TypeEntity type;
|
||||||
|
private Double price;
|
||||||
|
private Integer count;
|
||||||
|
|
||||||
|
public ProductsEntity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProductsEntity(Long id, TypeEntity type, Double price, Integer count) {
|
||||||
|
super(id);
|
||||||
|
this.type = type;
|
||||||
|
this.price = price;
|
||||||
|
this.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(TypeEntity type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getPrice() {
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrice(Double price) {
|
||||||
|
this.price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCount() {
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCount(Integer count) {
|
||||||
|
this.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, type, price, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
final ProductsEntity other = (ProductsEntity) obj;
|
||||||
|
return Objects.equals(other.getId(), id)
|
||||||
|
&& Objects.equals(other.getType(), type)
|
||||||
|
&& Objects.equals(other.getPrice(), price)
|
||||||
|
&& Objects.equals(other.getCount(), count);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package com.example.demo.itemUsers.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.itemUsers.model.UserEntity;
|
||||||
|
import com.example.demo.itemUsers.service.UserService;
|
||||||
|
import com.example.demo.types.service.TypeService;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(Constants.API_URL + "/item")
|
||||||
|
public class UserController {
|
||||||
|
private final UserService itemService;
|
||||||
|
private final TypeService typeService;
|
||||||
|
private final ModelMapper modelMapper;
|
||||||
|
|
||||||
|
public UserController(UserService itemService, TypeService typeService, ModelMapper modelMapper) {
|
||||||
|
this.itemService = itemService;
|
||||||
|
this.typeService = typeService;
|
||||||
|
this.modelMapper = modelMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
private UserDto toDto(OrderEntity entity) {
|
||||||
|
return modelMapper.map(entity, UserDto.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private OrderEntity toEntity(UserDto dto) {
|
||||||
|
final OrderEntity entity = modelMapper.map(dto, OrderEntity.class);
|
||||||
|
entity.setType(typeService.get(dto.getTypeId()));
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public List<UserDto> getAll(@RequestParam(name = "typeId", defaultValue = "0") Long typeId) {
|
||||||
|
return itemService.getAll(typeId).stream().map(this::toDto).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public UserDto get(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(itemService.get(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public UserDto create(@RequestBody @Valid UserDto dto) {
|
||||||
|
return toDto(itemService.create(toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public UserDto update(@PathVariable(name = "id") Long id, @RequestBody UserDto dto) {
|
||||||
|
return toDto(itemService.update(id, toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public UserDto delete(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(itemService.delete(id));
|
||||||
|
}
|
||||||
|
}
|
57
src/main/java/com/example/demo/itemUsers/api/UserDto.java
Normal file
57
src/main/java/com/example/demo/itemUsers/api/UserDto.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package com.example.demo.itemUsers.api;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
public class UserDto {
|
||||||
|
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||||
|
private Long id;
|
||||||
|
@NotNull
|
||||||
|
@Min(1)
|
||||||
|
private Long typeId;
|
||||||
|
@NotNull
|
||||||
|
@Min(1)
|
||||||
|
private Double price;
|
||||||
|
@NotNull
|
||||||
|
@Min(1)
|
||||||
|
private Integer count;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getTypeId() {
|
||||||
|
return typeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTypeId(Long typeId) {
|
||||||
|
this.typeId = typeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getPrice() {
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrice(Double price) {
|
||||||
|
this.price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCount() {
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCount(Integer count) {
|
||||||
|
this.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||||
|
public Double getSum() {
|
||||||
|
return price * count;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
package com.example.demo.itemUsers.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
import com.example.demo.types.model.TypeEntity;
|
||||||
|
|
||||||
|
public class UserEntity extends BaseEntity {
|
||||||
|
private TypeEntity type;
|
||||||
|
private String login;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public UserEntity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity(Long id, TypeEntity type, String login, String password) {
|
||||||
|
super(id);
|
||||||
|
this.type = type;
|
||||||
|
this.login = login;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(TypeEntity type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLogin() {
|
||||||
|
return login;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLogin(String login) {
|
||||||
|
this.login = login;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, type, login, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
final UserEntity other = (UserEntity) obj;
|
||||||
|
return Objects.equals(other.getId(), id)
|
||||||
|
&& Objects.equals(other.getType(), type)
|
||||||
|
&& Objects.equals(other.getLogin(), login)
|
||||||
|
&& Objects.equals(other.getPassword(), password);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.example.demo.itemUsers.repository;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.example.demo.core.repository.MapRepository;
|
||||||
|
import com.example.demo.itemUsers.model.ItemEntity;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class UserRepository extends MapRepository<OrderEntity> {
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.example.demo.itemUsers.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.itemUsers.model.UserEntity;
|
||||||
|
import com.example.demo.itemUsers.repository.UserRepository;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class UserService {
|
||||||
|
private final UserRepository repository;
|
||||||
|
|
||||||
|
public UserService(UserRepository repository) {
|
||||||
|
this.repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<UserEntity> getAll(Long typeId) {
|
||||||
|
if (Objects.equals(typeId, 0L)) {
|
||||||
|
return repository.getAll();
|
||||||
|
}
|
||||||
|
return repository.getAll().stream()
|
||||||
|
.filter(item -> item.getType().getId().equals(typeId))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity get(Long id) {
|
||||||
|
return Optional.ofNullable(repository.get(id))
|
||||||
|
.orElseThrow(() -> new NotFoundException(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity create(UserEntity entity) {
|
||||||
|
return repository.create(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity update(Long id, UserEntity entity) {
|
||||||
|
final UserEntity existsEntity = get(id);
|
||||||
|
existsEntity.setType(entity.getType());
|
||||||
|
existsEntity.setPrice(entity.getPrice());
|
||||||
|
existsEntity.setCount(entity.getCount());
|
||||||
|
return repository.update(existsEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity delete(Long id) {
|
||||||
|
final UserEntity existsEntity = get(id);
|
||||||
|
return repository.delete(existsEntity);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.example.demo.speaker.api;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.example.demo.speaker.service.SpeakerService;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
public class SpeakerController {
|
||||||
|
private final SpeakerService speakerService;
|
||||||
|
|
||||||
|
public SpeakerController(SpeakerService speakerService) {
|
||||||
|
this.speakerService = speakerService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public String hello(
|
||||||
|
@RequestParam(value = "name", defaultValue = "Мир") String name,
|
||||||
|
@RequestParam(value = "lang", defaultValue = "ru") String lang) {
|
||||||
|
return speakerService.say(name, lang);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.example.demo.speaker.configuration;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import com.example.demo.speaker.domain.Speaker;
|
||||||
|
import com.example.demo.speaker.domain.SpeakerEng;
|
||||||
|
import com.example.demo.speaker.domain.SpeakerRus;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class SpeakerConfiguration {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(SpeakerConfiguration.class);
|
||||||
|
|
||||||
|
@Bean(value = "ru", initMethod = "init", destroyMethod = "destroy")
|
||||||
|
public SpeakerRus createRusSpeaker() {
|
||||||
|
log.info("Call createRusSpeaker()");
|
||||||
|
return new SpeakerRus();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(value = "en")
|
||||||
|
public Speaker createEngSpeaker() {
|
||||||
|
log.info("Call createEngSpeaker()");
|
||||||
|
return new SpeakerEng();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.example.demo.speaker.domain;
|
||||||
|
|
||||||
|
public interface Speaker {
|
||||||
|
String say();
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.example.demo.speaker.domain;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import jakarta.annotation.PreDestroy;
|
||||||
|
|
||||||
|
@Component(value = "de")
|
||||||
|
public class SpeakerDeu implements Speaker {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(SpeakerDeu.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String say() {
|
||||||
|
return "Hallo";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
log.info("SpeakerDeu.init()");
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
public void destroy() {
|
||||||
|
log.info("SpeakerDeu.destroy()");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.example.demo.speaker.domain;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.DisposableBean;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
|
||||||
|
public class SpeakerEng implements Speaker, InitializingBean, DisposableBean {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(SpeakerEng.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String say() {
|
||||||
|
return "Hello";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() {
|
||||||
|
log.info("SpeakerEng.afterPropertiesSet()");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
log.info("SpeakerEng.destroy()");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.example.demo.speaker.domain;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class SpeakerRus implements Speaker {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(SpeakerRus.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String say() {
|
||||||
|
return "Привет";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
log.info("SpeakerRus.init()");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
log.info("SpeakerRus.destroy()");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.example.demo.speaker.service;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.example.demo.speaker.domain.Speaker;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SpeakerService {
|
||||||
|
private final ApplicationContext applicationContext;
|
||||||
|
|
||||||
|
public SpeakerService(ApplicationContext applicationContext) {
|
||||||
|
this.applicationContext = applicationContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String say(String name, String lang) {
|
||||||
|
final Speaker speaker = (Speaker) applicationContext.getBean(lang);
|
||||||
|
return String.format("%s, %s!", speaker.say(), name);
|
||||||
|
}
|
||||||
|
}
|
64
src/main/java/com/example/demo/types/api/TypeController.java
Normal file
64
src/main/java/com/example/demo/types/api/TypeController.java
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package com.example.demo.types.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.types.model.TypeEntity;
|
||||||
|
import com.example.demo.types.service.TypeService;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(Constants.API_URL + "/type")
|
||||||
|
public class TypeController {
|
||||||
|
private final TypeService typeService;
|
||||||
|
private final ModelMapper modelMapper;
|
||||||
|
|
||||||
|
public TypeController(TypeService typeService, ModelMapper modelMapper) {
|
||||||
|
this.typeService = typeService;
|
||||||
|
this.modelMapper = modelMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TypeDto toDto(TypeEntity entity) {
|
||||||
|
return modelMapper.map(entity, TypeDto.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TypeEntity toEntity(TypeDto dto) {
|
||||||
|
return modelMapper.map(dto, TypeEntity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public List<TypeDto> getAll() {
|
||||||
|
return typeService.getAll().stream().map(this::toDto).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public TypeDto get(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(typeService.get(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public TypeDto create(@RequestBody @Valid TypeDto dto) {
|
||||||
|
return toDto(typeService.create(toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public TypeDto update(@PathVariable(name = "id") Long id, @RequestBody TypeDto dto) {
|
||||||
|
return toDto(typeService.update(id, toEntity(dto)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public TypeDto delete(@PathVariable(name = "id") Long id) {
|
||||||
|
return toDto(typeService.delete(id));
|
||||||
|
}
|
||||||
|
}
|
28
src/main/java/com/example/demo/types/api/TypeDto.java
Normal file
28
src/main/java/com/example/demo/types/api/TypeDto.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package com.example.demo.types.api;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
public class TypeDto {
|
||||||
|
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||||
|
private Long id;
|
||||||
|
@NotBlank
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
43
src/main/java/com/example/demo/types/model/TypeEntity.java
Normal file
43
src/main/java/com/example/demo/types/model/TypeEntity.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.demo.types.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.example.demo.core.model.BaseEntity;
|
||||||
|
|
||||||
|
public class TypeEntity extends BaseEntity {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public TypeEntity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity(Long id, String name) {
|
||||||
|
super(id);
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
final TypeEntity other = (TypeEntity) obj;
|
||||||
|
return Objects.equals(other.getId(), id)
|
||||||
|
&& Objects.equals(other.getName(), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.example.demo.types.repository;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.example.demo.core.repository.MapRepository;
|
||||||
|
import com.example.demo.types.model.TypeEntity;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class TypeRepository extends MapRepository<TypeEntity> {
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.demo.types.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.types.model.TypeEntity;
|
||||||
|
import com.example.demo.types.repository.TypeRepository;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TypeService {
|
||||||
|
private final TypeRepository repository;
|
||||||
|
|
||||||
|
public TypeService(TypeRepository repository) {
|
||||||
|
this.repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TypeEntity> getAll() {
|
||||||
|
return repository.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity get(Long id) {
|
||||||
|
return Optional.ofNullable(repository.get(id))
|
||||||
|
.orElseThrow(() -> new NotFoundException(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity create(TypeEntity entity) {
|
||||||
|
return repository.create(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity update(Long id, TypeEntity entity) {
|
||||||
|
final TypeEntity existsEntity = get(id);
|
||||||
|
existsEntity.setName(entity.getName());
|
||||||
|
return repository.update(existsEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeEntity delete(Long id) {
|
||||||
|
final TypeEntity existsEntity = get(id);
|
||||||
|
return repository.delete(existsEntity);
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +0,0 @@
|
|||||||
package com.example.demo;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
|
|
||||||
@SpringBootTest
|
|
||||||
class DemoApplicationTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void contextLoads() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
38
src/test/java/com/example/demo/SpeakerSrviceTests.java
Normal file
38
src/test/java/com/example/demo/SpeakerSrviceTests.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package com.example.demo;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
import com.example.demo.speaker.service.SpeakerService;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
class SpeakerSrviceTests {
|
||||||
|
@Autowired
|
||||||
|
SpeakerService speakerService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSpeakerRus() {
|
||||||
|
final String res = speakerService.say("Мир", "ru");
|
||||||
|
Assertions.assertEquals("Привет, Мир!", res);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSpeakerEng() {
|
||||||
|
final String res = speakerService.say("World", "en");
|
||||||
|
Assertions.assertEquals("Hello, World!", res);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSpeakerDeu() {
|
||||||
|
final String res = speakerService.say("Welt", "de");
|
||||||
|
Assertions.assertEquals("Hallo, Welt!", res);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSpeakerErrorWired() {
|
||||||
|
Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> speakerService.say("Мир", "rus"));
|
||||||
|
}
|
||||||
|
}
|
61
src/test/java/com/example/demo/TypeServiceTests.java
Normal file
61
src/test/java/com/example/demo/TypeServiceTests.java
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
package com.example.demo;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
|
||||||
|
import org.junit.jupiter.api.Order;
|
||||||
|
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.types.model.TypeEntity;
|
||||||
|
import com.example.demo.types.service.TypeService;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
@TestMethodOrder(OrderAnnotation.class)
|
||||||
|
class TypeServiceTests {
|
||||||
|
@Autowired
|
||||||
|
private TypeService typeService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getTest() {
|
||||||
|
Assertions.assertThrows(NotFoundException.class, () -> typeService.get(0L));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(1)
|
||||||
|
void createTest() {
|
||||||
|
typeService.create(new TypeEntity(null, "Ноутбук"));
|
||||||
|
typeService.create(new TypeEntity(null, "Телефон"));
|
||||||
|
final TypeEntity last = typeService.create(new TypeEntity(null, "Игровая приставка"));
|
||||||
|
Assertions.assertEquals(3, typeService.getAll().size());
|
||||||
|
Assertions.assertEquals(last, typeService.get(3L));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(2)
|
||||||
|
void updateTest() {
|
||||||
|
final String test = "TEST";
|
||||||
|
final TypeEntity entity = typeService.get(3L);
|
||||||
|
final String oldName = entity.getName();
|
||||||
|
final TypeEntity newEntity = typeService.update(3L, new TypeEntity(1L, test));
|
||||||
|
Assertions.assertEquals(3, typeService.getAll().size());
|
||||||
|
Assertions.assertEquals(newEntity, typeService.get(3L));
|
||||||
|
Assertions.assertEquals(test, newEntity.getName());
|
||||||
|
Assertions.assertNotEquals(oldName, newEntity.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(3)
|
||||||
|
void deleteTest() {
|
||||||
|
typeService.delete(3L);
|
||||||
|
Assertions.assertEquals(2, typeService.getAll().size());
|
||||||
|
final TypeEntity last = typeService.get(2L);
|
||||||
|
Assertions.assertEquals(2L, last.getId());
|
||||||
|
|
||||||
|
final TypeEntity newEntity = typeService.create(new TypeEntity(null, "Игровая приставка"));
|
||||||
|
Assertions.assertEquals(3, typeService.getAll().size());
|
||||||
|
Assertions.assertEquals(4L, newEntity.getId());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user