From 5a94e5cdcf097213742f139cbf6afdb85333b4dc Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 17:36:52 +0300 Subject: [PATCH 01/10] docs: added ipconfig /all --- src/main/java/com/example/nto/App.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/example/nto/App.java b/src/main/java/com/example/nto/App.java index a6502d9..663b434 100644 --- a/src/main/java/com/example/nto/App.java +++ b/src/main/java/com/example/nto/App.java @@ -28,6 +28,9 @@ public class App { Если при запуске появляется ошибка связанная с длиной чего-то, то надо тыкнуть на кнопку с надписью App, перейти в Edit Configurations -> modify options -> Shorten command line -> ниже надписи Build and Run будет Shorten command line -> выбираем JAR manifest. + + ipconfig /all + Надо искать IPv4-адрес внизу списка */ SpringApplication.run(App.class, args); From 54b4c4a42a969e1629627d7cdcd67a85ac175ae1 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 17:37:27 +0300 Subject: [PATCH 02/10] feat: added controller --- .../controller/AuthorizationController.java | 27 ++++++++ .../nto/controller/EmployeeController.java | 69 +++++++++++++++++++ .../nto/controller/OfficeController.java | 50 ++++++++++++++ .../nto/controller/TerminalController.java | 47 +++++++++++++ 4 files changed, 193 insertions(+) create mode 100644 src/main/java/com/example/nto/controller/AuthorizationController.java create mode 100644 src/main/java/com/example/nto/controller/EmployeeController.java create mode 100644 src/main/java/com/example/nto/controller/OfficeController.java create mode 100644 src/main/java/com/example/nto/controller/TerminalController.java diff --git a/src/main/java/com/example/nto/controller/AuthorizationController.java b/src/main/java/com/example/nto/controller/AuthorizationController.java new file mode 100644 index 0000000..54aa07b --- /dev/null +++ b/src/main/java/com/example/nto/controller/AuthorizationController.java @@ -0,0 +1,27 @@ +package com.example.nto.controller; + +import com.example.nto.dto.entity.employee.EmployeeCreateDTO; +import com.example.nto.dto.entity.employee.EmployeeDTO; +import com.example.nto.service.EmployeeService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("api/v1/authorization") +public class AuthorizationController { + private final EmployeeService employeeService; + + @GetMapping("/login") + public ResponseEntity login(Authentication authentication) { + return ResponseEntity.ok(employeeService.getByEmail(authentication.getName())); + } + + @PostMapping("/register") + public ResponseEntity registerEmployee(@RequestBody EmployeeCreateDTO employeeCreateDTO) { + return ResponseEntity.status(HttpStatus.CREATED).body(employeeService.create(employeeCreateDTO)); + } +} diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java new file mode 100644 index 0000000..14535b4 --- /dev/null +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -0,0 +1,69 @@ +package com.example.nto.controller; + +import com.example.nto.dto.entity.employee.EmployeeDTO; +import com.example.nto.dto.entity.employee.EmployeeItemDTO; +import com.example.nto.service.EmployeeService; +import com.example.nto.service.PhotoService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("api/v1/employees") +public class EmployeeController { + private final EmployeeService employeeService; + private final PhotoService photoService; + + @GetMapping + public ResponseEntity> getAll() { + return ResponseEntity.ok(employeeService.getAll()); + } + + @GetMapping("/working/{isWorking}") + public ResponseEntity> getAllWorking(@PathVariable boolean isWorking) { + return ResponseEntity.ok(employeeService.getWorkingEmployee(isWorking)); + } + + @GetMapping("/{employeeId}") + public ResponseEntity getEmployeeById(@PathVariable long employeeId) { + return ResponseEntity.ok(employeeService.getById(employeeId)); + } + + @GetMapping("/email/{email}") + public ResponseEntity getEmployeeByEmail(@PathVariable String email) { + return ResponseEntity.ok(employeeService.getByEmail(email)); + } + + @GetMapping("/telephone/{telephone}") + public ResponseEntity getEmployeeByTelephone(@PathVariable String telephone) { + return ResponseEntity.ok(employeeService.getByTelephone(telephone)); + } + + @PutMapping("/{id}") + public ResponseEntity updateEmployee(@PathVariable long employeeId, @RequestBody EmployeeDTO employeeDTO) { + return ResponseEntity.ok(employeeService.update(employeeId, employeeDTO)); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteEmployeeById(@PathVariable long employeeId) { + employeeService.delete(employeeId); + return ResponseEntity.noContent().build(); + } + + @PatchMapping("/image/profile/{id}") + public ResponseEntity patchImageProfile(@PathVariable long employeeId, @RequestBody byte[] photo) { + String imageUrl = photoService.uploadProfilePhoto(employeeId, photo); + employeeService.patchProfileImage(employeeId, imageUrl); + return ResponseEntity.noContent().build(); + } + + @PatchMapping("/block/{id}/{blockStatus}") + public ResponseEntity patchImageProfile(@PathVariable long employeeId, @PathVariable boolean blockStatus) { + employeeService.patchBlockEmployee(employeeId, blockStatus); + return ResponseEntity.noContent().build(); + } + +} diff --git a/src/main/java/com/example/nto/controller/OfficeController.java b/src/main/java/com/example/nto/controller/OfficeController.java new file mode 100644 index 0000000..276935b --- /dev/null +++ b/src/main/java/com/example/nto/controller/OfficeController.java @@ -0,0 +1,50 @@ +package com.example.nto.controller; + +import com.example.nto.dto.entity.OfficeDTO; +import com.example.nto.service.OfficeService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("api/v1/offices") +public class OfficeController { + private final OfficeService officeService; + + @GetMapping + public ResponseEntity> getAll() { + return ResponseEntity.ok(officeService.getAllOffice()); + } + + @GetMapping("/sorted/distance") + public ResponseEntity> getAllSortedByDistance( + @RequestParam(name = "latitude") double latitude, + @RequestParam(name = "longitude") double longitude + ) { + return ResponseEntity.ok(officeService.getAllSortedDistance(latitude, longitude)); + } + + @GetMapping("/{officeId}") + public ResponseEntity getById(@PathVariable long officeId) { + return ResponseEntity.ok(officeService.getById(officeId)); + } + + @PostMapping + public ResponseEntity createOffice(@RequestBody OfficeDTO officeDTO) { + return ResponseEntity.ok(officeService.create(officeDTO)); + } + + @PutMapping("/{officeId}") + public ResponseEntity updateOffice(@PathVariable long officeId, @RequestBody OfficeDTO officeDTO) { + return ResponseEntity.ok(officeService.update(officeId, officeDTO)); + } + + @DeleteMapping("/{officeId}") + public ResponseEntity deleteOffice(@PathVariable long officeId) { + officeService.delete(officeId); + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/com/example/nto/controller/TerminalController.java b/src/main/java/com/example/nto/controller/TerminalController.java new file mode 100644 index 0000000..5e3fa20 --- /dev/null +++ b/src/main/java/com/example/nto/controller/TerminalController.java @@ -0,0 +1,47 @@ +package com.example.nto.controller; + +import com.example.nto.dto.entity.TerminalDTO; +import com.example.nto.service.TerminalService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("api/v1/terminals") +public class TerminalController { + private final TerminalService terminalService; + + @GetMapping + public ResponseEntity> getAll() { + return ResponseEntity.ok(terminalService.getAllTerminal()); + } + + @GetMapping("/{terminalId}") + public ResponseEntity getTerminalById(@PathVariable long terminalId) { + return ResponseEntity.ok(terminalService.getById(terminalId)); + } + + @GetMapping("/check/{code}") + public ResponseEntity checkCode(@PathVariable String code) { + return ResponseEntity.ok(terminalService.checkCode(code)); + } + + @PostMapping + public ResponseEntity createTerminal(@RequestBody TerminalDTO terminalDTO) { + return ResponseEntity.ok(terminalService.create(terminalDTO)); + } + + @PutMapping("/{terminalId}") + public ResponseEntity updateTerminal(@PathVariable long terminalId, @RequestBody TerminalDTO terminalDTO) { + return ResponseEntity.ok(terminalService.update(terminalId, terminalDTO)); + } + + @DeleteMapping("/{terminalId}") + public ResponseEntity deleteTerminal(@PathVariable long terminalId) { + terminalService.delete(terminalId); + return ResponseEntity.noContent().build(); + } +} From 98d238f9c9dca33d6c538d4c4ac6a7ec11d97f26 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 17:37:42 +0300 Subject: [PATCH 03/10] feat: added visit controller --- .../nto/controller/VisitController.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/main/java/com/example/nto/controller/VisitController.java diff --git a/src/main/java/com/example/nto/controller/VisitController.java b/src/main/java/com/example/nto/controller/VisitController.java new file mode 100644 index 0000000..850852c --- /dev/null +++ b/src/main/java/com/example/nto/controller/VisitController.java @@ -0,0 +1,48 @@ +package com.example.nto.controller; + +import com.example.nto.dto.entity.VisitDTO; +import com.example.nto.service.VisitService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("api/v1/visits") +public class VisitController { + private final VisitService visitService; + + @GetMapping + public ResponseEntity> getAll() { + return ResponseEntity.ok(visitService.getAll()); + } + + @GetMapping("/employee/{employeeId}") + public ResponseEntity> getAllVisitByEmployee(@PathVariable long employeeId) { + return ResponseEntity.ok(visitService.getAllVisitByEmployee(employeeId)); + } + + @GetMapping("/{visitId}") + public ResponseEntity getById(@PathVariable long visitId) { + return ResponseEntity.ok(visitService.getById(visitId)); + } + + @DeleteMapping("/{visitId}") + public ResponseEntity delete(@PathVariable long visitId) { + visitService.delete(visitId); + return ResponseEntity.noContent().build(); + } + + @PostMapping("/open/{startTerminalId}/{employeeId}/{passageName}") + public ResponseEntity open(@PathVariable long employeeId, @PathVariable long startTerminalId, @PathVariable String passageName) { + return ResponseEntity.ok(visitService.open(employeeId, startTerminalId, passageName)); + } + + @PostMapping("/exit/{endTerminalId}/{employeeId}") + public ResponseEntity open(@PathVariable long employeeId, @PathVariable long endTerminalId) { + visitService.exit(employeeId, endTerminalId); + return ResponseEntity.noContent().build(); + } +} From 4b721518e04ac83a4b21fc20f8fc65209925ac67 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 17:37:59 +0300 Subject: [PATCH 04/10] feat: added photo service --- .../com/example/nto/service/PhotoService.java | 5 +++ .../nto/service/impl/PhotoServiceImpl.java | 45 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/main/java/com/example/nto/service/PhotoService.java create mode 100644 src/main/java/com/example/nto/service/impl/PhotoServiceImpl.java diff --git a/src/main/java/com/example/nto/service/PhotoService.java b/src/main/java/com/example/nto/service/PhotoService.java new file mode 100644 index 0000000..a216b87 --- /dev/null +++ b/src/main/java/com/example/nto/service/PhotoService.java @@ -0,0 +1,5 @@ +package com.example.nto.service; + +public interface PhotoService { + String uploadProfilePhoto(long id, byte[] photo); +} diff --git a/src/main/java/com/example/nto/service/impl/PhotoServiceImpl.java b/src/main/java/com/example/nto/service/impl/PhotoServiceImpl.java new file mode 100644 index 0000000..725f708 --- /dev/null +++ b/src/main/java/com/example/nto/service/impl/PhotoServiceImpl.java @@ -0,0 +1,45 @@ +package com.example.nto.service.impl; + +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.AmazonS3Exception; +import com.amazonaws.services.s3.model.ObjectMetadata; +import com.example.nto.aspect.annotation.LogExample; +import com.example.nto.config.ObjectStorageConfig; +import com.example.nto.service.PhotoService; +import com.example.nto.utils.Utils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayInputStream; + +@Service +@RequiredArgsConstructor +public class PhotoServiceImpl implements PhotoService { + private final ObjectStorageConfig objectStorageConfig; + + @Override + @LogExample + public String uploadProfilePhoto(long id, byte[] photo) { + final String url; + final String bucketName = objectStorageConfig.getBucketName(); + final AmazonS3 s3Client = objectStorageConfig.createAmazonS3(); + + try { + String fileName = Utils.profileFileName(id); + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentLength(photo.length); + + // Загрузка файла в Yandex Object Storage + ByteArrayInputStream inputStream = new ByteArrayInputStream(photo); + s3Client.putObject(bucketName, fileName, inputStream, metadata); + + // Получение ссылки на загруженный файл + url = s3Client.getUrl(bucketName, fileName).toExternalForm(); + + } catch (AmazonS3Exception e) { + throw new AmazonS3Exception(e.getMessage()); + } + + return url; + } +} From fa674406f442c51556a2d96c1dafe48e9b11ceeb Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 17:38:43 +0300 Subject: [PATCH 05/10] feat: added liqubase scripts --- .../0.0.1/2025-02-19--0001-roles.xml | 21 +++++ .../0.0.1/2025-02-19--0002-positions.xml | 21 +++++ .../0.0.1/2025-02-19--0003-passages.xml | 21 +++++ .../0.0.1/2025-02-19--0004-offices.xml | 89 +++++++++++++++++++ .../0.0.1/2025-02-19--0005-terminals.xml | 34 +++++++ .../data/2025-02-19--0001-roles-data.xml | 9 ++ .../data/2025-02-19--0002-positions-data.xml | 9 ++ .../data/2025-02-19--0003-passages-data.xml | 9 ++ .../data/csv/2025-02-19--0001-roles-data.csv | 3 + .../data/csv/2025-02-19--0002-positions.csv | 4 + .../csv/2025-02-19--0003-passages-data.csv | 3 + .../db.changelog/db.changelog-master.xml | 5 ++ 12 files changed, 228 insertions(+) create mode 100644 src/main/resources/db.changelog/0.0.1/2025-02-19--0001-roles.xml create mode 100644 src/main/resources/db.changelog/0.0.1/2025-02-19--0002-positions.xml create mode 100644 src/main/resources/db.changelog/0.0.1/2025-02-19--0003-passages.xml create mode 100644 src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml create mode 100644 src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml create mode 100644 src/main/resources/db.changelog/data/2025-02-19--0001-roles-data.xml create mode 100644 src/main/resources/db.changelog/data/2025-02-19--0002-positions-data.xml create mode 100644 src/main/resources/db.changelog/data/2025-02-19--0003-passages-data.xml create mode 100644 src/main/resources/db.changelog/data/csv/2025-02-19--0001-roles-data.csv create mode 100644 src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions.csv create mode 100644 src/main/resources/db.changelog/data/csv/2025-02-19--0003-passages-data.csv diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0001-roles.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0001-roles.xml new file mode 100644 index 0000000..6ab9916 --- /dev/null +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0001-roles.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0002-positions.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0002-positions.xml new file mode 100644 index 0000000..1ae3df0 --- /dev/null +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0002-positions.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0003-passages.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0003-passages.xml new file mode 100644 index 0000000..eaa574e --- /dev/null +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0003-passages.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml new file mode 100644 index 0000000..ed1fc30 --- /dev/null +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml new file mode 100644 index 0000000..79a6804 --- /dev/null +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE) + @JoinColumn(name = "office_id", nullable = false) + private Office office; + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/2025-02-19--0001-roles-data.xml b/src/main/resources/db.changelog/data/2025-02-19--0001-roles-data.xml new file mode 100644 index 0000000..3af0da8 --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-02-19--0001-roles-data.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/2025-02-19--0002-positions-data.xml b/src/main/resources/db.changelog/data/2025-02-19--0002-positions-data.xml new file mode 100644 index 0000000..7b8f5db --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-02-19--0002-positions-data.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/2025-02-19--0003-passages-data.xml b/src/main/resources/db.changelog/data/2025-02-19--0003-passages-data.xml new file mode 100644 index 0000000..28d35e5 --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-02-19--0003-passages-data.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0001-roles-data.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0001-roles-data.csv new file mode 100644 index 0000000..d6fbb70 --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0001-roles-data.csv @@ -0,0 +1,3 @@ +role_name +ROLE_USER +ROLE_ADMIN \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions.csv new file mode 100644 index 0000000..a99d387 --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions.csv @@ -0,0 +1,4 @@ +name +Директор +Разработчик +Дизайнер \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0003-passages-data.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0003-passages-data.csv new file mode 100644 index 0000000..999b327 --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0003-passages-data.csv @@ -0,0 +1,3 @@ +passage +Карта +Телефон \ No newline at end of file diff --git a/src/main/resources/db.changelog/db.changelog-master.xml b/src/main/resources/db.changelog/db.changelog-master.xml index ece04a5..9dedbe4 100644 --- a/src/main/resources/db.changelog/db.changelog-master.xml +++ b/src/main/resources/db.changelog/db.changelog-master.xml @@ -1,4 +1,9 @@ + + + + + \ No newline at end of file From 33d7c18e88611d2b1dfb1c099516ba18e34d0c94 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 17:39:15 +0300 Subject: [PATCH 06/10] fix: delete code --- .../db.changelog/0.0.1/2025-02-19--0005-terminals.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml index 79a6804..0d42d62 100644 --- a/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml @@ -25,10 +25,6 @@ referencedColumnNames="id" deleteCascade="false" /> - - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE) - @JoinColumn(name = "office_id", nullable = false) - private Office office; \ No newline at end of file From a9953b08be9451ba047f3e292ba1782d523dc284 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 18:59:41 +0300 Subject: [PATCH 07/10] feat: liquebase data --- .../db.changelog/data/2025-02-19--0004-offices-data.xml | 9 +++++++++ .../data/2025-02-19--0005-terminals-data.xml | 9 +++++++++ .../data/2025-02-19--0006-employees-data.xml | 9 +++++++++ .../db.changelog/data/2025-02-19--0007-visits-data.xml | 9 +++++++++ 4 files changed, 36 insertions(+) create mode 100644 src/main/resources/db.changelog/data/2025-02-19--0004-offices-data.xml create mode 100644 src/main/resources/db.changelog/data/2025-02-19--0005-terminals-data.xml create mode 100644 src/main/resources/db.changelog/data/2025-02-19--0006-employees-data.xml create mode 100644 src/main/resources/db.changelog/data/2025-02-19--0007-visits-data.xml diff --git a/src/main/resources/db.changelog/data/2025-02-19--0004-offices-data.xml b/src/main/resources/db.changelog/data/2025-02-19--0004-offices-data.xml new file mode 100644 index 0000000..17c56bf --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-02-19--0004-offices-data.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/2025-02-19--0005-terminals-data.xml b/src/main/resources/db.changelog/data/2025-02-19--0005-terminals-data.xml new file mode 100644 index 0000000..fa2736c --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-02-19--0005-terminals-data.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/2025-02-19--0006-employees-data.xml b/src/main/resources/db.changelog/data/2025-02-19--0006-employees-data.xml new file mode 100644 index 0000000..53a7cc0 --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-02-19--0006-employees-data.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/2025-02-19--0007-visits-data.xml b/src/main/resources/db.changelog/data/2025-02-19--0007-visits-data.xml new file mode 100644 index 0000000..0707384 --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-02-19--0007-visits-data.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file From 5a7d2b1f9ca7e3fa5970dea08406180361d74df0 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 18:59:57 +0300 Subject: [PATCH 08/10] feat: update db.changelog-master --- .../resources/db.changelog/db.changelog-master.xml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/resources/db.changelog/db.changelog-master.xml b/src/main/resources/db.changelog/db.changelog-master.xml index 9dedbe4..90383b0 100644 --- a/src/main/resources/db.changelog/db.changelog-master.xml +++ b/src/main/resources/db.changelog/db.changelog-master.xml @@ -4,6 +4,18 @@ - + + + + + + + + + + + + + \ No newline at end of file From 10f6c7753d91ed472868d3f3c162ecee5aa4524d Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 19:00:14 +0300 Subject: [PATCH 09/10] feat: update Employee entity --- src/main/java/com/example/nto/domain/entity/Employee.java | 3 ++- .../nto/dto/mappers/employee/EmployeeCreateMapper.java | 6 ++++-- .../nto/dto/mappers/employee/EmployeeItemMapper.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/nto/domain/entity/Employee.java b/src/main/java/com/example/nto/domain/entity/Employee.java index 33b0482..3b9c8ad 100644 --- a/src/main/java/com/example/nto/domain/entity/Employee.java +++ b/src/main/java/com/example/nto/domain/entity/Employee.java @@ -14,6 +14,7 @@ import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -86,7 +87,7 @@ public class Employee implements UserDetails { private LocalDateTime createdAt; @OneToMany(mappedBy = "employee") - private List visits; + private List visits = new ArrayList<>(); @Override public Collection getAuthorities() { diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java index fb751e5..43167b5 100644 --- a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java @@ -1,6 +1,6 @@ package com.example.nto.dto.mappers.employee; - import com.example.nto.domain.entity.Employee; +import com.example.nto.domain.entity.Employee; import com.example.nto.domain.entity.Office; import com.example.nto.domain.entity.Position; import com.example.nto.domain.entity.Role; @@ -8,6 +8,8 @@ import com.example.nto.dto.entity.employee.EmployeeCreateDTO; import com.example.nto.utils.Utils; import lombok.experimental.UtilityClass; +import java.time.LocalDateTime; + @UtilityClass public class EmployeeCreateMapper { public static Employee convertFromDTO( @@ -27,7 +29,7 @@ public class EmployeeCreateMapper { employee.setRole(role); employee.setProfileImageUrl(Utils.getRandomUrlProfileImage()); employee.setBlocked(false); - + employee.setCreatedAt(LocalDateTime.now()); return employee; } } diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java index 68cf90d..1a46836 100644 --- a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java @@ -24,7 +24,7 @@ public class EmployeeItemMapper { // todo: Протестировать работу! List visitsLast30Days = Utils.filterDateLast30Days(employee.getVisits()); - employeeItemDTO.setVisitStatus(visitsLast30Days.stream().anyMatch(visit -> !visit.isFinished())); + employeeItemDTO.setVisitStatus(employee.getVisits().stream().anyMatch(visit -> !visit.isFinished())); return employeeItemDTO; } From 50d0d0440e47b41a4dc8afbc95ee312d4686362c Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Wed, 19 Feb 2025 19:00:25 +0300 Subject: [PATCH 10/10] feat: liqubase update --- .../0.0.1/2025-02-19--0004-offices.xml | 6 +- .../0.0.1/2025-02-19--0005-terminals.xml | 2 +- .../0.0.1/2025-02-19--0006-employees.xml | 55 +++++++++++++++++++ .../0.0.1/2025-02-19--0007-visits.xml | 43 +++++++++++++++ ...sv => 2025-02-19--0002-positions-data.csv} | 0 .../csv/2025-02-19--0004-offices-data.csv | 2 + .../csv/2025-02-19--0005-terminals-data.csv | 2 + .../csv/2025-02-19--0006-employees-data.csv | 2 + .../data/csv/2025-02-19--0007-visits-data.csv | 3 + 9 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/db.changelog/0.0.1/2025-02-19--0006-employees.xml create mode 100644 src/main/resources/db.changelog/0.0.1/2025-02-19--0007-visits.xml rename src/main/resources/db.changelog/data/csv/{2025-02-19--0002-positions.csv => 2025-02-19--0002-positions-data.csv} (100%) create mode 100644 src/main/resources/db.changelog/data/csv/2025-02-19--0004-offices-data.csv create mode 100644 src/main/resources/db.changelog/data/csv/2025-02-19--0005-terminals-data.csv create mode 100644 src/main/resources/db.changelog/data/csv/2025-02-19--0006-employees-data.csv create mode 100644 src/main/resources/db.changelog/data/csv/2025-02-19--0007-visits-data.csv diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml index ed1fc30..5fabba5 100644 --- a/src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0004-offices.xml @@ -2,10 +2,10 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd"> - + - + @@ -58,7 +58,7 @@ private List terminals; --> - + diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml index 0d42d62..1eb9bc4 100644 --- a/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0005-terminals.xml @@ -16,7 +16,7 @@ - + diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0006-employees.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0006-employees.xml new file mode 100644 index 0000000..34721b1 --- /dev/null +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0006-employees.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/0.0.1/2025-02-19--0007-visits.xml b/src/main/resources/db.changelog/0.0.1/2025-02-19--0007-visits.xml new file mode 100644 index 0000000..86a67a7 --- /dev/null +++ b/src/main/resources/db.changelog/0.0.1/2025-02-19--0007-visits.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions-data.csv similarity index 100% rename from src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions.csv rename to src/main/resources/db.changelog/data/csv/2025-02-19--0002-positions-data.csv diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0004-offices-data.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0004-offices-data.csv new file mode 100644 index 0000000..790b1b4 --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0004-offices-data.csv @@ -0,0 +1,2 @@ +name;description;address;latitude;longitude;logo_image_url;telephone;email +Офис в Москве;Любимый офис Владимира Путина;г. Москва;54.31207;48.393951;https://storage.yandexcloud.net/spring-boot-final-nto-bacet/standard/profile--1.jpg;+794145546556;limasov_krut@gmail.com \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0005-terminals-data.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0005-terminals-data.csv new file mode 100644 index 0000000..8409f28 --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0005-terminals-data.csv @@ -0,0 +1,2 @@ +name;code;office_id +Первый считыватель в Москве;313123323232312;1 \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0006-employees-data.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0006-employees-data.csv new file mode 100644 index 0000000..02bfae6 --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0006-employees-data.csv @@ -0,0 +1,2 @@ +name;surname;patronymic;about_me;telephone;email;password;office_id;pos_id;role_id;profile_image_url;created_at;is_blocked +Иван;Иванович;Иванов;Меня зовут Алексей, и я уже несколько лет занимаюсь волонтерской деятельностью.;+79263321231;example1@gmail.com;$2a$04$NybaY71VUlBaqzmyit2VBOFiJjuz0gO519e8WwVGK4eQkIUctLfgy;1;1;2;https://storage.yandexcloud.net/spring-boot-final-nto-bacet/standard/profile--10.jpg;now;false \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0007-visits-data.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0007-visits-data.csv new file mode 100644 index 0000000..b3e2acf --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0007-visits-data.csv @@ -0,0 +1,3 @@ +employee_id;start_visit;end_visit;is_finished;start_terminal_id;end_terminal_id;type_passage +1;now;now;true;1;1;2 +1;now;null;false;1;1;1 \ No newline at end of file