mirror of
https://github.com/Sea-Haven-Industries/proposal-system.git
synced 2026-10-07 09:19:04 +00:00
Adds a managed pricing library so admins can seed/curate reference priced items
directly, instead of the corpus being populated only by ingesting Sent proposals.
v1 PR5.
API:
- PricingLibraryItem entity + migration; /api/pricing-library CRUD (admin), with
GET {id} reachable by internal Lambda callers (admins role via internal key).
- Create/update publish an ADDITIVE library-ingest SQS job {pricingLibraryItemId},
wrapped so a publish failure never rolls back the save.
Lambda (library-ingest):
- Additive event-shape branch: pricingLibraryItemId -> fetch item, format markdown,
upload to pricing-library/{category}/{id}.md, trigger KB sync. The existing
proposalId path is byte-for-byte unchanged. Explicit error when neither id present;
warns when both present.
Web:
- Pricing Library management page (/admin/pricing-library): list / create / edit / delete.
GPT-4.1 cross-review on the event-shape change: no BLOCK (neither/both-id handling
applied). Verified: api 159 tests; web tsc + 26 tests; lambdas ruff + 37 pytest.
38 lines
844 B
C#
38 lines
844 B
C#
using ProposalSystem.Domain.Entities;
|
|
|
|
namespace ProposalSystem.Application.DTOs;
|
|
|
|
/// <summary>
|
|
/// PR5: DTOs for the Pricing Library CRUD endpoints.
|
|
/// </summary>
|
|
public record PricingLibraryItemResponse(
|
|
Guid Id,
|
|
string Title,
|
|
string? Description,
|
|
ServiceCategory ServiceCategory,
|
|
string? Unit,
|
|
decimal? UnitPrice,
|
|
string? Keywords,
|
|
string Source,
|
|
DateTime CreatedAt,
|
|
DateTime UpdatedAt
|
|
);
|
|
|
|
public record CreatePricingLibraryItemRequest(
|
|
string Title,
|
|
string? Description,
|
|
ServiceCategory ServiceCategory,
|
|
string? Unit,
|
|
decimal? UnitPrice,
|
|
string? Keywords,
|
|
string? Source
|
|
);
|
|
|
|
public record UpdatePricingLibraryItemRequest(
|
|
string? Title,
|
|
string? Description,
|
|
ServiceCategory? ServiceCategory,
|
|
string? Unit,
|
|
decimal? UnitPrice,
|
|
string? Keywords
|
|
);
|