From bac8daaf6ac1be100378b0311b752f3ab0604e8e Mon Sep 17 00:00:00 2001 From: esoe Date: Fri, 8 Nov 2024 16:03:10 +0300 Subject: [PATCH] swagger --- main/api-swagger/positions.yml | 55 +++++++++++++++++++ main/pom.xml | 13 +++++ .../main/api/position/PositionController.java | 39 +++++++++++++ .../main/api/position/PositionEntity.java | 24 ++++++++ .../main/api/position/PositionRepository.java | 9 +++ .../main/api/position/PositionService.java | 12 ++++ .../main/hello/HelloController.java | 18 ++++++ main/src/main/resources/application.yaml | 8 +++ main/src/main/resources/static/hello/main.md | 1 + main/src/main/resources/templates/hello.html | 14 +++++ 10 files changed, 193 insertions(+) create mode 100644 main/api-swagger/positions.yml create mode 100644 main/src/main/java/gsp/technologies/main/api/position/PositionController.java create mode 100644 main/src/main/java/gsp/technologies/main/api/position/PositionEntity.java create mode 100644 main/src/main/java/gsp/technologies/main/api/position/PositionRepository.java create mode 100644 main/src/main/java/gsp/technologies/main/api/position/PositionService.java create mode 100644 main/src/main/java/gsp/technologies/main/hello/HelloController.java create mode 100644 main/src/main/resources/static/hello/main.md create mode 100644 main/src/main/resources/templates/hello.html diff --git a/main/api-swagger/positions.yml b/main/api-swagger/positions.yml new file mode 100644 index 0000000..56f661d --- /dev/null +++ b/main/api-swagger/positions.yml @@ -0,0 +1,55 @@ +openapi: '3.0.3' +info: + title: exam-api + description: API for exam + termsOfService: 'http://localhost:100/hello' + version: '1.0' +servers: + - url: http://localhost:100 +paths: + /hello: + get: + responses: + '200': + description: OK + /api/v1/positions: + get: + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/position" + description: Get all positions + post: + description: Создание новой должности + requestBody: + content: + application/json: + schema: + type: object + required: + - name + properties: + name: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/position" +components: + schemas: + position: + type: object + required: + - id + - name + properties: + id: + type: integer + name: + type: string diff --git a/main/pom.xml b/main/pom.xml index 04b7338..55037da 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -40,6 +40,7 @@ org.springframework.boot spring-boot-starter-thymeleaf + org.springframework.boot spring-boot-starter-web @@ -50,6 +51,18 @@ lombok true + + + org.postgresql + postgresql + runtime + + + + org.springframework.boot + spring-boot-starter-data-jpa + + org.springframework.boot spring-boot-starter-test diff --git a/main/src/main/java/gsp/technologies/main/api/position/PositionController.java b/main/src/main/java/gsp/technologies/main/api/position/PositionController.java new file mode 100644 index 0000000..0b51600 --- /dev/null +++ b/main/src/main/java/gsp/technologies/main/api/position/PositionController.java @@ -0,0 +1,39 @@ +package gsp.technologies.main.api.position; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(path = "/api/v1/positions") +public class PositionController { + private static final Logger log = LoggerFactory.getLogger(PositionController.class); + @Autowired + private PositionRepository positionRepo; + + @CrossOrigin + @GetMapping("") + public ResponseEntity getPositions() { + log.info("GET /positions"); + return new ResponseEntity<>(positionRepo.findAll(), HttpStatus.OK); + } + + @CrossOrigin + @PostMapping(path = "", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity savePost(@RequestBody PositionEntity position) { + log.info("POST /position, position: {}", position); + positionRepo.save(position); + return new ResponseEntity<>(position, HttpStatus.CREATED); + } +} diff --git a/main/src/main/java/gsp/technologies/main/api/position/PositionEntity.java b/main/src/main/java/gsp/technologies/main/api/position/PositionEntity.java new file mode 100644 index 0000000..da8d568 --- /dev/null +++ b/main/src/main/java/gsp/technologies/main/api/position/PositionEntity.java @@ -0,0 +1,24 @@ +package gsp.technologies.main.api.position; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +public class PositionEntity { + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private Long id; + private String name; //наименование должности работника + +} diff --git a/main/src/main/java/gsp/technologies/main/api/position/PositionRepository.java b/main/src/main/java/gsp/technologies/main/api/position/PositionRepository.java new file mode 100644 index 0000000..ee019f7 --- /dev/null +++ b/main/src/main/java/gsp/technologies/main/api/position/PositionRepository.java @@ -0,0 +1,9 @@ +package gsp.technologies.main.api.position; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PositionRepository extends JpaRepository { + +} diff --git a/main/src/main/java/gsp/technologies/main/api/position/PositionService.java b/main/src/main/java/gsp/technologies/main/api/position/PositionService.java new file mode 100644 index 0000000..8a31ccb --- /dev/null +++ b/main/src/main/java/gsp/technologies/main/api/position/PositionService.java @@ -0,0 +1,12 @@ +package gsp.technologies.main.api.position; + +import org.springframework.stereotype.Service; + +@Service +public class PositionService { + private final PositionRepository repo; + + public PositionService(PositionRepository repo) { + this.repo = repo; + } +} diff --git a/main/src/main/java/gsp/technologies/main/hello/HelloController.java b/main/src/main/java/gsp/technologies/main/hello/HelloController.java new file mode 100644 index 0000000..26070f2 --- /dev/null +++ b/main/src/main/java/gsp/technologies/main/hello/HelloController.java @@ -0,0 +1,18 @@ +package gsp.technologies.main.hello; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class HelloController { + private static final Logger console = LoggerFactory.getLogger(HelloController.class); + + @CrossOrigin + @GetMapping("/hello") + public String hello(){ + return "hello"; + } +} \ No newline at end of file diff --git a/main/src/main/resources/application.yaml b/main/src/main/resources/application.yaml index 7772aba..4b89cc8 100644 --- a/main/src/main/resources/application.yaml +++ b/main/src/main/resources/application.yaml @@ -1,6 +1,14 @@ spring: application: name: main + jpa: + hibernate: + ddl-auto: update + # database-platform: org.hibernate.dialect.PostgreSQLDialect + datasource: + url: "jdbc:postgresql://localhost:5430/exam" + username: exam + password: exam server: port: 100 diff --git a/main/src/main/resources/static/hello/main.md b/main/src/main/resources/static/hello/main.md new file mode 100644 index 0000000..3b43971 --- /dev/null +++ b/main/src/main/resources/static/hello/main.md @@ -0,0 +1 @@ +# hello \ No newline at end of file diff --git a/main/src/main/resources/templates/hello.html b/main/src/main/resources/templates/hello.html new file mode 100644 index 0000000..f0c8672 --- /dev/null +++ b/main/src/main/resources/templates/hello.html @@ -0,0 +1,14 @@ + + + + + + exam-hello + + + + + + + \ No newline at end of file