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