From 7853f77e14fe24e92ae3fa35700ad76d90262b43 Mon Sep 17 00:00:00 2001 From: Daniil Makeev Date: Tue, 18 Feb 2025 20:24:07 +0300 Subject: [PATCH] addded all routes from the second task --- .../controller/EmployeeController.java | 45 +++++++++++++++++++ .../exceptions/BadRequestException.java | 8 ++++ .../exceptions/UnauthorizedException.java | 8 ++++ .../repository/EmployeeRepository.java | 12 +++++ .../repository/VisitRepository.java | 10 +++++ .../service/EmployeeService.java | 45 +++++++++++++++++++ .../service/VisitService.java | 40 +++++++++++++++++ 7 files changed, 168 insertions(+) create mode 100644 src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java create mode 100644 src/main/java/com/example/onomatopoeiaback/exceptions/BadRequestException.java create mode 100644 src/main/java/com/example/onomatopoeiaback/exceptions/UnauthorizedException.java create mode 100644 src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java create mode 100644 src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java create mode 100644 src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java create mode 100644 src/main/java/com/example/onomatopoeiaback/service/VisitService.java diff --git a/src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java b/src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java new file mode 100644 index 0000000..d590891 --- /dev/null +++ b/src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java @@ -0,0 +1,45 @@ +package com.example.onomatopoeiaback.controller; + + +import com.example.onomatopoeiaback.domain.employee.Employee; +import com.example.onomatopoeiaback.domain.visit.Visit; +import com.example.onomatopoeiaback.domain.visit.VisitDTO; +import com.example.onomatopoeiaback.service.EmployeeService; +import com.example.onomatopoeiaback.service.VisitService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api") +public class EmployeeController { + private final VisitService visitService; + private final EmployeeService employeeService; + + public EmployeeController(EmployeeService employeeService, VisitService visitService) { + this.employeeService = employeeService; + this.visitService = visitService; + } + + @GetMapping("/hello") + public String hello(@RequestParam(value = "name", defaultValue = "World") String name) { + return String.format("Hello %s!", name); + } + + @GetMapping("/{username}/info") + public ResponseEntity info(@PathVariable String username) { + return employeeService.info(username); + } + + @GetMapping("/{username}/auth") + public ResponseEntity auth(@PathVariable String username) { + return new ResponseEntity<>(null, employeeService.auth(username)); + } + + @PatchMapping("/{username}/open") + public ResponseEntity open(@PathVariable String username, VisitDTO visitDTO) { + visitService.open(username, visitDTO.getValue()); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/src/main/java/com/example/onomatopoeiaback/exceptions/BadRequestException.java b/src/main/java/com/example/onomatopoeiaback/exceptions/BadRequestException.java new file mode 100644 index 0000000..1695768 --- /dev/null +++ b/src/main/java/com/example/onomatopoeiaback/exceptions/BadRequestException.java @@ -0,0 +1,8 @@ +package com.example.onomatopoeiaback.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "Что-то пошло не так") +public class BadRequestException extends RuntimeException { +} diff --git a/src/main/java/com/example/onomatopoeiaback/exceptions/UnauthorizedException.java b/src/main/java/com/example/onomatopoeiaback/exceptions/UnauthorizedException.java new file mode 100644 index 0000000..3be2014 --- /dev/null +++ b/src/main/java/com/example/onomatopoeiaback/exceptions/UnauthorizedException.java @@ -0,0 +1,8 @@ +package com.example.onomatopoeiaback.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.UNAUTHORIZED, reason = "Пользователь не авторизован") +public class UnauthorizedException extends RuntimeException { +} diff --git a/src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java b/src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java new file mode 100644 index 0000000..34b49cf --- /dev/null +++ b/src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java @@ -0,0 +1,12 @@ +package com.example.onomatopoeiaback.repository; + +import com.example.onomatopoeiaback.domain.employee.Employee; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EmployeeRepository extends JpaRepository { + Employee getEmployeeById(Long id); + + Employee getEmployeesByLogin(String login); +} diff --git a/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java b/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java new file mode 100644 index 0000000..e4f8f2c --- /dev/null +++ b/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java @@ -0,0 +1,10 @@ +package com.example.onomatopoeiaback.repository; + +import com.example.onomatopoeiaback.domain.visit.Visit; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface VisitRepository extends JpaRepository { + Visit getVisitByValue(long value); +} diff --git a/src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java b/src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java new file mode 100644 index 0000000..080ec5f --- /dev/null +++ b/src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java @@ -0,0 +1,45 @@ +package com.example.onomatopoeiaback.service; + +import com.example.onomatopoeiaback.domain.employee.Employee; +import com.example.onomatopoeiaback.repository.EmployeeRepository; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +@Service +public class EmployeeService { + + private final EmployeeRepository employeeRepository; + + public EmployeeService(EmployeeRepository employeeRepository) { + this.employeeRepository = employeeRepository; + } + + public HttpStatus auth(String login) { + Employee employee = employeeRepository.getEmployeesByLogin(login); + + if (employee == null) return HttpStatus.UNAUTHORIZED; + LocalDateTime localDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS); + employee.setLastVisit(localDateTime); + employeeRepository.save(employee); + + return HttpStatus.OK; + } + + public ResponseEntity info(String login) { + Employee employee = employeeRepository.getEmployeesByLogin(login); + HttpStatus response_status = HttpStatus.OK; + + if (employee == null) response_status = HttpStatus.UNAUTHORIZED; + else { + LocalDateTime localDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS); + employee.setLastVisit(localDateTime); + employeeRepository.save(employee); + } + + return new ResponseEntity<>(employee, response_status); + } +} diff --git a/src/main/java/com/example/onomatopoeiaback/service/VisitService.java b/src/main/java/com/example/onomatopoeiaback/service/VisitService.java new file mode 100644 index 0000000..bc1de02 --- /dev/null +++ b/src/main/java/com/example/onomatopoeiaback/service/VisitService.java @@ -0,0 +1,40 @@ +package com.example.onomatopoeiaback.service; + + +import com.example.onomatopoeiaback.domain.employee.Employee; +import com.example.onomatopoeiaback.domain.visit.Visit; +import com.example.onomatopoeiaback.exceptions.BadRequestException; +import com.example.onomatopoeiaback.exceptions.UnauthorizedException; +import com.example.onomatopoeiaback.repository.EmployeeRepository; +import com.example.onomatopoeiaback.repository.VisitRepository; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +@Service +public class VisitService { + private final VisitRepository visitRepository; + private final EmployeeRepository employeeRepository; + + public VisitService(VisitRepository visitRepository, EmployeeRepository employeeRepository) { + this.visitRepository = visitRepository; + this.employeeRepository = employeeRepository; + } + + public void open(String login, Long value) { + Visit visit = visitRepository.getVisitByValue(value); + Employee employee = employeeRepository.getEmployeesByLogin(login); + + if (employee == null) { + throw new UnauthorizedException(); + } + else if (visit == null) { + throw new BadRequestException(); + } + + LocalDateTime localDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS); + employee.setLastVisit(localDateTime); + employeeRepository.saveAndFlush(employee); + } +}