Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
Expand All @@ -11,6 +12,7 @@
using Nhs.Appointments.Api.Availability;
using Nhs.Appointments.Api.Models;
using Nhs.Appointments.Audit.Functions;
using Nhs.Appointments.Core.Availability;
using Nhs.Appointments.Core.Features;
using Nhs.Appointments.Core.Inspectors;
using Nhs.Appointments.Core.Sites;
Expand All @@ -24,8 +26,9 @@ public class CreateRecurrenceFunction(
ILogger<CreateRecurrenceFunction> logger,
IMetricsRecorder metricsRecorder,
ISiteService siteService,
IRecurrenceWriteService recurrenceWriteService,
IFeatureToggleHelper featureToggleHelper)
: BaseApiFunction<CreateRecurrenceRequest, EmptyResponse>(validator, userContextProvider: userContextProvider, logger,
: BaseApiFunction<CreateRecurrenceRequest, Guid>(validator, userContextProvider: userContextProvider, logger,
metricsRecorder)
{
[OpenApiOperation("CreateRecurrence", ["Availability"],
Expand All @@ -51,16 +54,15 @@ public override async Task<IActionResult> RunAsync(
: ProblemResponse(HttpStatusCode.NotImplemented, null);
}

protected override async Task<ApiResult<EmptyResponse>> HandleRequest(CreateRecurrenceRequest request,
protected override async Task<ApiResult<Guid>> HandleRequest(CreateRecurrenceRequest request,
ILogger logger)
{
if (await siteService.GetSiteByIdAsync(request.Site) is null)
{
return Failed(HttpStatusCode.NotFound, "Site provided was not found.");
}

//TODO apply service

return Success(new EmptyResponse());
var createdRecurrenceId = await recurrenceWriteService.CreateRecurrence(request.Site, request.RecurrencePattern, request.Label, request.RecurrenceExceptions);
return Success(createdRecurrenceId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace Nhs.Appointments.Core.Availability;

public interface IRecurrenceStore
{
Task WriteRecurrenceDocument(string id, int version, string site, RecurrencePattern recurrencePattern, string label,
RecurrenceException[] recurrenceExceptions);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Nhs.Appointments.Core.Availability;

public interface IRecurrenceWriteService
{
Task<Guid> CreateRecurrence(string site,
RecurrencePattern recurrencePattern,
string label,
RecurrenceException[] recurrenceExceptions);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace Nhs.Appointments.Core.Availability;

public class RecurrenceWriteService(
IRecurrenceStore recurrenceStore,
IAvailabilityWriteService availabilityWriteService) : IRecurrenceWriteService

Check warning on line 5 in src/api/Nhs.Appointments.Core/Availability/RecurrenceWriteService.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Parameter 'availabilityWriteService' is unread.

See more on https://sonarcloud.io/project/issues?id=NHSDigital_nbs-appointments-management-service&issues=AZ3fk62cc9d1OWwJbJVv&open=AZ3fk62cc9d1OWwJbJVv&pullRequest=1650
{
public async Task<Guid> CreateRecurrence(string site, RecurrencePattern recurrencePattern, string label,
RecurrenceException[] recurrenceExceptions)
{
var recurrenceId = Guid.NewGuid();
await recurrenceStore.WriteRecurrenceDocument(recurrenceId.ToString(), 1, site, recurrencePattern, label,
recurrenceExceptions);

//TODO calculate daily_documents to be written and create them

Check warning on line 14 in src/api/Nhs.Appointments.Core/Availability/RecurrenceWriteService.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Complete the task associated to this 'TODO' comment.

See more on https://sonarcloud.io/project/issues?id=NHSDigital_nbs-appointments-management-service&issues=AZ3fk62cc9d1OWwJbJVu&open=AZ3fk62cc9d1OWwJbJVu&pullRequest=1650

return recurrenceId;
}
}
24 changes: 24 additions & 0 deletions src/api/Nhs.Appointments.Persistance/RecurrenceDocumentStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using Nhs.Appointments.Core.Availability;
using Nhs.Appointments.Persistance.Models;

namespace Nhs.Appointments.Persistance;

public class RecurrenceStore(ITypedDocumentCosmosStore<RecurrenceDocument> documentStore) : IRecurrenceStore
{
public async Task WriteRecurrenceDocument(string id, int version, string site, RecurrencePattern recurrencePattern,
string label, RecurrenceException[] recurrenceExceptions)
{
var docType = documentStore.GetDocumentType();
var document = new RecurrenceDocument
{
Id = id,
Version = version,
Site = site,
DocumentType = docType,
RecurrencePattern = recurrencePattern,
Label = label,
RecurrenceExceptions = recurrenceExceptions
};
await documentStore.WriteAsync(document);
}
}
2 changes: 2 additions & 0 deletions src/api/Nhs.Appointments.Persistance/ServiceRegistration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public static IServiceCollection AddDocumentStores(this IServiceCollection servi
{
services
.AddScoped<IAvailabilityStore, AvailabilityDocumentStore>()
.AddScoped<IRecurrenceStore, RecurrenceStore>()
.AddScoped<IAvailabilityCreatedEventStore, AvailabilityCreatedEventDocumentStore>()
.AddScoped<IBookingsDocumentStore, BookingCosmosDocumentStore>()
.AddScoped<IReferenceNumberDocumentStore, ReferenceGroupCosmosDocumentStore>()
Expand Down Expand Up @@ -65,6 +66,7 @@ public static IServiceCollection AddServices(this IServiceCollection services)
.AddTransient<IBookingQueryService, BookingQueryService>()
.AddTransient<IAccessibilityDefinitionsService, AccessibilityDefinitionsService>()
.AddTransient<IAvailabilityWriteService, AvailabilityWriteService>()
.AddTransient<IRecurrenceWriteService, RecurrenceWriteService>()
.AddTransient<IAvailabilityQueryService, AvailabilityQueryService>()
.AddTransient<IBookingAvailabilityStateService, BookingAvailabilityStateService>()
.AddTransient<IEulaService, EulaService>()
Expand Down
Loading