|
- using Campaign_Tracker.Server.Authorization;
- using Campaign_Tracker.Server.ExtensionData;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
-
- namespace Campaign_Tracker.Server.Controllers;
-
- [ApiController]
- [Authorize(Policy = ApplicationPolicy.AdminAccess)]
- [Route("api/admin/extension-records")]
- public sealed class ExtensionRecordsController : ControllerBase
- {
- private readonly IExtensionRecordStore _store;
-
- public ExtensionRecordsController(IExtensionRecordStore store)
- {
- _store = store;
- }
-
- [HttpPost]
- public async Task<ActionResult<ExtensionRecordResponse>> Save(
- ExtensionRecordRequest request,
- CancellationToken cancellationToken)
- {
- if (request.LegacyLink is null)
- {
- return BadRequest(new ExtensionRecordValidationProblem("Legacy reference is required."));
- }
-
- var result = await _store.SaveAsync(
- new ExtensionRecordDraft(
- request.RecordType,
- request.RecordId,
- new LegacyLinkReference(request.LegacyLink.Type, request.LegacyLink.Value)),
- cancellationToken);
-
- if (!result.Saved || result.Record is null)
- {
- return BadRequest(new ExtensionRecordValidationProblem(
- result.Error ?? "Extension record could not be saved."));
- }
-
- return Ok(ExtensionRecordResponse.From(result.Record));
- }
- }
-
- public sealed record ExtensionRecordRequest(
- string RecordType,
- string RecordId,
- LegacyLinkRequest? LegacyLink);
-
- public sealed record LegacyLinkRequest(
- LegacyLinkType Type,
- string Value);
-
- public sealed record ExtensionRecordResponse(
- string RecordType,
- string RecordId,
- string LinkType,
- string LinkValue)
- {
- public static ExtensionRecordResponse From(ILegacyLinkedRecord record) =>
- new(record.RecordType, record.RecordId, record.LegacyLink.Type.ToString(), record.LegacyLink.Value);
- }
-
- public sealed record ExtensionRecordValidationProblem(string Error);
|