Skip to content

Commit 969fe46

Browse files
committed
Backend for User Service created (CRUD operation is implemented)
1 parent ae8f028 commit 969fe46

File tree

17 files changed

+508
-22
lines changed

17 files changed

+508
-22
lines changed

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
<artifactId>spring-boot-starter-data-jpa</artifactId>
2323
</dependency>
2424

25-
<!--<dependency>
25+
<dependency>
2626
<groupId>org.springframework.boot</groupId>
2727
<artifactId>spring-boot-starter-security</artifactId>
28-
</dependency>-->
28+
</dependency>
2929

3030
<dependency>
3131
<groupId>org.springframework.boot</groupId>
@@ -134,4 +134,4 @@
134134
<tag>HEAD</tag>
135135
</scm>
136136

137-
</project>
137+
</project>
Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,44 @@
11
package com.csaba79coder.littersnap.controller;
22

3+
import com.csaba79coder.littersnap.model.user.dto.UserModel;
4+
import com.csaba79coder.littersnap.model.user.dto.UserModifyModel;
5+
import com.csaba79coder.littersnap.model.user.dto.UserRegistrationModel;
36
import com.csaba79coder.littersnap.model.user.service.UserService;
47
import lombok.RequiredArgsConstructor;
5-
import org.springframework.web.bind.annotation.RestController;
8+
import org.springframework.http.MediaType;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.web.bind.annotation.*;
11+
12+
import java.util.List;
13+
import java.util.UUID;
614

715
@RestController
816
@RequiredArgsConstructor
17+
@RequestMapping("/api/users")
918
public class UserController {
1019

1120
private final UserService userService;
21+
22+
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
23+
public ResponseEntity<List<UserModel>> renderAllUsers() {
24+
return ResponseEntity.status(200).body(userService.findAllUsers());
25+
}
26+
27+
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
28+
public ResponseEntity<UserModel> addNewUser(@RequestBody UserRegistrationModel model) {
29+
return ResponseEntity.status(201).body(userService.addNewUser(model));
30+
}
31+
32+
@PutMapping(value = "/{id}",
33+
produces = MediaType.APPLICATION_JSON_VALUE)
34+
public ResponseEntity<UserModel> modifyExistingUser(@PathVariable UUID id, @RequestBody UserModifyModel model) {
35+
return ResponseEntity.status(200).body(userService.modifyAnExistingUser(id, model));
36+
}
37+
38+
@DeleteMapping(value = "/{id}",
39+
produces = MediaType.APPLICATION_JSON_VALUE)
40+
public ResponseEntity<Void> deleteAnExistingUser(@PathVariable UUID id) {
41+
userService.deleteUser(id);
42+
return ResponseEntity.status(204).build();
43+
}
1244
}

src/main/java/com/csaba79coder/littersnap/model/base/entity/Auditable.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import jakarta.persistence.Column;
44
import jakarta.persistence.MappedSuperclass;
55
import lombok.Getter;
6+
import lombok.Setter;
67
import org.hibernate.annotations.CreationTimestamp;
78

89
import java.time.LocalDateTime;
910
import java.util.UUID;
1011

1112
@MappedSuperclass
1213
@Getter
14+
@Setter
1315
public class Auditable extends Identifier {
1416

1517
@CreationTimestamp

src/main/java/com/csaba79coder/littersnap/model/user/dto/RegisterUserDto.java

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.csaba79coder.littersnap.model.user.dto;
2+
3+
import com.csaba79coder.littersnap.value.Role;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
import java.time.LocalDateTime;
10+
import java.util.UUID;
11+
12+
@Getter
13+
@Setter
14+
@AllArgsConstructor
15+
@NoArgsConstructor
16+
public class UserModel {
17+
18+
private UUID id;
19+
private LocalDateTime createdAt;
20+
private LocalDateTime updatedAt;
21+
private UUID createdBy;
22+
private UUID updatedBy;
23+
private String email;
24+
private String firstName;
25+
private Role role;
26+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.csaba79coder.littersnap.model.user.dto;
2+
3+
import com.csaba79coder.littersnap.value.Role;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@AllArgsConstructor
12+
@NoArgsConstructor
13+
public class UserModifyModel {
14+
15+
private String email;
16+
private String firstName;
17+
private String password;
18+
private String passwordConfirmation;
19+
private Role role;
20+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.csaba79coder.littersnap.model.user.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
7+
8+
@Getter
9+
@Setter
10+
@AllArgsConstructor
11+
@NoArgsConstructor
12+
public class UserRegistrationModel {
13+
14+
private String email;
15+
private String firstName;
16+
private String password;
17+
private String passwordConfirmation;
18+
}
Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.csaba79coder.littersnap.model.user.entity;
22

33
import com.csaba79coder.littersnap.model.base.entity.Auditable;
4-
import jakarta.persistence.Column;
5-
import jakarta.persistence.Embeddable;
6-
import jakarta.persistence.Entity;
7-
import jakarta.persistence.Table;
4+
import com.csaba79coder.littersnap.value.Role;
5+
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import jakarta.persistence.*;
87
import lombok.AllArgsConstructor;
98
import lombok.Getter;
109
import lombok.NoArgsConstructor;
1110
import lombok.Setter;
11+
import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
1212

1313
@Entity
1414
@Embeddable
@@ -21,4 +21,17 @@ public class User extends Auditable {
2121

2222
@Column(name = "email", nullable = false, unique = true)
2323
private String email;
24-
}
24+
25+
@Column(name = "first_name", nullable = false)
26+
private String firstName;
27+
28+
@Column(name = "password", nullable = false)
29+
@NotBlank(message = "password is mandatory")
30+
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
31+
private String password;
32+
33+
@Enumerated(EnumType.STRING)
34+
@Column(name = "role", nullable = false)
35+
@NotBlank(message = "email is mandatory")
36+
private Role role = Role.ROLE_USER;
37+
}

src/main/java/com/csaba79coder/littersnap/model/user/persistence/UserRepository.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.stereotype.Repository;
66

7+
import java.util.Optional;
78
import java.util.UUID;
89

910
@Repository
1011
public interface UserRepository extends JpaRepository<User, UUID> {
11-
}
12+
13+
Optional<User> findUsersByEmail(String email);
14+
Optional<User> findUsersById(UUID id);
15+
}

0 commit comments

Comments
 (0)