Удален контроллер Visits за ненадобностью. Добавлен функционал счиатывания кода

This commit is contained in:
Daniil Makeev 2025-02-19 11:48:31 +03:00
parent 61b23d9afb
commit ae3b001d8f
11 changed files with 61 additions and 17 deletions

View File

@ -2,8 +2,10 @@ package com.example.onomatopoeiaback;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
@SpringBootApplication // отключаем стандартную шизанастройку в spring security
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
public class OnomatopoeiaBackApplication { public class OnomatopoeiaBackApplication {
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -11,6 +11,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RestController
@RequestMapping("/employee") @RequestMapping("/employee")
public class EmployeeController { public class EmployeeController {
@ -37,9 +39,18 @@ public class EmployeeController {
return new ResponseEntity<>(null, employeeService.auth(username)); return new ResponseEntity<>(null, employeeService.auth(username));
} }
@GetMapping("/{username}/visits")
public ResponseEntity<List<Visit>> visits(
@PathVariable String username,
@RequestParam Integer offset,
@RequestParam Integer limit
) {
return ResponseEntity.ok(employeeService.getVisits(username, offset, limit));
}
@PatchMapping("/{username}/open") @PatchMapping("/{username}/open")
public ResponseEntity<Visit> open(@PathVariable String username, @RequestBody VisitDTO visitDTO) { public ResponseEntity<Visit> open(@PathVariable String username, @RequestBody VisitDTO visitDTO) {
visitService.open(username, visitDTO); visitService.register(username, visitDTO);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
} }

View File

@ -3,6 +3,7 @@ package com.example.onomatopoeiaback.controller;
import com.example.onomatopoeiaback.domain.qrcode.QrCode; import com.example.onomatopoeiaback.domain.qrcode.QrCode;
import com.example.onomatopoeiaback.service.QrCodeService; import com.example.onomatopoeiaback.service.QrCodeService;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -17,6 +18,7 @@ public class QrCodeController {
this.qrCodeService = qrCodeService; this.qrCodeService = qrCodeService;
} }
@PostMapping("/create")
public ResponseEntity<QrCode> createQrCode(@RequestParam String name) { public ResponseEntity<QrCode> createQrCode(@RequestParam String name) {
return ResponseEntity.ok(qrCodeService.createQrCode(name)); return ResponseEntity.ok(qrCodeService.createQrCode(name));
} }

View File

@ -1,5 +1,6 @@
package com.example.onomatopoeiaback.domain.employee; package com.example.onomatopoeiaback.domain.employee;
import com.example.onomatopoeiaback.domain.visit.Visit;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
@ -7,6 +8,8 @@ import lombok.NonNull;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity @Entity
@Table(name = "employee") @Table(name = "employee")

View File

@ -1,5 +1,6 @@
package com.example.onomatopoeiaback.domain.visit; package com.example.onomatopoeiaback.domain.visit;
import com.example.onomatopoeiaback.domain.employee.Employee;
import com.example.onomatopoeiaback.domain.qrcode.QrCode; import com.example.onomatopoeiaback.domain.qrcode.QrCode;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
@ -23,4 +24,6 @@ public class Visit {
private VisitType visitType; private VisitType visitType;
@NonNull @NonNull
private LocalDateTime visitTime; private LocalDateTime visitTime;
@ManyToOne
private Employee employee;
} }

View File

@ -1,7 +1,12 @@
package com.example.onomatopoeiaback.repository; package com.example.onomatopoeiaback.repository;
import com.example.onomatopoeiaback.domain.qrcode.QrCode; import com.example.onomatopoeiaback.domain.qrcode.QrCode;
import lombok.NonNull;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface QrCodeRepository extends JpaRepository<QrCode, Long> { public interface QrCodeRepository extends JpaRepository<QrCode, Long> {
@NonNull
Optional<QrCode> findById(@NonNull Long id);
} }

View File

@ -6,5 +6,4 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface VisitRepository extends JpaRepository<Visit, Long> { public interface VisitRepository extends JpaRepository<Visit, Long> {
Visit getVisitByValue(long value);
} }

View File

@ -2,7 +2,9 @@ package com.example.onomatopoeiaback.service;
import com.example.onomatopoeiaback.domain.employee.Employee; import com.example.onomatopoeiaback.domain.employee.Employee;
import com.example.onomatopoeiaback.domain.employee.EmployeeDTO; import com.example.onomatopoeiaback.domain.employee.EmployeeDTO;
import com.example.onomatopoeiaback.domain.visit.Visit;
import com.example.onomatopoeiaback.repository.EmployeeRepository; import com.example.onomatopoeiaback.repository.EmployeeRepository;
import jakarta.persistence.criteria.CriteriaBuilder;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@ -10,6 +12,8 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
@Service @Service
public class EmployeeService { public class EmployeeService {
@ -58,4 +62,9 @@ public class EmployeeService {
return new ResponseEntity<>(employee, response_status); return new ResponseEntity<>(employee, response_status);
} }
public List<Visit> getVisits(String login, Integer offset, Integer limit) {
Employee employee = employeeRepository.getEmployeesByLogin(login);
return new ArrayList<>();
}
} }

View File

@ -1,13 +1,22 @@
package com.example.onomatopoeiaback.service; package com.example.onomatopoeiaback.service;
import com.example.onomatopoeiaback.domain.qrcode.QrCode; import com.example.onomatopoeiaback.domain.qrcode.QrCode;
import com.example.onomatopoeiaback.repository.QrCodeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class QrCodeService { public class QrCodeService {
final
QrCodeRepository qrCodeRepository;
public QrCodeService(QrCodeRepository qrCodeRepository) {
this.qrCodeRepository = qrCodeRepository;
}
public QrCode createQrCode(String name) { public QrCode createQrCode(String name) {
QrCode qrCode = new QrCode(); QrCode qrCode = new QrCode();
qrCode.setName(name); qrCode.setName(name);
return qrCode; return qrCodeRepository.saveAndFlush(qrCode);
} }
} }

View File

@ -2,6 +2,7 @@ package com.example.onomatopoeiaback.service;
import com.example.onomatopoeiaback.domain.employee.Employee; import com.example.onomatopoeiaback.domain.employee.Employee;
import com.example.onomatopoeiaback.domain.qrcode.QrCode;
import com.example.onomatopoeiaback.domain.visit.Visit; import com.example.onomatopoeiaback.domain.visit.Visit;
import com.example.onomatopoeiaback.domain.visit.VisitDTO; import com.example.onomatopoeiaback.domain.visit.VisitDTO;
import com.example.onomatopoeiaback.exceptions.BadRequestException; import com.example.onomatopoeiaback.exceptions.BadRequestException;
@ -13,6 +14,7 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Optional;
@Service @Service
public class VisitService { public class VisitService {
@ -27,25 +29,24 @@ public class VisitService {
this.qrCodeRepository = qrCodeRepository; this.qrCodeRepository = qrCodeRepository;
} }
// TDDO: удалить это. и оставить open и доработать его. После этого объект Visit добавить пользователю в массив посещений. Реализовать получение посещений с offset и limit. Реализовать авторизацию и разделение методов на роли.
public Visit create(VisitDTO visitDTO) {
Visit visit = new Visit();
visit.setQrCode(qrCodeRepository.getReferenceById(visitDTO.getQrCodeId()));
visit.setVisitType(visitDTO.getVisitType());
return visitRepository.saveAndFlush(visit);
}
public void open(String login, VisitDTO visitDTO) { public void register(String login, VisitDTO visitDTO) {
Visit visit = visitRepository.getVisitByValue(visitDTO.getValue());
Employee employee = employeeRepository.getEmployeesByLogin(login); Employee employee = employeeRepository.getEmployeesByLogin(login);
Optional<QrCode> qrCodeOptional = qrCodeRepository.findById(visitDTO.getQrCodeId());
if (qrCodeOptional.isEmpty()) {
throw new BadRequestException();
}
if (employee == null) { if (employee == null) {
throw new UnauthorizedException(); throw new UnauthorizedException();
} }
else if (visit == null) {
throw new BadRequestException();
}
QrCode qrCode = qrCodeOptional.get();
Visit visit = new Visit();
visit.setQrCode(qrCode);
visit.setVisitType(visitDTO.getVisitType());
visit.setEmployee(employee);
visitRepository.saveAndFlush(visit);
LocalDateTime localDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS); LocalDateTime localDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS);
employee.setLastVisit(localDateTime); employee.setLastVisit(localDateTime);
employeeRepository.saveAndFlush(employee); employeeRepository.saveAndFlush(employee);

View File

@ -6,6 +6,6 @@ spring-doc.swagger-ui.path=/docs
# postgres set up # postgres set up
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres spring.datasource.username=postgres
spring.datasource.password=1339 spring.datasource.password=MobileDev
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update