Add method Forbidden to Utils; change logic of endpoint /employee/open

This commit is contained in:
Denis Oleynik 2025-02-20 10:58:08 +03:00
parent e6ca7e5322
commit 9b2c4501e1
5 changed files with 34 additions and 23 deletions

View File

@ -6,15 +6,19 @@ import org.springframework.http.ResponseEntity;
public class Utils { public class Utils {
public ResponseEntity<ResponseData> NotFound() { public ResponseEntity<ResponseData> NotFound(String message) {
return new ResponseEntity<>(new ResponseData(HttpStatus.UNAUTHORIZED.value(), "Login not found or invalid"), HttpStatus.UNAUTHORIZED); return new ResponseEntity<>(new ResponseData(HttpStatus.UNAUTHORIZED.value(), message), HttpStatus.UNAUTHORIZED);
} }
public ResponseEntity<ResponseData> BadRequest() { public ResponseEntity<ResponseData> BadRequest(String message) {
return new ResponseEntity<>(new ResponseData(HttpStatus.BAD_REQUEST.value(), "Something went wrong"), HttpStatus.BAD_REQUEST); return new ResponseEntity<>(new ResponseData(HttpStatus.BAD_REQUEST.value(), message), HttpStatus.BAD_REQUEST);
} }
public ResponseEntity<ResponseData> Ok(String message) { public ResponseEntity<ResponseData> Ok(String message) {
return new ResponseEntity<>(new ResponseData(HttpStatus.OK.value(), message), HttpStatus.OK); return new ResponseEntity<>(new ResponseData(HttpStatus.OK.value(), message), HttpStatus.OK);
} }
public ResponseEntity<ResponseData> Forbidden(String message) {
return new ResponseEntity<>(new ResponseData(HttpStatus.FORBIDDEN.value(), message), HttpStatus.FORBIDDEN);
}
} }

View File

@ -2,7 +2,6 @@ package com.example.nto.controller;
import com.example.nto.Utils; import com.example.nto.Utils;
import com.example.nto.entity.Employee; import com.example.nto.entity.Employee;
import com.example.nto.entity.ResponseData;
import com.example.nto.entity.Visits; import com.example.nto.entity.Visits;
import com.example.nto.service.EmployeeService; import com.example.nto.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -19,7 +18,7 @@ public class AdminController {
@Autowired @Autowired
private EmployeeService employeeService; private EmployeeService employeeService;
private Utils utils = new Utils(); private final Utils utils = new Utils();
@GetMapping("/employees") @GetMapping("/employees")
public List<Employee> getEmployees() { public List<Employee> getEmployees() {
@ -30,7 +29,7 @@ public class AdminController {
public ResponseEntity<?> getEmployeeInfo(@PathVariable("username") String username) { public ResponseEntity<?> getEmployeeInfo(@PathVariable("username") String username) {
Optional<Employee> employee = employeeService.findByLogin(username); Optional<Employee> employee = employeeService.findByLogin(username);
if (employee.isEmpty()) { if (employee.isEmpty()) {
return utils.NotFound(); return utils.NotFound("EmployeeNotFound");
} }
return new ResponseEntity<>(employee.get(), HttpStatus.OK); return new ResponseEntity<>(employee.get(), HttpStatus.OK);
@ -40,7 +39,7 @@ public class AdminController {
public ResponseEntity<?> getEmployeeLastVisit(@PathVariable("username") String username) { public ResponseEntity<?> getEmployeeLastVisit(@PathVariable("username") String username) {
Optional<Employee> employee = employeeService.findByLogin(username); Optional<Employee> employee = employeeService.findByLogin(username);
if (employee.isEmpty()) { if (employee.isEmpty()) {
return utils.NotFound(); return utils.NotFound("EmployeeNotFound");
} }
return new ResponseEntity<>(employee.get(), HttpStatus.OK); return new ResponseEntity<>(employee.get(), HttpStatus.OK);
@ -49,7 +48,7 @@ public class AdminController {
@GetMapping("/{username}/visits") @GetMapping("/{username}/visits")
public ResponseEntity<?> getEmployeeVisits(@PathVariable("username") String username) { public ResponseEntity<?> getEmployeeVisits(@PathVariable("username") String username) {
if (!employeeService.existsByLogin(username)) { if (!employeeService.existsByLogin(username)) {
return utils.NotFound(); return utils.NotFound("EmployeeNotFound");
} }
Optional<List<Visits>> visits = Optional.ofNullable(employeeService.getEmployeeVisits(username)); Optional<List<Visits>> visits = Optional.ofNullable(employeeService.getEmployeeVisits(username));

View File

@ -1,7 +1,6 @@
package com.example.nto.controller; package com.example.nto.controller;
import com.example.nto.Utils; import com.example.nto.Utils;
import com.example.nto.entity.Code;
import com.example.nto.entity.CodeBody; import com.example.nto.entity.CodeBody;
import com.example.nto.entity.Employee; import com.example.nto.entity.Employee;
import com.example.nto.entity.ResponseData; import com.example.nto.entity.ResponseData;
@ -16,12 +15,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Optional; import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
@RestController @RestController
@RequestMapping("/api/employee/") @RequestMapping("/api/employee/")
@ -31,7 +31,7 @@ public class EmployeeController {
@Autowired @Autowired
private CodeService codeService; private CodeService codeService;
private Utils utils = new Utils(); private final Utils utils = new Utils();
@Operation(summary = "Get employee info with login") @Operation(summary = "Get employee info with login")
@ApiResponses(value = { @ApiResponses(value = {
@ -55,13 +55,13 @@ public class EmployeeController {
Optional<Employee> employee = employeeService.findByLogin(username); Optional<Employee> employee = employeeService.findByLogin(username);
if (employee.isEmpty()) { if (employee.isEmpty()) {
return utils.NotFound(); return utils.NotFound("EmployeeNotFound");
} }
return new ResponseEntity<>(employee.get(), HttpStatus.OK); return new ResponseEntity<>(employee.get(), HttpStatus.OK);
} catch (Exception e) { } catch (Exception e) {
System.out.println("Exception: " + e.getMessage()); System.out.println("Exception: " + e.getMessage());
return utils.BadRequest(); return utils.BadRequest(e.getLocalizedMessage());
} }
} }
@ -77,6 +77,10 @@ public class EmployeeController {
schema = @Schema(implementation = ResponseData.class))}), schema = @Schema(implementation = ResponseData.class))}),
@ApiResponse(responseCode = "400", @ApiResponse(responseCode = "400",
description = "Something went wrong", description = "Something went wrong",
content = {@Content(mediaType = "application/json",
schema = @Schema(implementation = ResponseData.class))}),
@ApiResponse(responseCode = "403",
description = "Employee is blocked",
content = {@Content(mediaType = "application/json", content = {@Content(mediaType = "application/json",
schema = @Schema(implementation = ResponseData.class))}) schema = @Schema(implementation = ResponseData.class))})
}) })
@ -87,20 +91,23 @@ public class EmployeeController {
Optional<Employee> employee = employeeService.findByLogin(username); Optional<Employee> employee = employeeService.findByLogin(username);
if (employee.isEmpty()) { if (employee.isEmpty()) {
return utils.NotFound(); return utils.NotFound("EmployeeNotFound");
}
if (employee.get().getBlocked()) {
return utils.Forbidden("YouAreBlocked");
} }
if (!codeService.exists(body.getValue())) { if (!codeService.exists(body.getValue())) {
return utils.BadRequest(); return utils.BadRequest("CodeIsInvalid");
} }
LocalDateTime time = LocalDateTime.now(); LocalDateTime time = LocalDateTime.now();
employeeService.setLastVisitEmployee(employee.get().getId(), time); employeeService.setLastVisitEmployee(employee.get().getId(), time);
employeeService.addVisit(employee.get().getLogin(), time); employeeService.addVisit(employee.get().getLogin(), time, "" + body.getValue());
return utils.Ok("Door opened success"); return utils.Ok("OpenedSuccess");
} catch (Exception e) { } catch (Exception e) {
System.out.println("Exception: " + e.getMessage()); System.out.println("Exception: " + e.getMessage());
return utils.BadRequest(); return utils.BadRequest(e.getLocalizedMessage());
} }
} }
} }

View File

@ -17,7 +17,7 @@ public interface EmployeeService {
void setLastVisitEmployee(long Id, LocalDateTime lastVisit); void setLastVisitEmployee(long Id, LocalDateTime lastVisit);
void addVisit(String username, LocalDateTime time); void addVisit(String username, LocalDateTime time, String readerId);
void setCodeEmployee(long Id, long code); void setCodeEmployee(long Id, long code);

View File

@ -2,9 +2,9 @@ package com.example.nto.service.impl;
import com.example.nto.entity.Code; import com.example.nto.entity.Code;
import com.example.nto.entity.Employee; import com.example.nto.entity.Employee;
import com.example.nto.entity.VisitType;
import com.example.nto.entity.Visits; import com.example.nto.entity.Visits;
import com.example.nto.repository.CodeRepository; import com.example.nto.repository.CodeRepository;
import com.example.nto.repository.EmployeeRepository;
import com.example.nto.repository.VisitsRepository; import com.example.nto.repository.VisitsRepository;
import com.example.nto.service.EmployeeService; import com.example.nto.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -41,8 +41,9 @@ public class EmployeeServiceImpl implements EmployeeService {
} }
@Override @Override
public void addVisit(String username, LocalDateTime time) { public void addVisit(String username, LocalDateTime time, String readerId) {
visitRepository.save(new Visits()); Visits visit = new Visits(0, username, time, VisitType.SCANNER, readerId);
visitRepository.save(visit);
} }
@Override @Override