Skip to content

Commit

Permalink
Added order completion feature
Browse files Browse the repository at this point in the history
  • Loading branch information
SzymonPobiega committed Mar 3, 2011
1 parent 73ac3a9 commit 5b1da2a
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 2 deletions.
3 changes: 3 additions & 0 deletions src/Restbucks.Client.Console/Program.cs
Expand Up @@ -34,6 +34,9 @@ static void Main(string[] args)
System.Console.ReadLine();
var receipt = client.GetReceipt(payment.ReceiptLink);
System.Console.WriteLine("You paid ${0} at {1} UTC", receipt.AmountPaid, receipt.PaymentDate);
System.Console.WriteLine("Press enter to complete order");
System.Console.ReadLine();
client.TakeCoffee(receipt.CompleteLink);
System.Console.WriteLine("Press enter to exit");
System.Console.ReadLine();
}
Expand Down
6 changes: 6 additions & 0 deletions src/Restbucks.Client.Console/RestbucksClient.cs
Expand Up @@ -54,5 +54,11 @@ public ReceiptRepresentation GetReceipt(string receiptUri)
var responseContent = responseMessage.Content.ReadAsXmlSerializable<ReceiptRepresentation>(serializer);
return responseContent;
}

public void TakeCoffee(string receiptUri)
{
var httpClient = new HttpClient();
httpClient.Delete(receiptUri);
}
}
}
4 changes: 3 additions & 1 deletion src/Restbucks.Service.Tests/ReceiptResourceTests.cs
Expand Up @@ -45,7 +45,9 @@ public void Initialize()
{
_repository = new InMemoryOrderRepository();
var mapper = new ReceiptRepresentationMapper();
_sut = new ReceiptResource(new ReadReceiptActivity(_repository, mapper));
var orderMapper = new OrderRepresentationMapper(new ItemRepresentationMapper());
_sut = new ReceiptResource(new ReadReceiptActivity(_repository, mapper),
new CompleteOrderActivity(_repository, orderMapper));
}
}
}
37 changes: 37 additions & 0 deletions src/Restbucks.Service/Activities/CompleteOrderActivity.cs
@@ -0,0 +1,37 @@
using System;
using Restbucks.Service.Domain;
using Restbucks.Service.Mappers;
using Restbucks.Service.Representations;

namespace Restbucks.Service.Activities
{
public class CompleteOrderActivity : ICompleteOrderActivity
{
private readonly IOrderRepository _repository;
private readonly OrderRepresentationMapper _orderRepresentationMapper;

public CompleteOrderActivity(IOrderRepository repository, OrderRepresentationMapper orderRepresentationMapper)
{
_repository = repository;
_orderRepresentationMapper = orderRepresentationMapper;
}

public OrderRepresentation Complete(int orderId)
{
var order = _repository.FindById(orderId);
if (order == null)
{
throw new NoSuchOrderException(orderId);
}

if (order.Status != OrderStatus.Ready)
{
throw new UnexpectedOrderStateException(orderId);
}
order.Take();

var representation = _orderRepresentationMapper.GetRepresentation(order);
return representation;
}
}
}
9 changes: 9 additions & 0 deletions src/Restbucks.Service/Activities/ICompleteOrderActivity.cs
@@ -0,0 +1,9 @@
using Restbucks.Service.Representations;

namespace Restbucks.Service.Activities
{
public interface ICompleteOrderActivity
{
OrderRepresentation Complete(int orderId);
}
}
1 change: 1 addition & 0 deletions src/Restbucks.Service/Activities/ReadReceiptActivity.cs
Expand Up @@ -26,6 +26,7 @@ public ReceiptRepresentation Read(int orderId, string baseUri)
}
var representation = _receiptMapper.GetRepresentation(order);
representation.OrderLink = RestbucksResources.GetResourceUri<OrderResource>(baseUri, orderId.ToString());
representation.CompleteLink = RestbucksResources.GetResourceUri<ReceiptResource>(baseUri, orderId.ToString());
return representation;
}
}
Expand Down
Expand Up @@ -18,5 +18,12 @@ public string OrderLink
get { return GetLinkByRel(RestbucksRelation.Order).UnlessNull(x => x.Uri); }
set { SetLink(RestbucksRelation.Order, value); }
}

[XmlIgnore]
public string CompleteLink
{
get { return GetLinkByRel(SelfRelValue).UnlessNull(x => x.Uri); }
set { SetLink(SelfRelValue, value); }
}
}
}
34 changes: 33 additions & 1 deletion src/Restbucks.Service/Resources/ReceiptResource.cs
Expand Up @@ -13,10 +13,12 @@ namespace Restbucks.Service.Resources
public class ReceiptResource
{
private readonly IReadReceiptActivity _readReceiptActivity;
private readonly ICompleteOrderActivity _completeOrderActivity;

public ReceiptResource(IReadReceiptActivity readReceiptActivity)
public ReceiptResource(IReadReceiptActivity readReceiptActivity, ICompleteOrderActivity completeOrderActivity)
{
_readReceiptActivity = readReceiptActivity;
_completeOrderActivity = completeOrderActivity;
}

[WebGet(
Expand All @@ -43,5 +45,35 @@ public ReceiptRepresentation Get(string orderId, HttpRequestMessage requestMessa
responseMessage.StatusCode = HttpStatusCode.BadRequest;
return null;
}

[WebInvoke(
Method = "DELETE",
UriTemplate = "/{orderId}",
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
public OrderRepresentation Complete(string orderId, HttpRequestMessage requestMessage, HttpResponseMessage responseMessage)
{
int id;
if (int.TryParse(orderId, out id))
{
try
{
var response = _completeOrderActivity.Complete(id);
return response;
}
catch (NoSuchOrderException)
{
responseMessage.StatusCode = HttpStatusCode.NotFound;
return null;
}
catch (UnexpectedOrderStateException)
{
responseMessage.StatusCode = HttpStatusCode.BadRequest;
return null;
}
}
responseMessage.StatusCode = HttpStatusCode.BadRequest;
return null;
}
}
}
2 changes: 2 additions & 0 deletions src/Restbucks.Service/Restbucks.Service.csproj
Expand Up @@ -81,7 +81,9 @@
</Content>
</ItemGroup>
<ItemGroup>
<Compile Include="Activities\CompleteOrderActivity.cs" />
<Compile Include="Activities\CreateOrderActivity.cs" />
<Compile Include="Activities\ICompleteOrderActivity.cs" />
<Compile Include="Activities\ICreateOrderActivity.cs" />
<Compile Include="Activities\IReadReceiptActivity.cs" />
<Compile Include="Activities\ReadReceiptActivity.cs" />
Expand Down

0 comments on commit 5b1da2a

Please sign in to comment.