Skip to content

Commit 1824fc0

Browse files
Ashish MishraAshish Mishra
authored andcommitted
staring the employee management system
1 parent 2b6d4cc commit 1824fc0

18 files changed

Lines changed: 517 additions & 39 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.beneite.SpringWithDocker.constants;
2+
3+
public final class GlobalConstants {
4+
5+
private GlobalConstants(){}
6+
7+
public static final String EMAIL_DOMAIN = "@riotgames.com";
8+
public static final String EMPLOYEE_ENDPOINT = "api/employee";
9+
public static final String CREATE = "create";
10+
public static final String EMPLOYEE_RECORD_SUCCESS = "Employee record created successfully";
11+
public static final String GET_EMPLOYEE = "getEmployee";
12+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.beneite.SpringWithDocker.controller;
2+
3+
import com.beneite.SpringWithDocker.dto.requestDto.CreateEmployeeRequestDto;
4+
import com.beneite.SpringWithDocker.dto.requestDto.UserDto;
5+
import com.beneite.SpringWithDocker.dto.responseDto.CreateEmployeeResponseDto;
6+
import com.beneite.SpringWithDocker.dto.responseDto.GetEmployeeResponseDto;
7+
import com.beneite.SpringWithDocker.service.implementation.EmployeeServiceImpl;
8+
import io.swagger.v3.oas.annotations.Operation;
9+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
10+
import io.swagger.v3.oas.annotations.tags.Tag;
11+
import jakarta.validation.Valid;
12+
import lombok.AllArgsConstructor;
13+
import org.springframework.http.HttpStatus;
14+
import org.springframework.http.ResponseEntity;
15+
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.PathVariable;
17+
import org.springframework.web.bind.annotation.PostMapping;
18+
import org.springframework.web.bind.annotation.RequestBody;
19+
import org.springframework.web.bind.annotation.RequestMapping;
20+
import org.springframework.web.bind.annotation.RestController;
21+
22+
import java.util.List;
23+
24+
import static com.beneite.SpringWithDocker.constants.GlobalConstants.CREATE;
25+
import static com.beneite.SpringWithDocker.constants.GlobalConstants.EMPLOYEE_ENDPOINT;
26+
import static com.beneite.SpringWithDocker.constants.GlobalConstants.GET_EMPLOYEE;
27+
28+
@Tag(
29+
name = "CRUD REST API's for Employee resource",
30+
description = "We have the following API: Create Employee"
31+
)
32+
@RestController
33+
@RequestMapping(EMPLOYEE_ENDPOINT)
34+
@AllArgsConstructor
35+
public class EmployeeController {
36+
37+
private EmployeeServiceImpl employeeServiceImpl;
38+
39+
@Operation(
40+
summary = "Create Employee API",
41+
description = "this API creates an Employee record"
42+
)
43+
@ApiResponse(
44+
responseCode = "201",
45+
description = "201-created, display the Employee record created"
46+
)
47+
@PostMapping(CREATE)
48+
public ResponseEntity<CreateEmployeeResponseDto> createUserApi(@Valid @RequestBody CreateEmployeeRequestDto createEmployeeRequestDto){
49+
CreateEmployeeResponseDto createEmployeeResponseDto = employeeServiceImpl.createEmployeeImplementation(createEmployeeRequestDto);
50+
return new ResponseEntity<>(createEmployeeResponseDto, HttpStatus.CREATED);
51+
}
52+
53+
@Operation(
54+
summary = "Get All Employee API",
55+
description = "this API get all student record"
56+
)
57+
@ApiResponse(
58+
responseCode = "200",
59+
description = "200-success, display All the employee record created"
60+
)
61+
@GetMapping(GET_EMPLOYEE)
62+
public ResponseEntity<List<GetEmployeeResponseDto>> getAllUsersApi(){
63+
List<GetEmployeeResponseDto> allUsersResponse = employeeServiceImpl.getAllEmployeeImplementation();
64+
return new ResponseEntity<>(allUsersResponse, HttpStatus.OK);
65+
}
66+
67+
@Operation(
68+
summary = "Get User API",
69+
description = "this API get a student record by id"
70+
)
71+
@ApiResponse(
72+
responseCode = "200",
73+
description = "200-success, display the student record created"
74+
)
75+
// Api to get the user by id, end point: http://localhost:8080/api/user/getUserById/2
76+
@GetMapping(GET_EMPLOYEE+"/{id}")
77+
public ResponseEntity<GetEmployeeResponseDto> getUserByIdApi(@PathVariable("id") Long userId){
78+
GetEmployeeResponseDto getEmployeeResponseDto = employeeServiceImpl.getEmployeeImplementation(userId);
79+
return new ResponseEntity<>(getEmployeeResponseDto, HttpStatus.OK);
80+
}
81+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.beneite.SpringWithDocker.dto.requestDto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.Email;
5+
import jakarta.validation.constraints.NotBlank;
6+
import jakarta.validation.constraints.Size;
7+
import lombok.AllArgsConstructor;
8+
import lombok.Builder;
9+
import lombok.Getter;
10+
import lombok.NoArgsConstructor;
11+
import lombok.Setter;
12+
13+
14+
@Schema(
15+
description = "Employee DTO model information"
16+
)
17+
@Getter
18+
@Setter
19+
@NoArgsConstructor
20+
@AllArgsConstructor
21+
@Builder
22+
public class CreateEmployeeRequestDto {
23+
24+
@NotBlank(message = "First name is required")
25+
@Size(min = 2, max = 50, message = "First name must be between 2 and 50 characters")
26+
private String firstName;
27+
28+
@NotBlank(message = "Last name is required")
29+
@Size(min = 2, max = 50, message = "Last name must be between 2 and 50 characters")
30+
private String lastName;
31+
32+
@NotBlank(message = "Personal Email is required")
33+
@Email(message = "Invalid email format")
34+
@Size(max = 100, message = "Email must not exceed 100 characters")
35+
private String personalEmail;
36+
37+
@NotBlank(message = "Department is required")
38+
private String department;
39+
40+
@NotBlank(message = "Business Unit is required")
41+
private String businessUnit;
42+
43+
@NotBlank(message = "Designation is required")
44+
@Size(max = 50, message = "Designation must not exceed 50 characters")
45+
private String designation;
46+
47+
@NotBlank(message = "Employee band is required")
48+
private String band;
49+
50+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.beneite.SpringWithDocker.dto.responseDto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.Setter;
9+
10+
import java.time.LocalDate;
11+
12+
13+
@Schema(
14+
description = "Create Employee Response Dto model information"
15+
)
16+
@Getter
17+
@Setter
18+
@NoArgsConstructor
19+
@AllArgsConstructor
20+
@Builder
21+
public class CreateEmployeeResponseDto {
22+
23+
@Schema(description = "Generated employee ID")
24+
private Long id; // generated employeeId
25+
26+
@Schema(description = "First name of the employee")
27+
private String firstName;
28+
29+
@Schema(description = "Last name of the employee")
30+
private String lastName;
31+
32+
@Schema(description = "Company email of the employee")
33+
private String companyEmail;
34+
35+
@Schema(description = "Personal email of the employee")
36+
private String personalEmail;
37+
38+
@Schema(description = "Date of joining")
39+
private LocalDate dateOfJoining;
40+
41+
@Schema(description = "Department of the employee")
42+
private String department;
43+
44+
@Schema(description = "Business unit of the employee")
45+
private String businessUnit;
46+
47+
@Schema(description = "Designation of the employee")
48+
private String designation;
49+
50+
@Schema(description = "Employee band (L1 - L10)")
51+
private String band;
52+
53+
@Schema(description = "Custom response message")
54+
private String message;
55+
56+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.beneite.SpringWithDocker.dto.responseDto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.Setter;
9+
10+
import java.time.LocalDate;
11+
12+
@Schema(
13+
description = "Get All Employee Response Dto model information"
14+
)
15+
@Getter
16+
@Setter
17+
@NoArgsConstructor
18+
@AllArgsConstructor
19+
@Builder
20+
public class GetEmployeeResponseDto {
21+
22+
23+
@Schema(description = "Generated employee ID")
24+
private Long id; // generated employeeId
25+
26+
@Schema(description = "First name of the employee")
27+
private String firstName;
28+
29+
@Schema(description = "Last name of the employee")
30+
private String lastName;
31+
32+
@Schema(description = "Company email of the employee")
33+
private String companyEmail;
34+
35+
@Schema(description = "Personal email of the employee")
36+
private String personalEmail;
37+
38+
@Schema(description = "Date of joining")
39+
private LocalDate dateOfJoining;
40+
41+
@Schema(description = "Department of the employee")
42+
private String department;
43+
44+
@Schema(description = "Business unit of the employee")
45+
private String businessUnit;
46+
47+
@Schema(description = "Designation of the employee")
48+
private String designation;
49+
50+
@Schema(description = "Employee band (L1 - L10)")
51+
private String band;
52+
53+
54+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.beneite.SpringWithDocker.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.GenerationType;
7+
import jakarta.persistence.Id;
8+
import jakarta.persistence.Table;
9+
import jakarta.persistence.Lob;
10+
11+
@Entity
12+
@Table(name = "config")
13+
public class ConfigEntity {
14+
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
19+
@Column(name = "config_key", unique = true, nullable = false)
20+
private String key;
21+
22+
@Lob
23+
@Column(name = "config_values", nullable = false)
24+
private String values; // store as JSON string
25+
}
26+
27+
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.beneite.SpringWithDocker.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.GenerationType;
7+
import jakarta.persistence.Id;
8+
import jakarta.persistence.Table;
9+
import jakarta.validation.constraints.Email;
10+
import jakarta.validation.constraints.NotBlank;
11+
import jakarta.validation.constraints.NotNull;
12+
import jakarta.validation.constraints.PastOrPresent;
13+
import jakarta.validation.constraints.Size;
14+
import lombok.AllArgsConstructor;
15+
import lombok.Getter;
16+
import lombok.NoArgsConstructor;
17+
import lombok.Setter;
18+
19+
import java.time.LocalDate;
20+
21+
@Getter
22+
@Setter
23+
@NoArgsConstructor
24+
@AllArgsConstructor
25+
@Entity
26+
@Table(name = "employee")
27+
public class EmployeeEntity {
28+
29+
@Id
30+
@GeneratedValue(strategy = GenerationType.IDENTITY)
31+
@Column(name = "employeeId")
32+
private Long id;
33+
34+
@NotBlank(message = "First name is required")
35+
@Size(min = 2, max = 50, message = "First name must be between 2 and 50 characters")
36+
@Column(name = "first_name", nullable = false)
37+
private String firstName;
38+
39+
@NotBlank(message = "Last name is required")
40+
@Size(min = 2, max = 50, message = "Last name must be between 2 and 50 characters")
41+
@Column(name = "last_name", nullable = false)
42+
private String lastName;
43+
44+
@NotBlank(message = "Email is required")
45+
@Email(message = "Invalid email format")
46+
@Size(max = 100, message = "Email must not exceed 100 characters")
47+
@Column(name = "company_email", unique = true, nullable = false)
48+
private String companyEmail;
49+
50+
@NotBlank(message = "Email is required")
51+
@Email(message = "Invalid email format")
52+
@Size(max = 100, message = "Email must not exceed 100 characters")
53+
@Column(name = "personal_email", unique = true, nullable = false)
54+
private String personalEmail;
55+
56+
@NotNull(message = "Date of joining is required")
57+
@PastOrPresent(message = "Date of joining cannot be in the future")
58+
@Column(name = "date_of_joining", nullable = false)
59+
private LocalDate dateOfJoining;
60+
61+
// <-- Will validate against config_key = "designations"
62+
@Column(name = "department", nullable = false)
63+
private String department;
64+
65+
// <-- Will validate against config_key = "designations"
66+
@Column(name = "business_unit", nullable = false)
67+
private String businessUnit;
68+
69+
// <-- Will validate against config_key = "designations"
70+
@Column(name = "designation",nullable = false, length = 50)
71+
private String designation;
72+
73+
// <-- Will validate against config_key = "bands"
74+
@Column(name = "employee_band",nullable = false, length = 5)
75+
private String band;
76+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.beneite.SpringWithDocker.enums;
2+
3+
public enum EmployeeBandEnum {
4+
L1, L2, L3, L4, L5, L6, L7, L8, L9, L10
5+
}

src/main/java/com/beneite/SpringWithDocker/mapper/AutoUserMapper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.beneite.SpringWithDocker.mapper;
22

3+
import com.beneite.SpringWithDocker.dto.requestDto.CreateEmployeeRequestDto;
34
import com.beneite.SpringWithDocker.dto.requestDto.UserDto;
5+
import com.beneite.SpringWithDocker.dto.responseDto.CreateEmployeeResponseDto;
6+
import com.beneite.SpringWithDocker.dto.responseDto.GetEmployeeResponseDto;
7+
import com.beneite.SpringWithDocker.entity.EmployeeEntity;
48
import com.beneite.SpringWithDocker.entity.UserEntity;
59
import org.mapstruct.Mapper;
610
import org.mapstruct.factory.Mappers;
@@ -9,7 +13,16 @@
913
public interface AutoUserMapper {
1014

1115
AutoUserMapper MAPPER = Mappers.getMapper(AutoUserMapper.class);
16+
1217
UserDto mapToDto(UserEntity userEntity);
1318

1419
UserEntity mapToJpa(UserDto userDto);
20+
21+
CreateEmployeeResponseDto mapToDto(EmployeeEntity employeeEntity);
22+
23+
EmployeeEntity mapToJpa(CreateEmployeeRequestDto createEmployeeRequestDto);
24+
25+
GetEmployeeResponseDto mapToGetAllEmployeeResponseDto(EmployeeEntity employeeEntity);
26+
27+
GetEmployeeResponseDto mapToGetEmployeeResponseDto(EmployeeEntity employeeEntity);
1528
}

0 commit comments

Comments
 (0)