No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

67 líneas
2.0KB

  1. using Campaign_Tracker.Server.Authorization;
  2. using Campaign_Tracker.Server.ExtensionData;
  3. using Microsoft.AspNetCore.Authorization;
  4. using Microsoft.AspNetCore.Mvc;
  5. namespace Campaign_Tracker.Server.Controllers;
  6. [ApiController]
  7. [Authorize(Policy = ApplicationPolicy.AdminAccess)]
  8. [Route("api/admin/extension-records")]
  9. public sealed class ExtensionRecordsController : ControllerBase
  10. {
  11. private readonly IExtensionRecordStore _store;
  12. public ExtensionRecordsController(IExtensionRecordStore store)
  13. {
  14. _store = store;
  15. }
  16. [HttpPost]
  17. public async Task<ActionResult<ExtensionRecordResponse>> Save(
  18. ExtensionRecordRequest request,
  19. CancellationToken cancellationToken)
  20. {
  21. if (request.LegacyLink is null)
  22. {
  23. return BadRequest(new ExtensionRecordValidationProblem("Legacy reference is required."));
  24. }
  25. var result = await _store.SaveAsync(
  26. new ExtensionRecordDraft(
  27. request.RecordType,
  28. request.RecordId,
  29. new LegacyLinkReference(request.LegacyLink.Type, request.LegacyLink.Value)),
  30. cancellationToken);
  31. if (!result.Saved || result.Record is null)
  32. {
  33. return BadRequest(new ExtensionRecordValidationProblem(
  34. result.Error ?? "Extension record could not be saved."));
  35. }
  36. return Ok(ExtensionRecordResponse.From(result.Record));
  37. }
  38. }
  39. public sealed record ExtensionRecordRequest(
  40. string RecordType,
  41. string RecordId,
  42. LegacyLinkRequest? LegacyLink);
  43. public sealed record LegacyLinkRequest(
  44. LegacyLinkType Type,
  45. string Value);
  46. public sealed record ExtensionRecordResponse(
  47. string RecordType,
  48. string RecordId,
  49. string LinkType,
  50. string LinkValue)
  51. {
  52. public static ExtensionRecordResponse From(ILegacyLinkedRecord record) =>
  53. new(record.RecordType, record.RecordId, record.LegacyLink.Type.ToString(), record.LegacyLink.Value);
  54. }
  55. public sealed record ExtensionRecordValidationProblem(string Error);

Powered by TurnKey Linux.