Skip to content

Commit e073d6f

Browse files
merge pull request #3 from https-richardy/feature/02-implements-shipping-address-on-order-creation
[#2] - implements shipping address on order creation
2 parents 2d071aa + 29515f8 commit e073d6f

11 files changed

Lines changed: 64 additions & 9 deletions

File tree

.github/workflows/publish-package-pipeline.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ on:
77
- development
88
paths:
99
- 'Artifacts/Comanda.Internal.Contracts/**'
10+
pull_request:
11+
branches:
12+
- master
13+
- development
14+
paths:
15+
- 'Artifacts/Comanda.Internal.Contracts/**'
1016

1117
jobs:
1218
publish:
@@ -38,11 +44,8 @@ jobs:
3844
3945
if [[ "${GITHUB_REF}" == "refs/heads/master" ]]; then
4046
VERSION="${BASE_VERSION}.${GITHUB_RUN_NUMBER}"
41-
elif [[ "${GITHUB_REF}" == "refs/heads/development" ]]; then
42-
VERSION="${BASE_VERSION}-beta.${GITHUB_RUN_NUMBER}"
4347
else
44-
echo "branch not configured for publication"
45-
exit 1
48+
VERSION="${BASE_VERSION}-beta.${GITHUB_RUN_NUMBER}"
4649
fi
4750
4851
echo "use version: $VERSION"
@@ -51,4 +54,4 @@ jobs:
5154
echo "package_version=$VERSION" >> $GITHUB_OUTPUT
5255
5356
- name: push package to nuget
54-
run: dotnet nuget push ./output/*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate
57+
run: dotnet nuget push ./output/*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate

Artifacts/Comanda.Internal.Contracts/Source/Clients/OrderClient.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ public sealed class OrderClient(HttpClient httpClient) : IOrderClient
88
PropertyNameCaseInsensitive = true
99
};
1010

11-
public async Task<Result<PaginationScheme<OrderScheme>>> GetOrdersAsync(
12-
OrdersFetchParameters parameters, CancellationToken cancellation = default)
11+
public async Task<Result<PaginationScheme<OrderScheme>>> GetOrdersAsync(OrdersFetchParameters parameters, CancellationToken cancellation = default)
1312
{
1413
var queryString = QueryParametersParser.ToQueryString(parameters);
1514

@@ -62,8 +61,7 @@ public async Task<Result<PaginationScheme<OrderScheme>>> GetOrdersAsync(
6261
return Result<PaginationScheme<OrderScheme>>.Success(result);
6362
}
6463

65-
public async Task<Result<OrderScheme>> CreateOrderAsync(
66-
OrderCreationScheme parameters, CancellationToken cancellation = default)
64+
public async Task<Result<OrderScheme>> CreateOrderAsync(OrderCreationScheme parameters, CancellationToken cancellation = default)
6765
{
6866
var response = await httpClient.PostAsJsonAsync("orders", parameters, cancellation);
6967
var content = await response.Content.ReadAsStringAsync(cancellation);

Artifacts/Comanda.Internal.Contracts/Source/Transport/Internal/Orders/OrderCreationScheme.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public sealed record OrderCreationScheme : IDispatchable<Result<OrderScheme>>
44
{
55
public Fulfillment Fulfillment { get; init; }
66
public Priority Priority { get; init; }
7+
public Address? Address { get; init; } = default!;
78
public Metadata Metadata { get; init; } = default!;
89
public IEnumerable<Item> Items { get; init; } = [];
910
}

Artifacts/Comanda.Internal.Contracts/Source/Transport/Internal/Orders/OrderScheme.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public sealed record OrderScheme
55
public string Identifier { get; init; } = default!;
66
public string Code { get; init; } = default!;
77

8+
public Address? Address { get; init; } = default!;
89
public Status Status { get; init; }
910
public Priority Priority { get; init; }
1011
public Fulfillment Fulfillment { get; init; }

Boundaries/Comanda.Orders/Source/Comanda.Orders.Application/Mappers/OrderMapper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public static Order AsOrder(this OrderCreationScheme scheme, Code code)
77
var order = new Order
88
{
99
Code = code,
10+
Address = scheme.Address,
1011
Fulfillment = scheme.Fulfillment,
1112
Priority = scheme.Priority,
1213
Metadata = scheme.Metadata,
@@ -47,6 +48,7 @@ public static Order AsOrder(this OrderCreationScheme scheme, Code code)
4748
{
4849
Identifier = order.Id,
4950
Code = order.Code.Identifier,
51+
Address = order.Address,
5052
Priority = order.Priority,
5153
Status = order.Status,
5254
Fulfillment = order.Fulfillment,

Boundaries/Comanda.Orders/Source/Comanda.Orders.Application/Payloads/Order/OrderCreationScheme.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public sealed record OrderCreationScheme : IDispatchable<Result<OrderScheme>>
44
{
55
public Fulfillment Fulfillment { get; init; }
66
public Priority Priority { get; init; }
7+
public Address? Address { get; init; } = default!;
78
public Metadata Metadata { get; init; } = default!;
89
public IEnumerable<Item> Items { get; init; } = [];
910
}

Boundaries/Comanda.Orders/Source/Comanda.Orders.Application/Payloads/Order/OrderScheme.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public sealed record OrderScheme
55
public string Identifier { get; init; } = default!;
66
public string Code { get; init; } = default!;
77

8+
public Address? Address { get; init; } = default!;
89
public Status Status { get; init; }
910
public Priority Priority { get; init; }
1011
public Fulfillment Fulfillment { get; init; }

Boundaries/Comanda.Orders/Source/Comanda.Orders.Application/Usings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
global using Comanda.Orders.Application.Payloads.Order;
1212
global using Comanda.Orders.Application.Mappers;
1313

14+
global using HttpsRichardy.Internal.Essentials.Utilities;
1415
global using HttpsRichardy.Internal.Essentials.Patterns;
1516
global using HttpsRichardy.Internal.Essentials.Filtering;
1617
global using HttpsRichardy.Internal.Essentials.Concepts;

Boundaries/Comanda.Orders/Source/Comanda.Orders.Application/Validators/OrderCreationSchemeValidator.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ public OrderCreationSchemeValidator()
1212
.IsInEnum()
1313
.WithMessage("fulfillment must be a valid enum value.");
1414

15+
RuleFor(order => order.Address)
16+
.NotNull()
17+
.WithMessage("address must be provided when fulfillment is delivery.")
18+
.When(order => order.Fulfillment == Fulfillment.Delivery);
19+
1520
RuleFor(order => order.Priority)
1621
.IsInEnum()
1722
.WithMessage("priority must be a valid enum value.");
@@ -20,6 +25,31 @@ public OrderCreationSchemeValidator()
2025
.NotNull()
2126
.WithMessage("metadata must be provided.");
2227

28+
When(order => order.Fulfillment == Fulfillment.Delivery && order.Address is not null, () =>
29+
{
30+
RuleFor(order => order.Address!.Street)
31+
.NotEmpty()
32+
.WithMessage("The street field is required and cannot be empty.");
33+
34+
RuleFor(order => order.Address!.Number)
35+
.NotEmpty()
36+
.WithMessage("The number field is required and represents the street number of the address.");
37+
38+
RuleFor(order => order.Address!.City)
39+
.NotEmpty()
40+
.WithMessage("The city field is required and cannot be empty.");
41+
42+
RuleFor(order => order.Address!.State)
43+
.NotEmpty()
44+
.WithMessage("The state field is required and cannot be empty.");
45+
46+
RuleFor(order => order.Address!.ZipCode)
47+
.NotEmpty()
48+
.WithMessage("The zip code field is required.")
49+
.Matches(ExpressionPatterns.Cep)
50+
.WithMessage("The zip code is invalid. It must match the Brazilian postal code format.");
51+
});
52+
2353
When(order => order.Metadata is not null, () =>
2454
{
2555
RuleFor(order => order.Metadata!.MerchantId)

Boundaries/Comanda.Orders/Source/Comanda.Orders.Domain/Entities/Order.cs renamed to Boundaries/Comanda.Orders/Source/Comanda.Orders.Domain/Aggregates/Order.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ public sealed class Order : Aggregate
44
{
55
public Code Code { get; set; } = default!;
66
public Metadata Metadata { get; set; } = default!;
7+
public Address? Address { get; set; } = default!;
8+
79
public Status Status { get; set; } = Status.Pending;
810
public Priority Priority { get; set; } = Priority.Normal;
911
public Fulfillment Fulfillment { get; set; } = Fulfillment.Unspecified;

0 commit comments

Comments
 (0)