Skip to content

Commit b549727

Browse files
committed
feat: update manager in progress
1 parent 13b4e14 commit b549727

File tree

8 files changed

+170
-48
lines changed

8 files changed

+170
-48
lines changed

src/main/java/br/ufpr/tads/msbantadsmanager/manager/Manager.java

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55
import java.io.Serial;
66
import java.io.Serializable;
77
import java.time.LocalDateTime;
8+
import java.util.Optional;
89

910
import org.springframework.data.annotation.CreatedBy;
1011
import org.springframework.data.annotation.CreatedDate;
1112
import org.springframework.data.annotation.LastModifiedBy;
1213
import org.springframework.data.annotation.LastModifiedDate;
14+
import org.springframework.data.domain.Auditable;
1315

1416
@Entity
1517
@Table(name = "managers")
16-
public class Manager implements Serializable {
18+
public class Manager implements Serializable, Auditable<String, Long, LocalDateTime> {
1719
@Serial private static final long serialVersionUID = 5397338376573272269L;
1820

1921
@Id
@@ -36,19 +38,21 @@ public class Manager implements Serializable {
3638
@Column(nullable = false)
3739
private String phone;
3840

41+
@Column private int accounts = 0;
42+
3943
@Column private boolean isActive = true;
4044

4145
@CreatedBy @Column private String createdBy;
4246

43-
@LastModifiedBy @Column private String updatedBy;
47+
@LastModifiedBy @Column private String lastModifiedBy;
4448

4549
@CreatedDate
4650
@Column(nullable = false, updatable = false)
47-
private LocalDateTime createdAt;
51+
private LocalDateTime creationDate;
4852

4953
@LastModifiedDate
5054
@Column(nullable = false)
51-
private LocalDateTime updatedAt;
55+
private LocalDateTime lastModifiedDate;
5256

5357
public static Manager create(CreateManager createManager) {
5458
var entity = new Manager();
@@ -60,8 +64,8 @@ public static Manager create(CreateManager createManager) {
6064
entity.setCreatedBy(createManager.createdBy());
6165

6266
LocalDateTime now = LocalDateTime.now();
63-
entity.setCreatedAt(now);
64-
entity.setUpdatedAt(now);
67+
entity.setCreatedDate(now);
68+
entity.setLastModifiedDate(now);
6569

6670
return entity;
6771
}
@@ -70,6 +74,11 @@ public Long getId() {
7074
return id;
7175
}
7276

77+
@Override
78+
public boolean isNew() {
79+
return id == null;
80+
}
81+
7382
public String getCpf() {
7483
return cpf;
7584
}
@@ -110,15 +119,42 @@ public void setPhone(String phone) {
110119
this.phone = phone;
111120
}
112121

113-
public void setCreatedAt(LocalDateTime createdAt) {
114-
this.createdAt = createdAt;
122+
@Override
123+
public Optional<String> getCreatedBy() {
124+
return Optional.of(createdBy);
115125
}
116126

117127
public void setCreatedBy(String createdBy) {
118128
this.createdBy = createdBy;
119129
}
120130

121-
public void setUpdatedAt(LocalDateTime updatedAt) {
122-
this.updatedAt = updatedAt;
131+
@Override
132+
public Optional<LocalDateTime> getCreatedDate() {
133+
return Optional.of(creationDate);
134+
}
135+
136+
@Override
137+
public void setCreatedDate(LocalDateTime creationDate) {
138+
this.creationDate = creationDate;
139+
}
140+
141+
@Override
142+
public Optional<String> getLastModifiedBy() {
143+
return Optional.of(lastModifiedBy);
144+
}
145+
146+
@Override
147+
public void setLastModifiedBy(String lastModifiedBy) {
148+
this.lastModifiedBy = lastModifiedBy;
149+
}
150+
151+
@Override
152+
public Optional<LocalDateTime> getLastModifiedDate() {
153+
return Optional.of(lastModifiedDate);
154+
}
155+
156+
@Override
157+
public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
158+
this.lastModifiedDate = lastModifiedDate;
123159
}
124160
}

src/main/java/br/ufpr/tads/msbantadsmanager/manager/ManagerController.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package br.ufpr.tads.msbantadsmanager.manager;
22

33
import br.ufpr.tads.msbantadsmanager.manager.port.in.CreateManager;
4-
import br.ufpr.tads.msbantadsmanager.manager.port.out.ManagerResponse;
4+
import br.ufpr.tads.msbantadsmanager.manager.port.in.UpdateManager;
55
import jakarta.validation.Valid;
66
import jakarta.validation.constraints.Email;
7+
import jakarta.validation.constraints.NotNull;
78
import jakarta.validation.constraints.Positive;
89
import java.net.URI;
910
import org.hibernate.validator.constraints.Length;
1011
import org.slf4j.Logger;
1112
import org.slf4j.LoggerFactory;
1213
import org.springframework.http.ResponseEntity;
13-
import org.springframework.lang.NonNull;
1414
import org.springframework.web.bind.annotation.*;
1515

1616
@RestController
@@ -45,16 +45,25 @@ public ResponseEntity<?> findManager(
4545
}
4646

4747
@GetMapping("/{id}")
48-
public ResponseEntity<ManagerResponse> findManagerById(
49-
@PathVariable @Valid @NonNull @Positive Long id) {
48+
public ResponseEntity<?> findManagerById(
49+
@PathVariable @Valid @NotNull @Positive Long id) {
5050
log.debug("[request] findManagerById '{}'", id);
5151
return ResponseEntity.ok(this.service.findManagerById(id));
5252
}
5353

5454
@PostMapping
55-
public ResponseEntity<?> create(@RequestBody @Valid @NonNull CreateManager request) {
55+
public ResponseEntity<?> create(@RequestBody @Valid @NotNull CreateManager request) {
5656
log.debug("[request] create {}", request);
5757
Long id = this.service.create(request);
5858
return ResponseEntity.created(URI.create(URL + "/" + id)).build();
5959
}
60+
61+
@PutMapping("/{id}")
62+
public ResponseEntity<?> update(
63+
@RequestBody @Valid @NotNull UpdateManager request,
64+
@PathVariable @Valid @NotNull @Positive Long id) {
65+
log.debug("[request] update {}", request);
66+
this.service.update(id, request);
67+
return ResponseEntity.noContent().build();
68+
}
6069
}

src/main/java/br/ufpr/tads/msbantadsmanager/manager/ManagerRepository.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
import java.util.Optional;
44
import org.springframework.data.jpa.repository.JpaRepository;
5-
import org.springframework.lang.NonNull;
65
import org.springframework.stereotype.Repository;
76

87
@Repository
98
public interface ManagerRepository extends JpaRepository<Manager, Long> {
10-
Optional<Manager> findManagerByEmail(@NonNull String email);
9+
Optional<Manager> findManagerByEmail(String email);
1110

12-
Optional<Manager> findManagerByCpf(@NonNull String cpf);
11+
Optional<Manager> findManagerByCpf(String cpf);
1312

1413
int countAllByEmailOrCpf(String email, String cpf);
14+
15+
Optional<Manager> findFirstByOrderByAccountsAsc();
16+
17+
Optional<Manager> findFirstByOrderByAccountsDesc();
1518
}

src/main/java/br/ufpr/tads/msbantadsmanager/manager/ManagerService.java

Lines changed: 66 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package br.ufpr.tads.msbantadsmanager.manager;
22

33
import br.ufpr.tads.msbantadsmanager.manager.port.in.CreateManager;
4+
import br.ufpr.tads.msbantadsmanager.manager.port.in.UpdateManager;
45
import br.ufpr.tads.msbantadsmanager.manager.port.out.ManagerResponse;
56
import jakarta.validation.Valid;
67
import jakarta.validation.constraints.Email;
8+
import jakarta.validation.constraints.NotNull;
79
import jakarta.validation.constraints.Positive;
10+
11+
import java.time.LocalDateTime;
812
import java.util.List;
13+
import java.util.Optional;
14+
915
import org.hibernate.validator.constraints.Length;
1016
import org.slf4j.Logger;
1117
import org.slf4j.LoggerFactory;
1218
import org.springframework.http.HttpStatus;
13-
import org.springframework.lang.NonNull;
1419
import org.springframework.stereotype.Service;
1520
import org.springframework.transaction.annotation.Transactional;
1621
import org.springframework.web.server.ResponseStatusException;
@@ -29,7 +34,7 @@ public List<ManagerResponse> findAllManagers() {
2934
return this.repository.findAll().stream().map(ManagerResponse::of).toList();
3035
}
3136

32-
public ManagerResponse findManagerByCpf(@Valid @NonNull @Length(min = 11, max = 11) String cpf) {
37+
public ManagerResponse findManagerByCpf(@Valid @NotNull @Length(min = 11, max = 11) String cpf) {
3338
log.debug("[retrieving] findManagerByCpf '{}'", cpf);
3439

3540
var entity =
@@ -43,7 +48,7 @@ public ManagerResponse findManagerByCpf(@Valid @NonNull @Length(min = 11, max =
4348
return ManagerResponse.of(entity);
4449
}
4550

46-
public ManagerResponse findManagerByEmail(@Valid @NonNull @Email String email) {
51+
public ManagerResponse findManagerByEmail(@Valid @NotNull @Email String email) {
4752
log.debug("[retrieving] findManagerByEmail '{}'", email);
4853

4954
var entity =
@@ -57,7 +62,7 @@ public ManagerResponse findManagerByEmail(@Valid @NonNull @Email String email) {
5762
return ManagerResponse.of(entity);
5863
}
5964

60-
public ManagerResponse findManagerById(@Valid @NonNull @Positive Long id) {
65+
public ManagerResponse findManagerById(@Valid @NotNull @Positive Long id) {
6166
log.debug("[retrieving] findManagerById '{}'", id);
6267

6368
var entity =
@@ -71,8 +76,18 @@ public ManagerResponse findManagerById(@Valid @NonNull @Positive Long id) {
7176
return ManagerResponse.of(entity);
7277
}
7378

79+
public Optional<Manager> findManagerWithLeastClients() {
80+
log.debug("[retrieving] retrieving manager with least clients");
81+
return this.repository.findFirstByOrderByAccountsAsc();
82+
}
83+
84+
public Optional<Manager> findManagerWithMostClients() {
85+
log.debug("[retrieving] retrieving manager with most clients");
86+
return this.repository.findFirstByOrderByAccountsDesc();
87+
}
88+
7489
@Transactional
75-
public Long create(@Valid @NonNull CreateManager createManager) {
90+
public Long create(@Valid @NotNull CreateManager createManager) {
7691
log.debug("[creating] {}", createManager);
7792

7893
boolean managerAlreadyExists =
@@ -87,8 +102,51 @@ public Long create(@Valid @NonNull CreateManager createManager) {
87102
}
88103

89104
@Transactional
90-
public Manager update(Manager manager) {
91-
log.debug("[updating] '{}': {}", manager.getId(), manager);
92-
return this.repository.save(manager);
105+
public void remove(@Valid @NotNull @Positive String cpf) {
106+
log.debug("[removing]");
107+
108+
if (this.repository.count() > 1) {
109+
log.warn("[removing] there are more than one manager");
110+
throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY);
111+
}
112+
113+
var manager =
114+
this.repository
115+
.findManagerByCpf(cpf)
116+
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
117+
118+
this.repository.deleteById(manager.getId());
119+
}
120+
121+
@Transactional
122+
public ManagerResponse update(@NotNull @Positive Long id, @Valid @NotNull UpdateManager dto) {
123+
log.debug("[updating] manager '{}': {}", id, dto);
124+
125+
var manager =
126+
this.repository
127+
.findById(id)
128+
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
129+
130+
if (dto.firstName() != null && !dto.firstName().isEmpty()) {
131+
manager.setFirstName(dto.firstName());
132+
}
133+
134+
if (dto.lastName() != null && !dto.lastName().isEmpty()) {
135+
manager.setLastName(dto.lastName());
136+
}
137+
138+
if (dto.email() != null && !dto.email().isEmpty()) {
139+
manager.setEmail(dto.email());
140+
}
141+
142+
if (dto.phone() != null && !dto.phone().isEmpty()) {
143+
manager.setPhone(dto.phone());
144+
}
145+
146+
manager.setLastModifiedBy(dto.lastModifiedBy());
147+
manager.setLastModifiedDate(LocalDateTime.now());
148+
149+
Manager saved = this.repository.save(manager);
150+
return ManagerResponse.of(saved);
93151
}
94152
}

src/main/java/br/ufpr/tads/msbantadsmanager/manager/port/in/CreateManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package br.ufpr.tads.msbantadsmanager.manager.port.in;
22

3-
import br.ufpr.tads.msbantadsmanager.manager.Manager;
43
import jakarta.validation.constraints.Email;
54
import jakarta.validation.constraints.NotEmpty;
65
import jakarta.validation.constraints.Pattern;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package br.ufpr.tads.msbantadsmanager.manager.port.in;
2+
3+
import jakarta.validation.constraints.Email;
4+
import jakarta.validation.constraints.Pattern;
5+
import org.hibernate.validator.constraints.Length;
6+
7+
public record UpdateManager(
8+
String firstName,
9+
String lastName,
10+
@Email String email,
11+
@Length(min = 11, max = 11)
12+
@Pattern(regexp = "^\\d{11}$", message = "field must be made of numbers")
13+
String phone,
14+
String lastModifiedBy) {
15+
}

src/main/resources/db/migration/V1__init-database.sql

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@ create sequence if not exists managers_id_seq;
22

33
create table if not exists managers
44
(
5-
id bigint primary key,
6-
cpf char(11) unique not null,
7-
email varchar(255) unique not null,
8-
first_name varchar(255) not null,
9-
last_name varchar(255) not null,
10-
phone varchar(16) not null,
11-
is_active bool default true,
5+
id serial primary key,
6+
cpf char(11) unique not null,
7+
email varchar(255) unique not null,
8+
first_name varchar(255) not null,
9+
last_name varchar(255) not null,
10+
phone varchar(16) not null,
11+
accounts integer not null default 0,
1212

13-
created_by varchar(255),
14-
updated_by varchar(255),
13+
is_active bool default true,
1514

16-
created_at timestamp not null default current_timestamp,
17-
updated_at timestamp not null default current_timestamp
15+
created_by varchar(255),
16+
last_modified_by varchar(255),
17+
18+
creation_date timestamp not null default current_timestamp,
19+
last_modified_date timestamp not null default current_timestamp
1820
);
1921

0 commit comments

Comments
 (0)