diff --git a/pom.xml b/pom.xml index 88282ee..bf9a43a 100644 --- a/pom.xml +++ b/pom.xml @@ -25,28 +25,34 @@ org.projectlombok lombok + org.springframework.boot spring-boot-starter-web + com.h2database h2 + org.springframework.boot spring-boot-starter-data-jpa + org.springdoc springdoc-openapi-ui 1.7.0 + org.junit.jupiter junit-jupiter-engine test + org.springframework.boot spring-boot-starter-test diff --git a/src/main/java/com/example/nto/App.java b/src/main/java/com/example/nto/App.java index d771a13..cfd9169 100644 --- a/src/main/java/com/example/nto/App.java +++ b/src/main/java/com/example/nto/App.java @@ -1,9 +1,11 @@ package com.example.nto; +import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { + SpringApplication.run(App.class); } } diff --git a/src/main/java/com/example/nto/controller/CodeController.java b/src/main/java/com/example/nto/controller/CodeController.java new file mode 100644 index 0000000..92ba184 --- /dev/null +++ b/src/main/java/com/example/nto/controller/CodeController.java @@ -0,0 +1,18 @@ +package com.example.nto.controller; + +import com.example.nto.entity.Code; +import com.example.nto.service.CodeService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +public class CodeController { + + private final CodeService codeService; + + @PatchMapping("/api/{login}/open") + public Code update(@PathVariable String login, @RequestBody Code newCode) { + return codeService.update(login, newCode); + } +} diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java index fcb92ec..a9e251c 100644 --- a/src/main/java/com/example/nto/controller/EmployeeController.java +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -1,4 +1,25 @@ package com.example.nto.controller; +import com.example.nto.entity.Employee; +import com.example.nto.service.EmployeeService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor public class EmployeeController { + + private final EmployeeService employeeService; + + @GetMapping("api/{login}/info") + public Employee findByLogin(@PathVariable String login) { + return employeeService.findByLogin(login); + } + + @GetMapping("api/{login}/auth") + public boolean findExistByLogin(@PathVariable String login) { + return employeeService.findExistByLogin(login); + } } diff --git a/src/main/java/com/example/nto/entity/Code.java b/src/main/java/com/example/nto/entity/Code.java index e1009f5..637d9be 100644 --- a/src/main/java/com/example/nto/entity/Code.java +++ b/src/main/java/com/example/nto/entity/Code.java @@ -5,11 +5,18 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.persistence.*; + @Data +@Entity @Builder @NoArgsConstructor @AllArgsConstructor +@Table(name = "Code") public class Code { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; + @Column(name = "value") private long value; } diff --git a/src/main/java/com/example/nto/entity/Employee.java b/src/main/java/com/example/nto/entity/Employee.java index aa57aa4..ac539a3 100644 --- a/src/main/java/com/example/nto/entity/Employee.java +++ b/src/main/java/com/example/nto/entity/Employee.java @@ -5,17 +5,27 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.persistence.*; import java.time.LocalDateTime; @Data +@Entity @Builder @NoArgsConstructor @AllArgsConstructor +@Table(name = "Employee") public class Employee { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; + @Column(name = "login") private String login; + @Column(name = "name") private String name; + @Column(name = "photo") private String photo; + @Column(name = "position") private String position; + @Column(name = "lastVisit") private LocalDateTime lastVisit; } diff --git a/src/main/java/com/example/nto/repository/CodeRepository.java b/src/main/java/com/example/nto/repository/CodeRepository.java index 4ca3152..f2edf53 100644 --- a/src/main/java/com/example/nto/repository/CodeRepository.java +++ b/src/main/java/com/example/nto/repository/CodeRepository.java @@ -2,6 +2,7 @@ package com.example.nto.repository; import com.example.nto.entity.Code; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; -public interface CodeRepository extends JpaRepository { -} +@Repository +public interface CodeRepository extends JpaRepository {} diff --git a/src/main/java/com/example/nto/repository/EmployeeRepository.java b/src/main/java/com/example/nto/repository/EmployeeRepository.java index e1265db..c45c153 100644 --- a/src/main/java/com/example/nto/repository/EmployeeRepository.java +++ b/src/main/java/com/example/nto/repository/EmployeeRepository.java @@ -2,6 +2,15 @@ package com.example.nto.repository; import com.example.nto.entity.Employee; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +@Repository public interface EmployeeRepository extends JpaRepository { + + @Query("select e from Employee e where e.login = ?1") + Employee findByLogin(String login); + + @Query("select count(e) = 1 from Employee e where login = ?1") + boolean findExistByLogin(String login); } diff --git a/src/main/java/com/example/nto/service/CodeService.java b/src/main/java/com/example/nto/service/CodeService.java new file mode 100644 index 0000000..6f944ac --- /dev/null +++ b/src/main/java/com/example/nto/service/CodeService.java @@ -0,0 +1,9 @@ +package com.example.nto.service; + + +import com.example.nto.entity.Code; + +public interface CodeService { + + Code update(String login, Code newCode); +} diff --git a/src/main/java/com/example/nto/service/EmployeeService.java b/src/main/java/com/example/nto/service/EmployeeService.java index 7b91091..b140c24 100644 --- a/src/main/java/com/example/nto/service/EmployeeService.java +++ b/src/main/java/com/example/nto/service/EmployeeService.java @@ -1,4 +1,9 @@ package com.example.nto.service; +import com.example.nto.entity.Employee; + public interface EmployeeService { + + Employee findByLogin(String login); + Boolean findExistByLogin(String login); } diff --git a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java index 2414533..a2e0f01 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java @@ -1,6 +1,44 @@ package com.example.nto.service.impl; +import com.example.nto.entity.Code; +import com.example.nto.entity.Employee; +import com.example.nto.repository.CodeRepository; +import com.example.nto.repository.EmployeeRepository; +import com.example.nto.service.CodeService; import com.example.nto.service.EmployeeService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class EmployeeServiceImpl implements EmployeeService, CodeService { + + private final EmployeeRepository employeeRepository; + private final CodeRepository codeRepository; + + @Override + public Employee findByLogin(String login) { + return employeeRepository.findByLogin(login); + } + + @Override + public Boolean findExistByLogin(String login) { + return employeeRepository.findExistByLogin(login); + } + + @Override + public Code update(String login, Code newCode) { + long employeeId = findByLogin(login).getId(); + + Optional codeOptional = codeRepository.findById(employeeId); + if (codeOptional.isEmpty()) throw new RuntimeException("Code with id " + employeeId + "is not found"); + + Code code = codeOptional.get(); + code.setValue(newCode.getValue()); + + return codeRepository.save(code); + } -public class EmployeeServiceImpl implements EmployeeService { }