diff --git a/DbFirst.Infrastructure/Repositories/CatalogRepository.cs b/DbFirst.Infrastructure/Repositories/CatalogRepository.cs index 0227349..f37ed80 100644 --- a/DbFirst.Infrastructure/Repositories/CatalogRepository.cs +++ b/DbFirst.Infrastructure/Repositories/CatalogRepository.cs @@ -27,9 +27,33 @@ public class CatalogRepository : ICatalogRepository public async Task InsertAsync(VwmyCatalog catalog, CancellationToken cancellationToken = default) { - // Platzhalter: Insert-Prozedur folgt. - // TODO: Replace with dedicated insert stored procedure invocation. - throw new NotImplementedException("Insert stored procedure not implemented yet."); + var guidParam = new SqlParameter("@GUID", SqlDbType.Int) + { + Direction = ParameterDirection.Output + }; + + var catTitleParam = new SqlParameter("@CAT_TITLE", catalog.CatTitle); + var catStringParam = new SqlParameter("@CAT_STRING", catalog.CatString); + var addedWhoParam = new SqlParameter("@ADDED_WHO", (object?)catalog.AddedWho ?? DBNull.Value); + + await _db.Database.ExecuteSqlRawAsync( + "EXEC dbo.PRTBMY_CATALOG_INSERT @CAT_TITLE, @CAT_STRING, @ADDED_WHO, @GUID OUTPUT", + parameters: new[] { catTitleParam, catStringParam, addedWhoParam, guidParam }, + cancellationToken: cancellationToken); + + if (guidParam.Value == DBNull.Value) + { + throw new InvalidOperationException("Failed to insert catalog via stored procedure."); + } + + var guid = (int)guidParam.Value; + var created = await _db.VwmyCatalogs.AsNoTracking().FirstOrDefaultAsync(x => x.Guid == guid, cancellationToken); + if (created == null) + { + throw new InvalidOperationException("Inserted catalog could not be loaded from view."); + } + + return created; } public async Task UpdateAsync(int id, VwmyCatalog catalog, CancellationToken cancellationToken = default)