Skip to content

Commit d6a2e75

Browse files
committed
Management of Employee Job Title API
1 parent 2b18693 commit d6a2e75

15 files changed

Lines changed: 40 additions & 20 deletions

src/API.Core/Entities/EmployeeEntity.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public record EmployeeEntity(
1010
Option<BranchId> AssignedBranchId,
1111
Option<DepartmentId> AssignedDepartmentId,
1212
Option<EmployeeId> ReportsToId,
13+
string JobTitle,
1314
string FirstName,
1415
string LastName,
1516
string FullName)

src/API.Core/Messages/Commands/EmployeeCreationCommandHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ private async Task CreateEmployeeAsync(
6969
AssignedBranchId: None,
7070
AssignedDepartmentId: None,
7171
ReportsToId: None,
72+
string.Empty,
7273
request.FirstName,
7374
request.LastName,
7475
request.FullName);

src/API.Core/Messages/Commands/EmployeeManagementCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ public record EmployeeManagementCommand(
88
Guid UserID,
99
Option<BranchId> AssignedBranchId,
1010
Option<DepartmentId> AssignedDepartmentId,
11-
Option<EmployeeId> ReportsToId)
11+
Option<EmployeeId> ReportsToId,
12+
string JobTitle)
1213
: EntityTenantUserCommand<EmployeeEntity, EmployeeId, Guid, Guid>(TenantID, UserID)
1314
{
1415
public override IEnumerable<EmployeeId> AffectingTenantEntitiesIdentities

src/API.Core/Messages/Commands/EmployeeManagementCommandHandler.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public async Task<Unit> Handle(
2525
{
2626
AssignedBranchId = request.AssignedBranchId,
2727
AssignedDepartmentId = request.AssignedDepartmentId,
28-
ReportsToId = request.ReportsToId
28+
ReportsToId = request.ReportsToId,
29+
JobTitle = request.JobTitle
2930
};
3031

3132
await _employeeRepository.UpdateAsync(entity, cancellationToken).ConfigureAwait(false);

src/API.Core/Validators/EmployeeManagementCommandValidator.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ public EmployeeManagementCommandValidator(
4949
RuleFor(x => x.ReportsToId)
5050
.MustAsync(ValidateReportsToIdNoCyclesAsync)
5151
.WithMessage("ReportsToId must not be cyclical.");
52+
53+
RuleFor(x => x.JobTitle)
54+
.NotNull()
55+
.WithMessage("Job Title cannot be null.")
56+
.Must(s => !string.IsNullOrWhiteSpace(s))
57+
.WithMessage("Job Title cannot be empty or whitespace.");
5258
}
5359

5460
private async Task<bool> ValidateBranchAsync(EmployeeManagementCommand command, Option<BranchId> assignedBranchId, CancellationToken cancellationToken)

src/API.Persistence/Mongo/Entities/EmployeeMongoEntity.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public class EmployeeMongoEntity : IEntity<long>
2323

2424
public long? ReportsToId { get; set; }
2525

26+
public string? JobTitle { get; set; }
27+
2628
public string? FirstName { get; set; }
2729

2830
public string? LastName { get; set; }

src/API.Persistence/Mongo/Mappers/EmployeeMongoMapper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public EmployeeEntity Map(EmployeeMongoEntity source)
4646
Optional(source.AssignedBranchId).Map(_branchDataIdentityToDomainIdentityMapper.Map),
4747
Optional(source.AssignedDepartmentId).Map(_departmentDataToDomainIdentityMapper.Map),
4848
Optional(source.ReportsToId).Map(_dataIdentityToDomainIdentityMapper.Map),
49+
source.JobTitle ?? string.Empty,
4950
source.FirstName ?? string.Empty,
5051
source.LastName ?? string.Empty,
5152
source.FullName ?? string.Empty);
@@ -62,6 +63,7 @@ public EmployeeMongoEntity Map(EmployeeEntity source)
6263
AssignedBranchId = source.AssignedBranchId.Map(_branchDomainIdentityToDataIdentityMapper.Map).MatchUnsafe(s => s, (long?)null),
6364
AssignedDepartmentId = source.AssignedDepartmentId.Map(_departmentDomainToDataIdentityMapper.Map).MatchUnsafe(s => s, (long?)null),
6465
ReportsToId = source.ReportsToId.Map(_domainIdentityToDataIdentityMapper.Map).MatchUnsafe(s => s, (long?)null),
66+
JobTitle = source.JobTitle,
6567
FirstName = source.FirstName,
6668
LastName = source.LastName,
6769
FullName = source.FullName,

src/API.Web/Api/EmployeesController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ await _sender.Send(
4242
id,
4343
model.AssignedBranchId,
4444
model.AssignedDepartmentId,
45-
model.ReportsToId),
45+
model.ReportsToId,
46+
model.JobTitle ?? string.Empty),
4647
cancellationToken);
4748
}
4849

src/API.Web/ApiModels/EmployeeManagementModel.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
public record EmployeeManagementModel(
44
long? AssignedBranchId,
55
long? AssignedDepartmentId,
6-
long? ReportsToId);
6+
long? ReportsToId,
7+
string? JobTitle);

src/API.Web/ApiModels/EmployeeRetrievalModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ public record EmployeeRetrievalModel(
44
long Id, long CompanyId,
55
long? AssignedBranchId, long? AssignedDepartmentId,
66
long? ReportsToId,
7+
string JobTitle,
78
string FirstName, string LastName, string FullName);

0 commit comments

Comments
 (0)