diff --git a/README.md b/README.md index a4ea65f..c4abddf 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# iot-clouds \ No newline at end of file +### Application deployment on Amazon Web Service (AWS) diff --git a/lab1-task.md b/lab1-task.md new file mode 100644 index 0000000..f715fc3 --- /dev/null +++ b/lab1-task.md @@ -0,0 +1,8 @@ +# Лабораторна робота 1 +### Розгортання додатку на хмарному ресурсі Google Cloud Platform (GCP) або Amazon Web Service(AWS) або Microsoft Azure + +## Завдання +- Зареєструвати безкоштовний профіль на хмарному провайдері GCP/AWS/Azure +- Завантажити ваш проект, розроблений в рамках курсу «Бази даних і знань» на хмару відповідно до рекомендацій провайдера і запустити його на віртуальній машині. Наявність коду проекту на Github обовязковою. При здачі слід показати репозиторій із кодом +- Для збереження даних використати MySQL базу даних, яку надає хмарний провайдер +- Використовуючи springdoc-openapi-ui (https://www.baeldung.com/spring-rest-openapi-documentation) підняти портал з списком підтримуваних REST-endpoints та перевірити працездатність сервісу з локального ПК diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0adeec8 --- /dev/null +++ b/pom.xml @@ -0,0 +1,182 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.5.6 + + + + org.lab6 + lab6 + 1.0-SNAPSHOT + + + 11 + 11 + + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-hateoas + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-actuator + + + + io.micrometer + micrometer-registry-prometheus + ${micrometer.version} + + + + org.springframework.restdocs + spring-restdocs-mockmvc + test + + + + io.springfox + springfox-swagger2 + 2.7.0 + + + + io.springfox + springfox-swagger-ui + 2.7.0 + + + + org.springdoc + springdoc-openapi-ui + 1.6.4 + + + + javax.xml.bind + jaxb-api + 2.3.1 + + + + org.javassist + javassist + 3.25.0-GA + + + + com.sun.xml.ws + jaxws-rt + 2.2.3 + test + + + + mysql + mysql-connector-java + runtime + 8.0.23 + + + org.projectlombok + lombok + 1.18.20 + + + org.springdoc + springdoc-openapi-ui + 1.6.4 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + true + lib/ + com.dmitrenko.Application + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.6 + + + org.apache.maven.plugins + maven-site-plugin + 3.9.1 + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.1.2 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.0.0 + + + + + + + + org.codehaus.mojo + findbugs-maven-plugin + 2.3.2 + + + org.apache.maven.plugins + maven-pmd-plugin + 3.14.0 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + + + + diff --git a/src/main/java/com/dmitrenko/Application.java b/src/main/java/com/dmitrenko/Application.java new file mode 100644 index 0000000..9d7ec8b --- /dev/null +++ b/src/main/java/com/dmitrenko/Application.java @@ -0,0 +1,11 @@ +package com.dmitrenko; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/src/main/java/com/dmitrenko/DTO/AudioDTO.java b/src/main/java/com/dmitrenko/DTO/AudioDTO.java new file mode 100644 index 0000000..12b9b0a --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/AudioDTO.java @@ -0,0 +1,16 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class AudioDTO { + private Integer id; + private Integer duration; + private Integer gameChatId; +} diff --git a/src/main/java/com/dmitrenko/DTO/GameChatDTO.java b/src/main/java/com/dmitrenko/DTO/GameChatDTO.java new file mode 100644 index 0000000..94962de --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/GameChatDTO.java @@ -0,0 +1,16 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class GameChatDTO { + private Integer id; + private String name; + private Integer gameId; +} diff --git a/src/main/java/com/dmitrenko/DTO/GameDTO.java b/src/main/java/com/dmitrenko/DTO/GameDTO.java new file mode 100644 index 0000000..e9e9bc6 --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/GameDTO.java @@ -0,0 +1,17 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class GameDTO { + private Integer id; + private String name; + private Integer price; + private String category; +} diff --git a/src/main/java/com/dmitrenko/DTO/MediaDTO.java b/src/main/java/com/dmitrenko/DTO/MediaDTO.java new file mode 100644 index 0000000..97a3466 --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/MediaDTO.java @@ -0,0 +1,18 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class MediaDTO { + private Integer id; + private String name; + private Double size; + private Integer date; + private Integer gameChatId; +} diff --git a/src/main/java/com/dmitrenko/DTO/MessageDTO.java b/src/main/java/com/dmitrenko/DTO/MessageDTO.java new file mode 100644 index 0000000..414ed78 --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/MessageDTO.java @@ -0,0 +1,17 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class MessageDTO { + private Integer id; + private Integer date; + private String message; + private Integer gameChatId; +} diff --git a/src/main/java/com/dmitrenko/DTO/PaymentDTO.java b/src/main/java/com/dmitrenko/DTO/PaymentDTO.java new file mode 100644 index 0000000..f24fcac --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/PaymentDTO.java @@ -0,0 +1,18 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PaymentDTO { + private Integer id; + private Long cardNumber; + private Integer expirationDate; + private Integer cvc; + private String name; +} diff --git a/src/main/java/com/dmitrenko/DTO/SecurityDTO.java b/src/main/java/com/dmitrenko/DTO/SecurityDTO.java new file mode 100644 index 0000000..0492547 --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/SecurityDTO.java @@ -0,0 +1,15 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class SecurityDTO { + private String login; + private String password; +} diff --git a/src/main/java/com/dmitrenko/DTO/UserDTO.java b/src/main/java/com/dmitrenko/DTO/UserDTO.java new file mode 100644 index 0000000..adfb914 --- /dev/null +++ b/src/main/java/com/dmitrenko/DTO/UserDTO.java @@ -0,0 +1,22 @@ +package com.dmitrenko.DTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class UserDTO { + private Integer id; + private String name; + private String surname; + private String username; + private String phoneNumber; + private String inform; + private Integer gameChatId; + private Integer paymentId; + private String securityLogin; +} diff --git a/src/main/java/com/dmitrenko/config/SwaggerConfiguration.java b/src/main/java/com/dmitrenko/config/SwaggerConfiguration.java new file mode 100644 index 0000000..889f5c9 --- /dev/null +++ b/src/main/java/com/dmitrenko/config/SwaggerConfiguration.java @@ -0,0 +1,49 @@ +package com.dmitrenko.config; + +import com.google.common.base.Predicates; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.hateoas.client.LinkDiscoverer; +import org.springframework.hateoas.client.LinkDiscoverers; +import org.springframework.hateoas.mediatype.collectionjson.CollectionJsonLinkDiscoverer; +import org.springframework.plugin.core.SimplePluginRegistry; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +@EnableSwagger2 +@Configuration +public class SwaggerConfiguration { + private static final String SWAGGER_API_VERSION = "1.0"; + private static final String LICENSE_TEXT = "License"; + private static final String title = "Spring Boot - crud api"; + private static final String description = "6 lab"; + + @Bean + public LinkDiscoverers discoverers() { + List plugins = new ArrayList<>(); + plugins.add(new CollectionJsonLinkDiscoverer()); + return new LinkDiscoverers(SimplePluginRegistry.create(plugins)); + } + + @Bean + public Docket decksApi() { + return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).pathMapping("/").select() + .paths(Predicates.not(PathSelectors.regex("/error.*"))).build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title(title) + .description(description) + .license(LICENSE_TEXT) + .version(SWAGGER_API_VERSION) + .build(); + } +} diff --git a/src/main/java/com/dmitrenko/controller/AbstractController.java b/src/main/java/com/dmitrenko/controller/AbstractController.java new file mode 100644 index 0000000..485e820 --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/AbstractController.java @@ -0,0 +1,65 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.service.AbstractService; +import javassist.NotFoundException; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +public abstract class AbstractController { + protected abstract AbstractService getService(); + protected abstract AbstractMapper getMapper(); + + @RequestMapping(method = RequestMethod.GET) + public @ResponseBody ResponseEntity> getAll() { + List objects = getService().getAll(); + List objectsDTO = new ArrayList<>(); + for (T object : objects) { + objectsDTO.add(getMapper().mapObjectToDTO(object)); + } + return new ResponseEntity<>(objectsDTO, HttpStatus.OK); + } + + @RequestMapping(method = RequestMethod.GET, value = "/{id}") + public @ResponseBody ResponseEntity getById(@PathVariable ID id) { + T object = getService().getById(id); + if (object != null) { + return new ResponseEntity<>(getMapper().mapObjectToDTO(object), HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(method = RequestMethod.POST, consumes = {MediaType.APPLICATION_JSON_VALUE}) + public @ResponseBody ResponseEntity create(@RequestBody T newObject) { + getService().create(newObject); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @RequestMapping(method = RequestMethod.PUT, value = "/{id}", + consumes = {MediaType.APPLICATION_JSON_VALUE}) + public @ResponseBody ResponseEntity update(@PathVariable ID id, @RequestBody T object) { + object = getService().getById(id); + if (object != null) { + getService().update(id, object); + return new ResponseEntity<>(getService().update(id, object), HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + } + + @RequestMapping(method = RequestMethod.DELETE, value = "/{id}") + public ResponseEntity delete(@PathVariable ID id) { + if(getService().getById(id) != null) { + getService().delete(id); + return new ResponseEntity<>(HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } +} diff --git a/src/main/java/com/dmitrenko/controller/AudioController.java b/src/main/java/com/dmitrenko/controller/AudioController.java new file mode 100644 index 0000000..f423f6e --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/AudioController.java @@ -0,0 +1,30 @@ +package com.dmitrenko.controller; + + +import com.dmitrenko.DTO.AudioDTO; +import com.dmitrenko.domain.Audio; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.AudioMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.AudioService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/audio_files") +@RestController +@AllArgsConstructor +public class AudioController extends AbstractController { + private final AudioService audioService; + private final AudioMapper audioMapper; + + @Override + protected AbstractService getService() { + return audioService; + } + + @Override + protected AbstractMapper getMapper() { + return audioMapper; + } +} diff --git a/src/main/java/com/dmitrenko/controller/GameChatController.java b/src/main/java/com/dmitrenko/controller/GameChatController.java new file mode 100644 index 0000000..fdf7f8d --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/GameChatController.java @@ -0,0 +1,29 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.DTO.GameChatDTO; +import com.dmitrenko.domain.GameChat; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.GameChatMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.GameChatService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/game_chats") +@RestController +@AllArgsConstructor +public class GameChatController extends AbstractController { + private final GameChatService gameChatService; + private final GameChatMapper gameChatMapper; + + @Override + protected AbstractService getService() { + return gameChatService; + } + + @Override + protected AbstractMapper getMapper() { + return gameChatMapper; + } +} diff --git a/src/main/java/com/dmitrenko/controller/GameController.java b/src/main/java/com/dmitrenko/controller/GameController.java new file mode 100644 index 0000000..eb4d34e --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/GameController.java @@ -0,0 +1,29 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.DTO.GameDTO; +import com.dmitrenko.domain.Game; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.GameMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.GameService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/games") +@RestController +@AllArgsConstructor +public class GameController extends AbstractController { + private GameService gameService; + private GameMapper gameMapper; + + @Override + protected AbstractService getService() { + return gameService; + } + + @Override + protected AbstractMapper getMapper() { + return gameMapper; + } +} diff --git a/src/main/java/com/dmitrenko/controller/MediaController.java b/src/main/java/com/dmitrenko/controller/MediaController.java new file mode 100644 index 0000000..f08df9b --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/MediaController.java @@ -0,0 +1,29 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.DTO.MediaDTO; +import com.dmitrenko.domain.Media; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.MediaMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.MediaService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/media") +@RestController +@AllArgsConstructor +public class MediaController extends AbstractController { + private final MediaService mediaService; + private final MediaMapper mediaMapper; + + @Override + protected AbstractService getService() { + return mediaService; + } + + @Override + protected AbstractMapper getMapper() { + return mediaMapper; + } +} diff --git a/src/main/java/com/dmitrenko/controller/MessageController.java b/src/main/java/com/dmitrenko/controller/MessageController.java new file mode 100644 index 0000000..d84e7f7 --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/MessageController.java @@ -0,0 +1,29 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.DTO.MessageDTO; +import com.dmitrenko.domain.Message; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.MessageMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.MessageService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/messages") +@RestController +@AllArgsConstructor +public class MessageController extends AbstractController { + private final MessageService messageService; + private final MessageMapper messageMapper; + + @Override + protected AbstractService getService() { + return messageService; + } + + @Override + protected AbstractMapper getMapper() { + return messageMapper; + } +} diff --git a/src/main/java/com/dmitrenko/controller/PaymentController.java b/src/main/java/com/dmitrenko/controller/PaymentController.java new file mode 100644 index 0000000..725f8d7 --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/PaymentController.java @@ -0,0 +1,29 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.DTO.PaymentDTO; +import com.dmitrenko.domain.Payment; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.PaymentMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.PaymentService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/payment") +@RestController +@AllArgsConstructor +public class PaymentController extends AbstractController { + private final PaymentService paymentService; + private final PaymentMapper paymentMapper; + + @Override + protected AbstractService getService() { + return paymentService; + } + + @Override + protected AbstractMapper getMapper() { + return paymentMapper; + } +} diff --git a/src/main/java/com/dmitrenko/controller/SecurityController.java b/src/main/java/com/dmitrenko/controller/SecurityController.java new file mode 100644 index 0000000..84ec11f --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/SecurityController.java @@ -0,0 +1,29 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.DTO.SecurityDTO; +import com.dmitrenko.domain.Security; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.SecurityMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.SecurityService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/security_data") +@RestController +@AllArgsConstructor +public class SecurityController extends AbstractController { + private final SecurityService securityService; + private final SecurityMapper securityMapper; + + @Override + protected AbstractService getService() { + return securityService; + } + + @Override + protected AbstractMapper getMapper() { + return securityMapper; + } +} diff --git a/src/main/java/com/dmitrenko/controller/UserController.java b/src/main/java/com/dmitrenko/controller/UserController.java new file mode 100644 index 0000000..f661e43 --- /dev/null +++ b/src/main/java/com/dmitrenko/controller/UserController.java @@ -0,0 +1,29 @@ +package com.dmitrenko.controller; + +import com.dmitrenko.DTO.UserDTO; +import com.dmitrenko.domain.User; +import com.dmitrenko.mapper.AbstractMapper; +import com.dmitrenko.mapper.UserMapper; +import com.dmitrenko.service.AbstractService; +import com.dmitrenko.service.UserService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(value = "/users") +@RestController +@AllArgsConstructor +public class UserController extends AbstractController { + private final UserService userService; + private final UserMapper userMapper; + + @Override + protected AbstractService getService() { + return userService; + } + + @Override + protected AbstractMapper getMapper() { + return userMapper; + } +} diff --git a/src/main/java/com/dmitrenko/domain/Audio.java b/src/main/java/com/dmitrenko/domain/Audio.java new file mode 100644 index 0000000..c6a3a74 --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/Audio.java @@ -0,0 +1,80 @@ +package com.dmitrenko.domain; + +import javax.persistence.*; +import java.util.Objects; + +@Entity +public class Audio { + + private Integer id; + private Integer duration; + private Integer gameChatId; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Basic + @Column(name = "duration") + public Integer getDuration() { + return duration; + } + + public void setDuration(Integer duration) { + this.duration = duration; + } + + @Basic + @Column(name = "game_chat_id") + public Integer getGameChatId() { + return gameChatId; + } + + public void setGameChatId(Integer gameChatId) { + this.gameChatId = gameChatId; + } + + public Audio() { + + } + + public Audio(Integer id, Integer duration, Integer gameChatId) { + this.id = id; + this.duration = duration; + this.gameChatId = gameChatId; + } + + public Audio(Integer duration, Integer gameChatId) { + this(null, duration, gameChatId); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Audio)) return false; + Audio audio = (Audio) o; + return getId().equals(audio.getId()) && getDuration().equals(audio.getDuration()) && + getGameChatId().equals(audio.getGameChatId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getDuration(), getGameChatId()); + } + + @Override + public String toString() { + return "\nAudio\n{" + + "id=" + id + + ", duration=" + duration + + ", gameChatId=" + gameChatId + + '}'; + } +} diff --git a/src/main/java/com/dmitrenko/domain/Game.java b/src/main/java/com/dmitrenko/domain/Game.java new file mode 100644 index 0000000..5564664 --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/Game.java @@ -0,0 +1,92 @@ +package com.dmitrenko.domain; + +import javax.persistence.*; +import java.util.Objects; + +@Entity +public class Game { + + private Integer id; + private String name; + private Integer price; + private String category; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Basic + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Basic + @Column(name = "price") + public Integer getPrice() { + return price; + } + + public void setPrice(Integer price) { + this.price = price; + } + + @Basic + @Column(name = "category") + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public Game() { + + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Game)) return false; + Game game = (Game) o; + return getId().equals(game.getId()) && getName().equals(game.getName()) && Objects.equals(getPrice(), + game.getPrice()) && getCategory().equals(game.getCategory()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getName(), getPrice(), getCategory()); + } + + public Game(Integer id, String name, Integer price, String category) { + this.id = id; + this.name = name; + this.price = price; + this.category = category; + } + + public Game(String name, Integer price, String category) { + this(null, name, null, category); + } + + @Override + public String toString() { + return "\nGame\n{" + + "id=" + id + + ", name='" + name + '\'' + + ", price=" + price + + ", category='" + category + '\'' + + '}'; + } +} diff --git a/src/main/java/com/dmitrenko/domain/GameChat.java b/src/main/java/com/dmitrenko/domain/GameChat.java new file mode 100644 index 0000000..0520995 --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/GameChat.java @@ -0,0 +1,79 @@ +package com.dmitrenko.domain; + +import javax.persistence.*; +import java.util.Objects; + +@Entity +@Table(name = "game_chat", schema = "dmitrenko") +public class GameChat { + + private Integer id; + private String name; + private Integer gameId; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Basic + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Basic + @Column(name = "game_id") + public Integer getGameId() { + return gameId; + } + + public void setGameId(Integer gameId) { + this.gameId = gameId; + } + + + public GameChat() { + } + + public GameChat(Integer id, String name, Integer gameId) { + this.id = id; + this.name = name; + this.gameId = gameId; + } + + public GameChat(String name, Integer gameId) { + this(null, name, gameId); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof GameChat)) return false; + GameChat gameChat = (GameChat) o; + return getId().equals(gameChat.getId()) && getName().equals(gameChat.getName()) && getGameId().equals(gameChat.getGameId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getName(), getGameId()); + } + + @Override + public String toString() { + return "\nGameChat\n{" + + "id=" + id + + ", name='" + name + '\'' + + ", gameId=" + gameId + + '}'; + } +} diff --git a/src/main/java/com/dmitrenko/domain/Media.java b/src/main/java/com/dmitrenko/domain/Media.java new file mode 100644 index 0000000..67036b2 --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/Media.java @@ -0,0 +1,104 @@ +package com.dmitrenko.domain; + +import javax.persistence.*; +import java.util.Objects; + +@Entity +public class Media { + + private Integer id; + private String name; + private Double size; + private Integer date; + private Integer gameChatId; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Basic + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Basic + @Column(name = "size") + public Double getSize() { + return size; + } + + public void setSize(Double size) { + this.size = size; + } + + @Basic + @Column(name = "date") + public Integer getDate() { + return date; + } + + public void setDate(Integer date) { + this.date = date; + } + + @Basic + @Column(name = "game_chat_id") + public Integer getGameChatId() { + return gameChatId; + } + + public void setGameChatId(Integer gameChatId) { + this.gameChatId = gameChatId; + } + + public Media() { + } + + public Media(Integer id, String name, Double size, Integer date, Integer gameChatId) { + this.id = id; + this.name = name; + this.size = size; + this.date = date; + this.gameChatId = gameChatId; + } + + public Media(String name, Double size, Integer date, Integer gameChatId) { + this(null, name, size, date, gameChatId); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Media)) return false; + Media media = (Media) o; + return getId().equals(media.getId()) && getName().equals(media.getName()) && getSize().equals(media.getSize()) + && getDate().equals(media.getDate()) && getGameChatId().equals(media.getGameChatId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getName(), getSize(), getDate(), getGameChatId()); + } + + @Override + public String toString() { + return "\nMedia\n{" + + "id=" + id + + ", name='" + name + '\'' + + ", size=" + size + + ", date=" + date + + ", gameChatId=" + gameChatId + + '}'; + } +} diff --git a/src/main/java/com/dmitrenko/domain/Message.java b/src/main/java/com/dmitrenko/domain/Message.java new file mode 100644 index 0000000..399d48e --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/Message.java @@ -0,0 +1,92 @@ +package com.dmitrenko.domain; + +import javax.persistence.*; +import java.util.Objects; + +@Entity +public class Message { + + private Integer id; + private Integer date; + private String message; + private Integer gameChatId; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Basic + @Column(name = "date") + public Integer getDate() { + return date; + } + + public void setDate(Integer date) { + this.date = date; + } + + @Basic + @Column(name = "message") + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Basic + @Column(name = "game_chat_id") + public Integer getGameChatId() { + return gameChatId; + } + + public void setGameChatId(Integer gameChatId) { + this.gameChatId = gameChatId; + } + + public Message() { + } + + public Message(Integer id, Integer date, String message, Integer gameChatId) { + this.id = id; + this.date = date; + this.message = message; + this.gameChatId = gameChatId; + } + + public Message(Integer date, String message, Integer gameChatId) { + this(null, date, message, gameChatId); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Message)) return false; + Message message = (Message) o; + return getId().equals(message.getId()) && getDate().equals(message.getDate()) && + getMessage().equals(message.getMessage()) && getGameChatId().equals(message.getGameChatId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getDate(), getMessage(), getGameChatId()); + } + + @Override + public String toString() { + return "\nMessage\n{" + + "id=" + id + + ", date=" + date + + ", message='" + message + '\'' + + ", gameChatId=" + gameChatId + + '}'; + } +} diff --git a/src/main/java/com/dmitrenko/domain/Payment.java b/src/main/java/com/dmitrenko/domain/Payment.java new file mode 100644 index 0000000..9ded4c7 --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/Payment.java @@ -0,0 +1,105 @@ +package com.dmitrenko.domain; + +import javax.persistence.*; +import java.util.Objects; + +@Entity +public class Payment { + + private Integer id; + private Long cardNumber; + private Integer expirationDate; + private Integer cvc; + private String name; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Basic + @Column(name = "card_number") + public Long getCardNumber() { + return cardNumber; + } + + public void setCardNumber(Long cardNumber) { + this.cardNumber = cardNumber; + } + + @Basic + @Column(name = "expiration_date") + public Integer getExpirationDate() { + return expirationDate; + } + + public void setExpirationDate(Integer expirationDate) { + this.expirationDate = expirationDate; + } + + @Basic + @Column(name = "cvc") + public Integer getCvc() { + return cvc; + } + + public void setCvc(Integer cvc) { + this.cvc = cvc; + } + + @Basic + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Payment() { + } + + public Payment(Integer id, Long cardNumber, Integer expirationDate, Integer cvc, String name) { + this.id = id; + this.cardNumber = cardNumber; + this.expirationDate = expirationDate; + this.cvc = cvc; + this.name = name; + } + + public Payment(Long cardNumber, Integer expirationDate, Integer cvc, String name) { + this(null, cardNumber, expirationDate, cvc, name); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Payment)) return false; + Payment payment = (Payment) o; + return getId().equals(payment.getId()) && getCardNumber().equals(payment.getCardNumber()) && + getExpirationDate().equals(payment.getExpirationDate()) && getCvc().equals(payment.getCvc()) && + getName().equals(payment.getName()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getCardNumber(), getExpirationDate(), getCvc(), getName()); + } + + @Override + public String toString() { + return "\nPayment\n{" + + "id=" + id + + ", cardNumber=" + cardNumber + + ", expirationDate=" + expirationDate + + ", cvc=" + cvc + + ", name='" + name + '\'' + + "}"; + } +} diff --git a/src/main/java/com/dmitrenko/domain/Security.java b/src/main/java/com/dmitrenko/domain/Security.java new file mode 100644 index 0000000..10bd220 --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/Security.java @@ -0,0 +1,63 @@ +package com.dmitrenko.domain; + +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import java.util.Objects; + +@Entity +public class Security { + + private String login; + private String password; + + @Id + @Column(name = "login") + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + @Basic + @Column(name = "password") + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Security() { + } + + public Security(String login, String password) { + this.login = login; + this.password = password; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Security)) return false; + Security security = (Security) o; + return getLogin().equals(security.getLogin()) && getPassword().equals(security.getPassword()); + } + + @Override + public int hashCode() { + return Objects.hash(getLogin(), getPassword()); + } + + @Override + public String toString() { + return "\nSecurity\n{" + + "login='" + login + '\'' + + ", password='" + password + '\'' + + '}'; + } +} diff --git a/src/main/java/com/dmitrenko/domain/User.java b/src/main/java/com/dmitrenko/domain/User.java new file mode 100644 index 0000000..9082dfe --- /dev/null +++ b/src/main/java/com/dmitrenko/domain/User.java @@ -0,0 +1,163 @@ +package com.dmitrenko.domain; + +import javax.persistence.*; +import java.util.Objects; + +@Entity +public class User { + + private Integer id; + private String name; + private String surname; + private String username; + private String phoneNumber; + private String inform; + private Integer gameChatId; + private Integer paymentId; + private String securityLogin; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Basic + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Basic + @Column(name = "surname") + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + @Basic + @Column(name = "username") + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + @Basic + @Column(name = "phone_number") + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + @Basic + @Column(name = "inform") + public String getInform() { + return inform; + } + + public void setInform(String inform) { + this.inform = inform; + } + + @Basic + @Column(name = "game_chat_id") + public Integer getGameChatId() { + return gameChatId; + } + + public void setGameChatId(Integer gameChatId) { + this.gameChatId = gameChatId; + } + + @Basic + @Column(name = "payment_id") + public Integer getPaymentId() { + return paymentId; + } + + public void setPaymentId(Integer paymentId) { + this.paymentId = paymentId; + } + + @Basic + @Column(name = "security_login") + public String getSecurityLogin() { + return securityLogin; + } + + public void setSecurityLogin(String securityLogin) { + this.securityLogin = securityLogin; + } + + public User() { + } + + public User(Integer id, String name, String surname, String username, String phoneNumber, + String inform, Integer gameChatId, Integer paymentId, String securityLogin) { + this.id = id; + this.name = name; + this.surname = surname; + this.username = username; + this.phoneNumber = phoneNumber; + this.inform = inform; + this.gameChatId = gameChatId; + this.paymentId = paymentId; + this.securityLogin = securityLogin; + } + + public User(String name, String surname, String username, String phoneNumber, String inform, + Integer gameChatId, Integer paymentId, String securityLogin) { + this(null, name, null, username, phoneNumber, null, gameChatId, paymentId, securityLogin); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof User)) return false; + User user = (User) o; + return getId().equals(user.getId()) && getName().equals(user.getName()) && Objects.equals(getSurname(), + user.getSurname()) && getUsername().equals(user.getUsername()) + && getPhoneNumber().equals(user.getPhoneNumber()) && Objects.equals(getInform(), user.getInform()) + && getGameChatId().equals(user.getGameChatId()) && getPaymentId().equals(user.getPaymentId()) + && getSecurityLogin().equals(user.getSecurityLogin()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getName(), getSurname(), getUsername(), getPhoneNumber(), getInform(), + getGameChatId(), getPaymentId(), getSecurityLogin()); + } + + @Override + public String toString() { + return "\nUser\n{" + + "id=" + id + + ", name='" + name + '\'' + + ", surname='" + surname + '\'' + + ", username='" + username + '\'' + + ", phoneNumber='" + phoneNumber + '\'' + + ", inform='" + inform + '\'' + + ", gameChatId=" + gameChatId + + ", paymentId=" + paymentId + + ", securityLogin='" + securityLogin + '\'' + + '}'; + } +} diff --git a/src/main/java/com/dmitrenko/mapper/AbstractMapper.java b/src/main/java/com/dmitrenko/mapper/AbstractMapper.java new file mode 100644 index 0000000..862db7a --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/AbstractMapper.java @@ -0,0 +1,5 @@ +package com.dmitrenko.mapper; + +public abstract class AbstractMapper { + public abstract DTO mapObjectToDTO(T object); +} diff --git a/src/main/java/com/dmitrenko/mapper/AudioMapper.java b/src/main/java/com/dmitrenko/mapper/AudioMapper.java new file mode 100644 index 0000000..22dc1c4 --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/AudioMapper.java @@ -0,0 +1,23 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.AudioDTO; +import com.dmitrenko.domain.Audio; +import org.springframework.stereotype.Component; + +@Component +public class AudioMapper extends AbstractMapper { + + @Override + public AudioDTO mapObjectToDTO(Audio audio) { + if (audio == null) { + return null; + } + + AudioDTO.AudioDTOBuilder audioDTO = AudioDTO.builder(); + audioDTO.id(audio.getId()); + audioDTO.duration(audio.getDuration()); + audioDTO.gameChatId(audio.getGameChatId()); + + return audioDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/mapper/GameChatMapper.java b/src/main/java/com/dmitrenko/mapper/GameChatMapper.java new file mode 100644 index 0000000..d559bc9 --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/GameChatMapper.java @@ -0,0 +1,23 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.GameChatDTO; +import com.dmitrenko.domain.GameChat; +import org.springframework.stereotype.Component; + +@Component +public class GameChatMapper extends AbstractMapper { + + @Override + public GameChatDTO mapObjectToDTO(GameChat gameChat) { + if (gameChat == null) { + return null; + } + + GameChatDTO.GameChatDTOBuilder gameChatDTO = GameChatDTO.builder(); + gameChatDTO.id(gameChat.getId()); + gameChatDTO.name(gameChat.getName()); + gameChatDTO.gameId(gameChat.getGameId()); + + return gameChatDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/mapper/GameMapper.java b/src/main/java/com/dmitrenko/mapper/GameMapper.java new file mode 100644 index 0000000..07ca3ad --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/GameMapper.java @@ -0,0 +1,24 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.GameDTO; +import com.dmitrenko.domain.Game; +import org.springframework.stereotype.Component; + +@Component +public class GameMapper extends AbstractMapper { + + @Override + public GameDTO mapObjectToDTO(Game game) { + if (game == null) { + return null; + } + + GameDTO.GameDTOBuilder gameDTO = GameDTO.builder(); + gameDTO.id(game.getId()); + gameDTO.name(game.getName()); + gameDTO.price(game.getPrice()); + gameDTO.category(game.getCategory()); + + return gameDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/mapper/MediaMapper.java b/src/main/java/com/dmitrenko/mapper/MediaMapper.java new file mode 100644 index 0000000..2e13645 --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/MediaMapper.java @@ -0,0 +1,25 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.MediaDTO; +import com.dmitrenko.domain.Media; +import org.springframework.stereotype.Component; + +@Component +public class MediaMapper extends AbstractMapper { + + @Override + public MediaDTO mapObjectToDTO(Media media) { + if (media == null) { + return null; + } + + MediaDTO.MediaDTOBuilder mediaDTO = MediaDTO.builder(); + mediaDTO.id(media.getId()); + mediaDTO.name(media.getName()); + mediaDTO.size(media.getSize()); + mediaDTO.date(media.getDate()); + mediaDTO.gameChatId(media.getGameChatId()); + + return mediaDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/mapper/MessageMapper.java b/src/main/java/com/dmitrenko/mapper/MessageMapper.java new file mode 100644 index 0000000..ac97666 --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/MessageMapper.java @@ -0,0 +1,24 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.MessageDTO; +import com.dmitrenko.domain.Message; +import org.springframework.stereotype.Component; + +@Component +public class MessageMapper extends AbstractMapper { + + @Override + public MessageDTO mapObjectToDTO(Message messages) { + if (messages == null) { + return null; + } + + MessageDTO.MessageDTOBuilder messageDTO = MessageDTO.builder(); + messageDTO.id(messages.getId()); + messageDTO.date(messages.getDate()); + messageDTO.message(messages.getMessage()); + messageDTO.gameChatId(messages.getGameChatId()); + + return messageDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/mapper/PaymentMapper.java b/src/main/java/com/dmitrenko/mapper/PaymentMapper.java new file mode 100644 index 0000000..9d6989a --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/PaymentMapper.java @@ -0,0 +1,25 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.PaymentDTO; +import com.dmitrenko.domain.Payment; +import org.springframework.stereotype.Component; + +@Component +public class PaymentMapper extends AbstractMapper { + + @Override + public PaymentDTO mapObjectToDTO(Payment payment) { + if (payment == null) { + return null; + } + + PaymentDTO.PaymentDTOBuilder paymentDTO = PaymentDTO.builder(); + paymentDTO.id(payment.getId()); + paymentDTO.cardNumber(payment.getCardNumber()); + paymentDTO.expirationDate(payment.getExpirationDate()); + paymentDTO.cvc(payment.getCvc()); + paymentDTO.name(payment.getName()); + + return paymentDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/mapper/SecurityMapper.java b/src/main/java/com/dmitrenko/mapper/SecurityMapper.java new file mode 100644 index 0000000..a3a7d9a --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/SecurityMapper.java @@ -0,0 +1,22 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.SecurityDTO; +import com.dmitrenko.domain.Security; +import org.springframework.stereotype.Component; + +@Component +public class SecurityMapper extends AbstractMapper { + + @Override + public SecurityDTO mapObjectToDTO(Security security) { + if (security == null) { + return null; + } + + SecurityDTO.SecurityDTOBuilder securityDTO = SecurityDTO.builder(); + securityDTO.login(security.getLogin()); + securityDTO.password(security.getPassword()); + + return securityDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/mapper/UserMapper.java b/src/main/java/com/dmitrenko/mapper/UserMapper.java new file mode 100644 index 0000000..a7d6835 --- /dev/null +++ b/src/main/java/com/dmitrenko/mapper/UserMapper.java @@ -0,0 +1,29 @@ +package com.dmitrenko.mapper; + +import com.dmitrenko.DTO.UserDTO; +import com.dmitrenko.domain.User; +import org.springframework.stereotype.Component; + +@Component +public class UserMapper extends AbstractMapper { + + @Override + public UserDTO mapObjectToDTO(User user) { + if (user == null) { + return null; + } + + UserDTO.UserDTOBuilder userDTO = UserDTO.builder(); + userDTO.id(user.getId()); + userDTO.name(user.getName()); + userDTO.surname(user.getSurname()); + userDTO.username(user.getUsername()); + userDTO.phoneNumber(user.getPhoneNumber()); + userDTO.inform(user.getInform()); + userDTO.gameChatId(user.getGameChatId()); + userDTO.paymentId(user.getPaymentId()); + userDTO.securityLogin(user.getSecurityLogin()); + + return userDTO.build(); + } +} diff --git a/src/main/java/com/dmitrenko/repository/AudioRepository.java b/src/main/java/com/dmitrenko/repository/AudioRepository.java new file mode 100644 index 0000000..b41f62d --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/AudioRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.Audio; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AudioRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/repository/GameChatRepository.java b/src/main/java/com/dmitrenko/repository/GameChatRepository.java new file mode 100644 index 0000000..c5c6ca4 --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/GameChatRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.GameChat; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface GameChatRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/repository/GameRepository.java b/src/main/java/com/dmitrenko/repository/GameRepository.java new file mode 100644 index 0000000..a4df49c --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/GameRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.Game; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface GameRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/repository/MediaRepository.java b/src/main/java/com/dmitrenko/repository/MediaRepository.java new file mode 100644 index 0000000..24f15d2 --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/MediaRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.Media; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MediaRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/repository/MessageRepository.java b/src/main/java/com/dmitrenko/repository/MessageRepository.java new file mode 100644 index 0000000..2aa9291 --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/MessageRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.Message; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MessageRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/repository/PaymentRepository.java b/src/main/java/com/dmitrenko/repository/PaymentRepository.java new file mode 100644 index 0000000..fab1d83 --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/PaymentRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.Payment; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PaymentRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/repository/SecurityRepository.java b/src/main/java/com/dmitrenko/repository/SecurityRepository.java new file mode 100644 index 0000000..2dd4cb7 --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/SecurityRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.Security; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface SecurityRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/repository/UserRepository.java b/src/main/java/com/dmitrenko/repository/UserRepository.java new file mode 100644 index 0000000..fe83fd1 --- /dev/null +++ b/src/main/java/com/dmitrenko/repository/UserRepository.java @@ -0,0 +1,9 @@ +package com.dmitrenko.repository; + +import com.dmitrenko.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { +} diff --git a/src/main/java/com/dmitrenko/service/AbstractService.java b/src/main/java/com/dmitrenko/service/AbstractService.java new file mode 100644 index 0000000..029f010 --- /dev/null +++ b/src/main/java/com/dmitrenko/service/AbstractService.java @@ -0,0 +1,40 @@ +package com.dmitrenko.service; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public abstract class AbstractService { + protected abstract JpaRepository getRepository(); + + public List getAll() { + return getRepository().findAll(); + } + + public T getById(ID id) { + return getRepository().findById(id) + .orElse(null); + } + + public T create(T object) { + return getRepository().save(object); + } + + public T update(ID id, T object) { + object = getRepository().getById(id); + if (object != null) { + return getRepository().save(object); + } else { + return null; + } + } + + public T delete(ID id) { + T object = getRepository().getById(id); + if (object != null) { + getRepository().deleteById(id); + return object; + } + return null; + } +} diff --git a/src/main/java/com/dmitrenko/service/AudioService.java b/src/main/java/com/dmitrenko/service/AudioService.java new file mode 100644 index 0000000..d693566 --- /dev/null +++ b/src/main/java/com/dmitrenko/service/AudioService.java @@ -0,0 +1,18 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.Audio; +import com.dmitrenko.repository.AudioRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class AudioService extends AbstractService{ + public AudioRepository audioRepository; + + @Override + protected JpaRepository getRepository() { + return audioRepository; + } +} diff --git a/src/main/java/com/dmitrenko/service/GameChatService.java b/src/main/java/com/dmitrenko/service/GameChatService.java new file mode 100644 index 0000000..9189ba7 --- /dev/null +++ b/src/main/java/com/dmitrenko/service/GameChatService.java @@ -0,0 +1,18 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.GameChat; +import com.dmitrenko.repository.GameChatRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class GameChatService extends AbstractService { + public GameChatRepository gameChatRepository; + + @Override + protected JpaRepository getRepository() { + return gameChatRepository; + } +} diff --git a/src/main/java/com/dmitrenko/service/GameService.java b/src/main/java/com/dmitrenko/service/GameService.java new file mode 100644 index 0000000..dd53a90 --- /dev/null +++ b/src/main/java/com/dmitrenko/service/GameService.java @@ -0,0 +1,18 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.Game; +import com.dmitrenko.repository.GameRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class GameService extends AbstractService { + public GameRepository gameRepository; + + @Override + protected JpaRepository getRepository() { + return gameRepository; + } +} diff --git a/src/main/java/com/dmitrenko/service/MediaService.java b/src/main/java/com/dmitrenko/service/MediaService.java new file mode 100644 index 0000000..4579d4a --- /dev/null +++ b/src/main/java/com/dmitrenko/service/MediaService.java @@ -0,0 +1,18 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.Media; +import com.dmitrenko.repository.MediaRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class MediaService extends AbstractService { + public MediaRepository mediaRepository; + + @Override + protected JpaRepository getRepository() { + return mediaRepository; + } +} diff --git a/src/main/java/com/dmitrenko/service/MessageService.java b/src/main/java/com/dmitrenko/service/MessageService.java new file mode 100644 index 0000000..f618181 --- /dev/null +++ b/src/main/java/com/dmitrenko/service/MessageService.java @@ -0,0 +1,18 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.Message; +import com.dmitrenko.repository.MessageRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class MessageService extends AbstractService { + public MessageRepository messageRepository; + + @Override + protected JpaRepository getRepository() { + return messageRepository; + } +} diff --git a/src/main/java/com/dmitrenko/service/PaymentService.java b/src/main/java/com/dmitrenko/service/PaymentService.java new file mode 100644 index 0000000..859b3ae --- /dev/null +++ b/src/main/java/com/dmitrenko/service/PaymentService.java @@ -0,0 +1,28 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.Payment; +import com.dmitrenko.repository.PaymentRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class PaymentService extends AbstractService { + public PaymentRepository paymentRepository; + + @Override + protected JpaRepository getRepository() { + return paymentRepository; + } + + public Payment update(Integer id, Payment payment) { + if (getRepository().findById(id).isPresent()) { + Payment payment1 = paymentRepository.findById(id).get(); + payment1.setCardNumber(payment.getCardNumber()); + return getRepository().save(payment1); + } else { + return null; + } + } +} diff --git a/src/main/java/com/dmitrenko/service/SecurityService.java b/src/main/java/com/dmitrenko/service/SecurityService.java new file mode 100644 index 0000000..b2d5257 --- /dev/null +++ b/src/main/java/com/dmitrenko/service/SecurityService.java @@ -0,0 +1,18 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.Security; +import com.dmitrenko.repository.SecurityRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class SecurityService extends AbstractService { + public SecurityRepository securityRepository; + + @Override + protected JpaRepository getRepository() { + return securityRepository; + } +} diff --git a/src/main/java/com/dmitrenko/service/UserService.java b/src/main/java/com/dmitrenko/service/UserService.java new file mode 100644 index 0000000..b38f48c --- /dev/null +++ b/src/main/java/com/dmitrenko/service/UserService.java @@ -0,0 +1,18 @@ +package com.dmitrenko.service; + +import com.dmitrenko.domain.User; +import com.dmitrenko.repository.UserRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class UserService extends AbstractService { + public UserRepository userRepository; + + @Override + protected JpaRepository getRepository() { + return userRepository; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..0a0168b --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,14 @@ +spring.datasource.url=jdbc:mysql://localhost:3306/dmitrenko?useSSL=false&allowPublicKeyRetrieval=true +spring.datasource.username=root +spring.datasource.password=li1207za03 +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect + +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always +management.metrics.tags.application=Application + +spring.jpa.show-sql=true +spring.jpa.hibernate.ddl-auto=update + +server.port=8080 diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt new file mode 100644 index 0000000..9e836ec --- /dev/null +++ b/src/main/resources/banner.txt @@ -0,0 +1,8 @@ + ___ _ _ __ _____ _ _ +|_ _|_ __ | |_ ___ _ __ _ __ ___| |_ ___ / _| |_ _| |__ (_)_ __ __ _ ___ + | || '_ \| __/ _ \ '__| '_ \ / _ \ __| / _ \| |_ | | | '_ \| | '_ \ / _` / __| + | || | | | || __/ | | | | | __/ |_ | (_) | _| | | | | | | | | | | (_| \__ \ +|___|_| |_|\__\___|_| |_| |_|\___|\__| \___/|_| |_| |_| |_|_|_| |_|\__, |___/ + |___/ + + diff --git a/src/main/resources/data/lab3.sql b/src/main/resources/data/lab3.sql new file mode 100644 index 0000000..0dd5da4 --- /dev/null +++ b/src/main/resources/data/lab3.sql @@ -0,0 +1,199 @@ +CREATE DATABASE IF NOT EXISTS dmitrenko; +USE dmitrenko; + +DROP TABLE IF EXISTS user; +DROP TABLE IF EXISTS payment; +DROP TABLE IF EXISTS security; +DROP TABLE IF EXISTS message; +DROP TABLE IF EXISTS audio; +DROP TABLE IF EXISTS media; +DROP TABLE IF EXISTS game_chat; +DROP TABLE IF EXISTS game; + + +CREATE TABLE payment ( + id INT NOT NULL AUTO_INCREMENT, + card_number VARCHAR(45) NOT NULL, + expiration_date CHAR(4) NOT NULL , + cvc CHAR(3) NOT NULL, + name VARCHAR(45) NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE security ( + login VARCHAR(30) NOT NULL, + password VARCHAR(45) NOT NULL, + PRIMARY KEY (login) +); + +CREATE TABLE game ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(45) NOT NULL, + price VARCHAR(300), + category VARCHAR(45) NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE game_chat ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(45) NOT NULL, + game_id INT NOT NULL, + PRIMARY KEY(id), + INDEX idx_fk_game_chat_game (game_id ASC), + CONSTRAINT FK_game_chat_game + FOREIGN KEY (game_id) + REFERENCES game (id) +); + +CREATE TABLE message ( + id INT NOT NULL AUTO_INCREMENT, + date DATE NOT NULL, + message LONGTEXT NOT NULL, + game_chat_id INT NOT NULL, + PRIMARY KEY (id), + CONSTRAINT FK_message_game_chat + FOREIGN KEY (game_chat_id) + REFERENCES game_chat (id) +); + +CREATE TABLE audio ( + id INT NOT NULL AUTO_INCREMENT, + duration INT NOT NULL, + game_chat_id INT NOT NULL, + PRIMARY KEY (id), + CONSTRAINT FK_audio_game_chat + FOREIGN KEY (game_chat_id) + REFERENCES game_chat (id) +); + +CREATE TABLE media ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(45) NOT NULL, + size VARCHAR(45) NOT NULL, + date DATE NOT NULL, + game_chat_id INT NOT NULL, + PRIMARY KEY (id), + CONSTRAINT FK_media_game_chat + FOREIGN KEY (game_chat_id) + REFERENCES game_chat (id) +); + +CREATE TABLE user ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(45) NOT NULL, + surname VARCHAR(45), + username VARCHAR(45) NOT NULL, + phone_number VARCHAR(45) NOT NULL, + inform VARCHAR(500), + game_chat_id INT NOT NULL, + payment_id INT NOT NULL, + security_login VARCHAR(30) NOT NULL, + PRIMARY KEY (id), + INDEX idx_fk_user_game_chat (game_chat_id ASC), + INDEX idx_fk_user_security (security_login ASC), + CONSTRAINT FK_user_game_chat + FOREIGN KEY (game_chat_id) + REFERENCES game_chat (id), + CONSTRAINT FK_user_payment + FOREIGN KEY (payment_id) + REFERENCES payment (id), + CONSTRAINT FK_user_security + FOREIGN KEY (security_login) + REFERENCES security (login) +); + +INSERT INTO payment (`card_number`, `expiration_date`, `cvc`, `name`) VALUES + ('4856385546', '3436', '463', 'Vitaliy'), + ('2975935836', '6435', '054', 'Svitlana'), + ('543974473', '7747', '123', 'Taras'), + ('4597357945', '4868', '342', 'Polina'), + ('5285785785', '4785', '463', 'Nazar'), + ('45862583563', '2695', '648', 'Mariya'), + ('53593575733', '9532', '368', 'Pavlo'), + ('38579285572', '5096', '972', 'Anastasiya'), + ('59729759535', '3575', '082', 'Anna'), + ('28952897574', '4930', '580', 'Maks'); + +INSERT INTO security (`login`, `password`) VALUES + ('2001pavlo', 'thvr5'), + ('alex14092', 'lfbbm'), + ('country32', 'thtrh'), + ('light454', '5754vht'), + ('main234', 'jv563v'), + ('marksum234', 'trhhht'), + ('moon5556', 'ryvr356'), + ('olena1208', 't4gds'), + ('sea120393', '2353x'), + ('vlad124', 'jkrrg'); + +INSERT INTO game (`name`, `price`, `category`) VALUES + ('Kingdom: New Lands', '15$', 'Arcade'), + ('League of Legends', 'Free', 'Arcade'), + ('Among Us', '5$', 'Party'), + ('Minion Masters', 'Free', 'Arcade'), + ('Rocket League', '25$', 'Arcade'), + ('Pokémon GO', 'Free', 'Arcade'), + ('Valorant', 'Free', 'Strategy'), + ('Karuta', '12$', 'Cards'), + ('King of the Hat', 'Free', 'Party'), + ('Last Year: The Nightmare', '10$', 'Horror'); + +INSERT INTO game_chat (`name`, `game_id`) VALUES + ('League of Legends', '2'), + ('Among Us', '3'), + ('Minion Masters', '4'), + ('Rocket League', '5'), + ('Pokémon GO', '6'), + ('Valorant', '7'), + ('Karuta ', '8'), + ('King of the Hat', '9'), + ('Last Year: The Nightmare', '10'), + ('Kingdom: New Lands', '1'); + +INSERT INTO audio (`duration`, `game_chat_id`) VALUES + ('12', '2'), + ('23', '3'), + ('12', '4'), + ('45', '5'), + ('34', '6'), + ('52', '7'), + ('26', '8'), + ('34', '9'), + ('27', '10'), + ('3', '1'); + +INSERT INTO media (`name`, `size`, `date`, `game_chat_id`) VALUES + ('league', '4МБ', '2021-09-23', '2'), + ('among us', '3.8МБ', '2021-03-12', '3'), + ('minion', '12МБ', '2021-03-15', '4'), + ('rocket', '5МБ', '2021-08-25', '5'), + ('pokemon', '5.5МБ', '2021-08-24', '6'), + ('valorant', '6МБ', '2021-04-19', '7'), + ('karuta', '4.9МБ', '2021-11-28', '8'), + ('king', '3.7МБ', '2021-02-19', '9'), + ('last nigtmare', '5МБ', '2021-07-12', '10'), + ('kingdom', '7МБ', '2021-09-17', '1'); + +INSERT INTO message (`date`, `message`, `game_chat_id`) VALUES + ('2021-09-12', 'league', '2'), + ('2021-11-14', 'among us', '3'), + ('2021-02-14', 'minion masters', '4'), + ('2021-02-14', 'rocket league', '5'), + ('2021-03-14', 'pokemon', '6'), + ('2021-06-12', 'valorant', '7'), + ('2021-07-23', 'karuta', '8'), + ('2021-05-09', 'hat king', '9'), + ('2021-03-23', 'last year', '10'), + ('2021-04-02', 'new lands of kingdom', '1'); + +INSERT INTO user (`name`, `username`, `phone_number`, `game_chat_id`, `payment_id`, `security_login`) VALUES + ('Vitaliy', 'vitak', '+380956474358', '1', '1', 'alex14092'), + ('Svitlana', 'sveta', '+380689376238', '2', '2', 'country32'), + ('Taras', 'taraas', '+380273846283', '3', '3', 'light454'), + ('Polina', 'ppolina', '0982428479', '4', '4', 'main234'), + ('Nazar', 'nnazar', '0973742846', '5', '5', 'moon5556'), + ('Mariya', 'mariyaa', '0953286373', '6', '6', 'sea120393'), + ('Pavlo', 'pavvlo', '0662829476', '7', '7', '2001pavlo'), + ('Anastasia', 'nastya', '+80968373883', '8', '8', 'vlad124'), + ('Anna', 'annaa', '0663439827', '9', '9', 'olena1208'), + ('Maks', 'maksim', '0983736273', '10', '10', 'marksum234');