| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Messaging;
- using Domain.Entities.Store;
- using Microsoft.EntityFrameworkCore;
- using SharedKernel.Results;
- namespace Application.Features.Admin.Store.GameCatalog.Create;
- internal sealed class Handler(IAppDbContext db) : ICommandHandler<Command, Result>
- {
- public async Task<Result> Handle(Command request, CancellationToken ct)
- {
- if (string.IsNullOrWhiteSpace(request.ProductID))
- {
- return Result.Failure(Error.Problem("GameCatalog.ProductIDRequired", "SKU(상품 ID)는 필수입니다."));
- }
- if (request.Price <= 0)
- {
- return Result.Failure(Error.Problem("GameCatalog.PriceInvalid", "정가는 1 이상이어야 합니다."));
- }
- if (!await db.Game.AnyAsync(c => c.ID == request.GameID, ct))
- {
- return Result.Failure(Error.NotFound("Game.NotFound", "게임을 찾을 수 없습니다."));
- }
- var productID = request.ProductID.Trim();
- if (await db.GameProductCatalog.AnyAsync(c => c.GameID == request.GameID && c.ProductID == productID, ct))
- {
- return Result.Failure(Error.Conflict("GameCatalog.Duplicate", "이미 등록된 SKU 입니다."));
- }
- db.GameProductCatalog.Add(GameProductCatalog.Create(request.GameID, productID, request.Price));
- await db.SaveChangesAsync(ct);
- return Result.Success();
- }
- }
|