From 05876229b81f6478c6a612d939487347288cacfa Mon Sep 17 00:00:00 2001 From: MOHAMED RASHED Date: Mon, 1 Jun 2026 10:51:02 +0300 Subject: [PATCH] feat: implement content foundation for US010, US013, US043-US048, US017, US058-US059 - Add full CRUD + publish/delete admin endpoints for News, Events, and Resources (US043-US048) with bilingual fields, topic/category associations, and multi-country targeting on Resources - Add public read endpoints for News (by slug), Events (list/detail + .ics calendar export US013), and Resources (list/detail/download with view counter) covering US010, US003, US004 - Introduce ResourceCountry join entity and two EF migrations: ExpandResourceTypeAndAddCountries + AddTopicIdToNewsAndEvents - Wire expert registration flow: SubmitExpertRequest (US017), admin ListExpertRequests / GetExpertRequestById / Approve / Reject (US058-US059) - Expand error codes, localization strings, and DTO shapes across all content slices; update unit and integration tests to match --- .../Localization/Resources.yaml | 46 + .../Endpoints/EventsPublicEndpoints.cs | 21 +- .../Endpoints/NewsPublicEndpoints.cs | 15 +- .../Endpoints/ResourcesPublicEndpoints.cs | 21 +- .../appsettings.Production.json | 4 +- .../05/63d703a56d034ca2a565344a1f5110f4.pdf | Bin 0 -> 5120517 bytes .../05/94448ac812bd4db397140dc7bb2907b9.pdf | Bin 0 -> 5120517 bytes .../05/c8c645d9029c46a3964f76a6fe7f8dd3.pdf | Bin 0 -> 5120517 bytes .../Endpoints/CreateEventRequest.cs | 12 + .../Endpoints/CreateNewsRequest.cs | 5 + .../Endpoints/CreateResourceRequest.cs | 14 + .../Endpoints/EventEndpoints.cs | 69 +- .../Endpoints/NewsEndpoints.cs | 44 +- .../Endpoints/RescheduleEventRequest.cs | 5 + .../Endpoints/ResourceEndpoints.cs | 65 +- .../Endpoints/UpdateEventRequest.cs | 8 + .../Endpoints/UpdateNewsRequest.cs | 5 + .../Endpoints/UpdateResourceRequest.cs | 13 + .../appsettings.Production.json | 4 +- .../CreateEvent/CreateEventCommand.cs | 4 +- .../CreateEvent/CreateEventCommandHandler.cs | 37 +- .../CreateEventCommandValidator.cs | 11 +- .../Commands/CreateNews/CreateNewsCommand.cs | 5 +- .../CreateNews/CreateNewsCommandHandler.cs | 44 +- .../CreateNews/CreateNewsCommandValidator.cs | 10 +- .../CreateResource/CreateResourceCommand.cs | 4 +- .../CreateResourceCommandHandler.cs | 85 +- .../CreateResourceCommandValidator.cs | 9 +- .../DeleteEvent/DeleteEventCommand.cs | 3 +- .../DeleteEvent/DeleteEventCommandHandler.cs | 41 +- .../Commands/DeleteNews/DeleteNewsCommand.cs | 3 +- .../DeleteNews/DeleteNewsCommandHandler.cs | 41 +- .../DeleteResource/DeleteResourceCommand.cs | 6 + .../DeleteResourceCommandHandler.cs | 47 + .../PublishNews/PublishNewsCommand.cs | 3 +- .../PublishNews/PublishNewsCommandHandler.cs | 37 +- .../PublishResource/PublishResourceCommand.cs | 3 +- .../PublishResourceCommandHandler.cs | 96 +- .../RescheduleEvent/RescheduleEventCommand.cs | 4 +- .../RescheduleEventCommandHandler.cs | 36 +- .../RescheduleEventCommandValidator.cs | 1 - .../UpdateEvent/UpdateEventCommand.cs | 3 +- .../UpdateEvent/UpdateEventCommandHandler.cs | 49 +- .../UpdateEventCommandValidator.cs | 3 +- .../Commands/UpdateNews/UpdateNewsCommand.cs | 6 +- .../UpdateNews/UpdateNewsCommandHandler.cs | 48 +- .../UpdateNews/UpdateNewsCommandValidator.cs | 5 +- .../UpdateResource/UpdateResourceCommand.cs | 3 +- .../UpdateResourceCommandHandler.cs | 101 +- .../UpdateResourceCommandValidator.cs | 11 +- .../CCE.Application/Content/Dtos/EventDto.cs | 4 +- .../CCE.Application/Content/Dtos/NewsDto.cs | 7 +- .../Content/Dtos/ResourceDto.cs | 11 +- .../Content/Public/Dtos/PublicEventDto.cs | 5 +- .../Content/Public/Dtos/PublicNewsDto.cs | 4 +- .../Content/Public/Dtos/PublicResourceDto.cs | 6 +- .../GetPublicEventByIdQuery.cs | 3 +- .../GetPublicEventByIdQueryHandler.cs | 29 +- .../GetPublicNewsBySlugQuery.cs | 3 +- .../GetPublicNewsBySlugQueryHandler.cs | 28 +- .../GetPublicResourceByIdQuery.cs | 3 +- .../GetPublicResourceByIdQueryHandler.cs | 58 +- .../ListPublicEvents/ListPublicEventsQuery.cs | 5 +- .../ListPublicEventsQueryHandler.cs | 38 +- .../ListPublicNews/ListPublicNewsQuery.cs | 5 +- .../ListPublicNewsQueryHandler.cs | 37 +- .../ListPublicResourcesQuery.cs | 4 +- .../ListPublicResourcesQueryHandler.cs | 91 +- .../Queries/GetEventById/GetEventByIdQuery.cs | 3 +- .../GetEventById/GetEventByIdQueryHandler.cs | 27 +- .../Queries/GetNewsById/GetNewsByIdQuery.cs | 3 +- .../GetNewsById/GetNewsByIdQueryHandler.cs | 31 +- .../GetResourceById/GetResourceByIdQuery.cs | 7 + .../GetResourceByIdQueryHandler.cs | 64 + .../Queries/ListEvents/ListEventsQuery.cs | 4 +- .../ListEvents/ListEventsQueryHandler.cs | 35 +- .../Content/Queries/ListNews/ListNewsQuery.cs | 4 +- .../Queries/ListNews/ListNewsQueryHandler.cs | 39 +- .../ListResources/ListResourcesQuery.cs | 3 +- .../ListResourcesQueryHandler.cs | 96 +- .../Evaluation/DTOs/ServiceEvaluationDto.cs | 2 +- .../Messages/MessageFactory.cs | 1 + .../CCE.Application/Messages/SystemCode.cs | 9 +- .../CCE.Application/Messages/SystemCodeMap.cs | 18 +- .../src/CCE.Domain/Common/AuditableEntity.cs | 2 +- .../src/CCE.Domain/Common/SystemConstants.cs | 14 + backend/src/CCE.Domain/Content/Event.cs | 15 +- backend/src/CCE.Domain/Content/News.cs | 51 +- backend/src/CCE.Domain/Content/Resource.cs | 34 +- .../src/CCE.Domain/Content/ResourceCountry.cs | 21 + .../src/CCE.Domain/Content/ResourceType.cs | 19 +- .../Evaluation/ServiceEvaluation.cs | 3 +- .../Content/EventConfiguration.cs | 1 + .../Content/NewsConfiguration.cs | 1 + .../Content/ResourceConfiguration.cs | 10 +- .../Content/ResourceCountryConfiguration.cs | 16 + ...andResourceTypeAndAddCountries.Designer.cs | 3941 ++++++++++++++++ ...70325_ExpandResourceTypeAndAddCountries.cs | 54 + ...0555_AddTopicIdToNewsAndEvents.Designer.cs | 3955 +++++++++++++++++ ...0260531210555_AddTopicIdToNewsAndEvents.cs | 99 + .../Migrations/CceDbContextModelSnapshot.cs | 77 +- .../src/CCE.Seeder/Seeders/DemoDataSeeder.cs | 48 +- .../Endpoints/EventsEndpointTests.cs | 14 +- .../Endpoints/EventsPublicEndpointTests.cs | 9 +- .../Endpoints/NewsEndpointTests.cs | 17 +- .../Endpoints/ResourcesEndpointTests.cs | 10 +- ...untryResourceRequestCommandHandlerTests.cs | 2 +- .../CreateEventCommandHandlerTests.cs | 50 +- .../CreateEventCommandValidatorTests.cs | 3 +- .../Commands/CreateNewsCommandHandlerTests.cs | 55 +- .../CreateNewsCommandValidatorTests.cs | 8 +- .../CreateResourceCommandHandlerTests.cs | 129 +- .../CreateResourceCommandValidatorTests.cs | 5 +- .../DeleteEventCommandHandlerTests.cs | 69 +- .../Commands/DeleteNewsCommandHandlerTests.cs | 71 +- .../PublishNewsCommandHandlerTests.cs | 56 +- .../PublishResourceCommandHandlerTests.cs | 110 +- ...untryResourceRequestCommandHandlerTests.cs | 2 +- .../RescheduleEventCommandHandlerTests.cs | 60 +- .../RescheduleEventCommandValidatorTests.cs | 2 +- .../UpdateEventCommandHandlerTests.cs | 69 +- .../UpdateEventCommandValidatorTests.cs | 13 +- .../Commands/UpdateNewsCommandHandlerTests.cs | 68 +- .../UpdateNewsCommandValidatorTests.cs | 21 +- .../UpdateResourceCommandHandlerTests.cs | 107 +- .../UpdateResourceCommandValidatorTests.cs | 15 +- .../GetPublicEventByIdQueryHandlerTests.cs | 36 +- .../GetPublicNewsBySlugQueryHandlerTests.cs | 43 +- .../GetPublicResourceByIdQueryHandlerTests.cs | 35 +- .../ListPublicEventsQueryHandlerTests.cs | 50 +- .../ListPublicNewsQueryHandlerTests.cs | 46 +- .../ListPublicResourcesQueryHandlerTests.cs | 61 +- .../Queries/GetEventByIdQueryHandlerTests.cs | 48 +- .../Queries/GetNewsByIdQueryHandlerTests.cs | 46 +- .../Queries/ListEventsQueryHandlerTests.cs | 60 +- .../Queries/ListNewsQueryHandlerTests.cs | 68 +- .../Queries/ListResourcesQueryHandlerTests.cs | 72 +- .../CCE.Domain.Tests/Content/EventTests.cs | 16 +- .../CCE.Domain.Tests/Content/NewsTests.cs | 24 +- .../CCE.Domain.Tests/Content/ResourceTests.cs | 21 +- .../Content/RowVersionContractTests.cs | 5 +- .../Country/CountryResourceRequestTests.cs | 2 +- .../Search/MeilisearchIndexerHandlerTests.cs | 6 +- .../Seeder/DemoDataSeederTests.cs | 18 +- 144 files changed, 10424 insertions(+), 1356 deletions(-) create mode 100644 backend/src/CCE.Api.External/backend/uploads/uploads/2026/05/63d703a56d034ca2a565344a1f5110f4.pdf create mode 100644 backend/src/CCE.Api.External/backend/uploads/uploads/2026/05/94448ac812bd4db397140dc7bb2907b9.pdf create mode 100644 backend/src/CCE.Api.External/backend/uploads/uploads/2026/05/c8c645d9029c46a3964f76a6fe7f8dd3.pdf create mode 100644 backend/src/CCE.Api.Internal/Endpoints/CreateEventRequest.cs create mode 100644 backend/src/CCE.Api.Internal/Endpoints/CreateNewsRequest.cs create mode 100644 backend/src/CCE.Api.Internal/Endpoints/CreateResourceRequest.cs create mode 100644 backend/src/CCE.Api.Internal/Endpoints/RescheduleEventRequest.cs create mode 100644 backend/src/CCE.Api.Internal/Endpoints/UpdateEventRequest.cs create mode 100644 backend/src/CCE.Api.Internal/Endpoints/UpdateNewsRequest.cs create mode 100644 backend/src/CCE.Api.Internal/Endpoints/UpdateResourceRequest.cs create mode 100644 backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommand.cs create mode 100644 backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommandHandler.cs create mode 100644 backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQuery.cs create mode 100644 backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQueryHandler.cs create mode 100644 backend/src/CCE.Domain/Common/SystemConstants.cs create mode 100644 backend/src/CCE.Domain/Content/ResourceCountry.cs create mode 100644 backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceCountryConfiguration.cs create mode 100644 backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.Designer.cs create mode 100644 backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.cs create mode 100644 backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.Designer.cs create mode 100644 backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.cs diff --git a/backend/src/CCE.Api.Common/Localization/Resources.yaml b/backend/src/CCE.Api.Common/Localization/Resources.yaml index f40e5a01..a5ce2845 100644 --- a/backend/src/CCE.Api.Common/Localization/Resources.yaml +++ b/backend/src/CCE.Api.Common/Localization/Resources.yaml @@ -476,3 +476,49 @@ EVALUATION_NOT_FOUND: EVALUATION_SUBMITTED: ar: "تم تقديم التقييم بنجاح" en: "Evaluation submitted successfully" + +# ─── Resource-specific messages (BRD Sprint 04) ─── + +RESOURCE_CREATED: + ar: "تم رفع المصدر بنجاح!" + en: "Resource uploaded successfully!" + +RESOURCE_DELETED: + ar: "تم حذف المصدر بنجاح!" + en: "Resource deleted successfully!" + +CONTENT_UPDATED: + ar: "تم التحديث بنجاح" + en: "Content updated successfully" + +CONTENT_DELETED: + ar: "تم الحذف بنجاح" + en: "Content deleted successfully" + +RESOURCE_DOWNLOAD_FAILED: + ar: "حدث خطأ أثناء محاولة تحميل المصدر. يرجى المحاولة مرة أخرى." + en: "An error occurred while downloading the resource. Please try again." + +RESOURCE_UPLOAD_FAILED: + ar: "عذراً، حدثت مشكلة أثناء رفع المصدر." + en: "Sorry, a problem occurred while uploading the resource." + +RESOURCE_DELETE_FAILED: + ar: "عذراً، حدثت مشكلة أثناء حذف المصدر." + en: "Sorry, a problem occurred while deleting the resource." + +RESOURCE_NOT_FOUND_ALT: + ar: "عذراً، لا توجد مصادر حالياً." + en: "Sorry, there are no resources currently." + +RESOURCE_DOWNLOAD_SUCCESS: + ar: "تم تحميل المصدر بنجاح! يمكنك الآن الوصول إلى المرفق من جهازك." + en: "Resource downloaded successfully! You can now access the attachment from your device." + +RESOURCE_SHARE_SUCCESS: + ar: "تمت مشاركة المصدر بنجاح!" + en: "Resource shared successfully!" + +RESOURCE_SHARE_FAILED: + ar: "حدث خطأ أثناء محاولة مشاركة المصدر. يرجى المحاولة مرة أخرى لاحقاً." + en: "An error occurred while trying to share the resource. Please try again later." diff --git a/backend/src/CCE.Api.External/Endpoints/EventsPublicEndpoints.cs b/backend/src/CCE.Api.External/Endpoints/EventsPublicEndpoints.cs index f69751eb..5f308d76 100644 --- a/backend/src/CCE.Api.External/Endpoints/EventsPublicEndpoints.cs +++ b/backend/src/CCE.Api.External/Endpoints/EventsPublicEndpoints.cs @@ -1,3 +1,4 @@ +using CCE.Api.Common.Extensions; using CCE.Application.Content.Public; using CCE.Application.Content.Public.Queries.GetPublicEventById; using CCE.Application.Content.Public.Queries.ListPublicEvents; @@ -17,15 +18,17 @@ public static IEndpointRouteBuilder MapEventsPublicEndpoints(this IEndpointRoute events.MapGet("", async ( int? page, int? pageSize, System.DateTimeOffset? from, System.DateTimeOffset? to, + string? topicSlug, IMediator mediator, CancellationToken cancellationToken) => { var query = new ListPublicEventsQuery( Page: page ?? 1, PageSize: pageSize ?? 20, From: from, - To: to); - var result = await mediator.Send(query, cancellationToken).ConfigureAwait(false); - return Results.Ok(result); + To: to, + TopicSlug: topicSlug); + var response = await mediator.Send(query, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .AllowAnonymous() .WithName("ListPublicEvents"); @@ -34,8 +37,8 @@ public static IEndpointRouteBuilder MapEventsPublicEndpoints(this IEndpointRoute System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new GetPublicEventByIdQuery(id), cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var response = await mediator.Send(new GetPublicEventByIdQuery(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .AllowAnonymous() .WithName("GetPublicEventById"); @@ -44,10 +47,10 @@ public static IEndpointRouteBuilder MapEventsPublicEndpoints(this IEndpointRoute System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new GetPublicEventByIdQuery(id), cancellationToken).ConfigureAwait(false); - if (dto is null) - return Results.NotFound(); - var ics = IcsBuilder.ToIcs(dto); + var response = await mediator.Send(new GetPublicEventByIdQuery(id), cancellationToken).ConfigureAwait(false); + if (!response.Success) + return response.ToHttpResult(); + var ics = IcsBuilder.ToIcs(response.Data!); return Results.Text(ics, "text/calendar; charset=utf-8"); }) .AllowAnonymous() diff --git a/backend/src/CCE.Api.External/Endpoints/NewsPublicEndpoints.cs b/backend/src/CCE.Api.External/Endpoints/NewsPublicEndpoints.cs index 410288a0..b68a3389 100644 --- a/backend/src/CCE.Api.External/Endpoints/NewsPublicEndpoints.cs +++ b/backend/src/CCE.Api.External/Endpoints/NewsPublicEndpoints.cs @@ -1,8 +1,8 @@ +using CCE.Api.Common.Extensions; using CCE.Application.Content.Public.Queries.GetPublicNewsBySlug; using CCE.Application.Content.Public.Queries.ListPublicNews; using MediatR; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; namespace CCE.Api.External.Endpoints; @@ -14,15 +14,16 @@ public static IEndpointRouteBuilder MapNewsPublicEndpoints(this IEndpointRouteBu var news = app.MapGroup("/api/news").WithTags("News"); news.MapGet("", async ( - int? page, int? pageSize, bool? isFeatured, + int? page, int? pageSize, bool? isFeatured, string? topicSlug, IMediator mediator, CancellationToken cancellationToken) => { var query = new ListPublicNewsQuery( Page: page ?? 1, PageSize: pageSize ?? 20, - IsFeatured: isFeatured); - var result = await mediator.Send(query, cancellationToken).ConfigureAwait(false); - return Results.Ok(result); + IsFeatured: isFeatured, + TopicSlug: topicSlug); + var response = await mediator.Send(query, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .AllowAnonymous() .WithName("ListPublicNews"); @@ -31,8 +32,8 @@ public static IEndpointRouteBuilder MapNewsPublicEndpoints(this IEndpointRouteBu string slug, IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new GetPublicNewsBySlugQuery(slug), cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var response = await mediator.Send(new GetPublicNewsBySlugQuery(slug), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .AllowAnonymous() .WithName("GetPublicNewsBySlug"); diff --git a/backend/src/CCE.Api.External/Endpoints/ResourcesPublicEndpoints.cs b/backend/src/CCE.Api.External/Endpoints/ResourcesPublicEndpoints.cs index 80ecd9e6..3d63231d 100644 --- a/backend/src/CCE.Api.External/Endpoints/ResourcesPublicEndpoints.cs +++ b/backend/src/CCE.Api.External/Endpoints/ResourcesPublicEndpoints.cs @@ -1,3 +1,4 @@ +using CCE.Api.Common.Extensions; using CCE.Application.Common.Interfaces; using CCE.Application.Content; using CCE.Application.Content.Public; @@ -19,15 +20,16 @@ public static IEndpointRouteBuilder MapResourcesPublicEndpoints(this IEndpointRo var resources = app.MapGroup("/api/resources").WithTags("Resources"); resources.MapGet("", async ( - int? page, int? pageSize, + int? page, int? pageSize, string? search, System.Guid? categoryId, System.Guid? countryId, ResourceType? resourceType, IMediator mediator, CancellationToken cancellationToken) => { var query = new ListPublicResourcesQuery( Page: page ?? 1, PageSize: pageSize ?? 20, + Search: search, CategoryId: categoryId, CountryId: countryId, ResourceType: resourceType); - var result = await mediator.Send(query, cancellationToken).ConfigureAwait(false); - return Results.Ok(result); + var response = await mediator.Send(query, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .AllowAnonymous() .WithName("ListPublicResources"); @@ -36,8 +38,8 @@ public static IEndpointRouteBuilder MapResourcesPublicEndpoints(this IEndpointRo System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new GetPublicResourceByIdQuery(id), cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var response = await mediator.Send(new GetPublicResourceByIdQuery(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .AllowAnonymous() .WithName("GetPublicResourceById"); @@ -50,21 +52,15 @@ public static IEndpointRouteBuilder MapResourcesPublicEndpoints(this IEndpointRo IResourceViewCountRepository viewCounter, CancellationToken cancellationToken) => { - // Load resource + asset metadata in a single round trip. var resource = await db.Resources.FirstOrDefaultAsync(r => r.Id == id, cancellationToken).ConfigureAwait(false); if (resource is null || resource.PublishedOn is null) - { return Results.NotFound(); - } + var asset = await db.AssetFiles.FirstOrDefaultAsync(a => a.Id == resource.AssetFileId, cancellationToken).ConfigureAwait(false); if (asset is null) - { return Results.NotFound(); - } if (asset.VirusScanStatus != VirusScanStatus.Clean) - { return Results.StatusCode(StatusCodes.Status403Forbidden); - } httpContext.Response.ContentType = asset.MimeType; httpContext.Response.Headers.ContentDisposition = @@ -73,7 +69,6 @@ public static IEndpointRouteBuilder MapResourcesPublicEndpoints(this IEndpointRo await using var stream = await storage.OpenReadAsync(asset.Url, cancellationToken).ConfigureAwait(false); await stream.CopyToAsync(httpContext.Response.Body, cancellationToken).ConfigureAwait(false); - // Fire-and-forget view-count bump (don't await; don't propagate exceptions). _ = Task.Run(async () => { try { await viewCounter.IncrementAsync(id, CancellationToken.None).ConfigureAwait(false); } diff --git a/backend/src/CCE.Api.External/appsettings.Production.json b/backend/src/CCE.Api.External/appsettings.Production.json index e1a2febb..72fb3431 100644 --- a/backend/src/CCE.Api.External/appsettings.Production.json +++ b/backend/src/CCE.Api.External/appsettings.Production.json @@ -76,11 +76,11 @@ }, "ExternalApis": { "CommunicationGateway": { - "BaseUrl": "https://cce-mocks.bonto.run", + "BaseUrl": "https://cce-mock.bonto.run", "TimeoutSeconds": 30 }, "AdminAuthGateway": { - "BaseUrl": "https://cce-mocks.bonto.run", + "BaseUrl": "https://cce-mock.bonto.run", "TimeoutSeconds": 30 } }, diff --git a/backend/src/CCE.Api.External/backend/uploads/uploads/2026/05/63d703a56d034ca2a565344a1f5110f4.pdf b/backend/src/CCE.Api.External/backend/uploads/uploads/2026/05/63d703a56d034ca2a565344a1f5110f4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..986229f89bde4d59863f71efe6c9e406d5fdd3f1 GIT binary patch literal 5120517 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

ona2+H= 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

ona2+H= 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

ona2+H= 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 CountryIds); diff --git a/backend/src/CCE.Api.Internal/Endpoints/EventEndpoints.cs b/backend/src/CCE.Api.Internal/Endpoints/EventEndpoints.cs index 51177c6e..56a6c2c2 100644 --- a/backend/src/CCE.Api.Internal/Endpoints/EventEndpoints.cs +++ b/backend/src/CCE.Api.Internal/Endpoints/EventEndpoints.cs @@ -1,3 +1,4 @@ +using CCE.Api.Common.Extensions; using CCE.Application.Content.Commands.CreateEvent; using CCE.Application.Content.Commands.DeleteEvent; using CCE.Application.Content.Commands.RescheduleEvent; @@ -7,7 +8,6 @@ using CCE.Domain; using MediatR; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; namespace CCE.Api.Internal.Endpoints; @@ -20,33 +20,38 @@ public static IEndpointRouteBuilder MapEventEndpoints(this IEndpointRouteBuilder events.MapGet("", async ( int? page, int? pageSize, string? search, - System.DateTimeOffset? fromDate, System.DateTimeOffset? toDate, + System.DateTimeOffset? fromDate, System.DateTimeOffset? toDate, System.Guid? topicId, IMediator mediator, CancellationToken cancellationToken) => { - var query = new ListEventsQuery(page ?? 1, pageSize ?? 20, search, fromDate, toDate); - var result = await mediator.Send(query, cancellationToken).ConfigureAwait(false); - return Results.Ok(result); + var query = new ListEventsQuery(page ?? 1, pageSize ?? 20, search, fromDate, toDate, topicId); + var response = await mediator.Send(query, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Event_Manage) .WithName("ListEvents"); - events.MapGet("/{id:guid}", async (System.Guid id, IMediator mediator, CancellationToken cancellationToken) => + events.MapGet("/{id:guid}", async ( + System.Guid id, + IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new GetEventByIdQuery(id), cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var response = await mediator.Send(new GetEventByIdQuery(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Event_Manage) .WithName("GetEventById"); - events.MapPost("", async (CreateEventRequest body, IMediator mediator, CancellationToken cancellationToken) => + events.MapPost("", async ( + CreateEventRequest body, + IMediator mediator, CancellationToken cancellationToken) => { var cmd = new CreateEventCommand( body.TitleAr, body.TitleEn, body.DescriptionAr, body.DescriptionEn, body.StartsOn, body.EndsOn, body.LocationAr, body.LocationEn, - body.OnlineMeetingUrl, body.FeaturedImageUrl); - var dto = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); - return Results.Created($"/api/admin/events/{dto.Id}", dto); + body.OnlineMeetingUrl, body.FeaturedImageUrl, + body.TopicId); + var response = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Event_Manage) .WithName("CreateEvent"); @@ -56,16 +61,15 @@ public static IEndpointRouteBuilder MapEventEndpoints(this IEndpointRouteBuilder UpdateEventRequest body, IMediator mediator, CancellationToken cancellationToken) => { - var rowVersion = string.IsNullOrEmpty(body.RowVersion) ? System.Array.Empty() : System.Convert.FromBase64String(body.RowVersion); var cmd = new UpdateEventCommand( id, body.TitleAr, body.TitleEn, body.DescriptionAr, body.DescriptionEn, body.LocationAr, body.LocationEn, body.OnlineMeetingUrl, body.FeaturedImageUrl, - rowVersion); - var dto = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + body.TopicId); + var response = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Event_Manage) .WithName("UpdateEvent"); @@ -75,10 +79,9 @@ public static IEndpointRouteBuilder MapEventEndpoints(this IEndpointRouteBuilder RescheduleEventRequest body, IMediator mediator, CancellationToken cancellationToken) => { - var rowVersion = string.IsNullOrEmpty(body.RowVersion) ? System.Array.Empty() : System.Convert.FromBase64String(body.RowVersion); - var cmd = new RescheduleEventCommand(id, body.StartsOn, body.EndsOn, rowVersion); - var dto = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var cmd = new RescheduleEventCommand(id, body.StartsOn, body.EndsOn); + var response = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Event_Manage) .WithName("RescheduleEvent"); @@ -87,8 +90,8 @@ public static IEndpointRouteBuilder MapEventEndpoints(this IEndpointRouteBuilder System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - await mediator.Send(new DeleteEventCommand(id), cancellationToken).ConfigureAwait(false); - return Results.NoContent(); + var response = await mediator.Send(new DeleteEventCommand(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Event_Manage) .WithName("DeleteEvent"); @@ -96,25 +99,3 @@ public static IEndpointRouteBuilder MapEventEndpoints(this IEndpointRouteBuilder return app; } } - -public sealed record CreateEventRequest( - string TitleAr, string TitleEn, - string DescriptionAr, string DescriptionEn, - System.DateTimeOffset StartsOn, - System.DateTimeOffset EndsOn, - string? LocationAr, - string? LocationEn, - string? OnlineMeetingUrl, - string? FeaturedImageUrl); - -public sealed record UpdateEventRequest( - string TitleAr, string TitleEn, - string DescriptionAr, string DescriptionEn, - string? LocationAr, string? LocationEn, - string? OnlineMeetingUrl, string? FeaturedImageUrl, - string RowVersion); - -public sealed record RescheduleEventRequest( - System.DateTimeOffset StartsOn, - System.DateTimeOffset EndsOn, - string RowVersion); diff --git a/backend/src/CCE.Api.Internal/Endpoints/NewsEndpoints.cs b/backend/src/CCE.Api.Internal/Endpoints/NewsEndpoints.cs index 931f410b..53fa8c11 100644 --- a/backend/src/CCE.Api.Internal/Endpoints/NewsEndpoints.cs +++ b/backend/src/CCE.Api.Internal/Endpoints/NewsEndpoints.cs @@ -1,3 +1,4 @@ +using CCE.Api.Common.Extensions; using CCE.Application.Content.Commands.CreateNews; using CCE.Application.Content.Commands.DeleteNews; using CCE.Application.Content.Commands.PublishNews; @@ -7,7 +8,6 @@ using CCE.Domain; using MediatR; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; namespace CCE.Api.Internal.Endpoints; @@ -19,7 +19,7 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder var news = app.MapGroup("/api/admin/news").WithTags("News"); news.MapGet("", async ( - int? page, int? pageSize, string? search, bool? isPublished, bool? isFeatured, + int? page, int? pageSize, string? search, bool? isPublished, bool? isFeatured, System.Guid? topicId, IMediator mediator, CancellationToken cancellationToken) => { var query = new ListNewsQuery( @@ -27,9 +27,10 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder PageSize: pageSize ?? 20, Search: search, IsPublished: isPublished, - IsFeatured: isFeatured); - var result = await mediator.Send(query, cancellationToken).ConfigureAwait(false); - return Results.Ok(result); + IsFeatured: isFeatured, + TopicId: topicId); + var response = await mediator.Send(query, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.News_Update) .WithName("ListNews"); @@ -38,8 +39,8 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new GetNewsByIdQuery(id), cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var response = await mediator.Send(new GetNewsByIdQuery(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.News_Update) .WithName("GetNewsById"); @@ -48,9 +49,9 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder CreateNewsRequest body, IMediator mediator, CancellationToken cancellationToken) => { - var cmd = new CreateNewsCommand(body.TitleAr, body.TitleEn, body.ContentAr, body.ContentEn, body.Slug, body.FeaturedImageUrl); - var dto = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); - return Results.Created($"/api/admin/news/{dto.Id}", dto); + var cmd = new CreateNewsCommand(body.TitleAr, body.TitleEn, body.ContentAr, body.ContentEn, body.TopicId, body.FeaturedImageUrl); + var response = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.News_Update) .WithName("CreateNews"); @@ -60,10 +61,9 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder UpdateNewsRequest body, IMediator mediator, CancellationToken cancellationToken) => { - var rowVersion = string.IsNullOrEmpty(body.RowVersion) ? System.Array.Empty() : System.Convert.FromBase64String(body.RowVersion); - var cmd = new UpdateNewsCommand(id, body.TitleAr, body.TitleEn, body.ContentAr, body.ContentEn, body.Slug, body.FeaturedImageUrl, rowVersion); - var dto = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var cmd = new UpdateNewsCommand(id, body.TitleAr, body.TitleEn, body.ContentAr, body.ContentEn, body.TopicId, body.FeaturedImageUrl); + var response = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.News_Update) .WithName("UpdateNews"); @@ -72,8 +72,8 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - await mediator.Send(new DeleteNewsCommand(id), cancellationToken).ConfigureAwait(false); - return Results.NoContent(); + var response = await mediator.Send(new DeleteNewsCommand(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.News_Delete) .WithName("DeleteNews"); @@ -82,8 +82,8 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new PublishNewsCommand(id), cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var response = await mediator.Send(new PublishNewsCommand(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.News_Publish) .WithName("PublishNews"); @@ -91,11 +91,3 @@ public static IEndpointRouteBuilder MapNewsEndpoints(this IEndpointRouteBuilder return app; } } - -public sealed record CreateNewsRequest( - string TitleAr, string TitleEn, string ContentAr, string ContentEn, - string Slug, string? FeaturedImageUrl); - -public sealed record UpdateNewsRequest( - string TitleAr, string TitleEn, string ContentAr, string ContentEn, - string Slug, string? FeaturedImageUrl, string RowVersion); diff --git a/backend/src/CCE.Api.Internal/Endpoints/RescheduleEventRequest.cs b/backend/src/CCE.Api.Internal/Endpoints/RescheduleEventRequest.cs new file mode 100644 index 00000000..b3baca9a --- /dev/null +++ b/backend/src/CCE.Api.Internal/Endpoints/RescheduleEventRequest.cs @@ -0,0 +1,5 @@ +namespace CCE.Api.Internal.Endpoints; + +public sealed record RescheduleEventRequest( + System.DateTimeOffset StartsOn, + System.DateTimeOffset EndsOn); diff --git a/backend/src/CCE.Api.Internal/Endpoints/ResourceEndpoints.cs b/backend/src/CCE.Api.Internal/Endpoints/ResourceEndpoints.cs index 459dab3c..ac743e26 100644 --- a/backend/src/CCE.Api.Internal/Endpoints/ResourceEndpoints.cs +++ b/backend/src/CCE.Api.Internal/Endpoints/ResourceEndpoints.cs @@ -1,12 +1,14 @@ +using CCE.Api.Common.Extensions; using CCE.Application.Content.Commands.CreateResource; +using CCE.Application.Content.Commands.DeleteResource; using CCE.Application.Content.Commands.PublishResource; using CCE.Application.Content.Commands.UpdateResource; +using CCE.Application.Content.Queries.GetResourceById; using CCE.Application.Content.Queries.ListResources; using CCE.Domain; using CCE.Domain.Content; using MediatR; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; namespace CCE.Api.Internal.Endpoints; @@ -29,12 +31,22 @@ public static IEndpointRouteBuilder MapResourceEndpoints(this IEndpointRouteBuil CategoryId: categoryId, CountryId: countryId, IsPublished: isPublished); - var result = await mediator.Send(query, cancellationToken).ConfigureAwait(false); - return Results.Ok(result); + var response = await mediator.Send(query, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Resource_Center_Upload) .WithName("ListResources"); + resources.MapGet("/{id:guid}", async ( + System.Guid id, + IMediator mediator, CancellationToken cancellationToken) => + { + var response = await mediator.Send(new GetResourceByIdQuery(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); + }) + .RequireAuthorization(Permissions.Resource_Center_Upload) + .WithName("GetResourceById"); + resources.MapPost("", async ( CreateResourceRequest body, IMediator mediator, CancellationToken cancellationToken) => @@ -42,9 +54,10 @@ public static IEndpointRouteBuilder MapResourceEndpoints(this IEndpointRouteBuil var cmd = new CreateResourceCommand( body.TitleAr, body.TitleEn, body.DescriptionAr, body.DescriptionEn, - body.ResourceType, body.CategoryId, body.CountryId, body.AssetFileId); - var dto = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); - return Results.Created($"/api/admin/resources/{dto.Id}", dto); + body.ResourceType, body.CategoryId, body.CountryId, body.AssetFileId, + body.CountryIds); + var response = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Resource_Center_Upload) .WithName("CreateResource"); @@ -54,17 +67,14 @@ public static IEndpointRouteBuilder MapResourceEndpoints(this IEndpointRouteBuil UpdateResourceRequest body, IMediator mediator, CancellationToken cancellationToken) => { - var rowVersion = string.IsNullOrEmpty(body.RowVersion) - ? System.Array.Empty() - : System.Convert.FromBase64String(body.RowVersion); var cmd = new UpdateResourceCommand( id, body.TitleAr, body.TitleEn, body.DescriptionAr, body.DescriptionEn, body.ResourceType, body.CategoryId, - rowVersion); - var dto = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + body.CountryIds); + var response = await mediator.Send(cmd, cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Resource_Center_Update) .WithName("UpdateResource"); @@ -73,31 +83,24 @@ public static IEndpointRouteBuilder MapResourceEndpoints(this IEndpointRouteBuil System.Guid id, IMediator mediator, CancellationToken cancellationToken) => { - var dto = await mediator.Send(new PublishResourceCommand(id), cancellationToken).ConfigureAwait(false); - return dto is null ? Results.NotFound() : Results.Ok(dto); + var response = await mediator.Send(new PublishResourceCommand(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); }) .RequireAuthorization(Permissions.Resource_Center_Upload) .WithName("PublishResource"); + resources.MapDelete("/{id:guid}", async ( + System.Guid id, + IMediator mediator, CancellationToken cancellationToken) => + { + var response = await mediator.Send(new DeleteResourceCommand(id), cancellationToken).ConfigureAwait(false); + return response.ToHttpResult(); + }) + .RequireAuthorization(Permissions.Resource_Center_Delete) + .WithName("DeleteResource"); + return app; } } -public sealed record CreateResourceRequest( - string TitleAr, - string TitleEn, - string DescriptionAr, - string DescriptionEn, - CCE.Domain.Content.ResourceType ResourceType, - System.Guid CategoryId, - System.Guid? CountryId, - System.Guid AssetFileId); -public sealed record UpdateResourceRequest( - string TitleAr, - string TitleEn, - string DescriptionAr, - string DescriptionEn, - CCE.Domain.Content.ResourceType ResourceType, - System.Guid CategoryId, - string RowVersion); diff --git a/backend/src/CCE.Api.Internal/Endpoints/UpdateEventRequest.cs b/backend/src/CCE.Api.Internal/Endpoints/UpdateEventRequest.cs new file mode 100644 index 00000000..30b1395e --- /dev/null +++ b/backend/src/CCE.Api.Internal/Endpoints/UpdateEventRequest.cs @@ -0,0 +1,8 @@ +namespace CCE.Api.Internal.Endpoints; + +public sealed record UpdateEventRequest( + string TitleAr, string TitleEn, + string DescriptionAr, string DescriptionEn, + string? LocationAr, string? LocationEn, + string? OnlineMeetingUrl, string? FeaturedImageUrl, + System.Guid TopicId); diff --git a/backend/src/CCE.Api.Internal/Endpoints/UpdateNewsRequest.cs b/backend/src/CCE.Api.Internal/Endpoints/UpdateNewsRequest.cs new file mode 100644 index 00000000..4cdc9a6a --- /dev/null +++ b/backend/src/CCE.Api.Internal/Endpoints/UpdateNewsRequest.cs @@ -0,0 +1,5 @@ +namespace CCE.Api.Internal.Endpoints; + +public sealed record UpdateNewsRequest( + string TitleAr, string TitleEn, string ContentAr, string ContentEn, + System.Guid TopicId, string? FeaturedImageUrl); diff --git a/backend/src/CCE.Api.Internal/Endpoints/UpdateResourceRequest.cs b/backend/src/CCE.Api.Internal/Endpoints/UpdateResourceRequest.cs new file mode 100644 index 00000000..9d52205f --- /dev/null +++ b/backend/src/CCE.Api.Internal/Endpoints/UpdateResourceRequest.cs @@ -0,0 +1,13 @@ +using CCE.Domain.Content; + +namespace CCE.Api.Internal.Endpoints; + +public sealed record UpdateResourceRequest( + string TitleAr, + string TitleEn, + string DescriptionAr, + string DescriptionEn, + ResourceType ResourceType, + System.Guid CategoryId, + List CountryIds, + string RowVersion); diff --git a/backend/src/CCE.Api.Internal/appsettings.Production.json b/backend/src/CCE.Api.Internal/appsettings.Production.json index aebea391..ba97ac10 100644 --- a/backend/src/CCE.Api.Internal/appsettings.Production.json +++ b/backend/src/CCE.Api.Internal/appsettings.Production.json @@ -63,11 +63,11 @@ }, "ExternalApis": { "CommunicationGateway": { - "BaseUrl": "https://cce-mocks.bonto.run", + "BaseUrl": "https://cce-mock.bonto.run", "TimeoutSeconds": 30 }, "AdminAuthGateway": { - "BaseUrl": "https://cce-mocks.bonto.run", + "BaseUrl": "https://cce-mock.bonto.run", "TimeoutSeconds": 30 } }, diff --git a/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommand.cs b/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommand.cs index a2a23b94..d58dcada 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommand.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; @@ -11,4 +12,5 @@ public sealed record CreateEventCommand( string? LocationAr, string? LocationEn, string? OnlineMeetingUrl, - string? FeaturedImageUrl) : IRequest; + string? FeaturedImageUrl, + System.Guid TopicId) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandHandler.cs index 194778ba..f196a2aa 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandHandler.cs @@ -1,24 +1,40 @@ +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; +using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; using CCE.Application.Content.Queries.ListEvents; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.CreateEvent; -public sealed class CreateEventCommandHandler : IRequestHandler +public sealed class CreateEventCommandHandler : IRequestHandler> { - private readonly IEventRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; private readonly ISystemClock _clock; + private readonly MessageFactory _messages; - public CreateEventCommandHandler(IEventRepository service, ISystemClock clock) + public CreateEventCommandHandler( + IRepository repo, + ICceDbContext db, + ISystemClock clock, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; _clock = clock; + _messages = messages; } - public async Task Handle(CreateEventCommand request, CancellationToken cancellationToken) + public async Task> Handle(CreateEventCommand request, CancellationToken cancellationToken) { + var topicExists = await _db.Topics.Where(t => t.Id == request.TopicId).CountAsyncEither(cancellationToken) > 0; + if (!topicExists) + return _messages.NotFound("TOPIC_NOT_FOUND"); + var ev = Event.Schedule( request.TitleAr, request.TitleEn, @@ -30,10 +46,17 @@ public async Task Handle(CreateEventCommand request, CancellationToken request.LocationEn, request.OnlineMeetingUrl, request.FeaturedImageUrl, + request.TopicId, _clock); - await _service.SaveAsync(ev, cancellationToken).ConfigureAwait(false); + await _repo.AddAsync(ev, cancellationToken).ConfigureAwait(false); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + var topic = await _db.Topics.Where(t => t.Id == request.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicNameAr = topic.FirstOrDefault()?.NameAr ?? string.Empty; + var topicNameEn = topic.FirstOrDefault()?.NameEn ?? string.Empty; - return ListEventsQueryHandler.MapToDto(ev); + return _messages.Ok(ListEventsQueryHandler.MapToDto(ev, topicNameAr, topicNameEn), "CONTENT_CREATED"); } } diff --git a/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandValidator.cs b/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandValidator.cs index ca10bff9..3cd88131 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandValidator.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateEvent/CreateEventCommandValidator.cs @@ -6,10 +6,13 @@ public sealed class CreateEventCommandValidator : AbstractValidator x.TitleAr).NotEmpty().MaximumLength(500); - RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(500); - RuleFor(x => x.DescriptionAr).NotEmpty(); - RuleFor(x => x.DescriptionEn).NotEmpty(); + RuleFor(x => x.TitleAr).NotEmpty().MaximumLength(255); + RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(255); + RuleFor(x => x.DescriptionAr).NotEmpty().MaximumLength(2000); + RuleFor(x => x.DescriptionEn).NotEmpty().MaximumLength(2000); + RuleFor(x => x.LocationAr).MaximumLength(255).When(x => x.LocationAr is not null); + RuleFor(x => x.LocationEn).MaximumLength(255).When(x => x.LocationEn is not null); RuleFor(x => x.EndsOn).GreaterThan(x => x.StartsOn).WithMessage("EndsOn must be after StartsOn."); + RuleFor(x => x.TopicId).NotEmpty(); } } diff --git a/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommand.cs b/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommand.cs index f7b0a23c..90e5965e 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommand.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; @@ -6,5 +7,5 @@ namespace CCE.Application.Content.Commands.CreateNews; public sealed record CreateNewsCommand( string TitleAr, string TitleEn, string ContentAr, string ContentEn, - string Slug, - string? FeaturedImageUrl) : IRequest; + System.Guid TopicId, + string? FeaturedImageUrl) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandHandler.cs index 42481895..7a967e10 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandHandler.cs @@ -1,45 +1,65 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; +using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; using CCE.Application.Content.Queries.ListNews; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.CreateNews; -public sealed class CreateNewsCommandHandler : IRequestHandler +public sealed class CreateNewsCommandHandler : IRequestHandler> { - private readonly INewsRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; private readonly ICurrentUserAccessor _currentUser; private readonly ISystemClock _clock; + private readonly MessageFactory _messages; public CreateNewsCommandHandler( - INewsRepository service, + IRepository repo, + ICceDbContext db, ICurrentUserAccessor currentUser, - ISystemClock clock) + ISystemClock clock, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; _currentUser = currentUser; _clock = clock; + _messages = messages; } - public async Task Handle(CreateNewsCommand request, CancellationToken cancellationToken) + public async Task> Handle(CreateNewsCommand request, CancellationToken cancellationToken) { - var authorId = _currentUser.GetUserId() - ?? throw new DomainException("Cannot create a news article from a request without a user identity."); + var authorId = _currentUser.GetUserId(); + if (authorId is null) + return _messages.NotAuthenticated(); + + var topicExists = await _db.Topics.Where(t => t.Id == request.TopicId).CountAsyncEither(cancellationToken) > 0; + if (!topicExists) + return _messages.NotFound("TOPIC_NOT_FOUND"); var news = News.Draft( request.TitleAr, request.TitleEn, request.ContentAr, request.ContentEn, - request.Slug, - authorId, + request.TopicId, + authorId.Value, request.FeaturedImageUrl, _clock); - await _service.SaveAsync(news, cancellationToken).ConfigureAwait(false); + await _repo.AddAsync(news, cancellationToken).ConfigureAwait(false); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + var topic = await _db.Topics.Where(t => t.Id == request.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicNameAr = topic.FirstOrDefault()?.NameAr ?? string.Empty; + var topicNameEn = topic.FirstOrDefault()?.NameEn ?? string.Empty; - return ListNewsQueryHandler.MapToDto(news); + return _messages.Ok(ListNewsQueryHandler.MapToDto(news, topicNameAr, topicNameEn), "CONTENT_CREATED"); } } diff --git a/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandValidator.cs b/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandValidator.cs index 3f1421c0..e1583e21 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandValidator.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateNews/CreateNewsCommandValidator.cs @@ -6,10 +6,10 @@ public sealed class CreateNewsCommandValidator : AbstractValidator x.TitleAr).NotEmpty().MaximumLength(500); - RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(500); - RuleFor(x => x.ContentAr).NotEmpty(); - RuleFor(x => x.ContentEn).NotEmpty(); - RuleFor(x => x.Slug).NotEmpty().MaximumLength(200); + RuleFor(x => x.TitleAr).NotEmpty().MaximumLength(255); + RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(255); + RuleFor(x => x.ContentAr).NotEmpty().MaximumLength(2000); + RuleFor(x => x.ContentEn).NotEmpty().MaximumLength(2000); + RuleFor(x => x.TopicId).NotEmpty(); } } diff --git a/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommand.cs b/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommand.cs index 87ac3eb3..f423b87e 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommand.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using CCE.Domain.Content; using MediatR; @@ -12,4 +13,5 @@ public sealed record CreateResourceCommand( ResourceType ResourceType, System.Guid CategoryId, System.Guid? CountryId, - System.Guid AssetFileId) : IRequest; + System.Guid AssetFileId, + IReadOnlyList CountryIds) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandHandler.cs index fcd767b2..e53b098a 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandHandler.cs @@ -1,45 +1,67 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; -using CCE.Application.Content; +using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.CreateResource; -public sealed class CreateResourceCommandHandler : IRequestHandler +public sealed class CreateResourceCommandHandler : IRequestHandler> { - private readonly IResourceRepository _service; - private readonly IAssetRepository _assetService; + private readonly IRepository _repo; + private readonly ICceDbContext _db; private readonly ICurrentUserAccessor _currentUser; private readonly ISystemClock _clock; + private readonly MessageFactory _messages; public CreateResourceCommandHandler( - IResourceRepository service, - IAssetRepository assetService, + IRepository repo, + ICceDbContext db, ICurrentUserAccessor currentUser, - ISystemClock clock) + ISystemClock clock, + MessageFactory messages) { - _service = service; - _assetService = assetService; + _repo = repo; + _db = db; _currentUser = currentUser; _clock = clock; + _messages = messages; } - public async Task Handle(CreateResourceCommand request, CancellationToken cancellationToken) + public async Task> Handle(CreateResourceCommand request, CancellationToken cancellationToken) { - var asset = await _assetService.GetByIdAsync(request.AssetFileId, cancellationToken).ConfigureAwait(false); + var assets = await _db.AssetFiles + .Where(a => a.Id == request.AssetFileId) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var asset = assets.SingleOrDefault(); + if (asset is null) - { - throw new System.Collections.Generic.KeyNotFoundException($"Asset {request.AssetFileId} not found."); - } + return _messages.AssetNotFound(); if (asset.VirusScanStatus != VirusScanStatus.Clean) + return _messages.AssetNotClean(); + + var categoryExists = await ExistsAsync(_db.ResourceCategories.Where(c => c.Id == request.CategoryId), cancellationToken).ConfigureAwait(false); + if (!categoryExists) + return _messages.CategoryNotFound(); + + var countryIds = request.CountryIds.Distinct().ToList(); + if (countryIds.Count > 0) { - throw new DomainException($"Asset {request.AssetFileId} has not passed virus scan ({asset.VirusScanStatus})."); + var existingCountryCount = await _db.Countries + .Where(c => countryIds.Contains(c.Id)) + .CountAsyncEither(cancellationToken) + .ConfigureAwait(false); + if (existingCountryCount != countryIds.Count) + return _messages.NotFound("COUNTRY_NOT_FOUND"); } - var uploadedById = _currentUser.GetUserId() - ?? throw new DomainException("Cannot create a resource from a request without a user identity."); + var uploadedById = _currentUser.GetUserId(); + if (uploadedById is null) + return _messages.NotAuthenticated(); var resource = Resource.Draft( request.TitleAr, @@ -49,27 +71,20 @@ public async Task Handle(CreateResourceCommand request, Cancellatio request.ResourceType, request.CategoryId, request.CountryId, - uploadedById, + uploadedById.Value, request.AssetFileId, + request.CountryIds, _clock); - await _service.SaveAsync(resource, cancellationToken).ConfigureAwait(false); + await _repo.AddAsync(resource, cancellationToken).ConfigureAwait(false); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + return _messages.Ok(resource.Id, "RESOURCE_CREATED"); + } - return new ResourceDto( - resource.Id, - resource.TitleAr, - resource.TitleEn, - resource.DescriptionAr, - resource.DescriptionEn, - resource.ResourceType, - resource.CategoryId, - resource.CountryId, - resource.UploadedById, - resource.AssetFileId, - resource.PublishedOn, - resource.ViewCount, - resource.IsCenterManaged, - resource.IsPublished, - System.Convert.ToBase64String(resource.RowVersion)); + private static async Task ExistsAsync(IQueryable query, CancellationToken ct) + { + var list = await query.Take(1).ToListAsyncEither(ct).ConfigureAwait(false); + return list.Count > 0; } } diff --git a/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandValidator.cs b/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandValidator.cs index fc7b7c47..aa38e375 100644 --- a/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandValidator.cs +++ b/backend/src/CCE.Application/Content/Commands/CreateResource/CreateResourceCommandValidator.cs @@ -6,11 +6,12 @@ public sealed class CreateResourceCommandValidator : AbstractValidator x.TitleAr).NotEmpty().MaximumLength(500); - RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(500); - RuleFor(x => x.DescriptionAr).NotEmpty().MaximumLength(4000); - RuleFor(x => x.DescriptionEn).NotEmpty().MaximumLength(4000); + RuleFor(x => x.TitleAr).NotEmpty().MaximumLength(255); + RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(255); + RuleFor(x => x.DescriptionAr).NotEmpty().MaximumLength(500); + RuleFor(x => x.DescriptionEn).NotEmpty().MaximumLength(500); RuleFor(x => x.CategoryId).NotEmpty(); RuleFor(x => x.AssetFileId).NotEmpty(); + RuleFor(x => x.CountryIds).NotEmpty().ForEach(x => x.NotEmpty()); } } diff --git a/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommand.cs b/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommand.cs index 20f4bc55..5ca7be7a 100644 --- a/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommand.cs @@ -1,5 +1,6 @@ +using CCE.Application.Common; using MediatR; namespace CCE.Application.Content.Commands.DeleteEvent; -public sealed record DeleteEventCommand(System.Guid Id) : IRequest; +public sealed record DeleteEventCommand(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommandHandler.cs index 3c0b2460..7275628f 100644 --- a/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/DeleteEvent/DeleteEventCommandHandler.cs @@ -1,36 +1,47 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; -using CCE.Application.Content; +using CCE.Application.Messages; using CCE.Domain.Common; +using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.DeleteEvent; -public sealed class DeleteEventCommandHandler : IRequestHandler +public sealed class DeleteEventCommandHandler : IRequestHandler> { - private readonly IEventRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; private readonly ICurrentUserAccessor _currentUser; private readonly ISystemClock _clock; + private readonly MessageFactory _messages; - public DeleteEventCommandHandler(IEventRepository service, ICurrentUserAccessor currentUser, ISystemClock clock) + public DeleteEventCommandHandler( + IRepository repo, + ICceDbContext db, + ICurrentUserAccessor currentUser, + ISystemClock clock, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; _currentUser = currentUser; _clock = clock; + _messages = messages; } - public async Task Handle(DeleteEventCommand request, CancellationToken cancellationToken) + public async Task> Handle(DeleteEventCommand request, CancellationToken cancellationToken) { - var ev = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var ev = await _repo.GetByIdAsync(request.Id, cancellationToken).ConfigureAwait(false); if (ev is null) - { - throw new System.Collections.Generic.KeyNotFoundException($"Event {request.Id} not found."); - } + return _messages.EventNotFound(); - var deletedById = _currentUser.GetUserId() - ?? throw new DomainException("Cannot delete event from a request without a user identity."); + var userId = _currentUser.GetUserId(); + if (userId is null) + return _messages.NotAuthenticated(); - ev.SoftDelete(deletedById, _clock); - await _service.UpdateAsync(ev, ev.RowVersion, cancellationToken).ConfigureAwait(false); - return Unit.Value; + ev.SoftDelete(userId.Value, _clock); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + return _messages.Ok("CONTENT_DELETED"); } } diff --git a/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommand.cs b/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommand.cs index 6e318eb0..0f26d3bf 100644 --- a/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommand.cs @@ -1,5 +1,6 @@ +using CCE.Application.Common; using MediatR; namespace CCE.Application.Content.Commands.DeleteNews; -public sealed record DeleteNewsCommand(System.Guid Id) : IRequest; +public sealed record DeleteNewsCommand(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommandHandler.cs index ab119842..50b547d2 100644 --- a/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/DeleteNews/DeleteNewsCommandHandler.cs @@ -1,36 +1,47 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; -using CCE.Application.Content; +using CCE.Application.Messages; using CCE.Domain.Common; +using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.DeleteNews; -public sealed class DeleteNewsCommandHandler : IRequestHandler +public sealed class DeleteNewsCommandHandler : IRequestHandler> { - private readonly INewsRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; private readonly ICurrentUserAccessor _currentUser; private readonly ISystemClock _clock; + private readonly MessageFactory _messages; - public DeleteNewsCommandHandler(INewsRepository service, ICurrentUserAccessor currentUser, ISystemClock clock) + public DeleteNewsCommandHandler( + IRepository repo, + ICceDbContext db, + ICurrentUserAccessor currentUser, + ISystemClock clock, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; _currentUser = currentUser; _clock = clock; + _messages = messages; } - public async Task Handle(DeleteNewsCommand request, CancellationToken cancellationToken) + public async Task> Handle(DeleteNewsCommand request, CancellationToken cancellationToken) { - var news = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var news = await _repo.GetByIdAsync(request.Id, cancellationToken).ConfigureAwait(false); if (news is null) - { - throw new System.Collections.Generic.KeyNotFoundException($"News {request.Id} not found."); - } + return _messages.NewsNotFound(); - var deletedById = _currentUser.GetUserId() - ?? throw new DomainException("Cannot delete news from a request without a user identity."); + var userId = _currentUser.GetUserId(); + if (userId is null) + return _messages.NotAuthenticated(); - news.SoftDelete(deletedById, _clock); - await _service.UpdateAsync(news, news.RowVersion, cancellationToken).ConfigureAwait(false); - return Unit.Value; + news.SoftDelete(userId.Value, _clock); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + return _messages.Ok("CONTENT_DELETED"); } } diff --git a/backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommand.cs b/backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommand.cs new file mode 100644 index 00000000..c9c1ea0e --- /dev/null +++ b/backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommand.cs @@ -0,0 +1,6 @@ +using CCE.Application.Common; +using MediatR; + +namespace CCE.Application.Content.Commands.DeleteResource; + +public sealed record DeleteResourceCommand(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommandHandler.cs new file mode 100644 index 00000000..5d48354e --- /dev/null +++ b/backend/src/CCE.Application/Content/Commands/DeleteResource/DeleteResourceCommandHandler.cs @@ -0,0 +1,47 @@ +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; +using CCE.Application.Messages; +using CCE.Domain.Common; +using CCE.Domain.Content; +using MediatR; + +namespace CCE.Application.Content.Commands.DeleteResource; + +public sealed class DeleteResourceCommandHandler : IRequestHandler> +{ + private readonly IRepository _repo; + private readonly ICceDbContext _db; + private readonly ICurrentUserAccessor _currentUser; + private readonly ISystemClock _clock; + private readonly MessageFactory _messages; + + public DeleteResourceCommandHandler( + IRepository repo, + ICceDbContext db, + ICurrentUserAccessor currentUser, + ISystemClock clock, + MessageFactory messages) + { + _repo = repo; + _db = db; + _currentUser = currentUser; + _clock = clock; + _messages = messages; + } + + public async Task> Handle(DeleteResourceCommand request, CancellationToken cancellationToken) + { + var resource = await _repo.GetByIdAsync(request.Id, cancellationToken).ConfigureAwait(false); + if (resource is null) + return _messages.ResourceNotFound(); + + var userId = _currentUser.GetUserId(); + if (userId is null) + return _messages.NotAuthenticated(); + + resource.SoftDelete(userId.Value, _clock); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + return _messages.Ok("RESOURCE_DELETED"); + } +} diff --git a/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommand.cs b/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommand.cs index 6b2164c4..c8f6b2a1 100644 --- a/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommand.cs @@ -1,6 +1,7 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; namespace CCE.Application.Content.Commands.PublishNews; -public sealed record PublishNewsCommand(System.Guid Id) : IRequest; +public sealed record PublishNewsCommand(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommandHandler.cs index ac711f02..408d7e23 100644 --- a/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/PublishNews/PublishNewsCommandHandler.cs @@ -1,34 +1,45 @@ -using CCE.Application.Content; +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Dtos; -using CCE.Application.Content.Queries.ListNews; +using CCE.Application.Content.Queries.GetNewsById; +using CCE.Application.Messages; using CCE.Domain.Common; +using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.PublishNews; -public sealed class PublishNewsCommandHandler : IRequestHandler +public sealed class PublishNewsCommandHandler : IRequestHandler> { - private readonly INewsRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; private readonly ISystemClock _clock; + private readonly MessageFactory _messages; - public PublishNewsCommandHandler(INewsRepository service, ISystemClock clock) + public PublishNewsCommandHandler( + IRepository repo, + ICceDbContext db, + ISystemClock clock, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; _clock = clock; + _messages = messages; } - public async Task Handle(PublishNewsCommand request, CancellationToken cancellationToken) + public async Task> Handle(PublishNewsCommand request, CancellationToken cancellationToken) { - var news = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var news = await _repo.GetByIdAsync(request.Id, cancellationToken).ConfigureAwait(false); if (news is null) - { - return null; - } + return _messages.NewsNotFound(); var expectedRowVersion = news.RowVersion; news.Publish(_clock); - await _service.UpdateAsync(news, expectedRowVersion, cancellationToken).ConfigureAwait(false); - return ListNewsQueryHandler.MapToDto(news); + _db.SetExpectedRowVersion(news, expectedRowVersion); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + return _messages.Ok(GetNewsByIdQueryHandler.MapToDto(news), "SUCCESS_OPERATION"); } } diff --git a/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommand.cs b/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommand.cs index 38eccfdd..6682061c 100644 --- a/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommand.cs @@ -1,6 +1,7 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; namespace CCE.Application.Content.Commands.PublishResource; -public sealed record PublishResourceCommand(System.Guid Id) : IRequest; +public sealed record PublishResourceCommand(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommandHandler.cs index a32db6e8..fcdf3505 100644 --- a/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/PublishResource/PublishResourceCommandHandler.cs @@ -1,65 +1,87 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; -using CCE.Application.Content; +using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using MediatR; +using Microsoft.EntityFrameworkCore; namespace CCE.Application.Content.Commands.PublishResource; -public sealed class PublishResourceCommandHandler : IRequestHandler +public sealed class PublishResourceCommandHandler : IRequestHandler> { - private readonly IResourceRepository _service; - private readonly IAssetRepository _assetService; + private readonly ICceDbContext _db; private readonly ISystemClock _clock; + private readonly MessageFactory _messages; public PublishResourceCommandHandler( - IResourceRepository service, - IAssetRepository assetService, - ISystemClock clock) + ICceDbContext db, + ISystemClock clock, + MessageFactory messages) { - _service = service; - _assetService = assetService; + _db = db; _clock = clock; + _messages = messages; } - public async Task Handle(PublishResourceCommand request, CancellationToken cancellationToken) + public async Task> Handle(PublishResourceCommand request, CancellationToken cancellationToken) { - var resource = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var resources = await _db.Resources + .Include(r => r.Countries) + .Where(r => r.Id == request.Id) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var resource = resources.SingleOrDefault(); if (resource is null) - { - return null; - } + return _messages.ResourceNotFound(); - var asset = await _assetService.GetByIdAsync(resource.AssetFileId, cancellationToken).ConfigureAwait(false); + var assets = await _db.AssetFiles + .Where(a => a.Id == resource.AssetFileId) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var asset = assets.SingleOrDefault(); if (asset is null) - { - throw new DomainException($"Asset {resource.AssetFileId} not found for resource {resource.Id}."); - } + return _messages.AssetNotFound(); if (asset.VirusScanStatus != VirusScanStatus.Clean) - { - throw new DomainException($"Cannot publish resource {resource.Id}: asset has not passed virus scan ({asset.VirusScanStatus})."); - } + return _messages.AssetNotClean(); var expectedRowVersion = resource.RowVersion; resource.Publish(_clock); - await _service.UpdateAsync(resource, expectedRowVersion, cancellationToken).ConfigureAwait(false); + + _db.SetExpectedRowVersion(resource, expectedRowVersion); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + var dto = MapToDto(resource); + return _messages.Ok(dto, "SUCCESS_OPERATION"); + } + + private ResourceDto MapToDto(Resource r) + { + var category = _db.ResourceCategories.FirstOrDefault(c => c.Id == r.CategoryId); + var asset = _db.AssetFiles.FirstOrDefault(a => a.Id == r.AssetFileId); + var countryIds = r.Countries.Select(c => c.CountryId).ToList(); + var countries = _db.Countries.Where(c => countryIds.Contains(c.Id)).ToList(); return new ResourceDto( - resource.Id, - resource.TitleAr, - resource.TitleEn, - resource.DescriptionAr, - resource.DescriptionEn, - resource.ResourceType, - resource.CategoryId, - resource.CountryId, - resource.UploadedById, - resource.AssetFileId, - resource.PublishedOn, - resource.ViewCount, - resource.IsCenterManaged, - resource.IsPublished, - System.Convert.ToBase64String(resource.RowVersion)); + r.Id, + r.TitleAr, + r.TitleEn, + r.DescriptionAr, + r.DescriptionEn, + r.ResourceType, + r.CategoryId, + category?.NameAr ?? string.Empty, + category?.NameEn ?? string.Empty, + r.AssetFileId, + asset?.OriginalFileName ?? string.Empty, + countryIds, + countries.Select(c => c.NameAr).ToList(), + r.UploadedById, + r.PublishedOn, + r.ViewCount, + r.IsCenterManaged, + r.IsPublished); } } diff --git a/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommand.cs b/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommand.cs index 52587e73..2cc267af 100644 --- a/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommand.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; @@ -6,5 +7,4 @@ namespace CCE.Application.Content.Commands.RescheduleEvent; public sealed record RescheduleEventCommand( System.Guid Id, System.DateTimeOffset StartsOn, - System.DateTimeOffset EndsOn, - byte[] RowVersion) : IRequest; + System.DateTimeOffset EndsOn) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandHandler.cs index 8d87af69..6d33c647 100644 --- a/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandHandler.cs @@ -1,30 +1,42 @@ +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Dtos; -using CCE.Application.Content.Queries.ListEvents; +using CCE.Application.Content.Queries.GetEventById; +using CCE.Application.Messages; +using CCE.Domain.Common; +using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.RescheduleEvent; -public sealed class RescheduleEventCommandHandler : IRequestHandler +public sealed class RescheduleEventCommandHandler : IRequestHandler> { - private readonly IEventRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public RescheduleEventCommandHandler(IEventRepository service) + public RescheduleEventCommandHandler( + IRepository repo, + ICceDbContext db, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; + _messages = messages; } - public async Task Handle(RescheduleEventCommand request, CancellationToken cancellationToken) + public async Task> Handle(RescheduleEventCommand request, CancellationToken cancellationToken) { - var ev = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var ev = await _repo.GetByIdAsync(request.Id, cancellationToken).ConfigureAwait(false); if (ev is null) - { - return null; - } + return _messages.EventNotFound(); + var expectedRowVersion = ev.RowVersion; ev.Reschedule(request.StartsOn, request.EndsOn); - await _service.UpdateAsync(ev, request.RowVersion, cancellationToken).ConfigureAwait(false); + _db.SetExpectedRowVersion(ev, expectedRowVersion); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); - return ListEventsQueryHandler.MapToDto(ev); + return _messages.Ok(GetEventByIdQueryHandler.MapToDto(ev), "SUCCESS_OPERATION"); } } diff --git a/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandValidator.cs b/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandValidator.cs index a5baeb9e..f9c57a2b 100644 --- a/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandValidator.cs +++ b/backend/src/CCE.Application/Content/Commands/RescheduleEvent/RescheduleEventCommandValidator.cs @@ -8,6 +8,5 @@ public RescheduleEventCommandValidator() { RuleFor(x => x.Id).NotEmpty(); RuleFor(x => x.EndsOn).GreaterThan(x => x.StartsOn); - RuleFor(x => x.RowVersion).NotNull().Must(rv => rv.Length == 8); } } diff --git a/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommand.cs b/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommand.cs index 6acf7498..05a9cd59 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommand.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; @@ -11,4 +12,4 @@ public sealed record UpdateEventCommand( string? LocationEn, string? OnlineMeetingUrl, string? FeaturedImageUrl, - byte[] RowVersion) : IRequest; + System.Guid TopicId) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandHandler.cs index a38f0072..37d006a0 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandHandler.cs @@ -1,26 +1,42 @@ +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; +using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; -using CCE.Application.Content.Queries.ListEvents; +using CCE.Application.Content.Queries.GetEventById; +using CCE.Application.Messages; +using CCE.Domain.Common; +using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.UpdateEvent; -public sealed class UpdateEventCommandHandler : IRequestHandler +public sealed class UpdateEventCommandHandler : IRequestHandler> { - private readonly IEventRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public UpdateEventCommandHandler(IEventRepository service) + public UpdateEventCommandHandler( + IRepository repo, + ICceDbContext db, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; + _messages = messages; } - public async Task Handle(UpdateEventCommand request, CancellationToken cancellationToken) + public async Task> Handle(UpdateEventCommand request, CancellationToken cancellationToken) { - var ev = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var ev = await _repo.GetByIdAsync(request.Id, cancellationToken).ConfigureAwait(false); if (ev is null) - { - return null; - } + return _messages.EventNotFound(); + var topicExists = await _db.Topics.Where(t => t.Id == request.TopicId).CountAsyncEither(cancellationToken) > 0; + if (!topicExists) + return _messages.NotFound("TOPIC_NOT_FOUND"); + + var expectedRowVersion = ev.RowVersion; ev.UpdateContent( request.TitleAr, request.TitleEn, @@ -29,10 +45,17 @@ public UpdateEventCommandHandler(IEventRepository service) request.LocationAr, request.LocationEn, request.OnlineMeetingUrl, - request.FeaturedImageUrl); + request.FeaturedImageUrl, + request.TopicId); + + _db.SetExpectedRowVersion(ev, expectedRowVersion); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); - await _service.UpdateAsync(ev, request.RowVersion, cancellationToken).ConfigureAwait(false); + var topic = await _db.Topics.Where(t => t.Id == request.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicNameAr = topic.FirstOrDefault()?.NameAr ?? string.Empty; + var topicNameEn = topic.FirstOrDefault()?.NameEn ?? string.Empty; - return ListEventsQueryHandler.MapToDto(ev); + return _messages.Ok(GetEventByIdQueryHandler.MapToDto(ev, topicNameAr, topicNameEn), "SUCCESS_OPERATION"); } } diff --git a/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandValidator.cs b/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandValidator.cs index cab6c277..eb93f60b 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandValidator.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateEvent/UpdateEventCommandValidator.cs @@ -11,7 +11,6 @@ public UpdateEventCommandValidator() RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(500); RuleFor(x => x.DescriptionAr).NotEmpty(); RuleFor(x => x.DescriptionEn).NotEmpty(); - RuleFor(x => x.RowVersion).NotNull().Must(rv => rv.Length == 8) - .WithMessage("RowVersion must be exactly 8 bytes."); + RuleFor(x => x.TopicId).NotEmpty(); } } diff --git a/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommand.cs b/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommand.cs index 9054c9b3..53680da1 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommand.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; @@ -7,6 +8,5 @@ public sealed record UpdateNewsCommand( System.Guid Id, string TitleAr, string TitleEn, string ContentAr, string ContentEn, - string Slug, - string? FeaturedImageUrl, - byte[] RowVersion) : IRequest; + System.Guid TopicId, + string? FeaturedImageUrl) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandHandler.cs index fcb8ad2f..3bae6718 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandHandler.cs @@ -1,36 +1,58 @@ +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; +using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; -using CCE.Application.Content.Queries.ListNews; +using CCE.Application.Content.Queries.GetNewsById; +using CCE.Application.Messages; +using CCE.Domain.Common; +using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Commands.UpdateNews; -public sealed class UpdateNewsCommandHandler : IRequestHandler +public sealed class UpdateNewsCommandHandler : IRequestHandler> { - private readonly INewsRepository _service; + private readonly IRepository _repo; + private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public UpdateNewsCommandHandler(INewsRepository service) + public UpdateNewsCommandHandler( + IRepository repo, + ICceDbContext db, + MessageFactory messages) { - _service = service; + _repo = repo; + _db = db; + _messages = messages; } - public async Task Handle(UpdateNewsCommand request, CancellationToken cancellationToken) + public async Task> Handle(UpdateNewsCommand request, CancellationToken cancellationToken) { - var news = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var news = await _repo.GetByIdAsync(request.Id, cancellationToken).ConfigureAwait(false); if (news is null) - { - return null; - } + return _messages.NewsNotFound(); + var topicExists = await _db.Topics.Where(t => t.Id == request.TopicId).CountAsyncEither(cancellationToken) > 0; + if (!topicExists) + return _messages.NotFound("TOPIC_NOT_FOUND"); + + var expectedRowVersion = news.RowVersion; news.UpdateContent( request.TitleAr, request.TitleEn, request.ContentAr, request.ContentEn, - request.Slug, + request.TopicId, request.FeaturedImageUrl); - await _service.UpdateAsync(news, request.RowVersion, cancellationToken).ConfigureAwait(false); + _db.SetExpectedRowVersion(news, expectedRowVersion); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + var topic = await _db.Topics.Where(t => t.Id == request.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicNameAr = topic.FirstOrDefault()?.NameAr ?? string.Empty; + var topicNameEn = topic.FirstOrDefault()?.NameEn ?? string.Empty; - return ListNewsQueryHandler.MapToDto(news); + return _messages.Ok(GetNewsByIdQueryHandler.MapToDto(news, topicNameAr, topicNameEn), "SUCCESS_OPERATION"); } } diff --git a/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandValidator.cs b/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandValidator.cs index e8ba0004..1accfc09 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandValidator.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateNews/UpdateNewsCommandValidator.cs @@ -11,9 +11,6 @@ public UpdateNewsCommandValidator() RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(500); RuleFor(x => x.ContentAr).NotEmpty(); RuleFor(x => x.ContentEn).NotEmpty(); - RuleFor(x => x.Slug).NotEmpty().MaximumLength(200) - .Matches("^[a-z0-9]+(-[a-z0-9]+)*$").WithMessage("Slug must be kebab-case."); - RuleFor(x => x.RowVersion).NotNull().Must(rv => rv.Length == 8) - .WithMessage("RowVersion must be exactly 8 bytes."); + RuleFor(x => x.TopicId).NotEmpty(); } } diff --git a/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommand.cs b/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommand.cs index fc74b2af..b16b43ea 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommand.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommand.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using CCE.Domain.Content; using MediatR; @@ -12,4 +13,4 @@ public sealed record UpdateResourceCommand( string DescriptionEn, ResourceType ResourceType, System.Guid CategoryId, - byte[] RowVersion) : IRequest; + IReadOnlyList CountryIds) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandHandler.cs b/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandHandler.cs index 70781688..4bfc3bf0 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandHandler.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandHandler.cs @@ -1,51 +1,102 @@ -using CCE.Application.Content; +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; +using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Common; +using CCE.Domain.Content; using MediatR; +using Microsoft.EntityFrameworkCore; namespace CCE.Application.Content.Commands.UpdateResource; -public sealed class UpdateResourceCommandHandler : IRequestHandler +public sealed class UpdateResourceCommandHandler : IRequestHandler> { - private readonly IResourceRepository _service; + private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public UpdateResourceCommandHandler(IResourceRepository service) + public UpdateResourceCommandHandler( + ICceDbContext db, + MessageFactory messages) { - _service = service; + _db = db; + _messages = messages; } - public async Task Handle(UpdateResourceCommand request, CancellationToken cancellationToken) + public async Task> Handle(UpdateResourceCommand request, CancellationToken cancellationToken) { - var resource = await _service.FindAsync(request.Id, cancellationToken).ConfigureAwait(false); + var resources = await _db.Resources + .Include(r => r.Countries) + .Where(r => r.Id == request.Id) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var resource = resources.SingleOrDefault(); if (resource is null) + return _messages.ResourceNotFound(); + + var categoryExists = await ExistsAsync(_db.ResourceCategories.Where(c => c.Id == request.CategoryId), cancellationToken).ConfigureAwait(false); + if (!categoryExists) + return _messages.CategoryNotFound(); + + var countryIds = request.CountryIds.Distinct().ToList(); + if (countryIds.Count > 0) { - return null; + var existingCountryCount = await _db.Countries + .Where(c => countryIds.Contains(c.Id)) + .CountAsyncEither(cancellationToken) + .ConfigureAwait(false); + if (existingCountryCount != countryIds.Count) + return _messages.NotFound("COUNTRY_NOT_FOUND"); } + var expectedRowVersion = resource.RowVersion; resource.UpdateContent( request.TitleAr, request.TitleEn, request.DescriptionAr, request.DescriptionEn, request.ResourceType, - request.CategoryId); + request.CategoryId, + request.CountryIds); - await _service.UpdateAsync(resource, request.RowVersion, cancellationToken).ConfigureAwait(false); + _db.SetExpectedRowVersion(resource, expectedRowVersion); + await _db.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + var dto = MapToDto(resource); + return _messages.Ok(dto, "SUCCESS_OPERATION"); + } + + private ResourceDto MapToDto(Resource r) + { + var category = _db.ResourceCategories.FirstOrDefault(c => c.Id == r.CategoryId); + var asset = _db.AssetFiles.FirstOrDefault(a => a.Id == r.AssetFileId); + var countryIds = r.Countries.Select(c => c.CountryId).ToList(); + var countries = _db.Countries.Where(c => countryIds.Contains(c.Id)).ToList(); return new ResourceDto( - resource.Id, - resource.TitleAr, - resource.TitleEn, - resource.DescriptionAr, - resource.DescriptionEn, - resource.ResourceType, - resource.CategoryId, - resource.CountryId, - resource.UploadedById, - resource.AssetFileId, - resource.PublishedOn, - resource.ViewCount, - resource.IsCenterManaged, - resource.IsPublished, - System.Convert.ToBase64String(resource.RowVersion)); + r.Id, + r.TitleAr, + r.TitleEn, + r.DescriptionAr, + r.DescriptionEn, + r.ResourceType, + r.CategoryId, + category?.NameAr ?? string.Empty, + category?.NameEn ?? string.Empty, + r.AssetFileId, + asset?.OriginalFileName ?? string.Empty, + countryIds, + countries.Select(c => c.NameAr).ToList(), + r.UploadedById, + r.PublishedOn, + r.ViewCount, + r.IsCenterManaged, + r.IsPublished); + } + + private static async Task ExistsAsync(IQueryable query, CancellationToken ct) + { + var list = await query.Take(1).ToListAsyncEither(ct).ConfigureAwait(false); + return list.Count > 0; } } diff --git a/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandValidator.cs b/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandValidator.cs index 7272e3d1..896d15ec 100644 --- a/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandValidator.cs +++ b/backend/src/CCE.Application/Content/Commands/UpdateResource/UpdateResourceCommandValidator.cs @@ -7,12 +7,11 @@ public sealed class UpdateResourceCommandValidator : AbstractValidator x.Id).NotEmpty(); - RuleFor(x => x.TitleAr).NotEmpty().MaximumLength(500); - RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(500); - RuleFor(x => x.DescriptionAr).NotEmpty().MaximumLength(4000); - RuleFor(x => x.DescriptionEn).NotEmpty().MaximumLength(4000); + RuleFor(x => x.TitleAr).NotEmpty().MaximumLength(255); + RuleFor(x => x.TitleEn).NotEmpty().MaximumLength(255); + RuleFor(x => x.DescriptionAr).NotEmpty().MaximumLength(500); + RuleFor(x => x.DescriptionEn).NotEmpty().MaximumLength(500); RuleFor(x => x.CategoryId).NotEmpty(); - RuleFor(x => x.RowVersion).NotNull().Must(rv => rv.Length == 8) - .WithMessage("RowVersion must be exactly 8 bytes."); + RuleFor(x => x.CountryIds).NotEmpty().ForEach(x => x.NotEmpty()); } } diff --git a/backend/src/CCE.Application/Content/Dtos/EventDto.cs b/backend/src/CCE.Application/Content/Dtos/EventDto.cs index 2f2820a4..e348ca0d 100644 --- a/backend/src/CCE.Application/Content/Dtos/EventDto.cs +++ b/backend/src/CCE.Application/Content/Dtos/EventDto.cs @@ -10,4 +10,6 @@ public sealed record EventDto( string? OnlineMeetingUrl, string? FeaturedImageUrl, string ICalUid, - string RowVersion); + System.Guid TopicId, + string TopicNameAr, + string TopicNameEn); diff --git a/backend/src/CCE.Application/Content/Dtos/NewsDto.cs b/backend/src/CCE.Application/Content/Dtos/NewsDto.cs index 5704c85d..ba18b79e 100644 --- a/backend/src/CCE.Application/Content/Dtos/NewsDto.cs +++ b/backend/src/CCE.Application/Content/Dtos/NewsDto.cs @@ -6,10 +6,11 @@ public sealed record NewsDto( string TitleEn, string ContentAr, string ContentEn, - string Slug, + System.Guid TopicId, + string TopicNameAr, + string TopicNameEn, System.Guid AuthorId, string? FeaturedImageUrl, System.DateTimeOffset? PublishedOn, bool IsFeatured, - bool IsPublished, - string RowVersion); + bool IsPublished); diff --git a/backend/src/CCE.Application/Content/Dtos/ResourceDto.cs b/backend/src/CCE.Application/Content/Dtos/ResourceDto.cs index d8b62d92..a4805329 100644 --- a/backend/src/CCE.Application/Content/Dtos/ResourceDto.cs +++ b/backend/src/CCE.Application/Content/Dtos/ResourceDto.cs @@ -10,11 +10,14 @@ public sealed record ResourceDto( string DescriptionEn, ResourceType ResourceType, System.Guid CategoryId, - System.Guid? CountryId, - System.Guid UploadedById, + string CategoryNameAr, + string CategoryNameEn, System.Guid AssetFileId, + string AssetFileName, + IReadOnlyList CountryIds, + IReadOnlyList CountryNames, + System.Guid UploadedById, System.DateTimeOffset? PublishedOn, long ViewCount, bool IsCenterManaged, - bool IsPublished, - string RowVersion); + bool IsPublished); diff --git a/backend/src/CCE.Application/Content/Public/Dtos/PublicEventDto.cs b/backend/src/CCE.Application/Content/Public/Dtos/PublicEventDto.cs index 7db26728..5f0cb77f 100644 --- a/backend/src/CCE.Application/Content/Public/Dtos/PublicEventDto.cs +++ b/backend/src/CCE.Application/Content/Public/Dtos/PublicEventDto.cs @@ -12,4 +12,7 @@ public sealed record PublicEventDto( string? LocationEn, string? OnlineMeetingUrl, string? FeaturedImageUrl, - string ICalUid); + string ICalUid, + System.Guid TopicId, + string TopicNameAr, + string TopicNameEn); diff --git a/backend/src/CCE.Application/Content/Public/Dtos/PublicNewsDto.cs b/backend/src/CCE.Application/Content/Public/Dtos/PublicNewsDto.cs index 4cb6c9d5..b4fb0e9b 100644 --- a/backend/src/CCE.Application/Content/Public/Dtos/PublicNewsDto.cs +++ b/backend/src/CCE.Application/Content/Public/Dtos/PublicNewsDto.cs @@ -6,7 +6,9 @@ public sealed record PublicNewsDto( string TitleEn, string ContentAr, string ContentEn, - string Slug, + System.Guid TopicId, + string TopicNameAr, + string TopicNameEn, string? FeaturedImageUrl, System.DateTimeOffset PublishedOn, bool IsFeatured); diff --git a/backend/src/CCE.Application/Content/Public/Dtos/PublicResourceDto.cs b/backend/src/CCE.Application/Content/Public/Dtos/PublicResourceDto.cs index 577736d4..787a49c9 100644 --- a/backend/src/CCE.Application/Content/Public/Dtos/PublicResourceDto.cs +++ b/backend/src/CCE.Application/Content/Public/Dtos/PublicResourceDto.cs @@ -10,7 +10,11 @@ public sealed record PublicResourceDto( string DescriptionEn, ResourceType ResourceType, System.Guid CategoryId, - System.Guid? CountryId, + string CategoryNameAr, + string CategoryNameEn, System.Guid AssetFileId, + string AssetFileName, + IReadOnlyList CountryIds, + IReadOnlyList CountryNames, System.DateTimeOffset PublishedOn, long ViewCount); diff --git a/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQuery.cs b/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQuery.cs index 4d0a2f0d..eb010618 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQuery.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQuery.cs @@ -1,6 +1,7 @@ +using CCE.Application.Common; using CCE.Application.Content.Public.Dtos; using MediatR; namespace CCE.Application.Content.Public.Queries.GetPublicEventById; -public sealed record GetPublicEventByIdQuery(System.Guid Id) : IRequest; +public sealed record GetPublicEventByIdQuery(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQueryHandler.cs b/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQueryHandler.cs index a11fe47b..e6801557 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/GetPublicEventById/GetPublicEventByIdQueryHandler.cs @@ -1,28 +1,42 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; +using CCE.Application.Messages; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Public.Queries.GetPublicEventById; -public sealed class GetPublicEventByIdQueryHandler : IRequestHandler +public sealed class GetPublicEventByIdQueryHandler : IRequestHandler> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public GetPublicEventByIdQueryHandler(ICceDbContext db) => _db = db; + public GetPublicEventByIdQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task Handle(GetPublicEventByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetPublicEventByIdQuery request, CancellationToken cancellationToken) { var list = await _db.Events .Where(e => e.Id == request.Id) .ToListAsyncEither(cancellationToken) .ConfigureAwait(false); var ev = list.SingleOrDefault(); - return ev is null ? null : MapToDto(ev); + if (ev is null) + return _messages.EventNotFound(); + + var topics = await _db.Topics.Where(t => t.Id == ev.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topic = topics.FirstOrDefault(); + + return _messages.Ok(MapToDto(ev, topic?.NameAr ?? string.Empty, topic?.NameEn ?? string.Empty), "SUCCESS_OPERATION"); } - internal static PublicEventDto MapToDto(Event e) => new( + internal static PublicEventDto MapToDto(Event e, string topicNameAr, string topicNameEn) => new( e.Id, e.TitleAr, e.TitleEn, @@ -34,5 +48,8 @@ public sealed class GetPublicEventByIdQueryHandler : IRequestHandler; +public sealed record GetPublicNewsBySlugQuery(string Slug) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Public/Queries/GetPublicNewsBySlug/GetPublicNewsBySlugQueryHandler.cs b/backend/src/CCE.Application/Content/Public/Queries/GetPublicNewsBySlug/GetPublicNewsBySlugQueryHandler.cs index 19d6616b..0cbfb477 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/GetPublicNewsBySlug/GetPublicNewsBySlugQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/GetPublicNewsBySlug/GetPublicNewsBySlugQueryHandler.cs @@ -1,34 +1,50 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; +using CCE.Application.Messages; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Public.Queries.GetPublicNewsBySlug; -public sealed class GetPublicNewsBySlugQueryHandler : IRequestHandler +public sealed class GetPublicNewsBySlugQueryHandler : IRequestHandler> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public GetPublicNewsBySlugQueryHandler(ICceDbContext db) => _db = db; + public GetPublicNewsBySlugQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task Handle(GetPublicNewsBySlugQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetPublicNewsBySlugQuery request, CancellationToken cancellationToken) { var list = await _db.News .Where(n => n.Slug == request.Slug && n.PublishedOn != null) .ToListAsyncEither(cancellationToken) .ConfigureAwait(false); var news = list.SingleOrDefault(); - return news is null ? null : MapToDto(news); + if (news is null) + return _messages.NewsNotFound(); + + var topics = await _db.Topics.Where(t => t.Id == news.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topic = topics.FirstOrDefault(); + + return _messages.Ok(MapToDto(news, topic?.NameAr ?? string.Empty, topic?.NameEn ?? string.Empty), "SUCCESS_OPERATION"); } - internal static PublicNewsDto MapToDto(News n) => new( + internal static PublicNewsDto MapToDto(News n, string topicNameAr, string topicNameEn) => new( n.Id, n.TitleAr, n.TitleEn, n.ContentAr, n.ContentEn, - n.Slug, + n.TopicId, + topicNameAr, + topicNameEn, n.FeaturedImageUrl, n.PublishedOn!.Value, n.IsFeatured); diff --git a/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQuery.cs b/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQuery.cs index 2b0390a6..f3a15a51 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQuery.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQuery.cs @@ -1,6 +1,7 @@ +using CCE.Application.Common; using CCE.Application.Content.Public.Dtos; using MediatR; namespace CCE.Application.Content.Public.Queries.GetPublicResourceById; -public sealed record GetPublicResourceByIdQuery(System.Guid Id) : IRequest; +public sealed record GetPublicResourceByIdQuery(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQueryHandler.cs b/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQueryHandler.cs index 46589899..05998dee 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/GetPublicResourceById/GetPublicResourceByIdQueryHandler.cs @@ -1,41 +1,61 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; +using CCE.Application.Messages; using CCE.Domain.Content; using MediatR; +using Microsoft.EntityFrameworkCore; namespace CCE.Application.Content.Public.Queries.GetPublicResourceById; -public sealed class GetPublicResourceByIdQueryHandler : IRequestHandler +public sealed class GetPublicResourceByIdQueryHandler : IRequestHandler> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public GetPublicResourceByIdQueryHandler(ICceDbContext db) => _db = db; + public GetPublicResourceByIdQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task Handle(GetPublicResourceByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetPublicResourceByIdQuery request, CancellationToken cancellationToken) { var list = await _db.Resources + .AsNoTracking() + .Include(r => r.Countries) .Where(r => r.Id == request.Id) .ToListAsyncEither(cancellationToken) .ConfigureAwait(false); var resource = list.SingleOrDefault(); if (resource is null || resource.PublishedOn is null) - { - return null; - } - return MapToDto(resource); + return _messages.ResourceNotFound(); + return _messages.Ok(MapToDto(resource), "SUCCESS_OPERATION"); } - internal static PublicResourceDto MapToDto(Resource r) => new( - r.Id, - r.TitleAr, - r.TitleEn, - r.DescriptionAr, - r.DescriptionEn, - r.ResourceType, - r.CategoryId, - r.CountryId, - r.AssetFileId, - r.PublishedOn!.Value, - r.ViewCount); + private PublicResourceDto MapToDto(Resource r) + { + var category = _db.ResourceCategories.FirstOrDefault(c => c.Id == r.CategoryId); + var asset = _db.AssetFiles.FirstOrDefault(a => a.Id == r.AssetFileId); + var countryIds = r.Countries.Select(c => c.CountryId).ToList(); + var countries = _db.Countries.Where(c => countryIds.Contains(c.Id)).ToList(); + + return new PublicResourceDto( + r.Id, + r.TitleAr, + r.TitleEn, + r.DescriptionAr, + r.DescriptionEn, + r.ResourceType, + r.CategoryId, + category?.NameAr ?? string.Empty, + category?.NameEn ?? string.Empty, + r.AssetFileId, + asset?.OriginalFileName ?? string.Empty, + countryIds, + countries.Select(c => c.NameAr).ToList(), + r.PublishedOn!.Value, + r.ViewCount); + } } diff --git a/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQuery.cs b/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQuery.cs index 62d0aaec..340400ca 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQuery.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQuery.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; using MediatR; @@ -8,4 +9,6 @@ public sealed record ListPublicEventsQuery( int Page = 1, int PageSize = 20, System.DateTimeOffset? From = null, - System.DateTimeOffset? To = null) : IRequest>; + System.DateTimeOffset? To = null, + System.Guid? TopicId = null, + string? TopicSlug = null) : IRequest>>; diff --git a/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQueryHandler.cs b/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQueryHandler.cs index bbeb6e26..1cd36898 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/ListPublicEvents/ListPublicEventsQueryHandler.cs @@ -1,19 +1,35 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Community; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Public.Queries.ListPublicEvents; -public sealed class ListPublicEventsQueryHandler : IRequestHandler> +public sealed class ListPublicEventsQueryHandler : IRequestHandler>> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public ListPublicEventsQueryHandler(ICceDbContext db) => _db = db; + public ListPublicEventsQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task> Handle(ListPublicEventsQuery request, CancellationToken cancellationToken) + public async Task>> Handle(ListPublicEventsQuery request, CancellationToken cancellationToken) { + System.Guid? topicId = request.TopicId; + if (!string.IsNullOrWhiteSpace(request.TopicSlug) && !topicId.HasValue) + { + var topics = await _db.Topics.Where(t => t.Slug == request.TopicSlug!) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + topicId = topics.FirstOrDefault()?.Id; + } + var query = _db.Events.AsQueryable(); if (request.From.HasValue && request.To.HasValue) @@ -26,13 +42,20 @@ public async Task> Handle(ListPublicEventsQuery requ query = query.Where(e => e.StartsOn >= now); } + query = query.WhereIf(topicId.HasValue, e => e.TopicId == topicId!.Value); query = query.OrderBy(e => e.StartsOn); var result = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); - return result.Map(MapToDto); + + var topicIds = result.Items.Select(e => e.TopicId).Distinct().ToList(); + var topicsList = await _db.Topics.Where(t => topicIds.Contains(t.Id)) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicById = topicsList.ToDictionary(t => t.Id); + + return _messages.Ok(result.Map(e => MapToDto(e, topicById)), "ITEMS_LISTED"); } - internal static PublicEventDto MapToDto(Event e) => new( + internal static PublicEventDto MapToDto(Event e, Dictionary topicById) => new( e.Id, e.TitleAr, e.TitleEn, @@ -44,5 +67,8 @@ public async Task> Handle(ListPublicEventsQuery requ e.LocationEn, e.OnlineMeetingUrl, e.FeaturedImageUrl, - e.ICalUid); + e.ICalUid, + e.TopicId, + topicById.TryGetValue(e.TopicId, out var t) ? t.NameAr : string.Empty, + topicById.TryGetValue(e.TopicId, out t) ? t.NameEn : string.Empty); } diff --git a/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQuery.cs b/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQuery.cs index 6a8e014d..8d476530 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQuery.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQuery.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; using MediatR; @@ -7,4 +8,6 @@ namespace CCE.Application.Content.Public.Queries.ListPublicNews; public sealed record ListPublicNewsQuery( int Page = 1, int PageSize = 20, - bool? IsFeatured = null) : IRequest>; + bool? IsFeatured = null, + System.Guid? TopicId = null, + string? TopicSlug = null) : IRequest>>; diff --git a/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQueryHandler.cs b/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQueryHandler.cs index 8bfd2e0e..d72c9e8e 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/ListPublicNews/ListPublicNewsQueryHandler.cs @@ -1,35 +1,60 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Community; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Public.Queries.ListPublicNews; -public sealed class ListPublicNewsQueryHandler : IRequestHandler> +public sealed class ListPublicNewsQueryHandler : IRequestHandler>> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public ListPublicNewsQueryHandler(ICceDbContext db) => _db = db; + public ListPublicNewsQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task> Handle(ListPublicNewsQuery request, CancellationToken cancellationToken) + public async Task>> Handle(ListPublicNewsQuery request, CancellationToken cancellationToken) { + System.Guid? topicId = request.TopicId; + if (!string.IsNullOrWhiteSpace(request.TopicSlug) && !topicId.HasValue) + { + var topics = await _db.Topics.Where(t => t.Slug == request.TopicSlug!) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + topicId = topics.FirstOrDefault()?.Id; + } + var query = _db.News .Where(n => n.PublishedOn != null) .WhereIf(request.IsFeatured.HasValue, n => n.IsFeatured == request.IsFeatured!.Value) + .WhereIf(topicId.HasValue, n => n.TopicId == topicId!.Value) .OrderByDescending(n => n.PublishedOn); var result = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); - return result.Map(MapToDto); + + var topicIds = result.Items.Select(n => n.TopicId).Distinct().ToList(); + var topicsList = await _db.Topics.Where(t => topicIds.Contains(t.Id)) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicById = topicsList.ToDictionary(t => t.Id); + + return _messages.Ok(result.Map(n => MapToDto(n, topicById)), "ITEMS_LISTED"); } - internal static PublicNewsDto MapToDto(News n) => new( + internal static PublicNewsDto MapToDto(News n, Dictionary topicById) => new( n.Id, n.TitleAr, n.TitleEn, n.ContentAr, n.ContentEn, - n.Slug, + n.TopicId, + topicById.TryGetValue(n.TopicId, out var t) ? t.NameAr : string.Empty, + topicById.TryGetValue(n.TopicId, out t) ? t.NameEn : string.Empty, n.FeaturedImageUrl, n.PublishedOn!.Value, n.IsFeatured); diff --git a/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQuery.cs b/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQuery.cs index 1e32d56b..78f15def 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQuery.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQuery.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; using CCE.Domain.Content; @@ -8,6 +9,7 @@ namespace CCE.Application.Content.Public.Queries.ListPublicResources; public sealed record ListPublicResourcesQuery( int Page = 1, int PageSize = 20, + string? Search = null, System.Guid? CategoryId = null, System.Guid? CountryId = null, - ResourceType? ResourceType = null) : IRequest>; + ResourceType? ResourceType = null) : IRequest>>; diff --git a/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQueryHandler.cs b/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQueryHandler.cs index 801083b1..88c9fe51 100644 --- a/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Public/Queries/ListPublicResources/ListPublicResourcesQueryHandler.cs @@ -1,40 +1,93 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Public.Dtos; +using CCE.Application.Messages; using CCE.Domain.Content; using MediatR; +using Microsoft.EntityFrameworkCore; namespace CCE.Application.Content.Public.Queries.ListPublicResources; -public sealed class ListPublicResourcesQueryHandler : IRequestHandler> +public sealed class ListPublicResourcesQueryHandler : IRequestHandler>> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public ListPublicResourcesQueryHandler(ICceDbContext db) => _db = db; + public ListPublicResourcesQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task> Handle(ListPublicResourcesQuery request, CancellationToken cancellationToken) + public async Task>> Handle(ListPublicResourcesQuery request, CancellationToken cancellationToken) { var query = _db.Resources + .AsNoTracking() + .Include(r => r.Countries) .Where(r => r.PublishedOn != null) + .WhereIf(!string.IsNullOrWhiteSpace(request.Search), + r => r.TitleAr.Contains(request.Search!) || + r.TitleEn.Contains(request.Search!) || + r.DescriptionAr.Contains(request.Search!) || + r.DescriptionEn.Contains(request.Search!)) .WhereIf(request.CategoryId.HasValue, r => r.CategoryId == request.CategoryId!.Value) - .WhereIf(request.CountryId.HasValue, r => r.CountryId == request.CountryId!.Value) + .WhereIf(request.CountryId.HasValue, r => r.Countries.Any(c => c.CountryId == request.CountryId!.Value)) .WhereIf(request.ResourceType.HasValue, r => r.ResourceType == request.ResourceType!.Value) .OrderByDescending(r => r.PublishedOn); - var result = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); - return result.Map(MapToDto); - } + var paged = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); + + // Batch enrich categories / assets / country names for the page + var categoryIds = paged.Items.Select(r => r.CategoryId).Distinct().ToList(); + var assetIds = paged.Items.Select(r => r.AssetFileId).Distinct().ToList(); + var allCountryIds = paged.Items.SelectMany(r => r.Countries.Select(c => c.CountryId)).Distinct().ToList(); + + var categories = await _db.ResourceCategories + .Where(c => categoryIds.Contains(c.Id)) + .Select(c => new { c.Id, c.NameAr, c.NameEn }) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var categoryMap = categories.ToDictionary(c => c.Id, c => new { c.NameAr, c.NameEn }); - internal static PublicResourceDto MapToDto(Resource r) => new( - r.Id, - r.TitleAr, - r.TitleEn, - r.DescriptionAr, - r.DescriptionEn, - r.ResourceType, - r.CategoryId, - r.CountryId, - r.AssetFileId, - r.PublishedOn!.Value, - r.ViewCount); + var assets = await _db.AssetFiles + .Where(a => assetIds.Contains(a.Id)) + .Select(a => new { a.Id, a.OriginalFileName }) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var assetMap = assets.ToDictionary(a => a.Id, a => a.OriginalFileName); + + var countries = await _db.Countries + .Where(c => allCountryIds.Contains(c.Id)) + .Select(c => new { c.Id, c.NameAr }) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var countryNameMap = countries.ToDictionary(c => c.Id, c => c.NameAr); + + var dtos = paged.Items.Select(r => + { + var cat = categoryMap.GetValueOrDefault(r.CategoryId); + var countryIds = r.Countries.Select(c => c.CountryId).ToList(); + var countryNames = countryIds.Select(id => countryNameMap.GetValueOrDefault(id) ?? string.Empty).ToList(); + return new PublicResourceDto( + r.Id, + r.TitleAr, + r.TitleEn, + r.DescriptionAr, + r.DescriptionEn, + r.ResourceType, + r.CategoryId, + cat?.NameAr ?? string.Empty, + cat?.NameEn ?? string.Empty, + r.AssetFileId, + assetMap.GetValueOrDefault(r.AssetFileId) ?? string.Empty, + countryIds, + countryNames, + r.PublishedOn!.Value, + r.ViewCount); + }).ToList(); + + var result = new PagedResult(dtos, paged.Page, paged.PageSize, paged.Total); + return _messages.Ok(result, "ITEMS_LISTED"); + } } diff --git a/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQuery.cs b/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQuery.cs index 7a3792c2..57cc8a10 100644 --- a/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQuery.cs +++ b/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQuery.cs @@ -1,6 +1,7 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; namespace CCE.Application.Content.Queries.GetEventById; -public sealed record GetEventByIdQuery(System.Guid Id) : IRequest; +public sealed record GetEventByIdQuery(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQueryHandler.cs b/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQueryHandler.cs index d420d89c..9f86fe81 100644 --- a/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Queries/GetEventById/GetEventByIdQueryHandler.cs @@ -1,27 +1,42 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Community; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Queries.GetEventById; -public sealed class GetEventByIdQueryHandler : IRequestHandler +public sealed class GetEventByIdQueryHandler : IRequestHandler> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public GetEventByIdQueryHandler(ICceDbContext db) => _db = db; + public GetEventByIdQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task Handle(GetEventByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetEventByIdQuery request, CancellationToken cancellationToken) { var list = await _db.Events.Where(e => e.Id == request.Id).ToListAsyncEither(cancellationToken).ConfigureAwait(false); var ev = list.SingleOrDefault(); - return ev is null ? null : MapToDto(ev); + if (ev is null) + return _messages.EventNotFound(); + + var topics = await _db.Topics.Where(t => t.Id == ev.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topic = topics.FirstOrDefault(); + + return _messages.Ok(MapToDto(ev, topic?.NameAr ?? string.Empty, topic?.NameEn ?? string.Empty), "SUCCESS_OPERATION"); } - internal static EventDto MapToDto(Event e) => new( + internal static EventDto MapToDto(Event e, string topicNameAr = "", string topicNameEn = "") => new( e.Id, e.TitleAr, e.TitleEn, e.DescriptionAr, e.DescriptionEn, e.StartsOn, e.EndsOn, e.LocationAr, e.LocationEn, e.OnlineMeetingUrl, e.FeaturedImageUrl, e.ICalUid, - System.Convert.ToBase64String(e.RowVersion)); + e.TopicId, topicNameAr, topicNameEn); } diff --git a/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQuery.cs b/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQuery.cs index 1a9aaf0f..1e9eb182 100644 --- a/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQuery.cs +++ b/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQuery.cs @@ -1,6 +1,7 @@ +using CCE.Application.Common; using CCE.Application.Content.Dtos; using MediatR; namespace CCE.Application.Content.Queries.GetNewsById; -public sealed record GetNewsByIdQuery(System.Guid Id) : IRequest; +public sealed record GetNewsByIdQuery(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQueryHandler.cs b/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQueryHandler.cs index 9350a2f2..a7dafa1a 100644 --- a/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Queries/GetNewsById/GetNewsByIdQueryHandler.cs @@ -1,27 +1,42 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Community; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Queries.GetNewsById; -public sealed class GetNewsByIdQueryHandler : IRequestHandler +public sealed class GetNewsByIdQueryHandler : IRequestHandler> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public GetNewsByIdQueryHandler(ICceDbContext db) => _db = db; + public GetNewsByIdQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task Handle(GetNewsByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetNewsByIdQuery request, CancellationToken cancellationToken) { var list = await _db.News.Where(n => n.Id == request.Id).ToListAsyncEither(cancellationToken).ConfigureAwait(false); var news = list.SingleOrDefault(); - return news is null ? null : MapToDto(news); + if (news is null) + return _messages.NewsNotFound(); + + var topics = await _db.Topics.Where(t => t.Id == news.TopicId) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topic = topics.FirstOrDefault(); + + return _messages.Ok(MapToDto(news, topic?.NameAr ?? string.Empty, topic?.NameEn ?? string.Empty), "SUCCESS_OPERATION"); } - internal static NewsDto MapToDto(News n) => new( + internal static NewsDto MapToDto(News n, string topicNameAr = "", string topicNameEn = "") => new( n.Id, n.TitleAr, n.TitleEn, n.ContentAr, n.ContentEn, - n.Slug, n.AuthorId, n.FeaturedImageUrl, - n.PublishedOn, n.IsFeatured, n.IsPublished, - System.Convert.ToBase64String(n.RowVersion)); + n.TopicId, topicNameAr, topicNameEn, + n.AuthorId, n.FeaturedImageUrl, + n.PublishedOn, n.IsFeatured, n.IsPublished); } diff --git a/backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQuery.cs b/backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQuery.cs new file mode 100644 index 00000000..25b5db92 --- /dev/null +++ b/backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQuery.cs @@ -0,0 +1,7 @@ +using CCE.Application.Common; +using CCE.Application.Content.Dtos; +using MediatR; + +namespace CCE.Application.Content.Queries.GetResourceById; + +public sealed record GetResourceByIdQuery(System.Guid Id) : IRequest>; diff --git a/backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQueryHandler.cs b/backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQueryHandler.cs new file mode 100644 index 00000000..3c1c2488 --- /dev/null +++ b/backend/src/CCE.Application/Content/Queries/GetResourceById/GetResourceByIdQueryHandler.cs @@ -0,0 +1,64 @@ +using CCE.Application.Common; +using CCE.Application.Common.Interfaces; +using CCE.Application.Common.Pagination; +using CCE.Application.Content.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Content; +using MediatR; +using Microsoft.EntityFrameworkCore; + +namespace CCE.Application.Content.Queries.GetResourceById; + +public sealed class GetResourceByIdQueryHandler : IRequestHandler> +{ + private readonly ICceDbContext _db; + private readonly MessageFactory _messages; + + public GetResourceByIdQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } + + public async Task> Handle(GetResourceByIdQuery request, CancellationToken cancellationToken) + { + var list = await _db.Resources + .AsNoTracking() + .Include(r => r.Countries) + .Where(r => r.Id == request.Id) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var resource = list.SingleOrDefault(); + return resource is null + ? _messages.ResourceNotFound() + : _messages.Ok(MapToDto(resource), "SUCCESS_OPERATION"); + } + + private ResourceDto MapToDto(Resource r) + { + var category = _db.ResourceCategories.FirstOrDefault(c => c.Id == r.CategoryId); + var asset = _db.AssetFiles.FirstOrDefault(a => a.Id == r.AssetFileId); + var countryIds = r.Countries.Select(c => c.CountryId).ToList(); + var countries = _db.Countries.Where(c => countryIds.Contains(c.Id)).ToList(); + + return new ResourceDto( + r.Id, + r.TitleAr, + r.TitleEn, + r.DescriptionAr, + r.DescriptionEn, + r.ResourceType, + r.CategoryId, + category?.NameAr ?? string.Empty, + category?.NameEn ?? string.Empty, + r.AssetFileId, + asset?.OriginalFileName ?? string.Empty, + countryIds, + countries.Select(c => c.NameAr).ToList(), + r.UploadedById, + r.PublishedOn, + r.ViewCount, + r.IsCenterManaged, + r.IsPublished); + } +} diff --git a/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQuery.cs b/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQuery.cs index de4d0e44..43db2191 100644 --- a/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQuery.cs +++ b/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQuery.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; using MediatR; @@ -9,4 +10,5 @@ public sealed record ListEventsQuery( int PageSize = 20, string? Search = null, System.DateTimeOffset? FromDate = null, - System.DateTimeOffset? ToDate = null) : IRequest>; + System.DateTimeOffset? ToDate = null, + System.Guid? TopicId = null) : IRequest>>; diff --git a/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQueryHandler.cs b/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQueryHandler.cs index 2bb67e68..9e0817c9 100644 --- a/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Queries/ListEvents/ListEventsQueryHandler.cs @@ -1,18 +1,26 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Community; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Queries.ListEvents; -public sealed class ListEventsQueryHandler : IRequestHandler> +public sealed class ListEventsQueryHandler : IRequestHandler>> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public ListEventsQueryHandler(ICceDbContext db) => _db = db; + public ListEventsQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task> Handle(ListEventsQuery request, CancellationToken cancellationToken) + public async Task>> Handle(ListEventsQuery request, CancellationToken cancellationToken) { var query = _db.Events .WhereIf(!string.IsNullOrWhiteSpace(request.Search), @@ -20,15 +28,30 @@ public async Task> Handle(ListEventsQuery request, Cancell e.TitleEn.Contains(request.Search!)) .WhereIf(request.FromDate.HasValue, e => e.StartsOn >= request.FromDate!.Value) .WhereIf(request.ToDate.HasValue, e => e.EndsOn <= request.ToDate!.Value) + .WhereIf(request.TopicId.HasValue, e => e.TopicId == request.TopicId!.Value) .OrderByDescending(e => e.StartsOn); var result = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); - return result.Map(MapToDto); + + var topicIds = result.Items.Select(e => e.TopicId).Distinct().ToList(); + var topics = await _db.Topics.Where(t => topicIds.Contains(t.Id)) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicById = topics.ToDictionary(t => t.Id); + + return _messages.Ok(result.Map(e => MapToDto(e, topicById)), "ITEMS_LISTED"); } - internal static EventDto MapToDto(Event e) => new( + internal static EventDto MapToDto(Event e, Dictionary topicById) => new( + e.Id, e.TitleAr, e.TitleEn, e.DescriptionAr, e.DescriptionEn, + e.StartsOn, e.EndsOn, e.LocationAr, e.LocationEn, + e.OnlineMeetingUrl, e.FeaturedImageUrl, e.ICalUid, + e.TopicId, + topicById.TryGetValue(e.TopicId, out var t) ? t.NameAr : string.Empty, + topicById.TryGetValue(e.TopicId, out t) ? t.NameEn : string.Empty); + + internal static EventDto MapToDto(Event e, string topicNameAr = "", string topicNameEn = "") => new( e.Id, e.TitleAr, e.TitleEn, e.DescriptionAr, e.DescriptionEn, e.StartsOn, e.EndsOn, e.LocationAr, e.LocationEn, e.OnlineMeetingUrl, e.FeaturedImageUrl, e.ICalUid, - System.Convert.ToBase64String(e.RowVersion)); + e.TopicId, topicNameAr, topicNameEn); } diff --git a/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQuery.cs b/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQuery.cs index bd8974e1..818c1c59 100644 --- a/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQuery.cs +++ b/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQuery.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; using MediatR; @@ -9,4 +10,5 @@ public sealed record ListNewsQuery( int PageSize = 20, string? Search = null, bool? IsPublished = null, - bool? IsFeatured = null) : IRequest>; + bool? IsFeatured = null, + System.Guid? TopicId = null) : IRequest>>; diff --git a/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQueryHandler.cs b/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQueryHandler.cs index c7c97445..6226d0b2 100644 --- a/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Queries/ListNews/ListNewsQueryHandler.cs @@ -1,18 +1,26 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; +using CCE.Domain.Community; using CCE.Domain.Content; using MediatR; namespace CCE.Application.Content.Queries.ListNews; -public sealed class ListNewsQueryHandler : IRequestHandler> +public sealed class ListNewsQueryHandler : IRequestHandler>> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public ListNewsQueryHandler(ICceDbContext db) => _db = db; + public ListNewsQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task> Handle(ListNewsQuery request, CancellationToken cancellationToken) + public async Task>> Handle(ListNewsQuery request, CancellationToken cancellationToken) { var query = _db.News .WhereIf(!string.IsNullOrWhiteSpace(request.Search), @@ -22,16 +30,31 @@ public async Task> Handle(ListNewsQuery request, Cancellati .WhereIf(request.IsPublished == true, n => n.PublishedOn != null) .WhereIf(request.IsPublished == false, n => n.PublishedOn == null) .WhereIf(request.IsFeatured.HasValue, n => n.IsFeatured == request.IsFeatured!.Value) + .WhereIf(request.TopicId.HasValue, n => n.TopicId == request.TopicId!.Value) .OrderByDescending(n => n.PublishedOn ?? DateTimeOffset.MinValue) .ThenByDescending(n => n.Id); var result = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); - return result.Map(MapToDto); + + var topicIds = result.Items.Select(n => n.TopicId).Distinct().ToList(); + var topics = await _db.Topics.Where(t => topicIds.Contains(t.Id)) + .ToListAsyncEither(cancellationToken).ConfigureAwait(false); + var topicById = topics.ToDictionary(t => t.Id); + + return _messages.Ok(result.Map(n => MapToDto(n, topicById)), "ITEMS_LISTED"); } - internal static NewsDto MapToDto(News n) => new( + internal static NewsDto MapToDto(News n, Dictionary topicById) => new( + n.Id, n.TitleAr, n.TitleEn, n.ContentAr, n.ContentEn, + n.TopicId, + topicById.TryGetValue(n.TopicId, out var t) ? t.NameAr : string.Empty, + topicById.TryGetValue(n.TopicId, out t) ? t.NameEn : string.Empty, + n.AuthorId, n.FeaturedImageUrl, + n.PublishedOn, n.IsFeatured, n.IsPublished); + + internal static NewsDto MapToDto(News n, string topicNameAr = "", string topicNameEn = "") => new( n.Id, n.TitleAr, n.TitleEn, n.ContentAr, n.ContentEn, - n.Slug, n.AuthorId, n.FeaturedImageUrl, - n.PublishedOn, n.IsFeatured, n.IsPublished, - System.Convert.ToBase64String(n.RowVersion)); + n.TopicId, topicNameAr, topicNameEn, + n.AuthorId, n.FeaturedImageUrl, + n.PublishedOn, n.IsFeatured, n.IsPublished); } diff --git a/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQuery.cs b/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQuery.cs index 2012d4a2..d8a04026 100644 --- a/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQuery.cs +++ b/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQuery.cs @@ -1,3 +1,4 @@ +using CCE.Application.Common; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; using MediatR; @@ -10,4 +11,4 @@ public sealed record ListResourcesQuery( string? Search = null, System.Guid? CategoryId = null, System.Guid? CountryId = null, - bool? IsPublished = null) : IRequest>; + bool? IsPublished = null) : IRequest>>; diff --git a/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQueryHandler.cs b/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQueryHandler.cs index 9d8ce30f..95953f2d 100644 --- a/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQueryHandler.cs +++ b/backend/src/CCE.Application/Content/Queries/ListResources/ListResourcesQueryHandler.cs @@ -1,53 +1,99 @@ +using CCE.Application.Common; using CCE.Application.Common.Interfaces; using CCE.Application.Common.Pagination; using CCE.Application.Content.Dtos; +using CCE.Application.Messages; using CCE.Domain.Content; using MediatR; +using Microsoft.EntityFrameworkCore; namespace CCE.Application.Content.Queries.ListResources; -public sealed class ListResourcesQueryHandler - : IRequestHandler> +public sealed class ListResourcesQueryHandler : IRequestHandler>> { private readonly ICceDbContext _db; + private readonly MessageFactory _messages; - public ListResourcesQueryHandler(ICceDbContext db) => _db = db; + public ListResourcesQueryHandler(ICceDbContext db, MessageFactory messages) + { + _db = db; + _messages = messages; + } - public async Task> Handle( + public async Task>> Handle( ListResourcesQuery request, CancellationToken cancellationToken) { var query = _db.Resources + .AsNoTracking() + .Include(r => r.Countries) .WhereIf(!string.IsNullOrWhiteSpace(request.Search), r => r.TitleAr.Contains(request.Search!) || r.TitleEn.Contains(request.Search!) || r.DescriptionAr.Contains(request.Search!) || r.DescriptionEn.Contains(request.Search!)) .WhereIf(request.CategoryId.HasValue, r => r.CategoryId == request.CategoryId!.Value) - .WhereIf(request.CountryId.HasValue, r => r.CountryId == request.CountryId!.Value) + .WhereIf(request.CountryId.HasValue, r => r.Countries.Any(c => c.CountryId == request.CountryId!.Value)) .WhereIf(request.IsPublished == true, r => r.PublishedOn != null) .WhereIf(request.IsPublished == false, r => r.PublishedOn == null) - .OrderByDescending(r => r.PublishedOn ?? DateTimeOffset.MinValue) + .OrderByDescending(r => r.PublishedOn) .ThenByDescending(r => r.Id); - var result = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); - return result.Map(MapToDto); - } + var paged = await query.ToPagedResultAsync(request.Page, request.PageSize, cancellationToken).ConfigureAwait(false); + + // Batch enrich categories / assets / country names for the page (avoids N+1) + var categoryIds = paged.Items.Select(r => r.CategoryId).Distinct().ToList(); + var assetIds = paged.Items.Select(r => r.AssetFileId).Distinct().ToList(); + var allCountryIds = paged.Items.SelectMany(r => r.Countries.Select(c => c.CountryId)).Distinct().ToList(); + + var categories = await _db.ResourceCategories + .Where(c => categoryIds.Contains(c.Id)) + .Select(c => new { c.Id, c.NameAr, c.NameEn }) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var categoryMap = categories.ToDictionary(c => c.Id, c => new { c.NameAr, c.NameEn }); - internal static ResourceDto MapToDto(Resource r) => new( - r.Id, - r.TitleAr, - r.TitleEn, - r.DescriptionAr, - r.DescriptionEn, - r.ResourceType, - r.CategoryId, - r.CountryId, - r.UploadedById, - r.AssetFileId, - r.PublishedOn, - r.ViewCount, - r.IsCenterManaged, - r.IsPublished, - System.Convert.ToBase64String(r.RowVersion)); + var assets = await _db.AssetFiles + .Where(a => assetIds.Contains(a.Id)) + .Select(a => new { a.Id, a.OriginalFileName }) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var assetMap = assets.ToDictionary(a => a.Id, a => a.OriginalFileName); + + var countries = await _db.Countries + .Where(c => allCountryIds.Contains(c.Id)) + .Select(c => new { c.Id, c.NameAr }) + .ToListAsyncEither(cancellationToken) + .ConfigureAwait(false); + var countryNameMap = countries.ToDictionary(c => c.Id, c => c.NameAr); + + var dtos = paged.Items.Select(r => + { + var cat = categoryMap.GetValueOrDefault(r.CategoryId); + var countryIds = r.Countries.Select(c => c.CountryId).ToList(); + var countryNames = countryIds.Select(id => countryNameMap.GetValueOrDefault(id) ?? string.Empty).ToList(); + return new ResourceDto( + r.Id, + r.TitleAr, + r.TitleEn, + r.DescriptionAr, + r.DescriptionEn, + r.ResourceType, + r.CategoryId, + cat?.NameAr ?? string.Empty, + cat?.NameEn ?? string.Empty, + r.AssetFileId, + assetMap.GetValueOrDefault(r.AssetFileId) ?? string.Empty, + countryIds, + countryNames, + r.UploadedById, + r.PublishedOn, + r.ViewCount, + r.IsCenterManaged, + r.IsPublished); + }).ToList(); + + var result = new PagedResult(dtos, paged.Page, paged.PageSize, paged.Total); + return _messages.Ok(result, "ITEMS_LISTED"); + } } diff --git a/backend/src/CCE.Application/Evaluation/DTOs/ServiceEvaluationDto.cs b/backend/src/CCE.Application/Evaluation/DTOs/ServiceEvaluationDto.cs index ae99acad..962551ed 100644 --- a/backend/src/CCE.Application/Evaluation/DTOs/ServiceEvaluationDto.cs +++ b/backend/src/CCE.Application/Evaluation/DTOs/ServiceEvaluationDto.cs @@ -10,4 +10,4 @@ public sealed record ServiceEvaluationDto( string Feedback, System.Guid? UserId, System.DateTimeOffset CreatedOn, - System.Guid? CreatedById); + System.Guid CreatedById); diff --git a/backend/src/CCE.Application/Messages/MessageFactory.cs b/backend/src/CCE.Application/Messages/MessageFactory.cs index 7c135a2c..3f248781 100644 --- a/backend/src/CCE.Application/Messages/MessageFactory.cs +++ b/backend/src/CCE.Application/Messages/MessageFactory.cs @@ -77,6 +77,7 @@ public FieldError Field(string fieldName, string domainKey) public Response NewsNotFound() => NotFound("NEWS_NOT_FOUND"); public Response EventNotFound() => NotFound("EVENT_NOT_FOUND"); + public Response ResourceNotFound() => NotFound("RESOURCE_NOT_FOUND"); public Response PageNotFound() => NotFound("PAGE_NOT_FOUND"); public Response CategoryNotFound() => NotFound("CATEGORY_NOT_FOUND"); public Response AssetNotFound() => NotFound("ASSET_NOT_FOUND"); diff --git a/backend/src/CCE.Application/Messages/SystemCode.cs b/backend/src/CCE.Application/Messages/SystemCode.cs index f2b84c57..aa254095 100644 --- a/backend/src/CCE.Application/Messages/SystemCode.cs +++ b/backend/src/CCE.Application/Messages/SystemCode.cs @@ -160,16 +160,17 @@ public static class SystemCode public const string CON053 = "CON053"; // State rep assignment revoked public const string CON054 = "CON054"; // Roles assigned public const string CON055 = "CON055"; // User status changed + public const string CON056 = "CON056"; // Login success // ─── Content Success ─── public const string CON020 = "CON020"; // Content created - public const string CON021 = "CON021"; // Content updated - public const string CON022 = "CON022"; // Content deleted + public const string CON021 = "CON021"; // Resource created (BRD appendix) + public const string CON022 = "CON022"; // Resource deleted (BRD appendix) public const string CON023 = "CON023"; // Content published public const string CON024 = "CON024"; // Content archived - public const string CON025 = "CON025"; // Resource created + public const string CON025 = "CON025"; // Content updated public const string CON026 = "CON026"; // Resource updated - public const string CON027 = "CON027"; // Resource deleted + public const string CON027 = "CON027"; // Content deleted public const string CON028 = "CON028"; // Resource published // ─── Media Success ─── diff --git a/backend/src/CCE.Application/Messages/SystemCodeMap.cs b/backend/src/CCE.Application/Messages/SystemCodeMap.cs index a1e1751d..112d3f54 100644 --- a/backend/src/CCE.Application/Messages/SystemCodeMap.cs +++ b/backend/src/CCE.Application/Messages/SystemCodeMap.cs @@ -42,6 +42,9 @@ public static class SystemCodeMap ["PAGE_DUPLICATE"] = SystemCode.ERR050, ["NEWS_DUPLICATE"] = SystemCode.ERR051, ["EVENT_DUPLICATE"] = SystemCode.ERR052, + ["RESOURCE_DOWNLOAD_FAILED"] = SystemCode.ERR002, + ["RESOURCE_UPLOAD_FAILED"] = SystemCode.ERR029, + ["RESOURCE_DELETE_FAILED"] = SystemCode.ERR030, // ─── Community Errors ─── ["TOPIC_NOT_FOUND"] = SystemCode.ERR060, @@ -110,7 +113,7 @@ public static class SystemCodeMap ["DUPLICATE_VALUE"] = SystemCode.ERR908, // ─── Identity Success (appendix-aligned) ─── - ["LOGIN_SUCCESS"] = SystemCode.CON001, + ["LOGIN_SUCCESS"] = SystemCode.CON056, ["TOKEN_REFRESHED"] = SystemCode.CON004, ["PROFILE_UPDATED"] = SystemCode.CON005, ["EXPERT_REQUEST_SUBMITTED"] = SystemCode.CON006, @@ -133,8 +136,8 @@ public static class SystemCodeMap // ─── Content Success ─── ["CONTENT_CREATED"] = SystemCode.CON020, - ["CONTENT_UPDATED"] = SystemCode.CON021, - ["CONTENT_DELETED"] = SystemCode.CON022, + ["CONTENT_UPDATED"] = SystemCode.CON025, + ["CONTENT_DELETED"] = SystemCode.CON027, // ─── Asset Success ─── ["ASSET_UPLOADED"] = SystemCode.CON038, @@ -145,10 +148,13 @@ public static class SystemCodeMap ["MEDIA_DELETED"] = SystemCode.CON037, ["CONTENT_PUBLISHED"] = SystemCode.CON023, ["CONTENT_ARCHIVED"] = SystemCode.CON024, - ["RESOURCE_CREATED"] = SystemCode.CON025, + ["RESOURCE_CREATED"] = SystemCode.CON021, ["RESOURCE_UPDATED"] = SystemCode.CON026, - ["RESOURCE_DELETED"] = SystemCode.CON027, + ["RESOURCE_DELETED"] = SystemCode.CON022, ["RESOURCE_PUBLISHED"] = SystemCode.CON028, + ["RESOURCE_DOWNLOAD_SUCCESS"] = SystemCode.CON001, + ["RESOURCE_SHARE_SUCCESS"] = SystemCode.CON002, + ["RESOURCE_SHARE_FAILED"] = SystemCode.ERR003, // ─── Notification Success ─── ["NOTIFICATION_CREATED"] = SystemCode.CON040, @@ -195,7 +201,7 @@ public static class SystemCodeMap ///

Get the ERR/CON/VAL code for a domain key. Returns ERR900 if unmapped. public static string ToSystemCode(string domainKey) - => DomainToCode.TryGetValue(domainKey, out var code) ? code : SystemCode.ERR900; + => domainKey is not null && DomainToCode.TryGetValue(domainKey, out var code) ? code : SystemCode.ERR900; /// Get the domain key from a system code. Returns null if unmapped. public static string? ToDomainKey(string systemCode) diff --git a/backend/src/CCE.Domain/Common/AuditableEntity.cs b/backend/src/CCE.Domain/Common/AuditableEntity.cs index cc355a1e..a1ab1f0c 100644 --- a/backend/src/CCE.Domain/Common/AuditableEntity.cs +++ b/backend/src/CCE.Domain/Common/AuditableEntity.cs @@ -15,7 +15,7 @@ protected AuditableEntity(TId id) : base(id) { } public DateTimeOffset CreatedOn { get; protected set; } /// - public Guid? CreatedById { get; protected set; } + public Guid CreatedById { get; protected set; } /// public DateTimeOffset? LastModifiedOn { get; protected set; } diff --git a/backend/src/CCE.Domain/Common/SystemConstants.cs b/backend/src/CCE.Domain/Common/SystemConstants.cs new file mode 100644 index 00000000..47ae9bf0 --- /dev/null +++ b/backend/src/CCE.Domain/Common/SystemConstants.cs @@ -0,0 +1,14 @@ +namespace CCE.Domain.Common; + +/// +/// Well-known sentinel values used across the domain. +/// +public static class SystemConstants +{ + /// + /// Represents an anonymous or system actor when no real user is available. + /// Used for audit fields (CreatedById, LastModifiedById) on entities + /// created by unauthenticated users. + /// + public static readonly Guid AnonymousUserId = new("00000000-0000-0000-0000-000000000001"); +} diff --git a/backend/src/CCE.Domain/Content/Event.cs b/backend/src/CCE.Domain/Content/Event.cs index 26fe909d..9ba06609 100644 --- a/backend/src/CCE.Domain/Content/Event.cs +++ b/backend/src/CCE.Domain/Content/Event.cs @@ -23,7 +23,8 @@ private Event( string? locationEn, string? onlineMeetingUrl, string? featuredImageUrl, - string iCalUid) : base(id) + string iCalUid, + System.Guid topicId) : base(id) { TitleAr = titleAr; TitleEn = titleEn; @@ -36,6 +37,7 @@ private Event( OnlineMeetingUrl = onlineMeetingUrl; FeaturedImageUrl = featuredImageUrl; ICalUid = iCalUid; + TopicId = topicId; } public string TitleAr { get; private set; } @@ -52,6 +54,8 @@ private Event( /// Stable iCalendar UID (set at creation). Never changes. public string ICalUid { get; private set; } + public System.Guid TopicId { get; private set; } + public byte[] RowVersion { get; private set; } = System.Array.Empty(); public static Event Schedule( @@ -65,6 +69,7 @@ public static Event Schedule( string? locationEn, string? onlineMeetingUrl, string? featuredImageUrl, + System.Guid topicId, ISystemClock clock) { if (string.IsNullOrWhiteSpace(titleAr)) throw new DomainException("TitleAr is required."); @@ -75,6 +80,7 @@ public static Event Schedule( { throw new DomainException("EndsOn must be strictly after StartsOn."); } + if (topicId == System.Guid.Empty) throw new DomainException("TopicId is required."); if (onlineMeetingUrl is not null && !onlineMeetingUrl.StartsWith("https://", System.StringComparison.OrdinalIgnoreCase)) { @@ -88,7 +94,7 @@ public static Event Schedule( var id = System.Guid.NewGuid(); var iCalUid = $"{id:N}@cce.moenergy.gov.sa"; var ev = new Event(id, titleAr, titleEn, descriptionAr, descriptionEn, - startsOn, endsOn, locationAr, locationEn, onlineMeetingUrl, featuredImageUrl, iCalUid); + startsOn, endsOn, locationAr, locationEn, onlineMeetingUrl, featuredImageUrl, iCalUid, topicId); ev.RaiseDomainEvent(new EventScheduledEvent(id, startsOn, endsOn, clock.UtcNow)); return ev; } @@ -101,12 +107,14 @@ public void UpdateContent( string? locationAr, string? locationEn, string? onlineMeetingUrl, - string? featuredImageUrl) + string? featuredImageUrl, + System.Guid topicId) { if (string.IsNullOrWhiteSpace(titleAr)) throw new DomainException("TitleAr is required."); if (string.IsNullOrWhiteSpace(titleEn)) throw new DomainException("TitleEn is required."); if (string.IsNullOrWhiteSpace(descriptionAr)) throw new DomainException("DescriptionAr is required."); if (string.IsNullOrWhiteSpace(descriptionEn)) throw new DomainException("DescriptionEn is required."); + if (topicId == System.Guid.Empty) throw new DomainException("TopicId is required."); if (onlineMeetingUrl is not null && !onlineMeetingUrl.StartsWith("https://", System.StringComparison.OrdinalIgnoreCase)) { @@ -125,6 +133,7 @@ public void UpdateContent( LocationEn = locationEn; OnlineMeetingUrl = onlineMeetingUrl; FeaturedImageUrl = featuredImageUrl; + TopicId = topicId; } public void Reschedule(System.DateTimeOffset startsOn, System.DateTimeOffset endsOn) diff --git a/backend/src/CCE.Domain/Content/News.cs b/backend/src/CCE.Domain/Content/News.cs index a9154af5..a12b753e 100644 --- a/backend/src/CCE.Domain/Content/News.cs +++ b/backend/src/CCE.Domain/Content/News.cs @@ -1,4 +1,3 @@ -using System.Text.RegularExpressions; using CCE.Domain.Common; using CCE.Domain.Content.Events; @@ -6,13 +5,11 @@ namespace CCE.Domain.Content; /// /// News article — bilingual title + rich-text content + optional featured image. -/// Slug is unique (enforced in Phase 08 DB unique index). Soft-deletable, audited. +/// Slug is auto-generated from the English title. Soft-deletable, audited. /// [Audited] public sealed class News : AggregateRoot { - private static readonly Regex SlugPattern = new("^[a-z0-9]+(-[a-z0-9]+)*$", RegexOptions.Compiled); - private News( System.Guid id, string titleAr, @@ -20,6 +17,7 @@ private News( string contentAr, string contentEn, string slug, + System.Guid topicId, System.Guid authorId, string? featuredImageUrl) : base(id) { @@ -28,6 +26,7 @@ private News( ContentAr = contentAr; ContentEn = contentEn; Slug = slug; + TopicId = topicId; AuthorId = authorId; FeaturedImageUrl = featuredImageUrl; } @@ -37,6 +36,7 @@ private News( public string ContentAr { get; private set; } public string ContentEn { get; private set; } public string Slug { get; private set; } + public System.Guid TopicId { get; private set; } public System.Guid AuthorId { get; private set; } public string? FeaturedImageUrl { get; private set; } public System.DateTimeOffset? PublishedOn { get; private set; } @@ -50,7 +50,7 @@ public static News Draft( string titleEn, string contentAr, string contentEn, - string slug, + System.Guid topicId, System.Guid authorId, string? featuredImageUrl, ISystemClock clock) @@ -60,10 +60,7 @@ public static News Draft( if (string.IsNullOrWhiteSpace(titleEn)) throw new DomainException("TitleEn is required."); if (string.IsNullOrWhiteSpace(contentAr)) throw new DomainException("ContentAr is required."); if (string.IsNullOrWhiteSpace(contentEn)) throw new DomainException("ContentEn is required."); - if (string.IsNullOrWhiteSpace(slug) || !SlugPattern.IsMatch(slug)) - { - throw new DomainException($"slug '{slug}' must be kebab-case."); - } + if (topicId == System.Guid.Empty) throw new DomainException("TopicId is required."); if (authorId == System.Guid.Empty) throw new DomainException("AuthorId is required."); if (featuredImageUrl is not null && !featuredImageUrl.StartsWith("https://", System.StringComparison.OrdinalIgnoreCase)) @@ -76,7 +73,8 @@ public static News Draft( titleEn: titleEn, contentAr: contentAr, contentEn: contentEn, - slug: slug, + slug: ToKebabSlug(titleEn), + topicId: topicId, authorId: authorId, featuredImageUrl: featuredImageUrl); } @@ -86,17 +84,14 @@ public void UpdateContent( string titleEn, string contentAr, string contentEn, - string slug, + System.Guid topicId, string? featuredImageUrl) { if (string.IsNullOrWhiteSpace(titleAr)) throw new DomainException("TitleAr is required."); if (string.IsNullOrWhiteSpace(titleEn)) throw new DomainException("TitleEn is required."); if (string.IsNullOrWhiteSpace(contentAr)) throw new DomainException("ContentAr is required."); if (string.IsNullOrWhiteSpace(contentEn)) throw new DomainException("ContentEn is required."); - if (string.IsNullOrWhiteSpace(slug) || !SlugPattern.IsMatch(slug)) - { - throw new DomainException($"slug '{slug}' must be kebab-case."); - } + if (topicId == System.Guid.Empty) throw new DomainException("TopicId is required."); if (featuredImageUrl is not null && !featuredImageUrl.StartsWith("https://", System.StringComparison.OrdinalIgnoreCase)) { @@ -106,7 +101,7 @@ public void UpdateContent( TitleEn = titleEn; ContentAr = contentAr; ContentEn = contentEn; - Slug = slug; + TopicId = topicId; FeaturedImageUrl = featuredImageUrl; } @@ -120,4 +115,28 @@ public void Publish(ISystemClock clock) public void MarkFeatured() => IsFeatured = true; public void UnmarkFeatured() => IsFeatured = false; + + private static string ToKebabSlug(string text) + { + if (string.IsNullOrWhiteSpace(text)) return "news"; + var sb = new System.Text.StringBuilder(); + bool lastWasHyphen = true; + foreach (var c in text.ToLowerInvariant()) + { + if (char.IsLetterOrDigit(c)) + { + sb.Append(c); + lastWasHyphen = false; + } + else if (!lastWasHyphen) + { + sb.Append('-'); + lastWasHyphen = true; + } + } + if (lastWasHyphen && sb.Length > 0) + sb.Length--; + var result = sb.ToString(); + return string.IsNullOrWhiteSpace(result) ? "news" : result; + } } diff --git a/backend/src/CCE.Domain/Content/Resource.cs b/backend/src/CCE.Domain/Content/Resource.cs index f07bf9bf..37d1a96c 100644 --- a/backend/src/CCE.Domain/Content/Resource.cs +++ b/backend/src/CCE.Domain/Content/Resource.cs @@ -48,6 +48,9 @@ private Resource( public System.DateTimeOffset? PublishedOn { get; private set; } public long ViewCount { get; private set; } + private readonly List _countries = new(); + public IReadOnlyCollection Countries => _countries.AsReadOnly(); + /// EF-managed concurrency token (rowversion). public byte[] RowVersion { get; private set; } = System.Array.Empty(); @@ -67,6 +70,7 @@ public static Resource Draft( System.Guid? countryId, System.Guid uploadedById, System.Guid assetFileId, + IEnumerable countryIds, ISystemClock clock) { _ = clock; @@ -77,7 +81,8 @@ public static Resource Draft( if (categoryId == System.Guid.Empty) throw new DomainException("CategoryId is required."); if (uploadedById == System.Guid.Empty) throw new DomainException("UploadedById is required."); if (assetFileId == System.Guid.Empty) throw new DomainException("AssetFileId is required."); - return new Resource( + + var resource = new Resource( id: System.Guid.NewGuid(), titleAr: titleAr, titleEn: titleEn, @@ -88,6 +93,13 @@ public static Resource Draft( countryId: countryId, uploadedById: uploadedById, assetFileId: assetFileId); + + foreach (var cid in countryIds.Distinct().Where(id => id != System.Guid.Empty)) + { + resource._countries.Add(ResourceCountry.Create(resource.Id, cid)); + } + + return resource; } public void Publish(ISystemClock clock) @@ -105,7 +117,8 @@ public void Publish(ISystemClock clock) } /// - /// Mutates the editable content fields. Audited via the existing AuditingInterceptor. + /// Mutates the editable content fields and covered countries. + /// Audited via the existing AuditingInterceptor. /// public void UpdateContent( string titleAr, @@ -113,7 +126,8 @@ public void UpdateContent( string descriptionAr, string descriptionEn, ResourceType resourceType, - System.Guid categoryId) + System.Guid categoryId, + IEnumerable countryIds) { if (string.IsNullOrWhiteSpace(titleAr)) throw new DomainException("TitleAr is required."); if (string.IsNullOrWhiteSpace(titleEn)) throw new DomainException("TitleEn is required."); @@ -126,6 +140,20 @@ public void UpdateContent( DescriptionEn = descriptionEn; ResourceType = resourceType; CategoryId = categoryId; + SyncCountries(countryIds); + } + + private void SyncCountries(IEnumerable countryIds) + { + var distinctIds = countryIds.Distinct().Where(id => id != System.Guid.Empty).ToList(); + + _countries.RemoveAll(rc => !distinctIds.Contains(rc.CountryId)); + + var existingIds = _countries.Select(rc => rc.CountryId).ToHashSet(); + foreach (var cid in distinctIds.Where(id => !existingIds.Contains(id))) + { + _countries.Add(ResourceCountry.Create(Id, cid)); + } } public void IncrementViewCount() => ViewCount++; diff --git a/backend/src/CCE.Domain/Content/ResourceCountry.cs b/backend/src/CCE.Domain/Content/ResourceCountry.cs new file mode 100644 index 00000000..bfa4dda4 --- /dev/null +++ b/backend/src/CCE.Domain/Content/ResourceCountry.cs @@ -0,0 +1,21 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace CCE.Domain.Content; + +/// +/// Join entity linking a to one of its covered countries. +/// +public sealed class ResourceCountry +{ + private ResourceCountry(System.Guid resourceId, System.Guid countryId) + { + ResourceId = resourceId; + CountryId = countryId; + } + + public System.Guid ResourceId { get; private set; } + public System.Guid CountryId { get; private set; } + + public static ResourceCountry Create(System.Guid resourceId, System.Guid countryId) + => new(resourceId, countryId); +} diff --git a/backend/src/CCE.Domain/Content/ResourceType.cs b/backend/src/CCE.Domain/Content/ResourceType.cs index 776ed876..14af235c 100644 --- a/backend/src/CCE.Domain/Content/ResourceType.cs +++ b/backend/src/CCE.Domain/Content/ResourceType.cs @@ -1,14 +1,19 @@ namespace CCE.Domain.Content; /// -/// Format of a Resource. Drives both UI rendering (icon + viewer) and -/// validation rules (e.g., Video resources may require an associated transcript file). +/// Publication type of a Resource. Drives UI rendering (icon + viewer) +/// and categorization in the resource center. /// public enum ResourceType { - Pdf = 0, - Video = 1, - Image = 2, - Link = 3, - Document = 4, + Paper = 0, + Article = 1, + Study = 2, + Presentation = 3, + ScientificPaper = 4, + Report = 5, + Book = 6, + Research = 7, + CceGuide = 8, + Media = 9, } diff --git a/backend/src/CCE.Domain/Evaluation/ServiceEvaluation.cs b/backend/src/CCE.Domain/Evaluation/ServiceEvaluation.cs index bb981eac..4e66dcaa 100644 --- a/backend/src/CCE.Domain/Evaluation/ServiceEvaluation.cs +++ b/backend/src/CCE.Domain/Evaluation/ServiceEvaluation.cs @@ -2,7 +2,6 @@ namespace CCE.Domain.Evaluation; -[Audited] public sealed class ServiceEvaluation : AuditableEntity { @@ -53,7 +52,7 @@ public static ServiceEvaluation Submit( userId); entity.CreatedOn = clock.UtcNow; - entity.CreatedById = userId; + entity.CreatedById = userId ?? SystemConstants.AnonymousUserId; return entity; } diff --git a/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/EventConfiguration.cs b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/EventConfiguration.cs index 69e31956..fcefd2f3 100644 --- a/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/EventConfiguration.cs +++ b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/EventConfiguration.cs @@ -22,6 +22,7 @@ public void Configure(EntityTypeBuilder builder) builder.Property(e => e.RowVersion).IsRowVersion(); builder.HasIndex(e => e.ICalUid).IsUnique().HasDatabaseName("ux_event_ical_uid"); builder.HasIndex(e => e.StartsOn).HasDatabaseName("ix_event_starts_on"); + builder.HasIndex(e => e.TopicId).HasDatabaseName("ix_event_topic_id"); builder.Ignore(e => e.DomainEvents); } } diff --git a/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/NewsConfiguration.cs b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/NewsConfiguration.cs index 693f13d8..785e1080 100644 --- a/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/NewsConfiguration.cs +++ b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/NewsConfiguration.cs @@ -22,6 +22,7 @@ public void Configure(EntityTypeBuilder builder) .HasFilter("[is_deleted] = 0") .HasDatabaseName("ux_news_slug_active"); builder.HasIndex(n => n.PublishedOn).HasDatabaseName("ix_news_published_on"); + builder.HasIndex(n => n.TopicId).HasDatabaseName("ix_news_topic_id"); builder.Ignore(n => n.DomainEvents); } } diff --git a/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceConfiguration.cs b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceConfiguration.cs index e2954cbf..4d706409 100644 --- a/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceConfiguration.cs +++ b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceConfiguration.cs @@ -10,15 +10,19 @@ public void Configure(EntityTypeBuilder builder) { builder.HasKey(r => r.Id); builder.Property(r => r.Id).ValueGeneratedNever(); - builder.Property(r => r.TitleAr).HasMaxLength(512).IsRequired(); - builder.Property(r => r.TitleEn).HasMaxLength(512).IsRequired(); + builder.Property(r => r.TitleAr).HasMaxLength(255).IsRequired(); + builder.Property(r => r.TitleEn).HasMaxLength(255).IsRequired(); builder.Property(r => r.DescriptionAr).HasColumnType("nvarchar(max)"); builder.Property(r => r.DescriptionEn).HasColumnType("nvarchar(max)"); builder.Property(r => r.ResourceType).HasConversion(); builder.Property(r => r.RowVersion).IsRowVersion(); builder.HasIndex(r => new { r.CategoryId, r.PublishedOn }).HasDatabaseName("ix_resource_category_published"); - builder.HasIndex(r => r.CountryId).HasDatabaseName("ix_resource_country_id"); builder.HasIndex(r => r.AssetFileId).HasDatabaseName("ix_resource_asset_file_id"); builder.Ignore(r => r.DomainEvents); + + builder.HasMany(r => r.Countries) + .WithOne() + .HasForeignKey(rc => rc.ResourceId) + .OnDelete(DeleteBehavior.Cascade); } } diff --git a/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceCountryConfiguration.cs b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceCountryConfiguration.cs new file mode 100644 index 00000000..63d8fd44 --- /dev/null +++ b/backend/src/CCE.Infrastructure/Persistence/Configurations/Content/ResourceCountryConfiguration.cs @@ -0,0 +1,16 @@ +using CCE.Domain.Content; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace CCE.Infrastructure.Persistence.Configurations.Content; + +internal sealed class ResourceCountryConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(rc => new { rc.ResourceId, rc.CountryId }); + builder.Property(rc => rc.ResourceId).ValueGeneratedNever(); + builder.Property(rc => rc.CountryId).ValueGeneratedNever(); + builder.HasIndex(rc => rc.CountryId).HasDatabaseName("ix_resource_country_country_id"); + } +} diff --git a/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.Designer.cs b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.Designer.cs new file mode 100644 index 00000000..211644c5 --- /dev/null +++ b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.Designer.cs @@ -0,0 +1,3941 @@ +// +using System; +using CCE.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace CCE.Infrastructure.Persistence.Migrations +{ + [DbContext(typeof(CceDbContext))] + [Migration("20260531170325_ExpandResourceTypeAndAddCountries")] + partial class ExpandResourceTypeAndAddCountries + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("CCE.Domain.Audit.AuditEvent", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Action") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("action"); + + b.Property("Actor") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("actor"); + + b.Property("CorrelationId") + .HasColumnType("uniqueidentifier") + .HasColumnName("correlation_id"); + + b.Property("Diff") + .HasColumnType("nvarchar(max)") + .HasColumnName("diff"); + + b.Property("OccurredOn") + .HasColumnType("datetimeoffset") + .HasColumnName("occurred_on"); + + b.Property("Resource") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("resource"); + + b.HasKey("Id") + .HasName("pk_audit_events"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("ix_audit_events_correlation_id"); + + b.HasIndex("Actor", "OccurredOn") + .HasDatabaseName("ix_audit_events_actor_occurred_on"); + + b.ToTable("audit_events", null, t => + { + t.HasTrigger("trg_audit_events_no_update_delete"); + }); + + b.HasAnnotation("SqlServer:UseSqlOutputClause", false); + }); + + modelBuilder.Entity("CCE.Domain.Community.Post", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AnsweredReplyId") + .HasColumnType("uniqueidentifier") + .HasColumnName("answered_reply_id"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("author_id"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(8000) + .HasColumnType("nvarchar(max)") + .HasColumnName("content"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsAnswerable") + .HasColumnType("bit") + .HasColumnName("is_answerable"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + + b.HasKey("Id") + .HasName("pk_posts"); + + b.HasIndex("TopicId") + .HasDatabaseName("ix_post_topic_id"); + + b.HasIndex("AuthorId", "CreatedOn") + .HasDatabaseName("ix_post_author_created"); + + b.ToTable("posts", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.PostFollow", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FollowedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("followed_on"); + + b.Property("PostId") + .HasColumnType("uniqueidentifier") + .HasColumnName("post_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_post_follows"); + + b.HasIndex("PostId", "UserId") + .IsUnique() + .HasDatabaseName("ux_post_follow_post_user"); + + b.ToTable("post_follows", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.PostRating", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("PostId") + .HasColumnType("uniqueidentifier") + .HasColumnName("post_id"); + + b.Property("RatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("rated_on"); + + b.Property("Stars") + .HasColumnType("int") + .HasColumnName("stars"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_post_ratings"); + + b.HasIndex("PostId", "UserId") + .IsUnique() + .HasDatabaseName("ux_post_rating_post_user"); + + b.ToTable("post_ratings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.PostReply", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("author_id"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(8000) + .HasColumnType("nvarchar(max)") + .HasColumnName("content"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsByExpert") + .HasColumnType("bit") + .HasColumnName("is_by_expert"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("ParentReplyId") + .HasColumnType("uniqueidentifier") + .HasColumnName("parent_reply_id"); + + b.Property("PostId") + .HasColumnType("uniqueidentifier") + .HasColumnName("post_id"); + + b.HasKey("Id") + .HasName("pk_post_replies"); + + b.HasIndex("ParentReplyId") + .HasDatabaseName("ix_post_reply_parent_id"); + + b.HasIndex("PostId") + .HasDatabaseName("ix_post_reply_post_id"); + + b.ToTable("post_replies", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.Topic", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IconUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("icon_url"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasColumnName("parent_id"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("slug"); + + b.HasKey("Id") + .HasName("pk_topics"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_topic_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("topics", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.TopicFollow", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FollowedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("followed_on"); + + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_topic_follows"); + + b.HasIndex("TopicId", "UserId") + .IsUnique() + .HasDatabaseName("ux_topic_follow_topic_user"); + + b.ToTable("topic_follows", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.UserFollow", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FollowedId") + .HasColumnType("uniqueidentifier") + .HasColumnName("followed_id"); + + b.Property("FollowedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("followed_on"); + + b.Property("FollowerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("follower_id"); + + b.HasKey("Id") + .HasName("pk_user_follows"); + + b.HasIndex("FollowerId", "FollowedId") + .IsUnique() + .HasDatabaseName("ux_user_follow_follower_followed"); + + b.ToTable("user_follows", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.AssetFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("MimeType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("mime_type"); + + b.Property("OriginalFileName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("original_file_name"); + + b.Property("ScannedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("scanned_on"); + + b.Property("SizeBytes") + .HasColumnType("bigint") + .HasColumnName("size_bytes"); + + b.Property("UploadedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("uploaded_by_id"); + + b.Property("UploadedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("uploaded_on"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("url"); + + b.Property("VirusScanStatus") + .HasColumnType("int") + .HasColumnName("virus_scan_status"); + + b.HasKey("Id") + .HasName("pk_asset_files"); + + b.HasIndex("VirusScanStatus") + .HasDatabaseName("ix_asset_file_scan_status"); + + b.ToTable("asset_files", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.Event", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("EndsOn") + .HasColumnType("datetimeoffset") + .HasColumnName("ends_on"); + + b.Property("FeaturedImageUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("featured_image_url"); + + b.Property("ICalUid") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("i_cal_uid"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LocationAr") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("location_ar"); + + b.Property("LocationEn") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("location_en"); + + b.Property("OnlineMeetingUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("online_meeting_url"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("StartsOn") + .HasColumnType("datetimeoffset") + .HasColumnName("starts_on"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_en"); + + b.HasKey("Id") + .HasName("pk_events"); + + b.HasIndex("ICalUid") + .IsUnique() + .HasDatabaseName("ux_event_ical_uid"); + + b.HasIndex("StartsOn") + .HasDatabaseName("ix_event_starts_on"); + + b.ToTable("events", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.HomepageSection", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContentAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b.Property("ContentEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("SectionType") + .HasColumnType("int") + .HasColumnName("section_type"); + + b.HasKey("Id") + .HasName("pk_homepage_sections"); + + b.HasIndex("IsActive", "OrderIndex") + .HasDatabaseName("ix_homepage_section_active_order"); + + b.ToTable("homepage_sections", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.News", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("author_id"); + + b.Property("ContentAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b.Property("ContentEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("FeaturedImageUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("featured_image_url"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsFeatured") + .HasColumnType("bit") + .HasColumnName("is_featured"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("PublishedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("published_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("slug"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_en"); + + b.HasKey("Id") + .HasName("pk_news"); + + b.HasIndex("PublishedOn") + .HasDatabaseName("ix_news_published_on"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_news_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("news", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.NewsletterSubscription", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ConfirmationToken") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("confirmation_token"); + + b.Property("ConfirmedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("confirmed_on"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(320) + .HasColumnType("nvarchar(320)") + .HasColumnName("email"); + + b.Property("IsConfirmed") + .HasColumnType("bit") + .HasColumnName("is_confirmed"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LocalePreference") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale_preference"); + + b.Property("UnsubscribedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("unsubscribed_on"); + + b.HasKey("Id") + .HasName("pk_newsletter_subscriptions"); + + b.HasIndex("ConfirmationToken") + .HasDatabaseName("ix_newsletter_token"); + + b.HasIndex("Email") + .IsUnique() + .HasDatabaseName("ux_newsletter_email"); + + b.ToTable("newsletter_subscriptions", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.Page", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContentAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b.Property("ContentEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("PageType") + .HasColumnType("int") + .HasColumnName("page_type"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("slug"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_en"); + + b.HasKey("Id") + .HasName("pk_pages"); + + b.HasIndex("PageType", "Slug") + .IsUnique() + .HasDatabaseName("ux_page_type_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("pages", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.Resource", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssetFileId") + .HasColumnType("uniqueidentifier") + .HasColumnName("asset_file_id"); + + b.Property("CategoryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("category_id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("PublishedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("published_on"); + + b.Property("ResourceType") + .HasColumnType("int") + .HasColumnName("resource_type"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_en"); + + b.Property("UploadedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("uploaded_by_id"); + + b.Property("ViewCount") + .HasColumnType("bigint") + .HasColumnName("view_count"); + + b.HasKey("Id") + .HasName("pk_resources"); + + b.HasIndex("AssetFileId") + .HasDatabaseName("ix_resource_asset_file_id"); + + b.HasIndex("CategoryId", "PublishedOn") + .HasDatabaseName("ix_resource_category_published"); + + b.ToTable("resources", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.ResourceCategory", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasColumnName("parent_id"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("slug"); + + b.HasKey("Id") + .HasName("pk_resource_categories"); + + b.HasIndex("ParentId") + .HasDatabaseName("ix_resource_category_parent_id"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_resource_category_slug"); + + b.ToTable("resource_categories", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.ResourceCountry", b => + { + b.Property("ResourceId") + .HasColumnType("uniqueidentifier") + .HasColumnName("resource_id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.HasKey("ResourceId", "CountryId") + .HasName("pk_resource_country"); + + b.HasIndex("CountryId") + .HasDatabaseName("ix_resource_country_country_id"); + + b.ToTable("resource_country", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.Country", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("FlagUrl") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("flag_url"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsoAlpha2") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("iso_alpha2"); + + b.Property("IsoAlpha3") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("nvarchar(3)") + .HasColumnName("iso_alpha3"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LatestKapsarcSnapshotId") + .HasColumnType("uniqueidentifier") + .HasColumnName("latest_kapsarc_snapshot_id"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("RegionAr") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("region_ar"); + + b.Property("RegionEn") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("region_en"); + + b.HasKey("Id") + .HasName("pk_countries"); + + b.HasIndex("IsoAlpha2") + .HasDatabaseName("ix_country_iso_alpha2"); + + b.HasIndex("IsoAlpha3") + .IsUnique() + .HasDatabaseName("ux_country_iso_alpha3_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("countries", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.CountryKapsarcSnapshot", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Classification") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("classification"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("PerformanceScore") + .HasPrecision(5, 2) + .HasColumnType("decimal(5,2)") + .HasColumnName("performance_score"); + + b.Property("SnapshotTakenOn") + .HasColumnType("datetimeoffset") + .HasColumnName("snapshot_taken_on"); + + b.Property("SourceVersion") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)") + .HasColumnName("source_version"); + + b.Property("TotalIndex") + .HasPrecision(5, 2) + .HasColumnType("decimal(5,2)") + .HasColumnName("total_index"); + + b.HasKey("Id") + .HasName("pk_country_kapsarc_snapshots"); + + b.HasIndex("CountryId", "SnapshotTakenOn") + .HasDatabaseName("ix_kapsarc_snapshot_country_taken"); + + b.ToTable("country_kapsarc_snapshots", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.CountryProfile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContactInfoAr") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("contact_info_ar"); + + b.Property("ContactInfoEn") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("contact_info_en"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("KeyInitiativesAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("key_initiatives_ar"); + + b.Property("KeyInitiativesEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("key_initiatives_en"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.HasKey("Id") + .HasName("pk_country_profiles"); + + b.HasIndex("CountryId") + .IsUnique() + .HasDatabaseName("ux_country_profile_country_id"); + + b.ToTable("country_profiles", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.CountryResourceRequest", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AdminNotesAr") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("admin_notes_ar"); + + b.Property("AdminNotesEn") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("admin_notes_en"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("ProcessedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("processed_by_id"); + + b.Property("ProcessedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("processed_on"); + + b.Property("ProposedAssetFileId") + .HasColumnType("uniqueidentifier") + .HasColumnName("proposed_asset_file_id"); + + b.Property("ProposedDescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("proposed_description_ar"); + + b.Property("ProposedDescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("proposed_description_en"); + + b.Property("ProposedResourceType") + .HasColumnType("int") + .HasColumnName("proposed_resource_type"); + + b.Property("ProposedTitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("proposed_title_ar"); + + b.Property("ProposedTitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("proposed_title_en"); + + b.Property("RequestedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("requested_by_id"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.HasKey("Id") + .HasName("pk_country_resource_requests"); + + b.HasIndex("CountryId", "Status") + .HasDatabaseName("ix_country_request_country_status"); + + b.ToTable("country_resource_requests", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Evaluation.ServiceEvaluation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContentSuitability") + .HasColumnType("int") + .HasColumnName("content_suitability"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("EaseOfUse") + .HasColumnType("int") + .HasColumnName("ease_of_use"); + + b.Property("Feedback") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("feedback"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OverallSatisfaction") + .HasColumnType("int") + .HasColumnName("overall_satisfaction"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_service_evaluations"); + + b.HasIndex("CreatedOn") + .HasDatabaseName("ix_service_evaluation_created_on"); + + b.ToTable("service_evaluations", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertProfile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AcademicTitleAr") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("academic_title_ar"); + + b.Property("AcademicTitleEn") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("academic_title_en"); + + b.Property("ApprovedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("approved_by_id"); + + b.Property("ApprovedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("approved_on"); + + b.Property("BioAr") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("bio_ar"); + + b.Property("BioEn") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("bio_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.PrimitiveCollection("ExpertiseTags") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("expertise_tags"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_expert_profiles"); + + b.HasIndex("UserId") + .IsUnique() + .HasDatabaseName("ux_expert_profile_active_user") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("expert_profiles", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRegistrationRequest", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("ProcessedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("processed_by_id"); + + b.Property("ProcessedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("processed_on"); + + b.Property("RejectionReasonAr") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("rejection_reason_ar"); + + b.Property("RejectionReasonEn") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("rejection_reason_en"); + + b.Property("RequestedBioAr") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("requested_bio_ar"); + + b.Property("RequestedBioEn") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("requested_bio_en"); + + b.Property("RequestedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("requested_by_id"); + + b.PrimitiveCollection("RequestedTags") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("requested_tags"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.HasKey("Id") + .HasName("pk_expert_registration_requests"); + + b.HasIndex("RequestedById") + .HasDatabaseName("ix_expert_request_requested_by"); + + b.HasIndex("Status") + .HasDatabaseName("ix_expert_request_status"); + + b.ToTable("expert_registration_requests", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRequestAttachment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssetFileId") + .HasColumnType("uniqueidentifier") + .HasColumnName("asset_file_id"); + + b.Property("AttachmentType") + .HasColumnType("int") + .HasColumnName("attachment_type"); + + b.Property("ExpertRequestId") + .HasColumnType("uniqueidentifier") + .HasColumnName("expert_request_id"); + + b.Property("UploadedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("uploaded_at"); + + b.HasKey("Id") + .HasName("pk_expert_request_attachments"); + + b.HasIndex("ExpertRequestId") + .HasDatabaseName("ix_expert_request_attachments_expert_request_id"); + + b.ToTable("expert_request_attachments", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.RefreshToken", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedAtUtc") + .HasColumnType("datetimeoffset") + .HasColumnName("created_at_utc"); + + b.Property("CreatedByIp") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("created_by_ip"); + + b.Property("ExpiresAtUtc") + .HasColumnType("datetimeoffset") + .HasColumnName("expires_at_utc"); + + b.Property("ReplacedByTokenHash") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("replaced_by_token_hash"); + + b.Property("RevokedAtUtc") + .HasColumnType("datetimeoffset") + .HasColumnName("revoked_at_utc"); + + b.Property("RevokedByIp") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("revoked_by_ip"); + + b.Property("TokenFamilyId") + .HasColumnType("uniqueidentifier") + .HasColumnName("token_family_id"); + + b.Property("TokenHash") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("token_hash"); + + b.Property("UserAgent") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("user_agent"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_refresh_tokens"); + + b.HasIndex("TokenFamilyId") + .HasDatabaseName("ix_refresh_tokens_token_family_id"); + + b.HasIndex("TokenHash") + .IsUnique() + .HasDatabaseName("ux_refresh_tokens_token_hash"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_refresh_tokens_user_id"); + + b.ToTable("refresh_tokens", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)") + .HasColumnName("concurrency_stamp"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("normalized_name"); + + b.HasKey("Id") + .HasName("pk_asp_net_roles"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[normalized_name] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.StateRepresentativeAssignment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssignedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("assigned_by_id"); + + b.Property("AssignedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("assigned_on"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RevokedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("revoked_by_id"); + + b.Property("RevokedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("revoked_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_state_representative_assignments"); + + b.HasIndex("CountryId") + .HasDatabaseName("ix_state_rep_country_id"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_state_rep_user_id"); + + b.HasIndex("UserId", "CountryId") + .IsUnique() + .HasDatabaseName("ux_state_rep_active_user_country") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("state_representative_assignments", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AccessFailedCount") + .HasColumnType("int") + .HasColumnName("access_failed_count"); + + b.Property("AvatarUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("avatar_url"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)") + .HasColumnName("concurrency_stamp"); + + b.Property("CountryCodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_code_id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("email"); + + b.Property("EmailConfirmed") + .HasColumnType("bit") + .HasColumnName("email_confirmed"); + + b.Property("EntraIdObjectId") + .HasColumnType("uniqueidentifier") + .HasColumnName("entra_id_object_id"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("first_name"); + + b.PrimitiveCollection("Interests") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("interests"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("JobTitle") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("job_title"); + + b.Property("KnowledgeLevel") + .HasColumnType("int") + .HasColumnName("knowledge_level"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("last_name"); + + b.Property("LocalePreference") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale_preference"); + + b.Property("LockoutEnabled") + .HasColumnType("bit") + .HasColumnName("lockout_enabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset") + .HasColumnName("lockout_end"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("normalized_email"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("normalized_user_name"); + + b.Property("OrganizationName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("organization_name"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)") + .HasColumnName("password_hash"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)") + .HasColumnName("phone_number"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasColumnName("phone_number_confirmed"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)") + .HasColumnName("security_stamp"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit") + .HasColumnName("two_factor_enabled"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_asp_net_users"); + + b.HasIndex("CountryCodeId") + .HasDatabaseName("ix_users_country_code_id"); + + b.HasIndex("CountryId") + .HasDatabaseName("ix_users_country_id"); + + b.HasIndex("EntraIdObjectId") + .IsUnique() + .HasDatabaseName("ix_asp_net_users_entra_id_object_id") + .HasFilter("[entra_id_object_id] IS NOT NULL"); + + b.HasIndex("NormalizedEmail") + .IsUnique() + .HasDatabaseName("ix_users_normalized_email_unique") + .HasFilter("[normalized_email] IS NOT NULL"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[normalized_user_name] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.InteractiveCity.CityScenario", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CityType") + .HasColumnType("int") + .HasColumnName("city_type"); + + b.Property("ConfigurationJson") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("configuration_json"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("TargetYear") + .HasColumnType("int") + .HasColumnName("target_year"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_city_scenarios"); + + b.HasIndex("UserId", "LastModifiedOn") + .HasDatabaseName("ix_city_scenario_user_modified"); + + b.ToTable("city_scenarios", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.InteractiveCity.CityScenarioResult", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ComputedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("computed_at"); + + b.Property("ComputedCarbonNeutralityYear") + .HasColumnType("int") + .HasColumnName("computed_carbon_neutrality_year"); + + b.Property("ComputedTotalCostUsd") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasColumnName("computed_total_cost_usd"); + + b.Property("EngineVersion") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("engine_version"); + + b.Property("ScenarioId") + .HasColumnType("uniqueidentifier") + .HasColumnName("scenario_id"); + + b.HasKey("Id") + .HasName("pk_city_scenario_results"); + + b.HasIndex("ScenarioId", "ComputedAt") + .HasDatabaseName("ix_city_result_scenario_at"); + + b.ToTable("city_scenario_results", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.InteractiveCity.CityTechnology", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CarbonImpactKgPerYear") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasColumnName("carbon_impact_kg_per_year"); + + b.Property("CategoryAr") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("category_ar"); + + b.Property("CategoryEn") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("category_en"); + + b.Property("CostUsd") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasColumnName("cost_usd"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IconUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("icon_url"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.HasKey("Id") + .HasName("pk_city_technologies"); + + b.HasIndex("IsActive") + .HasDatabaseName("ix_city_tech_is_active"); + + b.ToTable("city_technologies", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMap", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("slug"); + + b.HasKey("Id") + .HasName("pk_knowledge_maps"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_knowledge_map_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("knowledge_maps", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMapAssociation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssociatedId") + .HasColumnType("uniqueidentifier") + .HasColumnName("associated_id"); + + b.Property("AssociatedType") + .HasColumnType("int") + .HasColumnName("associated_type"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("node_id"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_knowledge_map_associations"); + + b.HasIndex("NodeId", "AssociatedType", "AssociatedId") + .IsUnique() + .HasDatabaseName("ux_km_assoc_node_type_id"); + + b.ToTable("knowledge_map_associations", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMapEdge", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FromNodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("from_node_id"); + + b.Property("MapId") + .HasColumnType("uniqueidentifier") + .HasColumnName("map_id"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("RelationshipType") + .HasColumnType("int") + .HasColumnName("relationship_type"); + + b.Property("ToNodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("to_node_id"); + + b.HasKey("Id") + .HasName("pk_knowledge_map_edges"); + + b.HasIndex("FromNodeId") + .HasDatabaseName("ix_km_edge_from_node"); + + b.HasIndex("ToNodeId") + .HasDatabaseName("ix_km_edge_to_node"); + + b.HasIndex("MapId", "FromNodeId", "ToNodeId", "RelationshipType") + .IsUnique() + .HasDatabaseName("ux_km_edge_map_from_to_relation"); + + b.ToTable("knowledge_map_edges", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMapNode", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("DescriptionAr") + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IconUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("icon_url"); + + b.Property("LayoutX") + .HasColumnType("float") + .HasColumnName("layout_x"); + + b.Property("LayoutY") + .HasColumnType("float") + .HasColumnName("layout_y"); + + b.Property("MapId") + .HasColumnType("uniqueidentifier") + .HasColumnName("map_id"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("NodeType") + .HasColumnType("int") + .HasColumnName("node_type"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_knowledge_map_nodes"); + + b.HasIndex("MapId", "OrderIndex") + .HasDatabaseName("ix_km_node_map_order"); + + b.ToTable("knowledge_map_nodes", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Lookups.CountryCode", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DialCode") + .IsRequired() + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("dial_code"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.HasKey("Id") + .HasName("pk_country_codes"); + + b.HasIndex("DialCode") + .HasDatabaseName("ix_country_code_dial_code"); + + b.ToTable("country_codes", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Media.MediaFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AltTextAr") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("alt_text_ar"); + + b.Property("AltTextEn") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("alt_text_en"); + + b.Property("DescriptionAr") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_en"); + + b.Property("MimeType") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("mime_type"); + + b.Property("OriginalFileName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("original_file_name"); + + b.Property("SizeBytes") + .HasColumnType("bigint") + .HasColumnName("size_bytes"); + + b.Property("StorageKey") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("storage_key"); + + b.Property("TitleAr") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("title_en"); + + b.Property("UploadedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("uploaded_by_id"); + + b.Property("UploadedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("uploaded_on"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_media_files"); + + b.ToTable("media_files", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.NotificationLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AttemptCount") + .HasColumnType("int") + .HasColumnName("attempt_count"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("correlation_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("Error") + .HasColumnType("nvarchar(max)") + .HasColumnName("error"); + + b.Property("FailedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("failed_on"); + + b.Property("PayloadJson") + .HasColumnType("nvarchar(max)") + .HasColumnName("payload_json"); + + b.Property("ProviderMessageId") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("provider_message_id"); + + b.Property("RecipientUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("recipient_user_id"); + + b.Property("SentOn") + .HasColumnType("datetimeoffset") + .HasColumnName("sent_on"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("TemplateCode") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("template_code"); + + b.Property("TemplateId") + .HasColumnType("uniqueidentifier") + .HasColumnName("template_id"); + + b.HasKey("Id") + .HasName("pk_notification_logs"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("ix_notification_log_correlation_id"); + + b.HasIndex("TemplateCode", "Channel") + .HasDatabaseName("ix_notification_log_template_channel"); + + b.HasIndex("RecipientUserId", "Status", "CreatedOn") + .HasDatabaseName("ix_notification_log_recipient_status_created"); + + b.ToTable("notification_logs", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.NotificationTemplate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("BodyAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("body_ar"); + + b.Property("BodyEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("body_en"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("code"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("SubjectAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("subject_ar"); + + b.Property("SubjectEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("subject_en"); + + b.Property("VariableSchemaJson") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("variable_schema_json"); + + b.HasKey("Id") + .HasName("pk_notification_templates"); + + b.HasIndex("Code", "Channel") + .IsUnique() + .HasDatabaseName("ux_notification_template_code_channel"); + + b.ToTable("notification_templates", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.UserNotification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("ReadOn") + .HasColumnType("datetimeoffset") + .HasColumnName("read_on"); + + b.Property("RenderedBody") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("rendered_body"); + + b.Property("RenderedLocale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("rendered_locale"); + + b.Property("RenderedSubjectAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("rendered_subject_ar"); + + b.Property("RenderedSubjectEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("rendered_subject_en"); + + b.Property("SentOn") + .HasColumnType("datetimeoffset") + .HasColumnName("sent_on"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("TemplateId") + .HasColumnType("uniqueidentifier") + .HasColumnName("template_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_user_notifications"); + + b.HasIndex("UserId", "Status") + .HasDatabaseName("ix_user_notification_user_status"); + + b.ToTable("user_notifications", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.UserNotificationSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("EventCode") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("event_code"); + + b.Property("IsEnabled") + .HasColumnType("bit") + .HasColumnName("is_enabled"); + + b.Property("UpdatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("updated_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_user_notification_settings"); + + b.HasIndex("UserId", "Channel", "EventCode") + .IsUnique() + .HasDatabaseName("ux_user_notification_settings_user_channel_event") + .HasFilter("[event_code] IS NOT NULL"); + + b.ToTable("user_notification_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.AboutSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("HowToUseVideoUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("how_to_use_video_url"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.HasKey("Id") + .HasName("pk_about_settings"); + + b.ToTable("about_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.GlossaryEntry", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AboutSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("about_settings_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_glossary_entries"); + + b.HasIndex("AboutSettingsId") + .HasDatabaseName("ix_glossary_entries_about_settings_id"); + + b.ToTable("glossary_entries", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageCountry", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("HomepageSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("homepage_settings_id"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_homepage_countries"); + + b.HasIndex("HomepageSettingsId", "CountryId") + .IsUnique() + .HasDatabaseName("ix_homepage_country_settings_country"); + + b.ToTable("homepage_countries", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CceConceptsAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("cce_concepts_ar"); + + b.Property("CceConceptsEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("cce_concepts_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("VideoUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("video_url"); + + b.HasKey("Id") + .HasName("pk_homepage_settings"); + + b.ToTable("homepage_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.KnowledgePartner", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AboutSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("about_settings_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LogoUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("logo_url"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("WebsiteUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("website_url"); + + b.HasKey("Id") + .HasName("pk_knowledge_partners"); + + b.HasIndex("AboutSettingsId") + .HasDatabaseName("ix_knowledge_partners_about_settings_id"); + + b.ToTable("knowledge_partners", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PoliciesSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.HasKey("Id") + .HasName("pk_policies_settings"); + + b.ToTable("policies_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PolicySection", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("PoliciesSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("policies_settings_id"); + + b.Property("Type") + .HasColumnType("int") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_policy_sections"); + + b.HasIndex("PoliciesSettingsId") + .HasDatabaseName("ix_policy_sections_policies_settings_id"); + + b.ToTable("policy_sections", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Surveys.SearchQueryLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("QueryText") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("query_text"); + + b.Property("ResponseTimeMs") + .HasColumnType("int") + .HasColumnName("response_time_ms"); + + b.Property("ResultsCount") + .HasColumnType("int") + .HasColumnName("results_count"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_search_query_logs"); + + b.HasIndex("SubmittedOn") + .HasDatabaseName("ix_search_query_log_submitted_on"); + + b.ToTable("search_query_logs", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Surveys.ServiceRating", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CommentAr") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("comment_ar"); + + b.Property("CommentEn") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("comment_en"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("Page") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("page"); + + b.Property("Rating") + .HasColumnType("int") + .HasColumnName("rating"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_service_ratings"); + + b.HasIndex("SubmittedOn") + .HasDatabaseName("ix_service_rating_submitted_on"); + + b.ToTable("service_ratings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Verification.OtpVerification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AttemptCount") + .HasColumnType("int") + .HasColumnName("attempt_count"); + + b.Property("CodeHash") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("code_hash"); + + b.Property("Contact") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("contact"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset") + .HasColumnName("expires_at"); + + b.Property("ExtraData") + .HasColumnType("nvarchar(max)") + .HasColumnName("extra_data"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsInvalidated") + .HasColumnType("bit") + .HasColumnName("is_invalidated"); + + b.Property("IsVerified") + .HasColumnType("bit") + .HasColumnName("is_verified"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LastSentAt") + .HasColumnType("datetimeoffset") + .HasColumnName("last_sent_at"); + + b.Property("TypeId") + .HasColumnType("int") + .HasColumnName("type_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_otp_verifications"); + + b.HasIndex("Contact", "TypeId") + .HasDatabaseName("ix_otp_verifications_contact_type_id"); + + b.HasIndex("UserId", "Contact", "TypeId") + .HasDatabaseName("ix_otp_verifications_user_contact_type"); + + b.ToTable("otp_verifications", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Verification.UserVerification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Contact") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("contact"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsVerified") + .HasColumnType("bit") + .HasColumnName("is_verified"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("TypeId") + .HasColumnType("int") + .HasColumnName("type_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.Property("VerifiedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("verified_at"); + + b.HasKey("Id") + .HasName("pk_user_verifications"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_user_verifications_user_id"); + + b.HasIndex("Contact", "TypeId") + .IsUnique() + .HasDatabaseName("ix_user_verifications_contact_type_id"); + + b.ToTable("user_verifications", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_value"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier") + .HasColumnName("role_id"); + + b.HasKey("Id") + .HasName("pk_asp_net_role_claims"); + + b.HasIndex("RoleId") + .HasDatabaseName("ix_asp_net_role_claims_role_id"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_value"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_asp_net_user_claims"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_asp_net_user_claims_user_id"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)") + .HasColumnName("login_provider"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)") + .HasColumnName("provider_key"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)") + .HasColumnName("provider_display_name"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("LoginProvider", "ProviderKey") + .HasName("pk_asp_net_user_logins"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_asp_net_user_logins_user_id"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier") + .HasColumnName("role_id"); + + b.HasKey("UserId", "RoleId") + .HasName("pk_asp_net_user_roles"); + + b.HasIndex("RoleId") + .HasDatabaseName("ix_asp_net_user_roles_role_id"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)") + .HasColumnName("login_provider"); + + b.Property("Name") + .HasColumnType("nvarchar(450)") + .HasColumnName("name"); + + b.Property("Value") + .HasColumnType("nvarchar(max)") + .HasColumnName("value"); + + b.HasKey("UserId", "LoginProvider", "Name") + .HasName("pk_asp_net_user_tokens"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.ResourceCountry", b => + { + b.HasOne("CCE.Domain.Content.Resource", null) + .WithMany("Countries") + .HasForeignKey("ResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_resource_country_resources_resource_id"); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRequestAttachment", b => + { + b.HasOne("CCE.Domain.Identity.ExpertRegistrationRequest", null) + .WithMany("Attachments") + .HasForeignKey("ExpertRequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_expert_request_attachments_expert_registration_requests_expert_request_id"); + }); + + modelBuilder.Entity("CCE.Domain.Identity.RefreshToken", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_refresh_tokens_asp_net_users_user_id"); + }); + + modelBuilder.Entity("CCE.Domain.Lookups.CountryCode", b => + { + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Name", b1 => + { + b1.Property("CountryCodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b1.HasKey("CountryCodeId"); + + b1.ToTable("country_codes"); + + b1.WithOwner() + .HasForeignKey("CountryCodeId") + .HasConstraintName("fk_country_codes_country_codes_id"); + }); + + b.Navigation("Name") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.AboutSettings", b => + { + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Description", b1 => + { + b1.Property("AboutSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_en"); + + b1.HasKey("AboutSettingsId"); + + b1.ToTable("about_settings"); + + b1.WithOwner() + .HasForeignKey("AboutSettingsId") + .HasConstraintName("fk_about_settings_about_settings_id"); + }); + + b.Navigation("Description") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.GlossaryEntry", b => + { + b.HasOne("CCE.Domain.PlatformSettings.AboutSettings", null) + .WithMany("GlossaryEntries") + .HasForeignKey("AboutSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_glossary_entries_about_settings_about_settings_id"); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Definition", b1 => + { + b1.Property("GlossaryEntryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("definition_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("definition_en"); + + b1.HasKey("GlossaryEntryId"); + + b1.ToTable("glossary_entries"); + + b1.WithOwner() + .HasForeignKey("GlossaryEntryId") + .HasConstraintName("fk_glossary_entries_glossary_entries_id"); + }); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Term", b1 => + { + b1.Property("GlossaryEntryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("term_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("term_en"); + + b1.HasKey("GlossaryEntryId"); + + b1.ToTable("glossary_entries"); + + b1.WithOwner() + .HasForeignKey("GlossaryEntryId") + .HasConstraintName("fk_glossary_entries_glossary_entries_id"); + }); + + b.Navigation("Definition") + .IsRequired(); + + b.Navigation("Term") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageCountry", b => + { + b.HasOne("CCE.Domain.PlatformSettings.HomepageSettings", null) + .WithMany("Countries") + .HasForeignKey("HomepageSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_homepage_countries_homepage_settings_homepage_settings_id"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageSettings", b => + { + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Objective", b1 => + { + b1.Property("HomepageSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("objective_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("objective_en"); + + b1.HasKey("HomepageSettingsId"); + + b1.ToTable("homepage_settings"); + + b1.WithOwner() + .HasForeignKey("HomepageSettingsId") + .HasConstraintName("fk_homepage_settings_homepage_settings_id"); + }); + + b.Navigation("Objective") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.KnowledgePartner", b => + { + b.HasOne("CCE.Domain.PlatformSettings.AboutSettings", null) + .WithMany("KnowledgePartners") + .HasForeignKey("AboutSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_knowledge_partners_about_settings_about_settings_id"); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Description", b1 => + { + b1.Property("KnowledgePartnerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_en"); + + b1.HasKey("KnowledgePartnerId"); + + b1.ToTable("knowledge_partners"); + + b1.WithOwner() + .HasForeignKey("KnowledgePartnerId") + .HasConstraintName("fk_knowledge_partners_knowledge_partners_id"); + }); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Name", b1 => + { + b1.Property("KnowledgePartnerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("name_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("name_en"); + + b1.HasKey("KnowledgePartnerId"); + + b1.ToTable("knowledge_partners"); + + b1.WithOwner() + .HasForeignKey("KnowledgePartnerId") + .HasConstraintName("fk_knowledge_partners_knowledge_partners_id"); + }); + + b.Navigation("Description"); + + b.Navigation("Name") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PolicySection", b => + { + b.HasOne("CCE.Domain.PlatformSettings.PoliciesSettings", null) + .WithMany("Sections") + .HasForeignKey("PoliciesSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_policy_sections_policies_settings_policies_settings_id"); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Content", b1 => + { + b1.Property("PolicySectionId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b1.Property("En") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b1.HasKey("PolicySectionId"); + + b1.ToTable("policy_sections"); + + b1.WithOwner() + .HasForeignKey("PolicySectionId") + .HasConstraintName("fk_policy_sections_policy_sections_id"); + }); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Title", b1 => + { + b1.Property("PolicySectionId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("title_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("title_en"); + + b1.HasKey("PolicySectionId"); + + b1.ToTable("policy_sections"); + + b1.WithOwner() + .HasForeignKey("PolicySectionId") + .HasConstraintName("fk_policy_sections_policy_sections_id"); + }); + + b.Navigation("Content") + .IsRequired(); + + b.Navigation("Title") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.Verification.UserVerification", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .HasConstraintName("fk_user_verifications_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("CCE.Domain.Identity.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_role_claims_asp_net_roles_role_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_claims_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_logins_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("CCE.Domain.Identity.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_roles_asp_net_roles_role_id"); + + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_roles_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_tokens_asp_net_users_user_id"); + }); + + modelBuilder.Entity("CCE.Domain.Content.Resource", b => + { + b.Navigation("Countries"); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRegistrationRequest", b => + { + b.Navigation("Attachments"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.AboutSettings", b => + { + b.Navigation("GlossaryEntries"); + + b.Navigation("KnowledgePartners"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageSettings", b => + { + b.Navigation("Countries"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PoliciesSettings", b => + { + b.Navigation("Sections"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.cs b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.cs new file mode 100644 index 00000000..9e35b546 --- /dev/null +++ b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531170325_ExpandResourceTypeAndAddCountries.cs @@ -0,0 +1,54 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace CCE.Infrastructure.Persistence.Migrations +{ + /// + public partial class ExpandResourceTypeAndAddCountries : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "ix_resource_country_id", + table: "resources"); + + migrationBuilder.CreateTable( + name: "resource_country", + columns: table => new + { + resource_id = table.Column(type: "uniqueidentifier", nullable: false), + country_id = table.Column(type: "uniqueidentifier", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_resource_country", x => new { x.resource_id, x.country_id }); + table.ForeignKey( + name: "fk_resource_country_resources_resource_id", + column: x => x.resource_id, + principalTable: "resources", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "ix_resource_country_country_id", + table: "resource_country", + column: "country_id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "resource_country"); + + migrationBuilder.CreateIndex( + name: "ix_resource_country_id", + table: "resources", + column: "country_id"); + } + } +} diff --git a/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.Designer.cs b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.Designer.cs new file mode 100644 index 00000000..1396ba2d --- /dev/null +++ b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.Designer.cs @@ -0,0 +1,3955 @@ +// +using System; +using CCE.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace CCE.Infrastructure.Persistence.Migrations +{ + [DbContext(typeof(CceDbContext))] + [Migration("20260531210555_AddTopicIdToNewsAndEvents")] + partial class AddTopicIdToNewsAndEvents + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("CCE.Domain.Audit.AuditEvent", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Action") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("action"); + + b.Property("Actor") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("actor"); + + b.Property("CorrelationId") + .HasColumnType("uniqueidentifier") + .HasColumnName("correlation_id"); + + b.Property("Diff") + .HasColumnType("nvarchar(max)") + .HasColumnName("diff"); + + b.Property("OccurredOn") + .HasColumnType("datetimeoffset") + .HasColumnName("occurred_on"); + + b.Property("Resource") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("resource"); + + b.HasKey("Id") + .HasName("pk_audit_events"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("ix_audit_events_correlation_id"); + + b.HasIndex("Actor", "OccurredOn") + .HasDatabaseName("ix_audit_events_actor_occurred_on"); + + b.ToTable("audit_events", null, t => + { + t.HasTrigger("trg_audit_events_no_update_delete"); + }); + + b.HasAnnotation("SqlServer:UseSqlOutputClause", false); + }); + + modelBuilder.Entity("CCE.Domain.Community.Post", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AnsweredReplyId") + .HasColumnType("uniqueidentifier") + .HasColumnName("answered_reply_id"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("author_id"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(8000) + .HasColumnType("nvarchar(max)") + .HasColumnName("content"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsAnswerable") + .HasColumnType("bit") + .HasColumnName("is_answerable"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + + b.HasKey("Id") + .HasName("pk_posts"); + + b.HasIndex("TopicId") + .HasDatabaseName("ix_post_topic_id"); + + b.HasIndex("AuthorId", "CreatedOn") + .HasDatabaseName("ix_post_author_created"); + + b.ToTable("posts", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.PostFollow", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FollowedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("followed_on"); + + b.Property("PostId") + .HasColumnType("uniqueidentifier") + .HasColumnName("post_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_post_follows"); + + b.HasIndex("PostId", "UserId") + .IsUnique() + .HasDatabaseName("ux_post_follow_post_user"); + + b.ToTable("post_follows", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.PostRating", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("PostId") + .HasColumnType("uniqueidentifier") + .HasColumnName("post_id"); + + b.Property("RatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("rated_on"); + + b.Property("Stars") + .HasColumnType("int") + .HasColumnName("stars"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_post_ratings"); + + b.HasIndex("PostId", "UserId") + .IsUnique() + .HasDatabaseName("ux_post_rating_post_user"); + + b.ToTable("post_ratings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.PostReply", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("author_id"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(8000) + .HasColumnType("nvarchar(max)") + .HasColumnName("content"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsByExpert") + .HasColumnType("bit") + .HasColumnName("is_by_expert"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("ParentReplyId") + .HasColumnType("uniqueidentifier") + .HasColumnName("parent_reply_id"); + + b.Property("PostId") + .HasColumnType("uniqueidentifier") + .HasColumnName("post_id"); + + b.HasKey("Id") + .HasName("pk_post_replies"); + + b.HasIndex("ParentReplyId") + .HasDatabaseName("ix_post_reply_parent_id"); + + b.HasIndex("PostId") + .HasDatabaseName("ix_post_reply_post_id"); + + b.ToTable("post_replies", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.Topic", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IconUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("icon_url"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasColumnName("parent_id"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("slug"); + + b.HasKey("Id") + .HasName("pk_topics"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_topic_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("topics", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.TopicFollow", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FollowedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("followed_on"); + + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_topic_follows"); + + b.HasIndex("TopicId", "UserId") + .IsUnique() + .HasDatabaseName("ux_topic_follow_topic_user"); + + b.ToTable("topic_follows", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Community.UserFollow", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FollowedId") + .HasColumnType("uniqueidentifier") + .HasColumnName("followed_id"); + + b.Property("FollowedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("followed_on"); + + b.Property("FollowerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("follower_id"); + + b.HasKey("Id") + .HasName("pk_user_follows"); + + b.HasIndex("FollowerId", "FollowedId") + .IsUnique() + .HasDatabaseName("ux_user_follow_follower_followed"); + + b.ToTable("user_follows", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.AssetFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("MimeType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("mime_type"); + + b.Property("OriginalFileName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("original_file_name"); + + b.Property("ScannedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("scanned_on"); + + b.Property("SizeBytes") + .HasColumnType("bigint") + .HasColumnName("size_bytes"); + + b.Property("UploadedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("uploaded_by_id"); + + b.Property("UploadedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("uploaded_on"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("url"); + + b.Property("VirusScanStatus") + .HasColumnType("int") + .HasColumnName("virus_scan_status"); + + b.HasKey("Id") + .HasName("pk_asset_files"); + + b.HasIndex("VirusScanStatus") + .HasDatabaseName("ix_asset_file_scan_status"); + + b.ToTable("asset_files", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.Event", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("EndsOn") + .HasColumnType("datetimeoffset") + .HasColumnName("ends_on"); + + b.Property("FeaturedImageUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("featured_image_url"); + + b.Property("ICalUid") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("i_cal_uid"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LocationAr") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("location_ar"); + + b.Property("LocationEn") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("location_en"); + + b.Property("OnlineMeetingUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("online_meeting_url"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("StartsOn") + .HasColumnType("datetimeoffset") + .HasColumnName("starts_on"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_en"); + + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + + b.HasKey("Id") + .HasName("pk_events"); + + b.HasIndex("ICalUid") + .IsUnique() + .HasDatabaseName("ux_event_ical_uid"); + + b.HasIndex("StartsOn") + .HasDatabaseName("ix_event_starts_on"); + + b.HasIndex("TopicId") + .HasDatabaseName("ix_event_topic_id"); + + b.ToTable("events", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.HomepageSection", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContentAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b.Property("ContentEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("SectionType") + .HasColumnType("int") + .HasColumnName("section_type"); + + b.HasKey("Id") + .HasName("pk_homepage_sections"); + + b.HasIndex("IsActive", "OrderIndex") + .HasDatabaseName("ix_homepage_section_active_order"); + + b.ToTable("homepage_sections", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.News", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("author_id"); + + b.Property("ContentAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b.Property("ContentEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("FeaturedImageUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("featured_image_url"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsFeatured") + .HasColumnType("bit") + .HasColumnName("is_featured"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("PublishedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("published_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("slug"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_en"); + + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + + b.HasKey("Id") + .HasName("pk_news"); + + b.HasIndex("PublishedOn") + .HasDatabaseName("ix_news_published_on"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_news_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.HasIndex("TopicId") + .HasDatabaseName("ix_news_topic_id"); + + b.ToTable("news", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.NewsletterSubscription", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ConfirmationToken") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("confirmation_token"); + + b.Property("ConfirmedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("confirmed_on"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(320) + .HasColumnType("nvarchar(320)") + .HasColumnName("email"); + + b.Property("IsConfirmed") + .HasColumnType("bit") + .HasColumnName("is_confirmed"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LocalePreference") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale_preference"); + + b.Property("UnsubscribedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("unsubscribed_on"); + + b.HasKey("Id") + .HasName("pk_newsletter_subscriptions"); + + b.HasIndex("ConfirmationToken") + .HasDatabaseName("ix_newsletter_token"); + + b.HasIndex("Email") + .IsUnique() + .HasDatabaseName("ux_newsletter_email"); + + b.ToTable("newsletter_subscriptions", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.Page", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContentAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b.Property("ContentEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("PageType") + .HasColumnType("int") + .HasColumnName("page_type"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("slug"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("title_en"); + + b.HasKey("Id") + .HasName("pk_pages"); + + b.HasIndex("PageType", "Slug") + .IsUnique() + .HasDatabaseName("ux_page_type_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("pages", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.Resource", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssetFileId") + .HasColumnType("uniqueidentifier") + .HasColumnName("asset_file_id"); + + b.Property("CategoryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("category_id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("PublishedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("published_on"); + + b.Property("ResourceType") + .HasColumnType("int") + .HasColumnName("resource_type"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("TitleAr") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("title_en"); + + b.Property("UploadedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("uploaded_by_id"); + + b.Property("ViewCount") + .HasColumnType("bigint") + .HasColumnName("view_count"); + + b.HasKey("Id") + .HasName("pk_resources"); + + b.HasIndex("AssetFileId") + .HasDatabaseName("ix_resource_asset_file_id"); + + b.HasIndex("CategoryId", "PublishedOn") + .HasDatabaseName("ix_resource_category_published"); + + b.ToTable("resources", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.ResourceCategory", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier") + .HasColumnName("parent_id"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("slug"); + + b.HasKey("Id") + .HasName("pk_resource_categories"); + + b.HasIndex("ParentId") + .HasDatabaseName("ix_resource_category_parent_id"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_resource_category_slug"); + + b.ToTable("resource_categories", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.ResourceCountry", b => + { + b.Property("ResourceId") + .HasColumnType("uniqueidentifier") + .HasColumnName("resource_id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.HasKey("ResourceId", "CountryId") + .HasName("pk_resource_country"); + + b.HasIndex("CountryId") + .HasDatabaseName("ix_resource_country_country_id"); + + b.ToTable("resource_country", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.Country", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("FlagUrl") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("flag_url"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsoAlpha2") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("iso_alpha2"); + + b.Property("IsoAlpha3") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("nvarchar(3)") + .HasColumnName("iso_alpha3"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LatestKapsarcSnapshotId") + .HasColumnType("uniqueidentifier") + .HasColumnName("latest_kapsarc_snapshot_id"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("RegionAr") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("region_ar"); + + b.Property("RegionEn") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("region_en"); + + b.HasKey("Id") + .HasName("pk_countries"); + + b.HasIndex("IsoAlpha2") + .HasDatabaseName("ix_country_iso_alpha2"); + + b.HasIndex("IsoAlpha3") + .IsUnique() + .HasDatabaseName("ux_country_iso_alpha3_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("countries", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.CountryKapsarcSnapshot", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Classification") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("classification"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("PerformanceScore") + .HasPrecision(5, 2) + .HasColumnType("decimal(5,2)") + .HasColumnName("performance_score"); + + b.Property("SnapshotTakenOn") + .HasColumnType("datetimeoffset") + .HasColumnName("snapshot_taken_on"); + + b.Property("SourceVersion") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)") + .HasColumnName("source_version"); + + b.Property("TotalIndex") + .HasPrecision(5, 2) + .HasColumnType("decimal(5,2)") + .HasColumnName("total_index"); + + b.HasKey("Id") + .HasName("pk_country_kapsarc_snapshots"); + + b.HasIndex("CountryId", "SnapshotTakenOn") + .HasDatabaseName("ix_kapsarc_snapshot_country_taken"); + + b.ToTable("country_kapsarc_snapshots", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.CountryProfile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContactInfoAr") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("contact_info_ar"); + + b.Property("ContactInfoEn") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("contact_info_en"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("KeyInitiativesAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("key_initiatives_ar"); + + b.Property("KeyInitiativesEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("key_initiatives_en"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.HasKey("Id") + .HasName("pk_country_profiles"); + + b.HasIndex("CountryId") + .IsUnique() + .HasDatabaseName("ux_country_profile_country_id"); + + b.ToTable("country_profiles", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Country.CountryResourceRequest", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AdminNotesAr") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("admin_notes_ar"); + + b.Property("AdminNotesEn") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("admin_notes_en"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("ProcessedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("processed_by_id"); + + b.Property("ProcessedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("processed_on"); + + b.Property("ProposedAssetFileId") + .HasColumnType("uniqueidentifier") + .HasColumnName("proposed_asset_file_id"); + + b.Property("ProposedDescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("proposed_description_ar"); + + b.Property("ProposedDescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("proposed_description_en"); + + b.Property("ProposedResourceType") + .HasColumnType("int") + .HasColumnName("proposed_resource_type"); + + b.Property("ProposedTitleAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("proposed_title_ar"); + + b.Property("ProposedTitleEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("proposed_title_en"); + + b.Property("RequestedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("requested_by_id"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.HasKey("Id") + .HasName("pk_country_resource_requests"); + + b.HasIndex("CountryId", "Status") + .HasDatabaseName("ix_country_request_country_status"); + + b.ToTable("country_resource_requests", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Evaluation.ServiceEvaluation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ContentSuitability") + .HasColumnType("int") + .HasColumnName("content_suitability"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("EaseOfUse") + .HasColumnType("int") + .HasColumnName("ease_of_use"); + + b.Property("Feedback") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("feedback"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OverallSatisfaction") + .HasColumnType("int") + .HasColumnName("overall_satisfaction"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_service_evaluations"); + + b.HasIndex("CreatedOn") + .HasDatabaseName("ix_service_evaluation_created_on"); + + b.ToTable("service_evaluations", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertProfile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AcademicTitleAr") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("academic_title_ar"); + + b.Property("AcademicTitleEn") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("academic_title_en"); + + b.Property("ApprovedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("approved_by_id"); + + b.Property("ApprovedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("approved_on"); + + b.Property("BioAr") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("bio_ar"); + + b.Property("BioEn") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("bio_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.PrimitiveCollection("ExpertiseTags") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("expertise_tags"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_expert_profiles"); + + b.HasIndex("UserId") + .IsUnique() + .HasDatabaseName("ux_expert_profile_active_user") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("expert_profiles", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRegistrationRequest", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("ProcessedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("processed_by_id"); + + b.Property("ProcessedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("processed_on"); + + b.Property("RejectionReasonAr") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("rejection_reason_ar"); + + b.Property("RejectionReasonEn") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("rejection_reason_en"); + + b.Property("RequestedBioAr") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("requested_bio_ar"); + + b.Property("RequestedBioEn") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("requested_bio_en"); + + b.Property("RequestedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("requested_by_id"); + + b.PrimitiveCollection("RequestedTags") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("requested_tags"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.HasKey("Id") + .HasName("pk_expert_registration_requests"); + + b.HasIndex("RequestedById") + .HasDatabaseName("ix_expert_request_requested_by"); + + b.HasIndex("Status") + .HasDatabaseName("ix_expert_request_status"); + + b.ToTable("expert_registration_requests", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRequestAttachment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssetFileId") + .HasColumnType("uniqueidentifier") + .HasColumnName("asset_file_id"); + + b.Property("AttachmentType") + .HasColumnType("int") + .HasColumnName("attachment_type"); + + b.Property("ExpertRequestId") + .HasColumnType("uniqueidentifier") + .HasColumnName("expert_request_id"); + + b.Property("UploadedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("uploaded_at"); + + b.HasKey("Id") + .HasName("pk_expert_request_attachments"); + + b.HasIndex("ExpertRequestId") + .HasDatabaseName("ix_expert_request_attachments_expert_request_id"); + + b.ToTable("expert_request_attachments", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.RefreshToken", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedAtUtc") + .HasColumnType("datetimeoffset") + .HasColumnName("created_at_utc"); + + b.Property("CreatedByIp") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("created_by_ip"); + + b.Property("ExpiresAtUtc") + .HasColumnType("datetimeoffset") + .HasColumnName("expires_at_utc"); + + b.Property("ReplacedByTokenHash") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("replaced_by_token_hash"); + + b.Property("RevokedAtUtc") + .HasColumnType("datetimeoffset") + .HasColumnName("revoked_at_utc"); + + b.Property("RevokedByIp") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("revoked_by_ip"); + + b.Property("TokenFamilyId") + .HasColumnType("uniqueidentifier") + .HasColumnName("token_family_id"); + + b.Property("TokenHash") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("token_hash"); + + b.Property("UserAgent") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("user_agent"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_refresh_tokens"); + + b.HasIndex("TokenFamilyId") + .HasDatabaseName("ix_refresh_tokens_token_family_id"); + + b.HasIndex("TokenHash") + .IsUnique() + .HasDatabaseName("ux_refresh_tokens_token_hash"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_refresh_tokens_user_id"); + + b.ToTable("refresh_tokens", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)") + .HasColumnName("concurrency_stamp"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("normalized_name"); + + b.HasKey("Id") + .HasName("pk_asp_net_roles"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[normalized_name] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.StateRepresentativeAssignment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssignedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("assigned_by_id"); + + b.Property("AssignedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("assigned_on"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RevokedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("revoked_by_id"); + + b.Property("RevokedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("revoked_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_state_representative_assignments"); + + b.HasIndex("CountryId") + .HasDatabaseName("ix_state_rep_country_id"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_state_rep_user_id"); + + b.HasIndex("UserId", "CountryId") + .IsUnique() + .HasDatabaseName("ux_state_rep_active_user_country") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("state_representative_assignments", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Identity.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AccessFailedCount") + .HasColumnType("int") + .HasColumnName("access_failed_count"); + + b.Property("AvatarUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("avatar_url"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)") + .HasColumnName("concurrency_stamp"); + + b.Property("CountryCodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_code_id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("email"); + + b.Property("EmailConfirmed") + .HasColumnType("bit") + .HasColumnName("email_confirmed"); + + b.Property("EntraIdObjectId") + .HasColumnType("uniqueidentifier") + .HasColumnName("entra_id_object_id"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("first_name"); + + b.PrimitiveCollection("Interests") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("interests"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("JobTitle") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("job_title"); + + b.Property("KnowledgeLevel") + .HasColumnType("int") + .HasColumnName("knowledge_level"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("last_name"); + + b.Property("LocalePreference") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale_preference"); + + b.Property("LockoutEnabled") + .HasColumnType("bit") + .HasColumnName("lockout_enabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset") + .HasColumnName("lockout_end"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("normalized_email"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("normalized_user_name"); + + b.Property("OrganizationName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("organization_name"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)") + .HasColumnName("password_hash"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)") + .HasColumnName("phone_number"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasColumnName("phone_number_confirmed"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)") + .HasColumnName("security_stamp"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit") + .HasColumnName("two_factor_enabled"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("pk_asp_net_users"); + + b.HasIndex("CountryCodeId") + .HasDatabaseName("ix_users_country_code_id"); + + b.HasIndex("CountryId") + .HasDatabaseName("ix_users_country_id"); + + b.HasIndex("EntraIdObjectId") + .IsUnique() + .HasDatabaseName("ix_asp_net_users_entra_id_object_id") + .HasFilter("[entra_id_object_id] IS NOT NULL"); + + b.HasIndex("NormalizedEmail") + .IsUnique() + .HasDatabaseName("ix_users_normalized_email_unique") + .HasFilter("[normalized_email] IS NOT NULL"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[normalized_user_name] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.InteractiveCity.CityScenario", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CityType") + .HasColumnType("int") + .HasColumnName("city_type"); + + b.Property("ConfigurationJson") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("configuration_json"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("TargetYear") + .HasColumnType("int") + .HasColumnName("target_year"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_city_scenarios"); + + b.HasIndex("UserId", "LastModifiedOn") + .HasDatabaseName("ix_city_scenario_user_modified"); + + b.ToTable("city_scenarios", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.InteractiveCity.CityScenarioResult", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ComputedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("computed_at"); + + b.Property("ComputedCarbonNeutralityYear") + .HasColumnType("int") + .HasColumnName("computed_carbon_neutrality_year"); + + b.Property("ComputedTotalCostUsd") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasColumnName("computed_total_cost_usd"); + + b.Property("EngineVersion") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("engine_version"); + + b.Property("ScenarioId") + .HasColumnType("uniqueidentifier") + .HasColumnName("scenario_id"); + + b.HasKey("Id") + .HasName("pk_city_scenario_results"); + + b.HasIndex("ScenarioId", "ComputedAt") + .HasDatabaseName("ix_city_result_scenario_at"); + + b.ToTable("city_scenario_results", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.InteractiveCity.CityTechnology", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CarbonImpactKgPerYear") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasColumnName("carbon_impact_kg_per_year"); + + b.Property("CategoryAr") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("category_ar"); + + b.Property("CategoryEn") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("category_en"); + + b.Property("CostUsd") + .HasPrecision(18, 2) + .HasColumnType("decimal(18,2)") + .HasColumnName("cost_usd"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IconUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("icon_url"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.HasKey("Id") + .HasName("pk_city_technologies"); + + b.HasIndex("IsActive") + .HasDatabaseName("ix_city_tech_is_active"); + + b.ToTable("city_technologies", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMap", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DescriptionAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("slug"); + + b.HasKey("Id") + .HasName("pk_knowledge_maps"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ux_knowledge_map_slug_active") + .HasFilter("[is_deleted] = 0"); + + b.ToTable("knowledge_maps", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMapAssociation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AssociatedId") + .HasColumnType("uniqueidentifier") + .HasColumnName("associated_id"); + + b.Property("AssociatedType") + .HasColumnType("int") + .HasColumnName("associated_type"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("node_id"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_knowledge_map_associations"); + + b.HasIndex("NodeId", "AssociatedType", "AssociatedId") + .IsUnique() + .HasDatabaseName("ux_km_assoc_node_type_id"); + + b.ToTable("knowledge_map_associations", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMapEdge", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("FromNodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("from_node_id"); + + b.Property("MapId") + .HasColumnType("uniqueidentifier") + .HasColumnName("map_id"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("RelationshipType") + .HasColumnType("int") + .HasColumnName("relationship_type"); + + b.Property("ToNodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("to_node_id"); + + b.HasKey("Id") + .HasName("pk_knowledge_map_edges"); + + b.HasIndex("FromNodeId") + .HasDatabaseName("ix_km_edge_from_node"); + + b.HasIndex("ToNodeId") + .HasDatabaseName("ix_km_edge_to_node"); + + b.HasIndex("MapId", "FromNodeId", "ToNodeId", "RelationshipType") + .IsUnique() + .HasDatabaseName("ux_km_edge_map_from_to_relation"); + + b.ToTable("knowledge_map_edges", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.KnowledgeMaps.KnowledgeMapNode", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("DescriptionAr") + .HasColumnType("nvarchar(max)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .HasColumnType("nvarchar(max)") + .HasColumnName("description_en"); + + b.Property("IconUrl") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("icon_url"); + + b.Property("LayoutX") + .HasColumnType("float") + .HasColumnName("layout_x"); + + b.Property("LayoutY") + .HasColumnType("float") + .HasColumnName("layout_y"); + + b.Property("MapId") + .HasColumnType("uniqueidentifier") + .HasColumnName("map_id"); + + b.Property("NameAr") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b.Property("NameEn") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b.Property("NodeType") + .HasColumnType("int") + .HasColumnName("node_type"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_knowledge_map_nodes"); + + b.HasIndex("MapId", "OrderIndex") + .HasDatabaseName("ix_km_node_map_order"); + + b.ToTable("knowledge_map_nodes", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Lookups.CountryCode", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("DialCode") + .IsRequired() + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("dial_code"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.HasKey("Id") + .HasName("pk_country_codes"); + + b.HasIndex("DialCode") + .HasDatabaseName("ix_country_code_dial_code"); + + b.ToTable("country_codes", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Media.MediaFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AltTextAr") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("alt_text_ar"); + + b.Property("AltTextEn") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("alt_text_en"); + + b.Property("DescriptionAr") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_ar"); + + b.Property("DescriptionEn") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_en"); + + b.Property("MimeType") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("mime_type"); + + b.Property("OriginalFileName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("original_file_name"); + + b.Property("SizeBytes") + .HasColumnType("bigint") + .HasColumnName("size_bytes"); + + b.Property("StorageKey") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("storage_key"); + + b.Property("TitleAr") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("title_ar"); + + b.Property("TitleEn") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("title_en"); + + b.Property("UploadedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("uploaded_by_id"); + + b.Property("UploadedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("uploaded_on"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_media_files"); + + b.ToTable("media_files", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.NotificationLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AttemptCount") + .HasColumnType("int") + .HasColumnName("attempt_count"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("correlation_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("Error") + .HasColumnType("nvarchar(max)") + .HasColumnName("error"); + + b.Property("FailedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("failed_on"); + + b.Property("PayloadJson") + .HasColumnType("nvarchar(max)") + .HasColumnName("payload_json"); + + b.Property("ProviderMessageId") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("provider_message_id"); + + b.Property("RecipientUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("recipient_user_id"); + + b.Property("SentOn") + .HasColumnType("datetimeoffset") + .HasColumnName("sent_on"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("TemplateCode") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("template_code"); + + b.Property("TemplateId") + .HasColumnType("uniqueidentifier") + .HasColumnName("template_id"); + + b.HasKey("Id") + .HasName("pk_notification_logs"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("ix_notification_log_correlation_id"); + + b.HasIndex("TemplateCode", "Channel") + .HasDatabaseName("ix_notification_log_template_channel"); + + b.HasIndex("RecipientUserId", "Status", "CreatedOn") + .HasDatabaseName("ix_notification_log_recipient_status_created"); + + b.ToTable("notification_logs", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.NotificationTemplate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("BodyAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("body_ar"); + + b.Property("BodyEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("body_en"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("code"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("is_active"); + + b.Property("SubjectAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("subject_ar"); + + b.Property("SubjectEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("subject_en"); + + b.Property("VariableSchemaJson") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("variable_schema_json"); + + b.HasKey("Id") + .HasName("pk_notification_templates"); + + b.HasIndex("Code", "Channel") + .IsUnique() + .HasDatabaseName("ux_notification_template_code_channel"); + + b.ToTable("notification_templates", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.UserNotification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("ReadOn") + .HasColumnType("datetimeoffset") + .HasColumnName("read_on"); + + b.Property("RenderedBody") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("rendered_body"); + + b.Property("RenderedLocale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("rendered_locale"); + + b.Property("RenderedSubjectAr") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("rendered_subject_ar"); + + b.Property("RenderedSubjectEn") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("rendered_subject_en"); + + b.Property("SentOn") + .HasColumnType("datetimeoffset") + .HasColumnName("sent_on"); + + b.Property("Status") + .HasColumnType("int") + .HasColumnName("status"); + + b.Property("TemplateId") + .HasColumnType("uniqueidentifier") + .HasColumnName("template_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_user_notifications"); + + b.HasIndex("UserId", "Status") + .HasDatabaseName("ix_user_notification_user_status"); + + b.ToTable("user_notifications", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Notifications.UserNotificationSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Channel") + .HasColumnType("int") + .HasColumnName("channel"); + + b.Property("EventCode") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("event_code"); + + b.Property("IsEnabled") + .HasColumnType("bit") + .HasColumnName("is_enabled"); + + b.Property("UpdatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("updated_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_user_notification_settings"); + + b.HasIndex("UserId", "Channel", "EventCode") + .IsUnique() + .HasDatabaseName("ux_user_notification_settings_user_channel_event") + .HasFilter("[event_code] IS NOT NULL"); + + b.ToTable("user_notification_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.AboutSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("HowToUseVideoUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("how_to_use_video_url"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.HasKey("Id") + .HasName("pk_about_settings"); + + b.ToTable("about_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.GlossaryEntry", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AboutSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("about_settings_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_glossary_entries"); + + b.HasIndex("AboutSettingsId") + .HasDatabaseName("ix_glossary_entries_about_settings_id"); + + b.ToTable("glossary_entries", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageCountry", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("HomepageSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("homepage_settings_id"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.HasKey("Id") + .HasName("pk_homepage_countries"); + + b.HasIndex("HomepageSettingsId", "CountryId") + .IsUnique() + .HasDatabaseName("ix_homepage_country_settings_country"); + + b.ToTable("homepage_countries", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CceConceptsAr") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("cce_concepts_ar"); + + b.Property("CceConceptsEn") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("cce_concepts_en"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.Property("VideoUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("video_url"); + + b.HasKey("Id") + .HasName("pk_homepage_settings"); + + b.ToTable("homepage_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.KnowledgePartner", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AboutSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("about_settings_id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LogoUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("logo_url"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("WebsiteUrl") + .HasColumnType("nvarchar(max)") + .HasColumnName("website_url"); + + b.HasKey("Id") + .HasName("pk_knowledge_partners"); + + b.HasIndex("AboutSettingsId") + .HasDatabaseName("ix_knowledge_partners_about_settings_id"); + + b.ToTable("knowledge_partners", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PoliciesSettings", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("RowVersion") + .IsConcurrencyToken() + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion") + .HasColumnName("row_version"); + + b.HasKey("Id") + .HasName("pk_policies_settings"); + + b.ToTable("policies_settings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PolicySection", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("OrderIndex") + .HasColumnType("int") + .HasColumnName("order_index"); + + b.Property("PoliciesSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("policies_settings_id"); + + b.Property("Type") + .HasColumnType("int") + .HasColumnName("type"); + + b.HasKey("Id") + .HasName("pk_policy_sections"); + + b.HasIndex("PoliciesSettingsId") + .HasDatabaseName("ix_policy_sections_policies_settings_id"); + + b.ToTable("policy_sections", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Surveys.SearchQueryLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("QueryText") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("query_text"); + + b.Property("ResponseTimeMs") + .HasColumnType("int") + .HasColumnName("response_time_ms"); + + b.Property("ResultsCount") + .HasColumnType("int") + .HasColumnName("results_count"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_search_query_logs"); + + b.HasIndex("SubmittedOn") + .HasDatabaseName("ix_search_query_log_submitted_on"); + + b.ToTable("search_query_logs", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Surveys.ServiceRating", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CommentAr") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("comment_ar"); + + b.Property("CommentEn") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("comment_en"); + + b.Property("Locale") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)") + .HasColumnName("locale"); + + b.Property("Page") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("page"); + + b.Property("Rating") + .HasColumnType("int") + .HasColumnName("rating"); + + b.Property("SubmittedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("submitted_on"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_service_ratings"); + + b.HasIndex("SubmittedOn") + .HasDatabaseName("ix_service_rating_submitted_on"); + + b.ToTable("service_ratings", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Verification.OtpVerification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AttemptCount") + .HasColumnType("int") + .HasColumnName("attempt_count"); + + b.Property("CodeHash") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("code_hash"); + + b.Property("Contact") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("contact"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("ExpiresAt") + .HasColumnType("datetimeoffset") + .HasColumnName("expires_at"); + + b.Property("ExtraData") + .HasColumnType("nvarchar(max)") + .HasColumnName("extra_data"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsInvalidated") + .HasColumnType("bit") + .HasColumnName("is_invalidated"); + + b.Property("IsVerified") + .HasColumnType("bit") + .HasColumnName("is_verified"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("LastSentAt") + .HasColumnType("datetimeoffset") + .HasColumnName("last_sent_at"); + + b.Property("TypeId") + .HasColumnType("int") + .HasColumnName("type_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_otp_verifications"); + + b.HasIndex("Contact", "TypeId") + .HasDatabaseName("ix_otp_verifications_contact_type_id"); + + b.HasIndex("UserId", "Contact", "TypeId") + .HasDatabaseName("ix_otp_verifications_user_contact_type"); + + b.ToTable("otp_verifications", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Verification.UserVerification", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Contact") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("contact"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("created_by_id"); + + b.Property("CreatedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("created_on"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("deleted_by_id"); + + b.Property("DeletedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("deleted_on"); + + b.Property("IsDeleted") + .HasColumnType("bit") + .HasColumnName("is_deleted"); + + b.Property("IsVerified") + .HasColumnType("bit") + .HasColumnName("is_verified"); + + b.Property("LastModifiedById") + .HasColumnType("uniqueidentifier") + .HasColumnName("last_modified_by_id"); + + b.Property("LastModifiedOn") + .HasColumnType("datetimeoffset") + .HasColumnName("last_modified_on"); + + b.Property("TypeId") + .HasColumnType("int") + .HasColumnName("type_id"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.Property("VerifiedAt") + .HasColumnType("datetimeoffset") + .HasColumnName("verified_at"); + + b.HasKey("Id") + .HasName("pk_user_verifications"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_user_verifications_user_id"); + + b.HasIndex("Contact", "TypeId") + .IsUnique() + .HasDatabaseName("ix_user_verifications_contact_type_id"); + + b.ToTable("user_verifications", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_value"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier") + .HasColumnName("role_id"); + + b.HasKey("Id") + .HasName("pk_asp_net_role_claims"); + + b.HasIndex("RoleId") + .HasDatabaseName("ix_asp_net_role_claims_role_id"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_type"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)") + .HasColumnName("claim_value"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("pk_asp_net_user_claims"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_asp_net_user_claims_user_id"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)") + .HasColumnName("login_provider"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)") + .HasColumnName("provider_key"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)") + .HasColumnName("provider_display_name"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("LoginProvider", "ProviderKey") + .HasName("pk_asp_net_user_logins"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_asp_net_user_logins_user_id"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier") + .HasColumnName("role_id"); + + b.HasKey("UserId", "RoleId") + .HasName("pk_asp_net_user_roles"); + + b.HasIndex("RoleId") + .HasDatabaseName("ix_asp_net_user_roles_role_id"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)") + .HasColumnName("login_provider"); + + b.Property("Name") + .HasColumnType("nvarchar(450)") + .HasColumnName("name"); + + b.Property("Value") + .HasColumnType("nvarchar(max)") + .HasColumnName("value"); + + b.HasKey("UserId", "LoginProvider", "Name") + .HasName("pk_asp_net_user_tokens"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("CCE.Domain.Content.ResourceCountry", b => + { + b.HasOne("CCE.Domain.Content.Resource", null) + .WithMany("Countries") + .HasForeignKey("ResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_resource_country_resources_resource_id"); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRequestAttachment", b => + { + b.HasOne("CCE.Domain.Identity.ExpertRegistrationRequest", null) + .WithMany("Attachments") + .HasForeignKey("ExpertRequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_expert_request_attachments_expert_registration_requests_expert_request_id"); + }); + + modelBuilder.Entity("CCE.Domain.Identity.RefreshToken", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_refresh_tokens_asp_net_users_user_id"); + }); + + modelBuilder.Entity("CCE.Domain.Lookups.CountryCode", b => + { + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Name", b1 => + { + b1.Property("CountryCodeId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("name_en"); + + b1.HasKey("CountryCodeId"); + + b1.ToTable("country_codes"); + + b1.WithOwner() + .HasForeignKey("CountryCodeId") + .HasConstraintName("fk_country_codes_country_codes_id"); + }); + + b.Navigation("Name") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.AboutSettings", b => + { + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Description", b1 => + { + b1.Property("AboutSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_en"); + + b1.HasKey("AboutSettingsId"); + + b1.ToTable("about_settings"); + + b1.WithOwner() + .HasForeignKey("AboutSettingsId") + .HasConstraintName("fk_about_settings_about_settings_id"); + }); + + b.Navigation("Description") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.GlossaryEntry", b => + { + b.HasOne("CCE.Domain.PlatformSettings.AboutSettings", null) + .WithMany("GlossaryEntries") + .HasForeignKey("AboutSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_glossary_entries_about_settings_about_settings_id"); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Definition", b1 => + { + b1.Property("GlossaryEntryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("definition_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("definition_en"); + + b1.HasKey("GlossaryEntryId"); + + b1.ToTable("glossary_entries"); + + b1.WithOwner() + .HasForeignKey("GlossaryEntryId") + .HasConstraintName("fk_glossary_entries_glossary_entries_id"); + }); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Term", b1 => + { + b1.Property("GlossaryEntryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("term_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("term_en"); + + b1.HasKey("GlossaryEntryId"); + + b1.ToTable("glossary_entries"); + + b1.WithOwner() + .HasForeignKey("GlossaryEntryId") + .HasConstraintName("fk_glossary_entries_glossary_entries_id"); + }); + + b.Navigation("Definition") + .IsRequired(); + + b.Navigation("Term") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageCountry", b => + { + b.HasOne("CCE.Domain.PlatformSettings.HomepageSettings", null) + .WithMany("Countries") + .HasForeignKey("HomepageSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_homepage_countries_homepage_settings_homepage_settings_id"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageSettings", b => + { + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Objective", b1 => + { + b1.Property("HomepageSettingsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("objective_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("objective_en"); + + b1.HasKey("HomepageSettingsId"); + + b1.ToTable("homepage_settings"); + + b1.WithOwner() + .HasForeignKey("HomepageSettingsId") + .HasConstraintName("fk_homepage_settings_homepage_settings_id"); + }); + + b.Navigation("Objective") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.KnowledgePartner", b => + { + b.HasOne("CCE.Domain.PlatformSettings.AboutSettings", null) + .WithMany("KnowledgePartners") + .HasForeignKey("AboutSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_knowledge_partners_about_settings_about_settings_id"); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Description", b1 => + { + b1.Property("KnowledgePartnerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("description_en"); + + b1.HasKey("KnowledgePartnerId"); + + b1.ToTable("knowledge_partners"); + + b1.WithOwner() + .HasForeignKey("KnowledgePartnerId") + .HasConstraintName("fk_knowledge_partners_knowledge_partners_id"); + }); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Name", b1 => + { + b1.Property("KnowledgePartnerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("name_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)") + .HasColumnName("name_en"); + + b1.HasKey("KnowledgePartnerId"); + + b1.ToTable("knowledge_partners"); + + b1.WithOwner() + .HasForeignKey("KnowledgePartnerId") + .HasConstraintName("fk_knowledge_partners_knowledge_partners_id"); + }); + + b.Navigation("Description"); + + b.Navigation("Name") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PolicySection", b => + { + b.HasOne("CCE.Domain.PlatformSettings.PoliciesSettings", null) + .WithMany("Sections") + .HasForeignKey("PoliciesSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_policy_sections_policies_settings_policies_settings_id"); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Content", b1 => + { + b1.Property("PolicySectionId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_ar"); + + b1.Property("En") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("content_en"); + + b1.HasKey("PolicySectionId"); + + b1.ToTable("policy_sections"); + + b1.WithOwner() + .HasForeignKey("PolicySectionId") + .HasConstraintName("fk_policy_sections_policy_sections_id"); + }); + + b.OwnsOne("CCE.Domain.PlatformSettings.ValueObjects.LocalizedText", "Title", b1 => + { + b1.Property("PolicySectionId") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b1.Property("Ar") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("title_ar"); + + b1.Property("En") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)") + .HasColumnName("title_en"); + + b1.HasKey("PolicySectionId"); + + b1.ToTable("policy_sections"); + + b1.WithOwner() + .HasForeignKey("PolicySectionId") + .HasConstraintName("fk_policy_sections_policy_sections_id"); + }); + + b.Navigation("Content") + .IsRequired(); + + b.Navigation("Title") + .IsRequired(); + }); + + modelBuilder.Entity("CCE.Domain.Verification.UserVerification", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .HasConstraintName("fk_user_verifications_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("CCE.Domain.Identity.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_role_claims_asp_net_roles_role_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_claims_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_logins_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("CCE.Domain.Identity.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_roles_asp_net_roles_role_id"); + + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_roles_asp_net_users_user_id"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("CCE.Domain.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_asp_net_user_tokens_asp_net_users_user_id"); + }); + + modelBuilder.Entity("CCE.Domain.Content.Resource", b => + { + b.Navigation("Countries"); + }); + + modelBuilder.Entity("CCE.Domain.Identity.ExpertRegistrationRequest", b => + { + b.Navigation("Attachments"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.AboutSettings", b => + { + b.Navigation("GlossaryEntries"); + + b.Navigation("KnowledgePartners"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.HomepageSettings", b => + { + b.Navigation("Countries"); + }); + + modelBuilder.Entity("CCE.Domain.PlatformSettings.PoliciesSettings", b => + { + b.Navigation("Sections"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.cs b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.cs new file mode 100644 index 00000000..ba798aec --- /dev/null +++ b/backend/src/CCE.Infrastructure/Persistence/Migrations/20260531210555_AddTopicIdToNewsAndEvents.cs @@ -0,0 +1,99 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace CCE.Infrastructure.Persistence.Migrations +{ + /// + public partial class AddTopicIdToNewsAndEvents : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "title_en", + table: "resources", + type: "nvarchar(255)", + maxLength: 255, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(512)", + oldMaxLength: 512); + + migrationBuilder.AlterColumn( + name: "title_ar", + table: "resources", + type: "nvarchar(255)", + maxLength: 255, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(512)", + oldMaxLength: 512); + + migrationBuilder.AddColumn( + name: "topic_id", + table: "news", + type: "uniqueidentifier", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000")); + + migrationBuilder.AddColumn( + name: "topic_id", + table: "events", + type: "uniqueidentifier", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000")); + + migrationBuilder.CreateIndex( + name: "ix_news_topic_id", + table: "news", + column: "topic_id"); + + migrationBuilder.CreateIndex( + name: "ix_event_topic_id", + table: "events", + column: "topic_id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "ix_news_topic_id", + table: "news"); + + migrationBuilder.DropIndex( + name: "ix_event_topic_id", + table: "events"); + + migrationBuilder.DropColumn( + name: "topic_id", + table: "news"); + + migrationBuilder.DropColumn( + name: "topic_id", + table: "events"); + + migrationBuilder.AlterColumn( + name: "title_en", + table: "resources", + type: "nvarchar(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(255)", + oldMaxLength: 255); + + migrationBuilder.AlterColumn( + name: "title_ar", + table: "resources", + type: "nvarchar(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(255)", + oldMaxLength: 255); + } + } +} diff --git a/backend/src/CCE.Infrastructure/Persistence/Migrations/CceDbContextModelSnapshot.cs b/backend/src/CCE.Infrastructure/Persistence/Migrations/CceDbContextModelSnapshot.cs index 7714ff72..c3282a5e 100644 --- a/backend/src/CCE.Infrastructure/Persistence/Migrations/CceDbContextModelSnapshot.cs +++ b/backend/src/CCE.Infrastructure/Persistence/Migrations/CceDbContextModelSnapshot.cs @@ -579,6 +579,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nvarchar(512)") .HasColumnName("title_en"); + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + b.HasKey("Id") .HasName("pk_events"); @@ -589,6 +593,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("StartsOn") .HasDatabaseName("ix_event_starts_on"); + b.HasIndex("TopicId") + .HasDatabaseName("ix_event_topic_id"); + b.ToTable("events", (string)null); }); @@ -743,6 +750,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nvarchar(512)") .HasColumnName("title_en"); + b.Property("TopicId") + .HasColumnType("uniqueidentifier") + .HasColumnName("topic_id"); + b.HasKey("Id") .HasName("pk_news"); @@ -754,6 +765,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasDatabaseName("ux_news_slug_active") .HasFilter("[is_deleted] = 0"); + b.HasIndex("TopicId") + .HasDatabaseName("ix_news_topic_id"); + b.ToTable("news", (string)null); }); @@ -991,14 +1005,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("TitleAr") .IsRequired() - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") .HasColumnName("title_ar"); b.Property("TitleEn") .IsRequired() - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") .HasColumnName("title_en"); b.Property("UploadedById") @@ -1015,9 +1029,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("AssetFileId") .HasDatabaseName("ix_resource_asset_file_id"); - b.HasIndex("CountryId") - .HasDatabaseName("ix_resource_country_id"); - b.HasIndex("CategoryId", "PublishedOn") .HasDatabaseName("ix_resource_category_published"); @@ -1073,6 +1084,25 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("resource_categories", (string)null); }); + modelBuilder.Entity("CCE.Domain.Content.ResourceCountry", b => + { + b.Property("ResourceId") + .HasColumnType("uniqueidentifier") + .HasColumnName("resource_id"); + + b.Property("CountryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("country_id"); + + b.HasKey("ResourceId", "CountryId") + .HasName("pk_resource_country"); + + b.HasIndex("CountryId") + .HasDatabaseName("ix_resource_country_country_id"); + + b.ToTable("resource_country", (string)null); + }); + modelBuilder.Entity("CCE.Domain.Country.Country", b => { b.Property("Id") @@ -3479,6 +3509,16 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("AspNetUserTokens", (string)null); }); + modelBuilder.Entity("CCE.Domain.Content.ResourceCountry", b => + { + b.HasOne("CCE.Domain.Content.Resource", null) + .WithMany("Countries") + .HasForeignKey("ResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_resource_country_resources_resource_id"); + }); + modelBuilder.Entity("CCE.Domain.Identity.ExpertRequestAttachment", b => { b.HasOne("CCE.Domain.Identity.ExpertRegistrationRequest", null) @@ -3521,7 +3561,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("CountryCodeId"); - b1.ToTable("country_codes", (string)null); + b1.ToTable("country_codes"); b1.WithOwner() .HasForeignKey("CountryCodeId") @@ -3554,7 +3594,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("AboutSettingsId"); - b1.ToTable("about_settings", (string)null); + b1.ToTable("about_settings"); b1.WithOwner() .HasForeignKey("AboutSettingsId") @@ -3594,7 +3634,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("GlossaryEntryId"); - b1.ToTable("glossary_entries", (string)null); + b1.ToTable("glossary_entries"); b1.WithOwner() .HasForeignKey("GlossaryEntryId") @@ -3621,7 +3661,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("GlossaryEntryId"); - b1.ToTable("glossary_entries", (string)null); + b1.ToTable("glossary_entries"); b1.WithOwner() .HasForeignKey("GlossaryEntryId") @@ -3667,7 +3707,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("HomepageSettingsId"); - b1.ToTable("homepage_settings", (string)null); + b1.ToTable("homepage_settings"); b1.WithOwner() .HasForeignKey("HomepageSettingsId") @@ -3707,7 +3747,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("KnowledgePartnerId"); - b1.ToTable("knowledge_partners", (string)null); + b1.ToTable("knowledge_partners"); b1.WithOwner() .HasForeignKey("KnowledgePartnerId") @@ -3734,7 +3774,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("KnowledgePartnerId"); - b1.ToTable("knowledge_partners", (string)null); + b1.ToTable("knowledge_partners"); b1.WithOwner() .HasForeignKey("KnowledgePartnerId") @@ -3774,7 +3814,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("PolicySectionId"); - b1.ToTable("policy_sections", (string)null); + b1.ToTable("policy_sections"); b1.WithOwner() .HasForeignKey("PolicySectionId") @@ -3801,7 +3841,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b1.HasKey("PolicySectionId"); - b1.ToTable("policy_sections", (string)null); + b1.ToTable("policy_sections"); b1.WithOwner() .HasForeignKey("PolicySectionId") @@ -3880,6 +3920,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasConstraintName("fk_asp_net_user_tokens_asp_net_users_user_id"); }); + modelBuilder.Entity("CCE.Domain.Content.Resource", b => + { + b.Navigation("Countries"); + }); + modelBuilder.Entity("CCE.Domain.Identity.ExpertRegistrationRequest", b => { b.Navigation("Attachments"); diff --git a/backend/src/CCE.Seeder/Seeders/DemoDataSeeder.cs b/backend/src/CCE.Seeder/Seeders/DemoDataSeeder.cs index 912b2d7d..0f57e71f 100644 --- a/backend/src/CCE.Seeder/Seeders/DemoDataSeeder.cs +++ b/backend/src/CCE.Seeder/Seeders/DemoDataSeeder.cs @@ -34,55 +34,66 @@ public async Task SeedAsync(CancellationToken cancellationToken = default) DeterministicGuid.From("user:system_demo_author"); private static readonly (string Slug, string TitleAr, string TitleEn, - string ContentAr, string ContentEn, bool Featured)[] DemoNews = + string ContentAr, string ContentEn, bool Featured, string TopicSlug)[] DemoNews = { ("welcome", "أهلاً بكم في منصة المعرفة", "Welcome to the Knowledge Center", "

منصة جديدة لمشاركة المعرفة حول الاقتصاد الكربوني الدائري.

", "

A new platform for sharing knowledge about the Circular Carbon Economy.

", - true), + true, "general"), ("solar-milestone", "إنجاز جديد في الطاقة الشمسية", "New Solar Milestone", "

تم تجاوز رقم قياسي عالمي في كفاءة الخلايا الشمسية، مع تحقيق 33٪ في ظروف اختبار قياسية.

", "

A new world record was set in solar-cell efficiency, reaching 33% under standard test conditions.

", - false), + false, "solar-power"), ("dac-pilot", "إطلاق مشروع تجريبي للالتقاط المباشر", "Direct Air Capture Pilot Goes Live", "

وحدة جديدة قادرة على التقاط 1000 طن من ثاني أكسيد الكربون سنوياً بدأت العمل في الرياض.

", "

A new unit capable of capturing 1,000 tonnes of CO₂ per year went live near Riyadh.

", - true), + true, "research"), ("methane-leakage", "تقرير: انخفاض كبير في تسرب الميثان", "Report: Major Drop in Methane Leakage", "

تقرير سنوي يظهر انخفاضاً بنسبة 18٪ في انبعاثات الميثان عبر القطاع.

", "

An annual report shows an 18% drop in methane emissions across the sector.

", - false), + false, "research"), ("hydrogen-corridor", "ممر الهيدروجين الإقليمي يبدأ المرحلة الثانية", "Regional Hydrogen Corridor Enters Phase II", "

توسيع ممر الهيدروجين منخفض الكربون ليشمل ثلاث دول إضافية.

", "

The low-carbon hydrogen corridor expands to include three additional countries.

", - false), + false, "general"), }; private async Task SeedNewsAsync(CancellationToken ct) { + var topicMap = await _ctx.Topics + .ToDictionaryAsync(t => t.Slug, t => t.Id, ct).ConfigureAwait(false); + var dayOffset = -1; foreach (var n in DemoNews) { + if (!topicMap.TryGetValue(n.TopicSlug, out var topicId)) + { + _logger.LogWarning( + "DemoDataSeeder: topic '{TopicSlug}' missing — skipping news '{NewsSlug}'.", + n.TopicSlug, n.Slug); + continue; + } + var id = DeterministicGuid.From($"news:{n.Slug}"); var exists = await _ctx.News.IgnoreQueryFilters() .AnyAsync(x => x.Id == id, ct).ConfigureAwait(false); if (exists) { dayOffset -= 7; continue; } var news = News.Draft(n.TitleAr, n.TitleEn, n.ContentAr, n.ContentEn, - n.Slug, SystemAuthorId, featuredImageUrl: null, _clock); + topicId, SystemAuthorId, null, _clock); typeof(News).GetProperty(nameof(news.Id))!.SetValue(news, id); news.Publish(_clock); if (n.Featured) @@ -98,33 +109,44 @@ private async Task SeedNewsAsync(CancellationToken ct) private static readonly (string Slug, string TitleAr, string TitleEn, string DescAr, string DescEn, int DaysFromNow, int LengthHours, - string LocationAr, string LocationEn, string? OnlineUrl)[] DemoEvents = + string LocationAr, string LocationEn, string? OnlineUrl, string TopicSlug)[] DemoEvents = { ("cce-conference", "مؤتمر CCE السنوي", "CCE Annual Conference", "نقاش حول مستقبل الاقتصاد الكربوني", "Discussion on the future of CCE", - 30, 2, "الرياض", "Riyadh", null), + 30, 2, "الرياض", "Riyadh", null, "general"), ("hydrogen-summit", "قمة الهيدروجين الأخضر", "Green Hydrogen Summit", "أحدث التطورات في إنتاج الهيدروجين", "Latest developments in hydrogen production", - 60, 6, "نيوم", "Neom", null), + 60, 6, "نيوم", "Neom", null, "general"), ("dac-workshop", "ورشة الالتقاط المباشر", "DAC Workshop", "ورشة عملية حول تقنيات الالتقاط", "Hands-on workshop on capture technologies", - 15, 4, "عبر الإنترنت", "Online", "https://meet.example.com/dac-workshop"), + 15, 4, "عبر الإنترنت", "Online", "https://meet.example.com/dac-workshop", "research"), ("policy-forum", "منتدى السياسات المناخية", "Climate Policy Forum", "حوار بين صناع السياسات والباحثين", "Dialogue between policymakers and researchers", - 90, 8, "جدة", "Jeddah", null), + 90, 8, "جدة", "Jeddah", null, "policy"), }; private async Task SeedEventsAsync(CancellationToken ct) { + var topicMap = await _ctx.Topics + .ToDictionaryAsync(t => t.Slug, t => t.Id, ct).ConfigureAwait(false); + foreach (var e in DemoEvents) { + if (!topicMap.TryGetValue(e.TopicSlug, out var topicId)) + { + _logger.LogWarning( + "DemoDataSeeder: topic '{TopicSlug}' missing — skipping event '{EventSlug}'.", + e.TopicSlug, e.Slug); + continue; + } + var id = DeterministicGuid.From($"event:demo:{e.Slug}"); var exists = await _ctx.Events.IgnoreQueryFilters() .AnyAsync(x => x.Id == id, ct).ConfigureAwait(false); @@ -138,7 +160,7 @@ private async Task SeedEventsAsync(CancellationToken ct) e.DescAr, e.DescEn, startsOn, endsOn, e.LocationAr, e.LocationEn, - e.OnlineUrl, null, _clock); + e.OnlineUrl, null, topicId, _clock); typeof(CCE.Domain.Content.Event).GetProperty(nameof(ev.Id))!.SetValue(ev, id); _ctx.Events.Add(ev); } diff --git a/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsEndpointTests.cs b/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsEndpointTests.cs index 9fceda90..5a8e3e9a 100644 --- a/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsEndpointTests.cs +++ b/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsEndpointTests.cs @@ -42,10 +42,11 @@ public async Task List_SuperAdmin_returns_200_with_paged_result_shape() resp.StatusCode.Should().Be(HttpStatusCode.OK); var body = await resp.Content.ReadAsStringAsync(); var doc = JsonDocument.Parse(body).RootElement; - doc.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); - doc.GetProperty("page").GetInt32().Should().Be(1); - doc.GetProperty("pageSize").GetInt32().Should().Be(20); - doc.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); + var data = doc.GetProperty("data"); + data.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); + data.GetProperty("page").GetInt32().Should().Be(1); + data.GetProperty("pageSize").GetInt32().Should().Be(20); + data.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); } [Fact] @@ -83,6 +84,7 @@ public async Task Post_anonymous_returns_401() locationEn = (string?)null, onlineMeetingUrl = (string?)null, featuredImageUrl = (string?)null, + topicId = System.Guid.NewGuid(), }); var resp = await client.PostAsync(new Uri("/api/admin/events", UriKind.Relative), body); @@ -102,7 +104,7 @@ public async Task Put_anonymous_returns_401() locationEn = (string?)null, onlineMeetingUrl = (string?)null, featuredImageUrl = (string?)null, - rowVersion = System.Convert.ToBase64String(new byte[8]), + topicId = System.Guid.NewGuid(), }); var resp = await client.PutAsync(new Uri($"/api/admin/events/{System.Guid.NewGuid()}", UriKind.Relative), body); @@ -123,7 +125,7 @@ public async Task Put_unknown_id_returns_404() locationEn = (string?)null, onlineMeetingUrl = (string?)null, featuredImageUrl = (string?)null, - rowVersion = System.Convert.ToBase64String(new byte[8]), + topicId = System.Guid.NewGuid(), }); var resp = await client.PutAsync(new Uri($"/api/admin/events/{System.Guid.NewGuid()}", UriKind.Relative), body); diff --git a/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsPublicEndpointTests.cs b/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsPublicEndpointTests.cs index 27381e2b..0a1cf244 100644 --- a/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsPublicEndpointTests.cs +++ b/backend/tests/CCE.Api.IntegrationTests/Endpoints/EventsPublicEndpointTests.cs @@ -18,10 +18,11 @@ public async Task List_returns_200_with_paged_result_shape() resp.StatusCode.Should().Be(HttpStatusCode.OK); var body = await resp.Content.ReadAsStringAsync(); var doc = JsonDocument.Parse(body).RootElement; - doc.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); - doc.GetProperty("page").GetInt32().Should().Be(1); - doc.GetProperty("pageSize").GetInt32().Should().Be(20); - doc.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); + var data = doc.GetProperty("data"); + data.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); + data.GetProperty("page").GetInt32().Should().Be(1); + data.GetProperty("pageSize").GetInt32().Should().Be(20); + data.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); } [Fact] diff --git a/backend/tests/CCE.Api.IntegrationTests/Endpoints/NewsEndpointTests.cs b/backend/tests/CCE.Api.IntegrationTests/Endpoints/NewsEndpointTests.cs index 787e4f5d..c3ca9daf 100644 --- a/backend/tests/CCE.Api.IntegrationTests/Endpoints/NewsEndpointTests.cs +++ b/backend/tests/CCE.Api.IntegrationTests/Endpoints/NewsEndpointTests.cs @@ -43,10 +43,11 @@ public async Task List_SuperAdmin_returns_200_with_paged_result_shape() resp.StatusCode.Should().Be(HttpStatusCode.OK); var body = await resp.Content.ReadAsStringAsync(); var doc = JsonDocument.Parse(body).RootElement; - doc.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); - doc.GetProperty("page").GetInt32().Should().Be(1); - doc.GetProperty("pageSize").GetInt32().Should().Be(20); - doc.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); + var data = doc.GetProperty("data"); + data.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); + data.GetProperty("page").GetInt32().Should().Be(1); + data.GetProperty("pageSize").GetInt32().Should().Be(20); + data.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); } [Fact] @@ -78,7 +79,7 @@ public async Task Post_anonymous_returns_401() { titleAr = "خبر", titleEn = "News", contentAr = "محتوى", contentEn = "Content", - slug = "test-post", + topicId = System.Guid.NewGuid(), featuredImageUrl = (string?)null, }); @@ -95,9 +96,8 @@ public async Task Put_anonymous_returns_401() { titleAr = "خبر", titleEn = "News", contentAr = "محتوى", contentEn = "Content", - slug = "test-post", + topicId = System.Guid.NewGuid(), featuredImageUrl = (string?)null, - rowVersion = System.Convert.ToBase64String(new byte[8]), }); var resp = await client.PutAsync(new Uri($"/api/admin/news/{System.Guid.NewGuid()}", UriKind.Relative), body); @@ -114,9 +114,8 @@ public async Task Put_unknown_id_returns_404() { titleAr = "خبر", titleEn = "News", contentAr = "محتوى", contentEn = "Content", - slug = "test-post", + topicId = System.Guid.NewGuid(), featuredImageUrl = (string?)null, - rowVersion = System.Convert.ToBase64String(new byte[8]), }); var resp = await client.PutAsync(new Uri($"/api/admin/news/{System.Guid.NewGuid()}", UriKind.Relative), body); diff --git a/backend/tests/CCE.Api.IntegrationTests/Endpoints/ResourcesEndpointTests.cs b/backend/tests/CCE.Api.IntegrationTests/Endpoints/ResourcesEndpointTests.cs index eb319f6c..277ec31c 100644 --- a/backend/tests/CCE.Api.IntegrationTests/Endpoints/ResourcesEndpointTests.cs +++ b/backend/tests/CCE.Api.IntegrationTests/Endpoints/ResourcesEndpointTests.cs @@ -44,10 +44,11 @@ public async Task SuperAdmin_request_returns_200_with_paged_result_shape() resp.StatusCode.Should().Be(HttpStatusCode.OK); var body = await resp.Content.ReadAsStringAsync(); var doc = JsonDocument.Parse(body).RootElement; - doc.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); - doc.GetProperty("page").GetInt32().Should().Be(1); - doc.GetProperty("pageSize").GetInt32().Should().Be(20); - doc.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); + var data = doc.GetProperty("data"); + data.GetProperty("items").ValueKind.Should().Be(JsonValueKind.Array); + data.GetProperty("page").GetInt32().Should().Be(1); + data.GetProperty("pageSize").GetInt32().Should().Be(20); + data.GetProperty("total").GetInt64().Should().BeGreaterThanOrEqualTo(0); } [Fact] @@ -98,6 +99,7 @@ public async Task Put_with_unknown_id_returns_404() descriptionAr = "desc-ar", descriptionEn = "desc-en", resourceType = 0, categoryId = System.Guid.NewGuid(), + countryIds = new[] { System.Guid.NewGuid() }, rowVersion = System.Convert.ToBase64String(new byte[8]), }); diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/ApproveCountryResourceRequestCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/ApproveCountryResourceRequestCommandHandlerTests.cs index 5fd1f78e..23cdb456 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/ApproveCountryResourceRequestCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/ApproveCountryResourceRequestCommandHandlerTests.cs @@ -77,7 +77,7 @@ private static CountryResourceRequest BuildPendingRequest(FakeSystemClock clock) System.Guid.NewGuid(), System.Guid.NewGuid(), "عنوان", "Title", "وصف", "Description", - ResourceType.Pdf, System.Guid.NewGuid(), clock); + ResourceType.Paper, System.Guid.NewGuid(), clock); private static ICurrentUserAccessor BuildCurrentUser(System.Guid? userId = null) { diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandHandlerTests.cs index 94e9548f..5d87f599 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandHandlerTests.cs @@ -1,5 +1,8 @@ -using CCE.Application.Content; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Commands.CreateEvent; +using CCE.Application.Localization; +using CCE.Application.Messages; +using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -7,6 +10,7 @@ namespace CCE.Application.Tests.Content.Commands; public class CreateEventCommandHandlerTests { + private static readonly System.Guid TopicId = System.Guid.NewGuid(); private static readonly System.DateTimeOffset StartsOn = new(2026, 9, 1, 9, 0, 0, System.TimeSpan.Zero); @@ -16,35 +20,47 @@ public class CreateEventCommandHandlerTests [Fact] public async Task Persists_event_when_inputs_valid() { - var (sut, service) = BuildSut(); + var (sut, repo, db) = BuildSut(TopicId); - await sut.Handle(BuildCmd(), CancellationToken.None); + var result = await sut.Handle(BuildCmd(TopicId), CancellationToken.None); - await service.Received(1).SaveAsync(Arg.Any(), Arg.Any()); + result.Success.Should().BeTrue(); + await repo.Received(1).AddAsync(Arg.Any(), Arg.Any()); + await db.Received(1).SaveChangesAsync(Arg.Any()); } [Fact] public async Task Returns_dto_with_correct_fields() { - var (sut, _) = BuildSut(); + var (sut, _, _) = BuildSut(TopicId); - var dto = await sut.Handle(BuildCmd(), CancellationToken.None); + var result = await sut.Handle(BuildCmd(TopicId), CancellationToken.None); - dto.TitleAr.Should().Be("حدث"); - dto.TitleEn.Should().Be("Event"); - dto.StartsOn.Should().Be(StartsOn); - dto.EndsOn.Should().Be(EndsOn); - dto.ICalUid.Should().EndWith("@cce.moenergy.gov.sa"); + result.Data!.TitleAr.Should().Be("حدث"); + result.Data.TitleEn.Should().Be("Event"); + result.Data.StartsOn.Should().Be(StartsOn); + result.Data.EndsOn.Should().Be(EndsOn); + result.Data.ICalUid.Should().EndWith("@cce.moenergy.gov.sa"); } - private static CreateEventCommand BuildCmd() => + private static CreateEventCommand BuildCmd(System.Guid topicId) => new("حدث", "Event", "وصف", "Description", StartsOn, EndsOn, - null, null, null, null); + null, null, null, null, topicId); - private static (CreateEventCommandHandler sut, IEventRepository service) BuildSut() + private static (CreateEventCommandHandler sut, + IRepository repo, + ICceDbContext db) BuildSut(System.Guid topicId) { - var service = Substitute.For(); - var sut = new CreateEventCommandHandler(service, new FakeSystemClock()); - return (sut, service); + var repo = Substitute.For>(); + var db = Substitute.For(); + var topic = CCE.Domain.Community.Topic.Create( + "name-ar", "name-en", "desc-ar", "desc-en", "slug", null, null, 0); + typeof(CCE.Domain.Community.Topic).GetProperty(nameof(CCE.Domain.Community.Topic.Id))! + .SetValue(topic, topicId); + db.Topics.Returns(new[] { topic }.AsQueryable()); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + var sut = new CreateEventCommandHandler(repo, db, new FakeSystemClock(), new MessageFactory(localization)); + return (sut, repo, db); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandValidatorTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandValidatorTests.cs index 69b85d45..651639ae 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandValidatorTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/CreateEventCommandValidatorTests.cs @@ -13,7 +13,8 @@ public class CreateEventCommandValidatorTests private static CreateEventCommand ValidCmd() => new( "حدث", "Event", "وصف", "Description", StartsOn, EndsOn, - null, null, null, null); + null, null, null, null, + System.Guid.NewGuid()); [Fact] public void Valid_command_passes() diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandHandlerTests.cs index 1182bb1e..ebc82ebd 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandHandlerTests.cs @@ -1,6 +1,7 @@ using CCE.Application.Common.Interfaces; -using CCE.Application.Content; using CCE.Application.Content.Commands.CreateNews; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -9,51 +10,65 @@ namespace CCE.Application.Tests.Content.Commands; public class CreateNewsCommandHandlerTests { + private static readonly System.Guid TopicId = System.Guid.NewGuid(); + [Fact] - public async Task Throws_DomainException_when_actor_unknown() + public async Task Returns_not_authenticated_when_actor_unknown() { - var (sut, _, _) = BuildSut(noUser: true); + var (sut, _, _) = BuildSut(TopicId, noUser: true); - var act = async () => await sut.Handle(BuildCmd(), CancellationToken.None); + var result = await sut.Handle(BuildCmd(TopicId), CancellationToken.None); - await act.Should().ThrowAsync(); + result.Success.Should().BeFalse(); } [Fact] public async Task Persists_news_when_inputs_valid() { - var (sut, service, _) = BuildSut(); + var (sut, repo, db) = BuildSut(TopicId); - await sut.Handle(BuildCmd(), CancellationToken.None); + var result = await sut.Handle(BuildCmd(TopicId), CancellationToken.None); - await service.Received(1).SaveAsync(Arg.Any(), Arg.Any()); + result.Success.Should().BeTrue(); + await repo.Received(1).AddAsync(Arg.Any(), Arg.Any()); + await db.Received(1).SaveChangesAsync(Arg.Any()); } [Fact] public async Task Returns_dto_with_correct_fields() { - var (sut, _, _) = BuildSut(); + var (sut, _, _) = BuildSut(TopicId); - var dto = await sut.Handle(BuildCmd(), CancellationToken.None); + var result = await sut.Handle(BuildCmd(TopicId), CancellationToken.None); - dto.TitleAr.Should().Be("خبر"); - dto.TitleEn.Should().Be("News"); - dto.Slug.Should().Be("first-post"); - dto.IsPublished.Should().BeFalse(); + result.Data!.TitleAr.Should().Be("خبر"); + result.Data.TitleEn.Should().Be("News"); + result.Data.TopicId.Should().Be(TopicId); + result.Data.IsPublished.Should().BeFalse(); } - private static CreateNewsCommand BuildCmd() => - new("خبر", "News", "محتوى", "Content", "first-post", null); + private static CreateNewsCommand BuildCmd(System.Guid topicId) => + new("خبر", "News", "محتوى", "Content", topicId, null); - private static (CreateNewsCommandHandler sut, INewsRepository service, ICurrentUserAccessor user) BuildSut(bool noUser = false) + private static (CreateNewsCommandHandler sut, + IRepository repo, + ICceDbContext db) BuildSut(System.Guid topicId, bool noUser = false) { - var service = Substitute.For(); + var repo = Substitute.For>(); + var db = Substitute.For(); + var topic = CCE.Domain.Community.Topic.Create( + "name-ar", "name-en", "desc-ar", "desc-en", "slug", null, null, 0); + typeof(CCE.Domain.Community.Topic).GetProperty(nameof(CCE.Domain.Community.Topic.Id))! + .SetValue(topic, topicId); + db.Topics.Returns(new[] { topic }.AsQueryable()); var user = Substitute.For(); if (noUser) user.GetUserId().Returns((System.Guid?)null); else user.GetUserId().Returns(System.Guid.NewGuid()); - var sut = new CreateNewsCommandHandler(service, user, new FakeSystemClock()); - return (sut, service, user); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + var sut = new CreateNewsCommandHandler(repo, db, user, new FakeSystemClock(), new MessageFactory(localization)); + return (sut, repo, db); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandValidatorTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandValidatorTests.cs index 7398e801..4570da42 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandValidatorTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/CreateNewsCommandValidatorTests.cs @@ -5,7 +5,7 @@ namespace CCE.Application.Tests.Content.Commands; public class CreateNewsCommandValidatorTests { private static CreateNewsCommand ValidCmd() => new( - "خبر", "News", "محتوى", "Content", "first-post", null); + "خبر", "News", "محتوى", "Content", System.Guid.NewGuid(), null); [Fact] public void Valid_command_passes() @@ -31,14 +31,14 @@ public void Empty_titles_are_rejected(string titleAr, string titleEn) } [Fact] - public void Empty_slug_is_rejected() + public void Empty_topic_id_is_rejected() { var sut = new CreateNewsCommandValidator(); - var cmd = ValidCmd() with { Slug = "" }; + var cmd = ValidCmd() with { TopicId = System.Guid.Empty }; var result = sut.Validate(cmd); result.IsValid.Should().BeFalse(); - result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateNewsCommand.Slug)); + result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateNewsCommand.TopicId)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandHandlerTests.cs index 7f18b4e7..795e197c 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandHandlerTests.cs @@ -1,89 +1,128 @@ using CCE.Application.Common.Interfaces; -using CCE.Application.Content; using CCE.Application.Content.Commands.CreateResource; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; +using DomainCountry = CCE.Domain.Country; using CCE.TestInfrastructure.Time; namespace CCE.Application.Tests.Content.Commands; public class CreateResourceCommandHandlerTests { + private static readonly FakeSystemClock Clock = new(); + [Fact] - public async Task Throws_KeyNotFound_when_asset_missing() + public async Task Returns_asset_not_found_when_asset_missing() { - var (sut, _, asset, _) = BuildSut(); - asset.GetByIdAsync(Arg.Any(), Arg.Any()).Returns((AssetFile?)null); + var (sut, _, _) = BuildSut(Array.Empty()); - var act = async () => await sut.Handle(BuildCmd(System.Guid.NewGuid()), CancellationToken.None); + var result = await sut.Handle(BuildCmd(System.Guid.NewGuid()), CancellationToken.None); - await act.Should().ThrowAsync(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Throws_DomainException_when_asset_not_clean() + public async Task Returns_asset_not_clean_when_asset_not_scanned() { - var (sut, _, asset, _) = BuildSut(); - var clock = new FakeSystemClock(); - var pendingAsset = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), clock); - asset.GetByIdAsync(Arg.Any(), Arg.Any()).Returns(pendingAsset); + var pendingAsset = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), Clock); + + var (sut, _, _) = BuildSut([pendingAsset]); - var act = async () => await sut.Handle(BuildCmd(pendingAsset.Id), CancellationToken.None); + var result = await sut.Handle(BuildCmd(pendingAsset.Id), CancellationToken.None); - await act.Should().ThrowAsync().WithMessage("*virus scan*"); + result.Success.Should().BeFalse(); } [Fact] - public async Task Throws_DomainException_when_actor_unknown() + public async Task Returns_not_authenticated_when_actor_unknown() { - var (sut, _, asset, _) = BuildSut(noUser: true); - var clock = new FakeSystemClock(); - var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), clock); - clean.MarkClean(clock); - asset.GetByIdAsync(Arg.Any(), Arg.Any()).Returns(clean); + var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), Clock); + clean.MarkClean(Clock); + + var category = ResourceCategory.Create("cat-ar", "cat-en", "cat-1", null, 1); + var country = DomainCountry.Country.Register("SAU", "SA", "السعودية", "Saudi Arabia", "MENA", "MENA", "https://flag"); + + var (sut, _, _) = BuildSut([clean], noUser: true, categoryId: category.Id, countryId: country.Id); - var act = async () => await sut.Handle(BuildCmd(clean.Id), CancellationToken.None); + var result = await sut.Handle(BuildCmd(clean.Id, category.Id, country.Id), CancellationToken.None); - await act.Should().ThrowAsync(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Persists_resource_when_inputs_valid() + public async Task Returns_dto_and_saves_when_inputs_valid() { - var (sut, service, asset, _) = BuildSut(); - var clock = new FakeSystemClock(); - var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), clock); - clean.MarkClean(clock); - asset.GetByIdAsync(Arg.Any(), Arg.Any()).Returns(clean); - - var dto = await sut.Handle(BuildCmd(clean.Id), CancellationToken.None); - - dto.TitleAr.Should().Be("عنوان"); - dto.TitleEn.Should().Be("Title"); - dto.AssetFileId.Should().Be(clean.Id); - dto.IsPublished.Should().BeFalse(); - await service.Received(1).SaveAsync(Arg.Any(), Arg.Any()); + var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), Clock); + clean.MarkClean(Clock); + + var category = ResourceCategory.Create("cat-ar", "cat-en", "cat-1", null, 1); + var country = DomainCountry.Country.Register("SAU", "SA", "السعودية", "Saudi Arabia", "MENA", "MENA", "https://flag"); + + var (sut, repo, db) = BuildSut([clean], categoryId: category.Id, countryId: country.Id); + + var result = await sut.Handle(BuildCmd(clean.Id, category.Id, country.Id), CancellationToken.None); + + result.Success.Should().BeTrue(); + result.Data.Should().NotBe(System.Guid.Empty); + await repo.Received(1).AddAsync(Arg.Any(), Arg.Any()); + await db.Received(1).SaveChangesAsync(Arg.Any()); } - private static CreateResourceCommand BuildCmd(System.Guid assetFileId) => - new( + private static CreateResourceCommand BuildCmd(System.Guid assetFileId, System.Guid? categoryId = null, System.Guid? countryId = null) + { + var catId = categoryId ?? System.Guid.NewGuid(); + var cId = countryId ?? System.Guid.NewGuid(); + return new( "عنوان", "Title", "وصف", "Description", - ResourceType.Pdf, - System.Guid.NewGuid(), + ResourceType.Paper, + catId, null, - assetFileId); + assetFileId, + new[] { cId }); + } - private static (CreateResourceCommandHandler sut, IResourceRepository service, IAssetRepository asset, ICurrentUserAccessor user) BuildSut(bool noUser = false) + private static (CreateResourceCommandHandler sut, + IRepository repo, + ICceDbContext db) BuildSut(IEnumerable assets, bool noUser = false, System.Guid? categoryId = null, System.Guid? countryId = null) { - var service = Substitute.For(); - var asset = Substitute.For(); + var repo = Substitute.For>(); + var db = Substitute.For(); + db.AssetFiles.Returns(assets.AsQueryable()); + + if (categoryId.HasValue) + { + var cat = (ResourceCategory)System.Activator.CreateInstance( + typeof(ResourceCategory), + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, + null, + new object?[] { categoryId.Value, "cat-ar", "cat-en", "cat-1", null, 1 }, + null)!; + db.ResourceCategories.Returns(new[] { cat }.AsQueryable()); + } + if (countryId.HasValue) + { + var cty = (DomainCountry.Country)System.Activator.CreateInstance( + typeof(DomainCountry.Country), + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, + null, + new object?[] { countryId.Value, "SAU", "SA", "السعودية", "Saudi Arabia", "MENA", "MENA", "https://flag" }, + null)!; + db.Countries.Returns(new[] { cty }.AsQueryable()); + } + var user = Substitute.For(); if (noUser) user.GetUserId().Returns((System.Guid?)null); else user.GetUserId().Returns(System.Guid.NewGuid()); - var sut = new CreateResourceCommandHandler(service, asset, user, new FakeSystemClock()); - return (sut, service, asset, user); + + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + + var sut = new CreateResourceCommandHandler(repo, db, user, Clock, new MessageFactory(localization)); + return (sut, repo, db); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandValidatorTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandValidatorTests.cs index 1d2d99a3..f9ea23f3 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandValidatorTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/CreateResourceCommandValidatorTests.cs @@ -8,10 +8,11 @@ public class CreateResourceCommandValidatorTests private static CreateResourceCommand ValidCmd() => new( "عنوان", "Title", "وصف", "Description", - ResourceType.Pdf, + ResourceType.Paper, System.Guid.NewGuid(), null, - System.Guid.NewGuid()); + System.Guid.NewGuid(), + new[] { System.Guid.NewGuid() }); [Fact] public void Valid_command_passes() diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/DeleteEventCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/DeleteEventCommandHandlerTests.cs index 5206af1e..e262d5c2 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/DeleteEventCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/DeleteEventCommandHandlerTests.cs @@ -1,6 +1,7 @@ using CCE.Application.Common.Interfaces; -using CCE.Application.Content; using CCE.Application.Content.Commands.DeleteEvent; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -16,59 +17,83 @@ public class DeleteEventCommandHandlerTests new(2026, 9, 1, 17, 0, 0, System.TimeSpan.Zero); [Fact] - public async Task Throws_KeyNotFound_when_event_missing() + public async Task Returns_not_found_when_event_missing() { - var service = Substitute.For(); - service.FindAsync(Arg.Any(), Arg.Any()).Returns((Event?)null); - var currentUser = Substitute.For(); - var sut = new DeleteEventCommandHandler(service, currentUser, new FakeSystemClock()); + var (sut, _, _, _) = BuildSut(); - var act = async () => await sut.Handle(new DeleteEventCommand(System.Guid.NewGuid()), CancellationToken.None); + var result = await sut.Handle(new DeleteEventCommand(System.Guid.NewGuid()), CancellationToken.None); - await act.Should().ThrowAsync(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Throws_DomainException_when_actor_unknown() + public async Task Returns_not_authenticated_when_actor_unknown() { var clock = new FakeSystemClock(); var ev = Event.Schedule( "ar", "en", "desc-ar", "desc-en", - StartsOn, EndsOn, null, null, null, null, clock); + StartsOn, EndsOn, null, null, null, null, System.Guid.NewGuid(), clock); - var service = Substitute.For(); - service.FindAsync(ev.Id, Arg.Any()).Returns(ev); + var repo = Substitute.For>(); + repo.GetByIdAsync(ev.Id, Arg.Any()).Returns(ev); + var db = Substitute.For(); var currentUser = Substitute.For(); currentUser.GetUserId().Returns((System.Guid?)null); - var sut = new DeleteEventCommandHandler(service, currentUser, clock); + var sut = BuildHandler(repo, db, currentUser, clock); - var act = async () => await sut.Handle(new DeleteEventCommand(ev.Id), CancellationToken.None); + var result = await sut.Handle(new DeleteEventCommand(ev.Id), CancellationToken.None); - await act.Should().ThrowAsync(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Soft_deletes_and_calls_UpdateAsync() + public async Task Soft_deletes_and_saves_via_db_context() { var clock = new FakeSystemClock(); var actorId = System.Guid.NewGuid(); var ev = Event.Schedule( "ar", "en", "desc-ar", "desc-en", - StartsOn, EndsOn, null, null, null, null, clock); + StartsOn, EndsOn, null, null, null, null, System.Guid.NewGuid(), clock); - var service = Substitute.For(); - service.FindAsync(ev.Id, Arg.Any()).Returns(ev); + var repo = Substitute.For>(); + repo.GetByIdAsync(ev.Id, Arg.Any()).Returns(ev); + var db = Substitute.For(); var currentUser = Substitute.For(); currentUser.GetUserId().Returns(actorId); - var sut = new DeleteEventCommandHandler(service, currentUser, clock); + var sut = BuildHandler(repo, db, currentUser, clock); - await sut.Handle(new DeleteEventCommand(ev.Id), CancellationToken.None); + var result = await sut.Handle(new DeleteEventCommand(ev.Id), CancellationToken.None); + result.Success.Should().BeTrue(); ev.IsDeleted.Should().BeTrue(); - await service.Received(1).UpdateAsync(ev, Arg.Any(), Arg.Any()); + await db.Received(1).SaveChangesAsync(Arg.Any()); + } + + private static (DeleteEventCommandHandler sut, + IRepository repo, + ICceDbContext db, + ICurrentUserAccessor user) BuildSut() + { + var repo = Substitute.For>(); + repo.GetByIdAsync(Arg.Any(), Arg.Any()).Returns((Event?)null); + var db = Substitute.For(); + var user = Substitute.For(); + user.GetUserId().Returns(System.Guid.NewGuid()); + return (BuildHandler(repo, db, user, new FakeSystemClock()), repo, db, user); + } + + private static DeleteEventCommandHandler BuildHandler( + IRepository repo, + ICceDbContext db, + ICurrentUserAccessor currentUser, + ISystemClock clock) + { + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new DeleteEventCommandHandler(repo, db, currentUser, clock, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/DeleteNewsCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/DeleteNewsCommandHandlerTests.cs index be279435..1f29ae01 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/DeleteNewsCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/DeleteNewsCommandHandlerTests.cs @@ -1,6 +1,7 @@ using CCE.Application.Common.Interfaces; -using CCE.Application.Content; using CCE.Application.Content.Commands.DeleteNews; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -10,55 +11,79 @@ namespace CCE.Application.Tests.Content.Commands; public class DeleteNewsCommandHandlerTests { [Fact] - public async Task Throws_KeyNotFound_when_news_missing() + public async Task Returns_not_found_when_news_missing() { - var service = Substitute.For(); - service.FindAsync(Arg.Any(), Arg.Any()).Returns((News?)null); - var currentUser = Substitute.For(); - var sut = new DeleteNewsCommandHandler(service, currentUser, new FakeSystemClock()); - - var act = async () => await sut.Handle(new DeleteNewsCommand(System.Guid.NewGuid()), CancellationToken.None); + var (sut, _, _, _) = BuildSut(); + // repo returns null for any id + var result = await sut.Handle(new DeleteNewsCommand(System.Guid.NewGuid()), CancellationToken.None); - await act.Should().ThrowAsync(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Throws_DomainException_when_actor_unknown() + public async Task Returns_not_authenticated_when_actor_unknown() { var clock = new FakeSystemClock(); - var news = News.Draft("ar", "en", "content-ar", "content-en", "slug", System.Guid.NewGuid(), null, clock); + var news = News.Draft("ar", "en", "content-ar", "content-en", System.Guid.NewGuid(), System.Guid.NewGuid(), null, clock); - var service = Substitute.For(); - service.FindAsync(news.Id, Arg.Any()).Returns(news); + var repo = Substitute.For>(); + repo.GetByIdAsync(news.Id, Arg.Any()).Returns(news); + var db = Substitute.For(); var currentUser = Substitute.For(); currentUser.GetUserId().Returns((System.Guid?)null); - var sut = new DeleteNewsCommandHandler(service, currentUser, clock); + var sut = BuildHandler(repo, db, currentUser, clock); - var act = async () => await sut.Handle(new DeleteNewsCommand(news.Id), CancellationToken.None); + var result = await sut.Handle(new DeleteNewsCommand(news.Id), CancellationToken.None); - await act.Should().ThrowAsync(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Soft_deletes_and_calls_UpdateAsync() + public async Task Soft_deletes_and_saves_via_db_context() { var clock = new FakeSystemClock(); var actorId = System.Guid.NewGuid(); - var news = News.Draft("ar", "en", "content-ar", "content-en", "slug", System.Guid.NewGuid(), null, clock); + var news = News.Draft("ar", "en", "content-ar", "content-en", System.Guid.NewGuid(), System.Guid.NewGuid(), null, clock); - var service = Substitute.For(); - service.FindAsync(news.Id, Arg.Any()).Returns(news); + var repo = Substitute.For>(); + repo.GetByIdAsync(news.Id, Arg.Any()).Returns(news); + var db = Substitute.For(); var currentUser = Substitute.For(); currentUser.GetUserId().Returns(actorId); - var sut = new DeleteNewsCommandHandler(service, currentUser, clock); + var sut = BuildHandler(repo, db, currentUser, clock); - await sut.Handle(new DeleteNewsCommand(news.Id), CancellationToken.None); + var result = await sut.Handle(new DeleteNewsCommand(news.Id), CancellationToken.None); + result.Success.Should().BeTrue(); news.IsDeleted.Should().BeTrue(); - await service.Received(1).UpdateAsync(news, Arg.Any(), Arg.Any()); + await db.Received(1).SaveChangesAsync(Arg.Any()); + } + + private static (DeleteNewsCommandHandler sut, + IRepository repo, + ICceDbContext db, + ICurrentUserAccessor user) BuildSut() + { + var repo = Substitute.For>(); + repo.GetByIdAsync(Arg.Any(), Arg.Any()).Returns((News?)null); + var db = Substitute.For(); + var user = Substitute.For(); + user.GetUserId().Returns(System.Guid.NewGuid()); + return (BuildHandler(repo, db, user, new FakeSystemClock()), repo, db, user); + } + + private static DeleteNewsCommandHandler BuildHandler( + IRepository repo, + ICceDbContext db, + ICurrentUserAccessor currentUser, + ISystemClock clock) + { + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new DeleteNewsCommandHandler(repo, db, currentUser, clock, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/PublishNewsCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/PublishNewsCommandHandlerTests.cs index 8990293a..89764575 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/PublishNewsCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/PublishNewsCommandHandlerTests.cs @@ -1,5 +1,8 @@ -using CCE.Application.Content; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Commands.PublishNews; +using CCE.Application.Localization; +using CCE.Application.Messages; +using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -8,52 +11,57 @@ namespace CCE.Application.Tests.Content.Commands; public class PublishNewsCommandHandlerTests { [Fact] - public async Task Returns_null_when_news_not_found() + public async Task Returns_not_found_when_news_missing() { - var service = Substitute.For(); - service.FindAsync(Arg.Any(), Arg.Any()).Returns((News?)null); - var sut = new PublishNewsCommandHandler(service, new FakeSystemClock()); + var (sut, _, _) = BuildSut(null); var result = await sut.Handle(new PublishNewsCommand(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] public async Task Publishes_and_returns_dto_when_valid() { var clock = new FakeSystemClock(); - var news = News.Draft("ar", "en", "content-ar", "content-en", "slug", System.Guid.NewGuid(), null, clock); + var news = News.Draft("ar", "en", "content-ar", "content-en", System.Guid.NewGuid(), System.Guid.NewGuid(), null, clock); - var service = Substitute.For(); - service.FindAsync(news.Id, Arg.Any()).Returns(news); + var (sut, repo, db) = BuildSut(news); - var sut = new PublishNewsCommandHandler(service, clock); + var result = await sut.Handle(new PublishNewsCommand(news.Id), CancellationToken.None); - var dto = await sut.Handle(new PublishNewsCommand(news.Id), CancellationToken.None); - - dto.Should().NotBeNull(); - dto!.IsPublished.Should().BeTrue(); - dto.PublishedOn.Should().NotBeNull(); - await service.Received(1).UpdateAsync(news, Arg.Any(), Arg.Any()); + result.Success.Should().BeTrue(); + result.Data!.IsPublished.Should().BeTrue(); + result.Data.PublishedOn.Should().NotBeNull(); + await db.Received(1).SaveChangesAsync(Arg.Any()); } [Fact] public async Task Returns_dto_unchanged_when_already_published() { var clock = new FakeSystemClock(); - var news = News.Draft("ar", "en", "content-ar", "content-en", "slug", System.Guid.NewGuid(), null, clock); - news.Publish(clock); // already published + var news = News.Draft("ar", "en", "content-ar", "content-en", System.Guid.NewGuid(), System.Guid.NewGuid(), null, clock); + news.Publish(clock); var firstPublishedOn = news.PublishedOn; - var service = Substitute.For(); - service.FindAsync(news.Id, Arg.Any()).Returns(news); + var (sut, _, _) = BuildSut(news); - var sut = new PublishNewsCommandHandler(service, clock); + var result = await sut.Handle(new PublishNewsCommand(news.Id), CancellationToken.None); - var dto = await sut.Handle(new PublishNewsCommand(news.Id), CancellationToken.None); + result.Data!.IsPublished.Should().BeTrue(); + result.Data.PublishedOn.Should().Be(firstPublishedOn); + } - dto!.IsPublished.Should().BeTrue(); - dto.PublishedOn.Should().Be(firstPublishedOn); + private static (PublishNewsCommandHandler sut, + IRepository repo, + ICceDbContext db) BuildSut(News? newsToReturn) + { + var clock = new FakeSystemClock(); + var repo = Substitute.For>(); + repo.GetByIdAsync(Arg.Any(), Arg.Any()).Returns(newsToReturn); + var db = Substitute.For(); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return (new PublishNewsCommandHandler(repo, db, clock, new MessageFactory(localization)), repo, db); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/PublishResourceCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/PublishResourceCommandHandlerTests.cs index 732d12dc..ce513184 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/PublishResourceCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/PublishResourceCommandHandlerTests.cs @@ -1,5 +1,7 @@ -using CCE.Application.Content; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Commands.PublishResource; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -8,90 +10,88 @@ namespace CCE.Application.Tests.Content.Commands; public class PublishResourceCommandHandlerTests { + private static readonly FakeSystemClock Clock = new(); + [Fact] - public async Task Returns_null_when_resource_not_found() + public async Task Returns_not_found_when_resource_missing() { - var (sut, _, _) = BuildSut(); + var (sut, _) = BuildSut(null, Array.Empty()); + var result = await sut.Handle(new PublishResourceCommand(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Throws_DomainException_when_asset_not_clean() + public async Task Returns_asset_not_clean_when_asset_pending() { - var clock = new FakeSystemClock(); - var (sut, resourceService, assetService) = BuildSut(); - var assetId = System.Guid.NewGuid(); - var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Pdf, System.Guid.NewGuid(), null, System.Guid.NewGuid(), assetId, clock); - resourceService.FindAsync(resource.Id, Arg.Any()).Returns(resource); - var pendingAsset = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), clock); - assetService.GetByIdAsync(assetId, Arg.Any()).Returns(pendingAsset); + var pendingAsset = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), Clock); + var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Paper, System.Guid.NewGuid(), null, System.Guid.NewGuid(), pendingAsset.Id, System.Array.Empty(), Clock); + + var (sut, _) = BuildSut(resource, [pendingAsset]); - var act = async () => await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); + var result = await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); - await act.Should().ThrowAsync().WithMessage("*virus scan*"); + result.Success.Should().BeFalse(); } [Fact] - public async Task Throws_DomainException_when_asset_not_found() + public async Task Returns_asset_not_found_when_asset_missing() { - var clock = new FakeSystemClock(); - var (sut, resourceService, assetService) = BuildSut(); - var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Pdf, System.Guid.NewGuid(), null, System.Guid.NewGuid(), System.Guid.NewGuid(), clock); - resourceService.FindAsync(resource.Id, Arg.Any()).Returns(resource); - assetService.GetByIdAsync(Arg.Any(), Arg.Any()).Returns((AssetFile?)null); + var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Paper, System.Guid.NewGuid(), null, System.Guid.NewGuid(), System.Guid.NewGuid(), System.Array.Empty(), Clock); - var act = async () => await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); + var (sut, _) = BuildSut(resource, Array.Empty()); - await act.Should().ThrowAsync().WithMessage("*not found*"); + var result = await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); + + result.Success.Should().BeFalse(); } [Fact] public async Task Publishes_resource_when_asset_clean() { - var clock = new FakeSystemClock(); - var (sut, resourceService, assetService) = BuildSut(); - var assetId = System.Guid.NewGuid(); - var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Pdf, System.Guid.NewGuid(), null, System.Guid.NewGuid(), assetId, clock); - resourceService.FindAsync(resource.Id, Arg.Any()).Returns(resource); - var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), clock); - clean.MarkClean(clock); - assetService.GetByIdAsync(assetId, Arg.Any()).Returns(clean); - - var dto = await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); - - dto.Should().NotBeNull(); - dto!.IsPublished.Should().BeTrue(); - dto.PublishedOn.Should().NotBeNull(); - await resourceService.Received(1).UpdateAsync(resource, Arg.Any(), Arg.Any()); + var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), Clock); + clean.MarkClean(Clock); + var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Paper, System.Guid.NewGuid(), null, System.Guid.NewGuid(), clean.Id, System.Array.Empty(), Clock); + + var (sut, db) = BuildSut(resource, [clean]); + + var result = await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); + + result.Success.Should().BeTrue(); + result.Data!.IsPublished.Should().BeTrue(); + result.Data.PublishedOn.Should().NotBeNull(); + await db.Received(1).SaveChangesAsync(Arg.Any()); } [Fact] public async Task Returns_dto_unchanged_when_already_published() { - var clock = new FakeSystemClock(); - var (sut, resourceService, assetService) = BuildSut(); - var assetId = System.Guid.NewGuid(); - var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Pdf, System.Guid.NewGuid(), null, System.Guid.NewGuid(), assetId, clock); - resource.Publish(clock); // already published - resourceService.FindAsync(resource.Id, Arg.Any()).Returns(resource); - var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), clock); - clean.MarkClean(clock); - assetService.GetByIdAsync(assetId, Arg.Any()).Returns(clean); - + var clean = AssetFile.Register("k", "x.pdf", 1, "application/pdf", System.Guid.NewGuid(), Clock); + clean.MarkClean(Clock); + var resource = Resource.Draft("ar", "en", "desc-ar", "desc-en", ResourceType.Paper, System.Guid.NewGuid(), null, System.Guid.NewGuid(), clean.Id, System.Array.Empty(), Clock); + resource.Publish(Clock); var firstPublishedOn = resource.PublishedOn; - var dto = await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); - dto!.IsPublished.Should().BeTrue(); - dto.PublishedOn.Should().Be(firstPublishedOn); + var (sut, _) = BuildSut(resource, [clean]); + + var result = await sut.Handle(new PublishResourceCommand(resource.Id), CancellationToken.None); + + result.Data!.IsPublished.Should().BeTrue(); + result.Data.PublishedOn.Should().Be(firstPublishedOn); } - private static (PublishResourceCommandHandler sut, IResourceRepository rs, IAssetRepository asset) BuildSut() + private static (PublishResourceCommandHandler sut, ICceDbContext db) BuildSut( + Resource? resourceToReturn, + IEnumerable assets) { - var rs = Substitute.For(); - var asset = Substitute.For(); - var sut = new PublishResourceCommandHandler(rs, asset, new FakeSystemClock()); - return (sut, rs, asset); + var db = Substitute.For(); + db.Resources.Returns(resourceToReturn is null ? Array.Empty().AsQueryable() : new[] { resourceToReturn }.AsQueryable()); + db.AssetFiles.Returns(assets.AsQueryable()); + + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + + return (new PublishResourceCommandHandler(db, Clock, new MessageFactory(localization)), db); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/RejectCountryResourceRequestCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/RejectCountryResourceRequestCommandHandlerTests.cs index 045e7d34..ceb66cbd 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/RejectCountryResourceRequestCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/RejectCountryResourceRequestCommandHandlerTests.cs @@ -77,7 +77,7 @@ private static CountryResourceRequest BuildPendingRequest(FakeSystemClock clock) System.Guid.NewGuid(), System.Guid.NewGuid(), "عنوان", "Title", "وصف", "Description", - ResourceType.Pdf, System.Guid.NewGuid(), clock); + ResourceType.Paper, System.Guid.NewGuid(), clock); private static ICurrentUserAccessor BuildCurrentUser(System.Guid? userId = null) { diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandHandlerTests.cs index df9a3a1a..434f0199 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandHandlerTests.cs @@ -1,5 +1,7 @@ -using CCE.Application.Content; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Commands.RescheduleEvent; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -15,64 +17,46 @@ public class RescheduleEventCommandHandlerTests new(2026, 9, 1, 17, 0, 0, System.TimeSpan.Zero); [Fact] - public async Task Returns_null_when_event_not_found() + public async Task Returns_not_found_when_event_missing() { - var service = Substitute.For(); - service.FindAsync(Arg.Any(), Arg.Any()).Returns((Event?)null); - var sut = new RescheduleEventCommandHandler(service); + var (sut, _, _) = BuildSut(null); var result = await sut.Handle( - new RescheduleEventCommand(System.Guid.NewGuid(), StartsOn, EndsOn, new byte[8]), + new RescheduleEventCommand(System.Guid.NewGuid(), StartsOn, EndsOn), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Reschedules_and_calls_UpdateAsync() + public async Task Reschedules_and_saves() { var clock = new FakeSystemClock(); var ev = Event.Schedule( "ar", "en", "desc-ar", "desc-en", - StartsOn, EndsOn, null, null, null, null, clock); + StartsOn, EndsOn, null, null, null, null, System.Guid.NewGuid(), clock); - var service = Substitute.For(); - service.FindAsync(ev.Id, Arg.Any()).Returns(ev); - - var sut = new RescheduleEventCommandHandler(service); + var (sut, db, _) = BuildSut(ev); var newStart = new System.DateTimeOffset(2026, 10, 1, 9, 0, 0, System.TimeSpan.Zero); var newEnd = new System.DateTimeOffset(2026, 10, 1, 17, 0, 0, System.TimeSpan.Zero); - var rowVersion = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 }; var result = await sut.Handle( - new RescheduleEventCommand(ev.Id, newStart, newEnd, rowVersion), + new RescheduleEventCommand(ev.Id, newStart, newEnd), CancellationToken.None); - result.Should().NotBeNull(); - result!.StartsOn.Should().Be(newStart); - result.EndsOn.Should().Be(newEnd); - await service.Received(1).UpdateAsync(ev, rowVersion, Arg.Any()); + result.Success.Should().BeTrue(); + result.Data!.StartsOn.Should().Be(newStart); + result.Data.EndsOn.Should().Be(newEnd); + await db.Received(1).SaveChangesAsync(Arg.Any()); } - [Fact] - public async Task Propagates_ConcurrencyException_from_UpdateAsync() + private static (RescheduleEventCommandHandler sut, ICceDbContext db, IRepository repo) BuildSut(Event? evToReturn) { - var clock = new FakeSystemClock(); - var ev = Event.Schedule( - "ar", "en", "desc-ar", "desc-en", - StartsOn, EndsOn, null, null, null, null, clock); - - var service = Substitute.For(); - service.FindAsync(ev.Id, Arg.Any()).Returns(ev); - service.UpdateAsync(default!, default!, default).ReturnsForAnyArgs(_ => - throw new ConcurrencyException("conflict")); - - var sut = new RescheduleEventCommandHandler(service); - - var act = async () => await sut.Handle( - new RescheduleEventCommand(ev.Id, StartsOn, EndsOn, new byte[8]), - CancellationToken.None); - - await act.Should().ThrowAsync(); + var repo = Substitute.For>(); + repo.GetByIdAsync(Arg.Any(), Arg.Any()).Returns(evToReturn); + var db = Substitute.For(); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return (new RescheduleEventCommandHandler(repo, db, new MessageFactory(localization)), db, repo); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandValidatorTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandValidatorTests.cs index 6ec4dbd4..18bcc517 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandValidatorTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/RescheduleEventCommandValidatorTests.cs @@ -11,7 +11,7 @@ public class RescheduleEventCommandValidatorTests new(2026, 9, 1, 17, 0, 0, System.TimeSpan.Zero); private static RescheduleEventCommand ValidCmd() => new( - System.Guid.NewGuid(), StartsOn, EndsOn, new byte[8]); + System.Guid.NewGuid(), StartsOn, EndsOn); [Fact] public void Valid_command_passes() diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandHandlerTests.cs index 9feb5f04..2e7c3113 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandHandlerTests.cs @@ -1,5 +1,7 @@ -using CCE.Application.Content; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Commands.UpdateEvent; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -15,67 +17,56 @@ public class UpdateEventCommandHandlerTests new(2026, 9, 1, 17, 0, 0, System.TimeSpan.Zero); [Fact] - public async Task Returns_null_when_event_not_found() + public async Task Returns_not_found_when_event_missing() { - var service = Substitute.For(); - service.FindAsync(Arg.Any(), Arg.Any()).Returns((Event?)null); - var sut = new UpdateEventCommandHandler(service); + var (sut, _, _) = BuildSut(null, System.Guid.NewGuid()); var result = await sut.Handle(BuildCommand(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Updates_content_and_calls_UpdateAsync_with_expected_rowversion() + public async Task Updates_content_and_saves() { var clock = new FakeSystemClock(); + var topicId = System.Guid.NewGuid(); var ev = Event.Schedule( "old-ar", "old-en", "old-desc-ar", "old-desc-en", - StartsOn, EndsOn, null, null, null, null, clock); + StartsOn, EndsOn, null, null, null, null, topicId, clock); - var service = Substitute.For(); - service.FindAsync(ev.Id, Arg.Any()).Returns(ev); - - var sut = new UpdateEventCommandHandler(service); - var rowVersion = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 }; + var (sut, db, repo) = BuildSut(ev, topicId); var cmd = new UpdateEventCommand( ev.Id, "new-ar", "new-en", "new-desc-ar", "new-desc-en", "الرياض", "Riyadh", null, null, - rowVersion); + topicId); var result = await sut.Handle(cmd, CancellationToken.None); - result.Should().NotBeNull(); - result!.TitleEn.Should().Be("new-en"); - result.DescriptionAr.Should().Be("new-desc-ar"); - await service.Received(1).UpdateAsync(ev, rowVersion, Arg.Any()); + result.Success.Should().BeTrue(); + result.Data!.TitleEn.Should().Be("new-en"); + result.Data.DescriptionAr.Should().Be("new-desc-ar"); + await db.Received(1).SaveChangesAsync(Arg.Any()); } - [Fact] - public async Task Propagates_ConcurrencyException_from_UpdateAsync() - { - var clock = new FakeSystemClock(); - var ev = Event.Schedule( - "ar", "en", "desc-ar", "desc-en", - StartsOn, EndsOn, null, null, null, null, clock); - - var service = Substitute.For(); - service.FindAsync(ev.Id, Arg.Any()).Returns(ev); - service.UpdateAsync(default!, default!, default).ReturnsForAnyArgs(_ => - throw new ConcurrencyException("conflict")); - - var sut = new UpdateEventCommandHandler(service); - var cmd = BuildCommand(ev.Id); - - var act = async () => await sut.Handle(cmd, CancellationToken.None); + private static UpdateEventCommand BuildCommand(System.Guid id) => + new(id, "ar", "en", "desc-ar", "desc-en", null, null, null, null, System.Guid.NewGuid()); - await act.Should().ThrowAsync(); + private static (UpdateEventCommandHandler sut, ICceDbContext db, IRepository repo) BuildSut(Event? evToReturn, System.Guid topicId) + { + var repo = Substitute.For>(); + repo.GetByIdAsync(Arg.Any(), Arg.Any()).Returns(evToReturn); + var db = Substitute.For(); + var topic = CCE.Domain.Community.Topic.Create( + "name-ar", "name-en", "desc-ar", "desc-en", "slug", null, null, 0); + typeof(CCE.Domain.Community.Topic).GetProperty(nameof(CCE.Domain.Community.Topic.Id))! + .SetValue(topic, topicId); + db.Topics.Returns(new[] { topic }.AsQueryable()); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return (new UpdateEventCommandHandler(repo, db, new MessageFactory(localization)), db, repo); } - - private static UpdateEventCommand BuildCommand(System.Guid id) => - new(id, "ar", "en", "desc-ar", "desc-en", null, null, null, null, new byte[8]); } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandValidatorTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandValidatorTests.cs index 444aa30e..71b0bfff 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandValidatorTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateEventCommandValidatorTests.cs @@ -9,7 +9,7 @@ public class UpdateEventCommandValidatorTests "حدث", "Event", "وصف", "Description", null, null, null, null, - new byte[8]); + System.Guid.NewGuid()); [Fact] public void Valid_command_passes() @@ -33,15 +33,4 @@ public void Empty_Id_is_rejected() result.Errors.Should().Contain(e => e.PropertyName == nameof(UpdateEventCommand.Id)); } - [Fact] - public void RowVersion_wrong_length_is_rejected() - { - var sut = new UpdateEventCommandValidator(); - var cmd = ValidCmd() with { RowVersion = new byte[4] }; - - var result = sut.Validate(cmd); - - result.IsValid.Should().BeFalse(); - result.Errors.Should().Contain(e => e.PropertyName == nameof(UpdateEventCommand.RowVersion)); - } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandHandlerTests.cs index feeda1de..a042a683 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandHandlerTests.cs @@ -1,5 +1,7 @@ -using CCE.Application.Content; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Commands.UpdateNews; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -9,63 +11,53 @@ namespace CCE.Application.Tests.Content.Commands; public class UpdateNewsCommandHandlerTests { [Fact] - public async Task Returns_null_when_news_not_found() + public async Task Returns_not_found_when_news_missing() { - var service = Substitute.For(); - service.FindAsync(Arg.Any(), Arg.Any()).Returns((News?)null); - var sut = new UpdateNewsCommandHandler(service); + var (sut, _, _) = BuildSut(null, System.Guid.NewGuid()); var result = await sut.Handle(BuildCommand(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Updates_content_and_calls_UpdateAsync_with_expected_rowversion() + public async Task Updates_content_and_saves() { var clock = new FakeSystemClock(); + var topicId = System.Guid.NewGuid(); var news = News.Draft("old-ar", "old-en", "old-content-ar", "old-content-en", - "old-slug", System.Guid.NewGuid(), null, clock); + topicId, System.Guid.NewGuid(), null, clock); - var service = Substitute.For(); - service.FindAsync(news.Id, Arg.Any()).Returns(news); - - var sut = new UpdateNewsCommandHandler(service); - var rowVersion = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 }; + var (sut, db, _) = BuildSut(news, topicId); var cmd = new UpdateNewsCommand( news.Id, "new-ar", "new-en", "new-content-ar", "new-content-en", - "new-slug", null, rowVersion); + topicId, null); var result = await sut.Handle(cmd, CancellationToken.None); - result.Should().NotBeNull(); - result!.TitleEn.Should().Be("new-en"); - result.Slug.Should().Be("new-slug"); - await service.Received(1).UpdateAsync(news, rowVersion, Arg.Any()); + result.Success.Should().BeTrue(); + result.Data!.TitleEn.Should().Be("new-en"); + result.Data.TopicId.Should().Be(topicId); + await db.Received(1).SaveChangesAsync(Arg.Any()); } - [Fact] - public async Task Propagates_ConcurrencyException_from_UpdateAsync() - { - var clock = new FakeSystemClock(); - var news = News.Draft("ar", "en", "content-ar", "content-en", - "my-slug", System.Guid.NewGuid(), null, clock); - - var service = Substitute.For(); - service.FindAsync(news.Id, Arg.Any()).Returns(news); - service.UpdateAsync(default!, default!, default).ReturnsForAnyArgs(_ => - throw new ConcurrencyException("conflict")); - - var sut = new UpdateNewsCommandHandler(service); - var cmd = BuildCommand(news.Id); - - var act = async () => await sut.Handle(cmd, CancellationToken.None); + private static UpdateNewsCommand BuildCommand(System.Guid id) => + new(id, "ar", "en", "content-ar", "content-en", System.Guid.NewGuid(), null); - await act.Should().ThrowAsync(); + private static (UpdateNewsCommandHandler sut, ICceDbContext db, IRepository repo) BuildSut(News? newsToReturn, System.Guid topicId) + { + var repo = Substitute.For>(); + repo.GetByIdAsync(Arg.Any(), Arg.Any()).Returns(newsToReturn); + var db = Substitute.For(); + var topic = CCE.Domain.Community.Topic.Create( + "name-ar", "name-en", "desc-ar", "desc-en", "slug", null, null, 0); + typeof(CCE.Domain.Community.Topic).GetProperty(nameof(CCE.Domain.Community.Topic.Id))! + .SetValue(topic, topicId); + db.Topics.Returns(new[] { topic }.AsQueryable()); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return (new UpdateNewsCommandHandler(repo, db, new MessageFactory(localization)), db, repo); } - - private static UpdateNewsCommand BuildCommand(System.Guid id) => - new(id, "ar", "en", "content-ar", "content-en", "my-slug", null, new byte[8]); } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandValidatorTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandValidatorTests.cs index 0979f430..23b8f0b4 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandValidatorTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateNewsCommandValidatorTests.cs @@ -7,8 +7,7 @@ public class UpdateNewsCommandValidatorTests private static UpdateNewsCommand ValidCmd() => new( System.Guid.NewGuid(), "خبر", "News", "محتوى", "Content", - "first-post", null, - new byte[8]); + System.Guid.NewGuid(), null); [Fact] public void Valid_command_passes() @@ -33,26 +32,14 @@ public void Empty_Id_is_rejected() } [Fact] - public void RowVersion_wrong_length_is_rejected() + public void Empty_topic_id_is_rejected() { var sut = new UpdateNewsCommandValidator(); - var cmd = ValidCmd() with { RowVersion = new byte[4] }; + var cmd = ValidCmd() with { TopicId = System.Guid.Empty }; var result = sut.Validate(cmd); result.IsValid.Should().BeFalse(); - result.Errors.Should().Contain(e => e.PropertyName == nameof(UpdateNewsCommand.RowVersion)); - } - - [Fact] - public void Slug_not_kebab_case_is_rejected() - { - var sut = new UpdateNewsCommandValidator(); - var cmd = ValidCmd() with { Slug = "Bad Slug!" }; - - var result = sut.Validate(cmd); - - result.IsValid.Should().BeFalse(); - result.Errors.Should().Contain(e => e.PropertyName == nameof(UpdateNewsCommand.Slug)); + result.Errors.Should().Contain(e => e.PropertyName == nameof(UpdateNewsCommand.TopicId)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandHandlerTests.cs index b26d480f..7c92390b 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandHandlerTests.cs @@ -1,5 +1,7 @@ -using CCE.Application.Content; +using CCE.Application.Common.Interfaces; using CCE.Application.Content.Commands.UpdateResource; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Common; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -8,93 +10,66 @@ namespace CCE.Application.Tests.Content.Commands; public class UpdateResourceCommandHandlerTests { + private static readonly FakeSystemClock Clock = new(); + [Fact] - public async Task Returns_null_when_resource_not_found() + public async Task Returns_not_found_when_resource_missing() { - var service = Substitute.For(); - service.FindAsync(Arg.Any(), Arg.Any()).Returns((Resource?)null); - var sut = new UpdateResourceCommandHandler(service); + var (sut, _) = BuildSut(null); var result = await sut.Handle(BuildCommand(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Updates_content_and_calls_UpdateAsync_with_expected_rowversion() + public async Task Updates_content_and_saves() { - var clock = new FakeSystemClock(); var resource = Resource.Draft( "old-ar", "old-en", "old-desc-ar", "old-desc-en", - ResourceType.Pdf, System.Guid.NewGuid(), null, - System.Guid.NewGuid(), System.Guid.NewGuid(), clock); - - var service = Substitute.For(); - service.FindAsync(resource.Id, Arg.Any()).Returns(resource); + ResourceType.Paper, System.Guid.NewGuid(), null, + System.Guid.NewGuid(), System.Guid.NewGuid(), + System.Array.Empty(), Clock); - var sut = new UpdateResourceCommandHandler(service); - var rowVersion = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 }; + var category = ResourceCategory.Create("cat-ar", "cat-en", "cat-1", null, 1); + var (sut, db) = BuildSut(resource, categoryId: category.Id); var cmd = new UpdateResourceCommand( resource.Id, "new-ar", "new-en", "new-desc-ar", "new-desc-en", - ResourceType.Video, System.Guid.NewGuid(), - rowVersion); + ResourceType.Article, category.Id, + System.Array.Empty()); var result = await sut.Handle(cmd, CancellationToken.None); - result.Should().NotBeNull(); - result!.TitleEn.Should().Be("new-en"); - result.ResourceType.Should().Be(ResourceType.Video); - await service.Received(1).UpdateAsync(resource, rowVersion, Arg.Any()); + result.Success.Should().BeTrue(); + result.Data!.TitleEn.Should().Be("new-en"); + result.Data.ResourceType.Should().Be(ResourceType.Article); + await db.Received(1).SaveChangesAsync(Arg.Any()); } - [Fact] - public async Task Propagates_DomainException_from_UpdateContent_when_title_empty() - { - var clock = new FakeSystemClock(); - var resource = Resource.Draft( - "old-ar", "old-en", "old-desc-ar", "old-desc-en", - ResourceType.Pdf, System.Guid.NewGuid(), null, - System.Guid.NewGuid(), System.Guid.NewGuid(), clock); - - var service = Substitute.For(); - service.FindAsync(resource.Id, Arg.Any()).Returns(resource); - - var sut = new UpdateResourceCommandHandler(service); - var cmd = new UpdateResourceCommand( - resource.Id, - "", "new-en", "new-desc-ar", "new-desc-en", - ResourceType.Video, System.Guid.NewGuid(), - new byte[8]); - - var act = async () => await sut.Handle(cmd, CancellationToken.None); - - await act.Should().ThrowAsync(); - } + private static UpdateResourceCommand BuildCommand(System.Guid id) => + new(id, "ar", "en", "desc-ar", "desc-en", ResourceType.Paper, System.Guid.NewGuid(), + System.Array.Empty()); - [Fact] - public async Task Propagates_ConcurrencyException_from_UpdateAsync() + private static (UpdateResourceCommandHandler sut, ICceDbContext db) BuildSut(Resource? resourceToReturn, System.Guid? categoryId = null) { - var clock = new FakeSystemClock(); - var resource = Resource.Draft( - "ar", "en", "desc-ar", "desc-en", - ResourceType.Pdf, System.Guid.NewGuid(), null, - System.Guid.NewGuid(), System.Guid.NewGuid(), clock); - - var service = Substitute.For(); - service.FindAsync(resource.Id, Arg.Any()).Returns(resource); - service.UpdateAsync(default!, default!, default).ReturnsForAnyArgs(_ => - throw new ConcurrencyException("conflict")); - - var sut = new UpdateResourceCommandHandler(service); - var cmd = BuildCommand(resource.Id); - - var act = async () => await sut.Handle(cmd, CancellationToken.None); - - await act.Should().ThrowAsync(); + var db = Substitute.For(); + db.Resources.Returns(resourceToReturn is null ? Array.Empty().AsQueryable() : new[] { resourceToReturn }.AsQueryable()); + + if (categoryId.HasValue) + { + var cat = (ResourceCategory)System.Activator.CreateInstance( + typeof(ResourceCategory), + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, + null, + new object?[] { categoryId.Value, "cat-ar", "cat-en", "cat-1", null, 1 }, + null)!; + db.ResourceCategories.Returns(new[] { cat }.AsQueryable()); + } + + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return (new UpdateResourceCommandHandler(db, new MessageFactory(localization)), db); } - - private static UpdateResourceCommand BuildCommand(System.Guid id) => - new(id, "ar", "en", "desc-ar", "desc-en", ResourceType.Pdf, System.Guid.NewGuid(), new byte[8]); } diff --git a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandValidatorTests.cs b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandValidatorTests.cs index cc5f5915..4abe8781 100644 --- a/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandValidatorTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Commands/UpdateResourceCommandValidatorTests.cs @@ -9,9 +9,9 @@ public class UpdateResourceCommandValidatorTests System.Guid.NewGuid(), "عنوان", "Title", "وصف", "Description", - ResourceType.Pdf, + ResourceType.Paper, System.Guid.NewGuid(), - new byte[8]); + new[] { System.Guid.NewGuid() }); [Fact] public void Valid_command_passes() @@ -35,15 +35,4 @@ public void Empty_Id_is_rejected() result.Errors.Should().Contain(e => e.PropertyName == nameof(UpdateResourceCommand.Id)); } - [Fact] - public void RowVersion_wrong_length_is_rejected() - { - var sut = new UpdateResourceCommandValidator(); - var cmd = ValidCmd() with { RowVersion = new byte[4] }; - - var result = sut.Validate(cmd); - - result.IsValid.Should().BeFalse(); - result.Errors.Should().Contain(e => e.PropertyName == nameof(UpdateResourceCommand.RowVersion)); - } } diff --git a/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicEventByIdQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicEventByIdQueryHandlerTests.cs index 1e1d6dbb..25a67e0f 100644 --- a/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicEventByIdQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicEventByIdQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Public.Queries.GetPublicEventById; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -15,38 +17,38 @@ public class GetPublicEventByIdQueryHandlerTests public async Task Returns_dto_when_event_found() { var ev = Event.Schedule("حدث", "Test Event", "وصف", "Description", - BaseTime, BaseTime.AddHours(2), "الرياض", "Riyadh", null, null, Clock); + BaseTime, BaseTime.AddHours(2), "الرياض", "Riyadh", null, null, System.Guid.NewGuid(), Clock); - var db = BuildDb([ev]); - var sut = new GetPublicEventByIdQueryHandler(db); + var sut = BuildSut([ev]); var result = await sut.Handle(new GetPublicEventByIdQuery(ev.Id), CancellationToken.None); - result.Should().NotBeNull(); - result!.Id.Should().Be(ev.Id); - result.TitleEn.Should().Be("Test Event"); - result.StartsOn.Should().Be(BaseTime); - result.EndsOn.Should().Be(BaseTime.AddHours(2)); - result.LocationAr.Should().Be("الرياض"); - result.LocationEn.Should().Be("Riyadh"); - result.ICalUid.Should().NotBeNullOrEmpty(); + result.Success.Should().BeTrue(); + result.Data!.Id.Should().Be(ev.Id); + result.Data.TitleEn.Should().Be("Test Event"); + result.Data.StartsOn.Should().Be(BaseTime); + result.Data.EndsOn.Should().Be(BaseTime.AddHours(2)); + result.Data.LocationAr.Should().Be("الرياض"); + result.Data.LocationEn.Should().Be("Riyadh"); + result.Data.ICalUid.Should().NotBeNullOrEmpty(); } [Fact] - public async Task Returns_null_when_event_not_found() + public async Task Returns_not_found_when_event_missing() { - var db = BuildDb(Array.Empty()); - var sut = new GetPublicEventByIdQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new GetPublicEventByIdQuery(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } - private static ICceDbContext BuildDb(IEnumerable events) + private static GetPublicEventByIdQueryHandler BuildSut(IEnumerable events) { var db = Substitute.For(); db.Events.Returns(events.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new GetPublicEventByIdQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicNewsBySlugQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicNewsBySlugQueryHandlerTests.cs index 93cd82f3..3ff134c2 100644 --- a/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicNewsBySlugQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicNewsBySlugQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Public.Queries.GetPublicNewsBySlug; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -12,48 +14,49 @@ public class GetPublicNewsBySlugQueryHandlerTests [Fact] public async Task Returns_dto_when_news_is_published_and_slug_matches() { - var news = News.Draft("عنوان", "Published News", "محتوى", "Content", "published-slug", System.Guid.NewGuid(), null, Clock); + var topicId = System.Guid.NewGuid(); + var authorId = System.Guid.NewGuid(); + var news = News.Draft("عنوان", "Published News", "محتوى", "Content", topicId, authorId, null, Clock); news.Publish(Clock); - var db = BuildDb([news]); - var sut = new GetPublicNewsBySlugQueryHandler(db); + var sut = BuildSut([news]); - var result = await sut.Handle(new GetPublicNewsBySlugQuery("published-slug"), CancellationToken.None); + var result = await sut.Handle(new GetPublicNewsBySlugQuery("published-news"), CancellationToken.None); - result.Should().NotBeNull(); - result!.Slug.Should().Be("published-slug"); - result.TitleEn.Should().Be("Published News"); - result.PublishedOn.Should().NotBe(default); + result.Success.Should().BeTrue(); + result.Data!.Id.Should().Be(news.Id); + result.Data.TitleEn.Should().Be("Published News"); + result.Data.PublishedOn.Should().NotBe(default); } [Fact] - public async Task Returns_null_when_slug_not_found() + public async Task Returns_not_found_when_slug_missing() { - var db = BuildDb(Array.Empty()); - var sut = new GetPublicNewsBySlugQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new GetPublicNewsBySlugQuery("no-such-slug"), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Returns_null_when_news_found_but_not_published() + public async Task Returns_not_found_when_news_exists_but_not_published() { - var news = News.Draft("مسودة", "Draft News", "محتوى", "Content", "draft-slug", System.Guid.NewGuid(), null, Clock); + var news = News.Draft("مسودة", "Draft News", "محتوى", "Content", System.Guid.NewGuid(), System.Guid.NewGuid(), null, Clock); - var db = BuildDb([news]); - var sut = new GetPublicNewsBySlugQueryHandler(db); + var sut = BuildSut([news]); - var result = await sut.Handle(new GetPublicNewsBySlugQuery("draft-slug"), CancellationToken.None); + var result = await sut.Handle(new GetPublicNewsBySlugQuery("draft-news"), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } - private static ICceDbContext BuildDb(IEnumerable news) + private static GetPublicNewsBySlugQueryHandler BuildSut(IEnumerable news) { var db = Substitute.For(); db.News.Returns(news.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new GetPublicNewsBySlugQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicResourceByIdQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicResourceByIdQueryHandlerTests.cs index f672d528..68b9ec40 100644 --- a/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicResourceByIdQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Public/Queries/GetPublicResourceByIdQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Public.Queries.GetPublicResourceById; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -17,52 +19,51 @@ public async Task Returns_dto_when_resource_is_published() var asset = System.Guid.NewGuid(); var resource = Resource.Draft("عنوان", "Published Resource", "وصف", "Description", - ResourceType.Document, cat, null, uploader, asset, Clock); + ResourceType.ScientificPaper, cat, null, uploader, asset, System.Array.Empty(), Clock); resource.Publish(Clock); - var db = BuildDb([resource]); - var sut = new GetPublicResourceByIdQueryHandler(db); + var sut = BuildSut([resource]); var result = await sut.Handle(new GetPublicResourceByIdQuery(resource.Id), CancellationToken.None); - result.Should().NotBeNull(); - result!.Id.Should().Be(resource.Id); - result.TitleEn.Should().Be("Published Resource"); + result.Success.Should().BeTrue(); + result.Data!.Id.Should().Be(resource.Id); + result.Data.TitleEn.Should().Be("Published Resource"); } [Fact] - public async Task Returns_null_when_resource_not_found() + public async Task Returns_not_found_when_resource_missing() { - var db = BuildDb(Array.Empty()); - var sut = new GetPublicResourceByIdQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new GetPublicResourceByIdQuery(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] - public async Task Returns_null_when_resource_exists_but_is_not_published() + public async Task Returns_not_found_when_resource_exists_but_is_not_published() { var cat = System.Guid.NewGuid(); var uploader = System.Guid.NewGuid(); var asset = System.Guid.NewGuid(); var resource = Resource.Draft("مسودة", "Draft Resource", "وصف", "Description", - ResourceType.Document, cat, null, uploader, asset, Clock); + ResourceType.ScientificPaper, cat, null, uploader, asset, System.Array.Empty(), Clock); - var db = BuildDb([resource]); - var sut = new GetPublicResourceByIdQueryHandler(db); + var sut = BuildSut([resource]); var result = await sut.Handle(new GetPublicResourceByIdQuery(resource.Id), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } - private static ICceDbContext BuildDb(IEnumerable resources) + private static GetPublicResourceByIdQueryHandler BuildSut(IEnumerable resources) { var db = Substitute.For(); db.Resources.Returns(resources.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new GetPublicResourceByIdQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicEventsQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicEventsQueryHandlerTests.cs index 2bce748e..d6b08732 100644 --- a/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicEventsQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicEventsQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Public.Queries.ListPublicEvents; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -14,62 +16,64 @@ public class ListPublicEventsQueryHandlerTests [Fact] public async Task Returns_empty_paged_result_when_no_events_exist() { - var db = BuildDb(Array.Empty()); - var sut = new ListPublicEventsQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new ListPublicEventsQuery(Page: 1, PageSize: 20, From: BaseTime, To: BaseTime.AddDays(30)), CancellationToken.None); - result.Items.Should().BeEmpty(); - result.Total.Should().Be(0); - result.Page.Should().Be(1); - result.PageSize.Should().Be(20); + result.Success.Should().BeTrue(); + result.Data!.Items.Should().BeEmpty(); + result.Data.Total.Should().Be(0); + result.Data.Page.Should().Be(1); + result.Data.PageSize.Should().Be(20); } [Fact] public async Task Returns_events_sorted_by_StartsOn_ascending() { + var topicId = System.Guid.NewGuid(); var earlier = Event.Schedule("أ", "Earlier Event", "وصف", "Description A", - BaseTime, BaseTime.AddHours(2), null, null, null, null, Clock); + BaseTime, BaseTime.AddHours(2), null, null, null, null, topicId, Clock); var later = Event.Schedule("ب", "Later Event", "وصف ب", "Description B", - BaseTime.AddDays(1), BaseTime.AddDays(1).AddHours(2), null, null, null, null, Clock); + BaseTime.AddDays(1), BaseTime.AddDays(1).AddHours(2), null, null, null, null, topicId, Clock); - var db = BuildDb([earlier, later]); - var sut = new ListPublicEventsQueryHandler(db); + var sut = BuildSut([earlier, later]); var result = await sut.Handle(new ListPublicEventsQuery(Page: 1, PageSize: 20, From: BaseTime.AddMinutes(-1), To: BaseTime.AddDays(2)), CancellationToken.None); - result.Total.Should().Be(2); - result.Items.Should().HaveCount(2); - result.Items[0].TitleEn.Should().Be("Earlier Event"); - result.Items[1].TitleEn.Should().Be("Later Event"); + result.Data!.Total.Should().Be(2); + result.Data.Items.Should().HaveCount(2); + result.Data.Items[0].TitleEn.Should().Be("Earlier Event"); + result.Data.Items[1].TitleEn.Should().Be("Later Event"); } [Fact] public async Task From_to_range_filter_returns_only_events_in_range() { + var topicId = System.Guid.NewGuid(); var inRange = Event.Schedule("داخل النطاق", "In Range", "وصف", "Description", - BaseTime.AddDays(5), BaseTime.AddDays(5).AddHours(1), null, null, null, null, Clock); + BaseTime.AddDays(5), BaseTime.AddDays(5).AddHours(1), null, null, null, null, topicId, Clock); var tooEarly = Event.Schedule("مبكر", "Too Early", "وصف", "Description", - BaseTime.AddDays(-1), BaseTime.AddDays(-1).AddHours(1), null, null, null, null, Clock); + BaseTime.AddDays(-1), BaseTime.AddDays(-1).AddHours(1), null, null, null, null, topicId, Clock); var tooLate = Event.Schedule("متأخر", "Too Late", "وصف", "Description", - BaseTime.AddDays(12), BaseTime.AddDays(12).AddHours(1), null, null, null, null, Clock); + BaseTime.AddDays(12), BaseTime.AddDays(12).AddHours(1), null, null, null, null, topicId, Clock); - var db = BuildDb([inRange, tooEarly, tooLate]); - var sut = new ListPublicEventsQueryHandler(db); + var sut = BuildSut([inRange, tooEarly, tooLate]); var result = await sut.Handle(new ListPublicEventsQuery(Page: 1, PageSize: 20, From: BaseTime, To: BaseTime.AddDays(10)), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("In Range"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("In Range"); } - private static ICceDbContext BuildDb(IEnumerable events) + private static ListPublicEventsQueryHandler BuildSut(IEnumerable events) { var db = Substitute.For(); db.Events.Returns(events.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new ListPublicEventsQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicNewsQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicNewsQueryHandlerTests.cs index 8c23d3fa..c802920e 100644 --- a/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicNewsQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicNewsQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Public.Queries.ListPublicNews; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -12,58 +14,60 @@ public class ListPublicNewsQueryHandlerTests [Fact] public async Task Returns_empty_paged_result_when_no_news_exist() { - var db = BuildDb(Array.Empty()); - var sut = new ListPublicNewsQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new ListPublicNewsQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Items.Should().BeEmpty(); - result.Total.Should().Be(0); - result.Page.Should().Be(1); - result.PageSize.Should().Be(20); + result.Success.Should().BeTrue(); + result.Data!.Items.Should().BeEmpty(); + result.Data.Total.Should().Be(0); + result.Data.Page.Should().Be(1); + result.Data.PageSize.Should().Be(20); } [Fact] public async Task Only_published_news_are_returned() { - var published = News.Draft("منشور", "Published", "محتوى", "Content", "published-slug", System.Guid.NewGuid(), null, Clock); + var topicId = System.Guid.NewGuid(); + var published = News.Draft("منشور", "Published", "محتوى", "Content", topicId, System.Guid.NewGuid(), null, Clock); published.Publish(Clock); - var draft = News.Draft("مسودة", "Draft", "محتوى", "Content", "draft-slug", System.Guid.NewGuid(), null, Clock); + var draft = News.Draft("مسودة", "Draft", "محتوى", "Content", topicId, System.Guid.NewGuid(), null, Clock); - var db = BuildDb([published, draft]); - var sut = new ListPublicNewsQueryHandler(db); + var sut = BuildSut([published, draft]); var result = await sut.Handle(new ListPublicNewsQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("Published"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("Published"); } [Fact] public async Task IsFeatured_filter_returns_only_featured_published_news() { - var featured = News.Draft("مميز", "Featured", "محتوى", "Content", "featured-slug", System.Guid.NewGuid(), null, Clock); + var topicId = System.Guid.NewGuid(); + var featured = News.Draft("مميز", "Featured", "محتوى", "Content", topicId, System.Guid.NewGuid(), null, Clock); featured.Publish(Clock); featured.MarkFeatured(); - var notFeatured = News.Draft("عادي", "Regular", "محتوى", "Content", "regular-slug", System.Guid.NewGuid(), null, Clock); + var notFeatured = News.Draft("عادي", "Regular", "محتوى", "Content", topicId, System.Guid.NewGuid(), null, Clock); notFeatured.Publish(Clock); - var db = BuildDb([featured, notFeatured]); - var sut = new ListPublicNewsQueryHandler(db); + var sut = BuildSut([featured, notFeatured]); var result = await sut.Handle(new ListPublicNewsQuery(Page: 1, PageSize: 20, IsFeatured: true), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("Featured"); - result.Items.Single().IsFeatured.Should().BeTrue(); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("Featured"); + result.Data.Items.Single().IsFeatured.Should().BeTrue(); } - private static ICceDbContext BuildDb(IEnumerable news) + private static ListPublicNewsQueryHandler BuildSut(IEnumerable news) { var db = Substitute.For(); db.News.Returns(news.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new ListPublicNewsQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicResourcesQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicResourcesQueryHandlerTests.cs index 327c97c1..6373933a 100644 --- a/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicResourcesQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Public/Queries/ListPublicResourcesQueryHandlerTests.cs @@ -1,7 +1,10 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Public.Queries.ListPublicResources; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; +using DomainCountry = CCE.Domain.Country; namespace CCE.Application.Tests.Content.Public.Queries; @@ -12,15 +15,15 @@ public class ListPublicResourcesQueryHandlerTests [Fact] public async Task Returns_empty_paged_result_when_no_resources_exist() { - var db = BuildDb(Array.Empty()); - var sut = new ListPublicResourcesQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new ListPublicResourcesQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Items.Should().BeEmpty(); - result.Total.Should().Be(0); - result.Page.Should().Be(1); - result.PageSize.Should().Be(20); + result.Success.Should().BeTrue(); + result.Data!.Items.Should().BeEmpty(); + result.Data.Total.Should().Be(0); + result.Data.Page.Should().Be(1); + result.Data.PageSize.Should().Be(20); } [Fact] @@ -31,19 +34,18 @@ public async Task Only_published_resources_are_returned() var asset = System.Guid.NewGuid(); var published = Resource.Draft("عنوان", "Published", "وصف", "Description", - ResourceType.Document, cat, null, uploader, asset, Clock); + ResourceType.ScientificPaper, cat, null, uploader, asset, System.Array.Empty(), Clock); published.Publish(Clock); var draft = Resource.Draft("مسودة", "Draft", "وصف", "Description", - ResourceType.Document, cat, null, uploader, asset, Clock); + ResourceType.ScientificPaper, cat, null, uploader, asset, System.Array.Empty(), Clock); - var db = BuildDb([published, draft]); - var sut = new ListPublicResourcesQueryHandler(db); + var sut = BuildSut([published, draft]); var result = await sut.Handle(new ListPublicResourcesQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("Published"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("Published"); } [Fact] @@ -55,21 +57,20 @@ public async Task CategoryId_filter_returns_only_matching_published_resources() var asset = System.Guid.NewGuid(); var match = Resource.Draft("فئة أ", "Category A", "وصف", "Description", - ResourceType.Document, catA, null, uploader, asset, Clock); + ResourceType.ScientificPaper, catA, null, uploader, asset, System.Array.Empty(), Clock); match.Publish(Clock); var noMatch = Resource.Draft("فئة ب", "Category B", "وصف", "Description", - ResourceType.Document, catB, null, uploader, asset, Clock); + ResourceType.ScientificPaper, catB, null, uploader, asset, System.Array.Empty(), Clock); noMatch.Publish(Clock); - var db = BuildDb([match, noMatch]); - var sut = new ListPublicResourcesQueryHandler(db); + var sut = BuildSut([match, noMatch]); var result = await sut.Handle(new ListPublicResourcesQuery(Page: 1, PageSize: 20, CategoryId: catA), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("Category A"); - result.Items.Single().CategoryId.Should().Be(catA); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("Category A"); + result.Data.Items.Single().CategoryId.Should().Be(catA); } [Fact] @@ -80,26 +81,30 @@ public async Task ResourceType_filter_returns_only_matching_published_resources( var asset = System.Guid.NewGuid(); var doc = Resource.Draft("وثيقة", "Document", "وصف", "Description", - ResourceType.Document, cat, null, uploader, asset, Clock); + ResourceType.ScientificPaper, cat, null, uploader, asset, System.Array.Empty(), Clock); doc.Publish(Clock); var video = Resource.Draft("فيديو", "Video", "وصف", "Description", - ResourceType.Video, cat, null, uploader, asset, Clock); + ResourceType.Article, cat, null, uploader, asset, System.Array.Empty(), Clock); video.Publish(Clock); - var db = BuildDb([doc, video]); - var sut = new ListPublicResourcesQueryHandler(db); + var sut = BuildSut([doc, video]); - var result = await sut.Handle(new ListPublicResourcesQuery(Page: 1, PageSize: 20, ResourceType: ResourceType.Video), CancellationToken.None); + var result = await sut.Handle(new ListPublicResourcesQuery(Page: 1, PageSize: 20, ResourceType: ResourceType.Article), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("Video"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("Video"); } - private static ICceDbContext BuildDb(IEnumerable resources) + private static ListPublicResourcesQueryHandler BuildSut(IEnumerable resources) { var db = Substitute.For(); db.Resources.Returns(resources.AsQueryable()); - return db; + db.ResourceCategories.Returns(Array.Empty().AsQueryable()); + db.AssetFiles.Returns(Array.Empty().AsQueryable()); + db.Countries.Returns(Array.Empty().AsQueryable()); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new ListPublicResourcesQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Queries/GetEventByIdQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Queries/GetEventByIdQueryHandlerTests.cs index 1b3d7c4e..88ec5672 100644 --- a/backend/tests/CCE.Application.Tests/Content/Queries/GetEventByIdQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Queries/GetEventByIdQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Queries.GetEventById; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -12,48 +14,48 @@ public class GetEventByIdQueryHandlerTests new(2026, 6, 1, 10, 0, 0, System.TimeSpan.Zero); [Fact] - public async Task Returns_null_when_event_not_found() + public async Task Returns_not_found_when_event_missing() { - var db = BuildDb(Array.Empty()); - var sut = new GetEventByIdQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new GetEventByIdQuery(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] public async Task Returns_dto_with_all_fields_when_found() { + var topicId = System.Guid.NewGuid(); var ev = Event.Schedule("حدث تجريبي", "Test Event Title", "وصف عربي", "English description", BaseTime, BaseTime.AddHours(3), "الرياض", "Riyadh", - "https://example.com/meeting", "https://example.com/image.jpg", Clock); + "https://example.com/meeting", "https://example.com/image.jpg", topicId, Clock); - var db = BuildDb([ev]); - var sut = new GetEventByIdQueryHandler(db); + var sut = BuildSut([ev]); var result = await sut.Handle(new GetEventByIdQuery(ev.Id), CancellationToken.None); - result.Should().NotBeNull(); - result!.Id.Should().Be(ev.Id); - result.TitleAr.Should().Be("حدث تجريبي"); - result.TitleEn.Should().Be("Test Event Title"); - result.DescriptionAr.Should().Be("وصف عربي"); - result.DescriptionEn.Should().Be("English description"); - result.StartsOn.Should().Be(BaseTime); - result.EndsOn.Should().Be(BaseTime.AddHours(3)); - result.LocationAr.Should().Be("الرياض"); - result.LocationEn.Should().Be("Riyadh"); - result.OnlineMeetingUrl.Should().Be("https://example.com/meeting"); - result.FeaturedImageUrl.Should().Be("https://example.com/image.jpg"); - result.ICalUid.Should().EndWith("@cce.moenergy.gov.sa"); - result.RowVersion.Should().NotBeNull(); + result.Success.Should().BeTrue(); + result.Data!.Id.Should().Be(ev.Id); + result.Data.TitleAr.Should().Be("حدث تجريبي"); + result.Data.TitleEn.Should().Be("Test Event Title"); + result.Data.DescriptionAr.Should().Be("وصف عربي"); + result.Data.DescriptionEn.Should().Be("English description"); + result.Data.StartsOn.Should().Be(BaseTime); + result.Data.EndsOn.Should().Be(BaseTime.AddHours(3)); + result.Data.LocationAr.Should().Be("الرياض"); + result.Data.LocationEn.Should().Be("Riyadh"); + result.Data.OnlineMeetingUrl.Should().Be("https://example.com/meeting"); + result.Data.FeaturedImageUrl.Should().Be("https://example.com/image.jpg"); + result.Data.ICalUid.Should().EndWith("@cce.moenergy.gov.sa"); } - private static ICceDbContext BuildDb(IEnumerable events) + private static GetEventByIdQueryHandler BuildSut(IEnumerable events) { var db = Substitute.For(); db.Events.Returns(events.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new GetEventByIdQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Queries/GetNewsByIdQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Queries/GetNewsByIdQueryHandlerTests.cs index b8db6c2f..1d8a64be 100644 --- a/backend/tests/CCE.Application.Tests/Content/Queries/GetNewsByIdQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Queries/GetNewsByIdQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Queries.GetNewsById; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -10,49 +12,49 @@ public class GetNewsByIdQueryHandlerTests private static readonly FakeSystemClock Clock = new(); [Fact] - public async Task Returns_null_when_news_not_found() + public async Task Returns_not_found_when_news_missing() { - var db = BuildDb(Array.Empty()); - var sut = new GetNewsByIdQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new GetNewsByIdQuery(System.Guid.NewGuid()), CancellationToken.None); - result.Should().BeNull(); + result.Success.Should().BeFalse(); } [Fact] public async Task Returns_dto_with_all_fields_when_found() { var authorId = System.Guid.NewGuid(); + var topicId = System.Guid.NewGuid(); var news = News.Draft("عنوان", "Test News Title", "المحتوى العربي", "English content body", - "test-news-title", authorId, "https://example.com/image.jpg", Clock); + topicId, authorId, "https://example.com/image.jpg", Clock); news.Publish(Clock); news.MarkFeatured(); - var db = BuildDb([news]); - var sut = new GetNewsByIdQueryHandler(db); + var sut = BuildSut([news]); var result = await sut.Handle(new GetNewsByIdQuery(news.Id), CancellationToken.None); - result.Should().NotBeNull(); - result!.Id.Should().Be(news.Id); - result.TitleAr.Should().Be("عنوان"); - result.TitleEn.Should().Be("Test News Title"); - result.ContentAr.Should().Be("المحتوى العربي"); - result.ContentEn.Should().Be("English content body"); - result.Slug.Should().Be("test-news-title"); - result.AuthorId.Should().Be(authorId); - result.FeaturedImageUrl.Should().Be("https://example.com/image.jpg"); - result.IsPublished.Should().BeTrue(); - result.PublishedOn.Should().NotBeNull(); - result.IsFeatured.Should().BeTrue(); - result.RowVersion.Should().NotBeNull(); + result.Success.Should().BeTrue(); + result.Data!.Id.Should().Be(news.Id); + result.Data.TitleAr.Should().Be("عنوان"); + result.Data.TitleEn.Should().Be("Test News Title"); + result.Data.ContentAr.Should().Be("المحتوى العربي"); + result.Data.ContentEn.Should().Be("English content body"); + result.Data.TopicId.Should().Be(topicId); + result.Data.AuthorId.Should().Be(authorId); + result.Data.FeaturedImageUrl.Should().Be("https://example.com/image.jpg"); + result.Data.IsPublished.Should().BeTrue(); + result.Data.PublishedOn.Should().NotBeNull(); + result.Data.IsFeatured.Should().BeTrue(); } - private static ICceDbContext BuildDb(IEnumerable news) + private static GetNewsByIdQueryHandler BuildSut(IEnumerable news) { var db = Substitute.For(); db.News.Returns(news.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new GetNewsByIdQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Queries/ListEventsQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Queries/ListEventsQueryHandlerTests.cs index 9c22a8b6..23db547e 100644 --- a/backend/tests/CCE.Application.Tests/Content/Queries/ListEventsQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Queries/ListEventsQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Queries.ListEvents; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -14,74 +16,76 @@ public class ListEventsQueryHandlerTests [Fact] public async Task Returns_empty_paged_result_when_no_events_exist() { - var db = BuildDb(Array.Empty()); - var sut = new ListEventsQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new ListEventsQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Items.Should().BeEmpty(); - result.Total.Should().Be(0); - result.Page.Should().Be(1); - result.PageSize.Should().Be(20); + result.Success.Should().BeTrue(); + result.Data!.Items.Should().BeEmpty(); + result.Data.Total.Should().Be(0); + result.Data.Page.Should().Be(1); + result.Data.PageSize.Should().Be(20); } [Fact] public async Task Returns_events_sorted_by_StartsOn_descending() { + var topicId = System.Guid.NewGuid(); var later = Event.Schedule("ب", "Later Event", "وصف ب", "Description B", - BaseTime.AddDays(1), BaseTime.AddDays(1).AddHours(2), null, null, null, null, Clock); + BaseTime.AddDays(1), BaseTime.AddDays(1).AddHours(2), null, null, null, null, topicId, Clock); var earlier = Event.Schedule("أ", "Earlier Event", "وصف", "Description A", - BaseTime, BaseTime.AddHours(2), null, null, null, null, Clock); + BaseTime, BaseTime.AddHours(2), null, null, null, null, topicId, Clock); - var db = BuildDb([later, earlier]); - var sut = new ListEventsQueryHandler(db); + var sut = BuildSut([later, earlier]); var result = await sut.Handle(new ListEventsQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Total.Should().Be(2); - result.Items.Should().HaveCount(2); - result.Items[0].TitleEn.Should().Be("Later Event"); - result.Items[1].TitleEn.Should().Be("Earlier Event"); + result.Data!.Total.Should().Be(2); + result.Data.Items.Should().HaveCount(2); + result.Data.Items[0].TitleEn.Should().Be("Later Event"); + result.Data.Items[1].TitleEn.Should().Be("Earlier Event"); } [Fact] public async Task Search_filter_matches_title_ar_or_title_en() { + var topicId = System.Guid.NewGuid(); var ev = Event.Schedule("مطابق", "matching-event", "وصف", "Description", - BaseTime, BaseTime.AddHours(1), null, null, null, null, Clock); + BaseTime, BaseTime.AddHours(1), null, null, null, null, topicId, Clock); - var db = BuildDb([ev]); - var sut = new ListEventsQueryHandler(db); + var sut = BuildSut([ev]); var result = await sut.Handle(new ListEventsQuery(Search: "matching"), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("matching-event"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("matching-event"); } [Fact] public async Task FromDate_and_ToDate_filters_work() { + var topicId = System.Guid.NewGuid(); var inRange = Event.Schedule("في النطاق", "InRange", "وصف", "Description", - BaseTime.AddDays(5), BaseTime.AddDays(5).AddHours(1), null, null, null, null, Clock); + BaseTime.AddDays(5), BaseTime.AddDays(5).AddHours(1), null, null, null, null, topicId, Clock); var beforeRange = Event.Schedule("قبل", "Before", "وصف", "Description", - BaseTime.AddDays(-1), BaseTime.AddDays(-1).AddHours(1), null, null, null, null, Clock); + BaseTime.AddDays(-1), BaseTime.AddDays(-1).AddHours(1), null, null, null, null, topicId, Clock); var afterRange = Event.Schedule("بعد", "After", "وصف", "Description", - BaseTime.AddDays(10), BaseTime.AddDays(10).AddHours(1), null, null, null, null, Clock); + BaseTime.AddDays(10), BaseTime.AddDays(10).AddHours(1), null, null, null, null, topicId, Clock); - var db = BuildDb([inRange, beforeRange, afterRange]); - var sut = new ListEventsQueryHandler(db); + var sut = BuildSut([inRange, beforeRange, afterRange]); var result = await sut.Handle(new ListEventsQuery(FromDate: BaseTime, ToDate: BaseTime.AddDays(7)), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("InRange"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("InRange"); } - private static ICceDbContext BuildDb(IEnumerable events) + private static ListEventsQueryHandler BuildSut(IEnumerable events) { var db = Substitute.For(); db.Events.Returns(events.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new ListEventsQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Queries/ListNewsQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Queries/ListNewsQueryHandlerTests.cs index e0388187..37979245 100644 --- a/backend/tests/CCE.Application.Tests/Content/Queries/ListNewsQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Queries/ListNewsQueryHandlerTests.cs @@ -1,5 +1,7 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Queries.ListNews; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; @@ -12,83 +14,85 @@ public class ListNewsQueryHandlerTests [Fact] public async Task Returns_empty_when_no_news() { - var db = BuildDb(Array.Empty()); - var sut = new ListNewsQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new ListNewsQuery(), CancellationToken.None); - result.Items.Should().BeEmpty(); - result.Total.Should().Be(0); - result.Page.Should().Be(1); - result.PageSize.Should().Be(20); + result.Success.Should().BeTrue(); + result.Data!.Items.Should().BeEmpty(); + result.Data.Total.Should().Be(0); + result.Data.Page.Should().Be(1); + result.Data.PageSize.Should().Be(20); } [Fact] public async Task Returns_news_sorted_by_PublishedOn_descending() { - var older = News.Draft("أ", "Older", "محتوى", "Content A", "older-article", System.Guid.NewGuid(), null, Clock); + var topicId = System.Guid.NewGuid(); + var older = News.Draft("أ", "Older", "محتوى", "Content A", topicId, System.Guid.NewGuid(), null, Clock); older.Publish(Clock); Clock.Advance(System.TimeSpan.FromSeconds(1)); - var newer = News.Draft("ب", "Newer", "محتوى ب", "Content B", "newer-article", System.Guid.NewGuid(), null, Clock); + var newer = News.Draft("ب", "Newer", "محتوى ب", "Content B", topicId, System.Guid.NewGuid(), null, Clock); newer.Publish(Clock); - var db = BuildDb([newer, older]); - var sut = new ListNewsQueryHandler(db); + var sut = BuildSut([newer, older]); var result = await sut.Handle(new ListNewsQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Total.Should().Be(2); - result.Items.Should().HaveCount(2); - result.Items[0].TitleEn.Should().Be("Newer"); - result.Items[1].TitleEn.Should().Be("Older"); + result.Data!.Total.Should().Be(2); + result.Data.Items.Should().HaveCount(2); + result.Data.Items[0].TitleEn.Should().Be("Newer"); + result.Data.Items[1].TitleEn.Should().Be("Older"); } [Fact] public async Task Search_filter_matches_title_ar_title_en_or_slug() { - var news = News.Draft("مطابق", "matching-title", "محتوى", "content", "matching-slug", System.Guid.NewGuid(), null, Clock); + var topicId = System.Guid.NewGuid(); + var news = News.Draft("مطابق", "matching-title", "محتوى", "content", topicId, System.Guid.NewGuid(), null, Clock); - var db = BuildDb([news]); - var sut = new ListNewsQueryHandler(db); + var sut = BuildSut([news]); var result = await sut.Handle(new ListNewsQuery(Search: "matching"), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("matching-title"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("matching-title"); } [Fact] public async Task IsPublished_and_IsFeatured_filters_work() { - var published = News.Draft("منشور", "published-news", "محتوى", "content", "published-news", System.Guid.NewGuid(), null, Clock); + var topicId = System.Guid.NewGuid(); + var published = News.Draft("منشور", "published-news", "محتوى", "content", topicId, System.Guid.NewGuid(), null, Clock); published.Publish(Clock); - var featured = News.Draft("مميز", "featured-news", "محتوى", "content", "featured-news", System.Guid.NewGuid(), null, Clock); + var featured = News.Draft("مميز", "featured-news", "محتوى", "content", topicId, System.Guid.NewGuid(), null, Clock); featured.Publish(Clock); featured.MarkFeatured(); - var draft = News.Draft("مسودة", "draft-news", "محتوى", "content", "draft-news", System.Guid.NewGuid(), null, Clock); + var draft = News.Draft("مسودة", "draft-news", "محتوى", "content", topicId, System.Guid.NewGuid(), null, Clock); - var db = BuildDb([published, featured, draft]); - var sut = new ListNewsQueryHandler(db); + var sut = BuildSut([published, featured, draft]); var publishedResult = await sut.Handle(new ListNewsQuery(IsPublished: true), CancellationToken.None); - publishedResult.Total.Should().Be(2); - publishedResult.Items.Should().OnlyContain(n => n.IsPublished); + publishedResult.Data!.Total.Should().Be(2); + publishedResult.Data.Items.Should().OnlyContain(n => n.IsPublished); var featuredResult = await sut.Handle(new ListNewsQuery(IsFeatured: true), CancellationToken.None); - featuredResult.Total.Should().Be(1); - featuredResult.Items.Single().TitleEn.Should().Be("featured-news"); + featuredResult.Data!.Total.Should().Be(1); + featuredResult.Data.Items.Single().TitleEn.Should().Be("featured-news"); var draftResult = await sut.Handle(new ListNewsQuery(IsPublished: false), CancellationToken.None); - draftResult.Total.Should().Be(1); - draftResult.Items.Single().TitleEn.Should().Be("draft-news"); + draftResult.Data!.Total.Should().Be(1); + draftResult.Data.Items.Single().TitleEn.Should().Be("draft-news"); } - private static ICceDbContext BuildDb(IEnumerable news) + private static ListNewsQueryHandler BuildSut(IEnumerable news) { var db = Substitute.For(); db.News.Returns(news.AsQueryable()); - return db; + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new ListNewsQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Application.Tests/Content/Queries/ListResourcesQueryHandlerTests.cs b/backend/tests/CCE.Application.Tests/Content/Queries/ListResourcesQueryHandlerTests.cs index 91c9f9a9..fb00345c 100644 --- a/backend/tests/CCE.Application.Tests/Content/Queries/ListResourcesQueryHandlerTests.cs +++ b/backend/tests/CCE.Application.Tests/Content/Queries/ListResourcesQueryHandlerTests.cs @@ -1,7 +1,10 @@ using CCE.Application.Common.Interfaces; using CCE.Application.Content.Queries.ListResources; +using CCE.Application.Localization; +using CCE.Application.Messages; using CCE.Domain.Content; using CCE.TestInfrastructure.Time; +using DomainCountry = CCE.Domain.Country; namespace CCE.Application.Tests.Content.Queries; @@ -12,15 +15,15 @@ public class ListResourcesQueryHandlerTests [Fact] public async Task Returns_empty_paged_result_when_no_resources_exist() { - var db = BuildDb(Array.Empty()); - var sut = new ListResourcesQueryHandler(db); + var sut = BuildSut(Array.Empty()); var result = await sut.Handle(new ListResourcesQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Items.Should().BeEmpty(); - result.Total.Should().Be(0); - result.Page.Should().Be(1); - result.PageSize.Should().Be(20); + result.Success.Should().BeTrue(); + result.Data!.Items.Should().BeEmpty(); + result.Data.Total.Should().Be(0); + result.Data.Page.Should().Be(1); + result.Data.PageSize.Should().Be(20); } [Fact] @@ -31,22 +34,21 @@ public async Task Returns_resources_sorted_by_PublishedOn_descending() var asset = System.Guid.NewGuid(); var older = Resource.Draft("أ", "A", "وصف أ", "Desc A", - ResourceType.Pdf, cat, null, uploader, asset, Clock); + ResourceType.Paper, cat, null, uploader, asset, System.Array.Empty(), Clock); older.Publish(Clock); Clock.Advance(System.TimeSpan.FromSeconds(1)); var newer = Resource.Draft("ب", "B", "وصف ب", "Desc B", - ResourceType.Video, cat, null, uploader, asset, Clock); + ResourceType.Article, cat, null, uploader, asset, System.Array.Empty(), Clock); newer.Publish(Clock); - var db = BuildDb([newer, older]); - var sut = new ListResourcesQueryHandler(db); + var sut = BuildSut([newer, older]); var result = await sut.Handle(new ListResourcesQuery(Page: 1, PageSize: 20), CancellationToken.None); - result.Total.Should().Be(2); - result.Items.Should().HaveCount(2); - result.Items[0].TitleEn.Should().Be("B"); - result.Items[1].TitleEn.Should().Be("A"); + result.Data!.Total.Should().Be(2); + result.Data.Items.Should().HaveCount(2); + result.Data.Items[0].TitleEn.Should().Be("B"); + result.Data.Items[1].TitleEn.Should().Be("A"); } [Fact] @@ -57,15 +59,14 @@ public async Task Search_filter_matches_title_ar_title_en_description_ar_or_desc var asset = System.Guid.NewGuid(); var resource = Resource.Draft("مطابق", "matching", "وصف", "desc", - ResourceType.Pdf, cat, null, uploader, asset, Clock); + ResourceType.Paper, cat, null, uploader, asset, System.Array.Empty(), Clock); - var db = BuildDb([resource]); - var sut = new ListResourcesQueryHandler(db); + var sut = BuildSut([resource]); var result = await sut.Handle(new ListResourcesQuery(Search: "matching"), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("matching"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("matching"); } [Fact] @@ -76,20 +77,19 @@ public async Task IsPublished_filter_returns_only_published_resources() var asset = System.Guid.NewGuid(); var published = Resource.Draft("منشور", "published", "وصف", "desc", - ResourceType.Pdf, cat, null, uploader, asset, Clock); + ResourceType.Paper, cat, null, uploader, asset, System.Array.Empty(), Clock); published.Publish(Clock); var draft = Resource.Draft("مسودة", "draft", "وصف", "desc", - ResourceType.Pdf, cat, null, uploader, asset, Clock); + ResourceType.Paper, cat, null, uploader, asset, System.Array.Empty(), Clock); - var db = BuildDb([published, draft]); - var sut = new ListResourcesQueryHandler(db); + var sut = BuildSut([published, draft]); var result = await sut.Handle(new ListResourcesQuery(IsPublished: true), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("published"); - result.Items.Single().IsPublished.Should().BeTrue(); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("published"); + result.Data.Items.Single().IsPublished.Should().BeTrue(); } [Fact] @@ -101,23 +101,27 @@ public async Task CategoryId_filter_returns_only_matching_resources() var asset = System.Guid.NewGuid(); var match = Resource.Draft("أ", "Match", "وصف", "desc", - ResourceType.Pdf, catA, null, uploader, asset, Clock); + ResourceType.Paper, catA, null, uploader, asset, System.Array.Empty(), Clock); var noMatch = Resource.Draft("ب", "NoMatch", "وصف", "desc", - ResourceType.Pdf, catB, null, uploader, asset, Clock); + ResourceType.Paper, catB, null, uploader, asset, System.Array.Empty(), Clock); - var db = BuildDb([match, noMatch]); - var sut = new ListResourcesQueryHandler(db); + var sut = BuildSut([match, noMatch]); var result = await sut.Handle(new ListResourcesQuery(CategoryId: catA), CancellationToken.None); - result.Total.Should().Be(1); - result.Items.Single().TitleEn.Should().Be("Match"); + result.Data!.Total.Should().Be(1); + result.Data.Items.Single().TitleEn.Should().Be("Match"); } - private static ICceDbContext BuildDb(IEnumerable resources) + private static ListResourcesQueryHandler BuildSut(IEnumerable resources) { var db = Substitute.For(); db.Resources.Returns(resources.AsQueryable()); - return db; + db.ResourceCategories.Returns(Array.Empty().AsQueryable()); + db.AssetFiles.Returns(Array.Empty().AsQueryable()); + db.Countries.Returns(Array.Empty().AsQueryable()); + var localization = Substitute.For(); + localization.GetString(Arg.Any(), Arg.Any()).Returns(call => call.ArgAt(0)); + return new ListResourcesQueryHandler(db, new MessageFactory(localization)); } } diff --git a/backend/tests/CCE.Domain.Tests/Content/EventTests.cs b/backend/tests/CCE.Domain.Tests/Content/EventTests.cs index f9e81e87..f701c6a5 100644 --- a/backend/tests/CCE.Domain.Tests/Content/EventTests.cs +++ b/backend/tests/CCE.Domain.Tests/Content/EventTests.cs @@ -21,6 +21,7 @@ private static Event NewEvent(FakeSystemClock clock) => locationEn: "Riyadh", onlineMeetingUrl: null, featuredImageUrl: null, + topicId: System.Guid.NewGuid(), clock: clock); [Fact] @@ -45,10 +46,11 @@ public void Schedule_raises_EventScheduledEvent() public void EndsOn_must_be_after_StartsOn() { var clock = NewClock(); + var topicId = System.Guid.NewGuid(); var act = () => Event.Schedule("ا", "x", "ا", "x", clock.UtcNow.AddDays(7), clock.UtcNow.AddDays(7), - null, null, null, null, clock); + null, null, null, null, topicId, clock); act.Should().Throw().WithMessage("*EndsOn*"); } @@ -56,10 +58,11 @@ public void EndsOn_must_be_after_StartsOn() public void EndsOn_before_StartsOn_throws() { var clock = NewClock(); + var topicId = System.Guid.NewGuid(); var act = () => Event.Schedule("ا", "x", "ا", "x", clock.UtcNow.AddDays(7), clock.UtcNow.AddDays(6), - null, null, null, null, clock); + null, null, null, null, topicId, clock); act.Should().Throw(); } @@ -67,10 +70,11 @@ public void EndsOn_before_StartsOn_throws() public void OnlineMeetingUrl_must_be_https() { var clock = NewClock(); + var topicId = System.Guid.NewGuid(); var act = () => Event.Schedule("ا", "x", "ا", "x", clock.UtcNow.AddDays(7), clock.UtcNow.AddDays(7).AddHours(2), - null, null, "http://insecure", null, clock); + null, null, "http://insecure", null, topicId, clock); act.Should().Throw().WithMessage("*https*"); } @@ -120,7 +124,8 @@ public void UpdateContent_mutates_editable_fields_when_inputs_valid() "وصف جديد", "New Description", "جدة", "Jeddah", "https://meet.example.com/room", - "https://img.example.com/banner.jpg"); + "https://img.example.com/banner.jpg", + e.TopicId); e.TitleAr.Should().Be("عنوان جديد"); e.TitleEn.Should().Be("New Title"); @@ -142,7 +147,8 @@ public void UpdateContent_throws_DomainException_when_meeting_url_not_https() "ا", "x", "ا", "x", null, null, "http://insecure.example.com", - null); + null, + e.TopicId); act.Should().Throw().WithMessage("*https*"); } diff --git a/backend/tests/CCE.Domain.Tests/Content/NewsTests.cs b/backend/tests/CCE.Domain.Tests/Content/NewsTests.cs index 5c2780e1..b8b8331a 100644 --- a/backend/tests/CCE.Domain.Tests/Content/NewsTests.cs +++ b/backend/tests/CCE.Domain.Tests/Content/NewsTests.cs @@ -15,7 +15,7 @@ private static News NewDraft(FakeSystemClock clock) => titleEn: "News", contentAr: "محتوى", contentEn: "Content", - slug: "first-post", + topicId: System.Guid.NewGuid(), authorId: System.Guid.NewGuid(), featuredImageUrl: null, clock: clock); @@ -30,19 +30,11 @@ public void Draft_creates_unpublished_news() n.IsFeatured.Should().BeFalse(); } - [Fact] - public void Slug_must_be_kebab_case() - { - var clock = NewClock(); - var act = () => News.Draft("ا", "x", "ا", "x", "Bad Slug", System.Guid.NewGuid(), null, clock); - act.Should().Throw().WithMessage("*slug*"); - } - [Fact] public void FeaturedImageUrl_must_be_https() { var clock = NewClock(); - var act = () => News.Draft("ا", "x", "ا", "x", "x", System.Guid.NewGuid(), "http://insecure", clock); + var act = () => News.Draft("ا", "x", "ا", "x", System.Guid.NewGuid(), System.Guid.NewGuid(), "http://insecure", clock); act.Should().Throw().WithMessage("*https*"); } @@ -98,25 +90,15 @@ public void UpdateContent_mutates_editable_fields_when_inputs_valid() titleEn: "New News", contentAr: "محتوى جديد", contentEn: "New Content", - slug: "new-slug", + topicId: n.TopicId, featuredImageUrl: "https://example.com/image.jpg"); n.TitleAr.Should().Be("خبر جديد"); n.TitleEn.Should().Be("New News"); n.ContentAr.Should().Be("محتوى جديد"); n.ContentEn.Should().Be("New Content"); - n.Slug.Should().Be("new-slug"); n.FeaturedImageUrl.Should().Be("https://example.com/image.jpg"); } - [Fact] - public void UpdateContent_throws_DomainException_when_slug_not_kebab_case() - { - var clock = NewClock(); - var n = NewDraft(clock); - var act = () => n.UpdateContent("خبر", "News", "محتوى", "Content", "Bad Slug!", null); - - act.Should().Throw().WithMessage("*slug*"); - } } diff --git a/backend/tests/CCE.Domain.Tests/Content/ResourceTests.cs b/backend/tests/CCE.Domain.Tests/Content/ResourceTests.cs index 5d9de191..5e1a1f63 100644 --- a/backend/tests/CCE.Domain.Tests/Content/ResourceTests.cs +++ b/backend/tests/CCE.Domain.Tests/Content/ResourceTests.cs @@ -9,18 +9,22 @@ public class ResourceTests { private static FakeSystemClock NewClock() => new(); - private static Resource NewDraft(FakeSystemClock clock, System.Guid? countryId = null) => - Resource.Draft( + private static Resource NewDraft(FakeSystemClock clock, System.Guid? countryId = null) + { + var countryIds = countryId.HasValue ? new[] { countryId.Value } : System.Array.Empty(); + return Resource.Draft( titleAr: "مورد", titleEn: "Resource", descriptionAr: "وصف", descriptionEn: "Description", - resourceType: ResourceType.Pdf, + resourceType: ResourceType.Paper, categoryId: System.Guid.NewGuid(), countryId: countryId, uploadedById: System.Guid.NewGuid(), assetFileId: System.Guid.NewGuid(), + countryIds: countryIds, clock: clock); + } [Fact] public void Draft_factory_creates_unpublished_resource() @@ -57,8 +61,9 @@ public void Draft_with_country_marks_country_managed() public void Draft_with_empty_titleAr_throws() { var clock = NewClock(); - var act = () => Resource.Draft("", "x", "x", "x", ResourceType.Pdf, - System.Guid.NewGuid(), null, System.Guid.NewGuid(), System.Guid.NewGuid(), clock); + var act = () => Resource.Draft("", "x", "x", "x", ResourceType.Paper, + System.Guid.NewGuid(), null, System.Guid.NewGuid(), System.Guid.NewGuid(), + System.Array.Empty(), clock); act.Should().Throw().WithMessage("*TitleAr*"); } @@ -122,13 +127,13 @@ public void UpdateContent_mutates_editable_fields_when_inputs_valid() var r = NewDraft(clock); var newCategoryId = System.Guid.NewGuid(); - r.UpdateContent("new-ar", "new-en", "new-desc-ar", "new-desc-en", ResourceType.Video, newCategoryId); + r.UpdateContent("new-ar", "new-en", "new-desc-ar", "new-desc-en", ResourceType.Article, newCategoryId, System.Array.Empty()); r.TitleAr.Should().Be("new-ar"); r.TitleEn.Should().Be("new-en"); r.DescriptionAr.Should().Be("new-desc-ar"); r.DescriptionEn.Should().Be("new-desc-en"); - r.ResourceType.Should().Be(ResourceType.Video); + r.ResourceType.Should().Be(ResourceType.Article); r.CategoryId.Should().Be(newCategoryId); } @@ -138,7 +143,7 @@ public void UpdateContent_throws_DomainException_when_titleAr_empty() var clock = NewClock(); var r = NewDraft(clock); - var act = () => r.UpdateContent("", "en", "desc-ar", "desc-en", ResourceType.Pdf, System.Guid.NewGuid()); + var act = () => r.UpdateContent("", "en", "desc-ar", "desc-en", ResourceType.Paper, System.Guid.NewGuid(), System.Array.Empty()); act.Should().Throw().WithMessage("*TitleAr*"); } diff --git a/backend/tests/CCE.Domain.Tests/Content/RowVersionContractTests.cs b/backend/tests/CCE.Domain.Tests/Content/RowVersionContractTests.cs index 2b90a411..b2462c9d 100644 --- a/backend/tests/CCE.Domain.Tests/Content/RowVersionContractTests.cs +++ b/backend/tests/CCE.Domain.Tests/Content/RowVersionContractTests.cs @@ -26,8 +26,9 @@ public void Aggregate_root_exposes_byte_array_RowVersion(System.Type type) public void Resource_RowVersion_initialised_to_empty_array() { var clock = new FakeSystemClock(); - var r = Resource.Draft("ا", "x", "ا", "x", ResourceType.Pdf, - System.Guid.NewGuid(), null, System.Guid.NewGuid(), System.Guid.NewGuid(), clock); + var r = Resource.Draft("ا", "x", "ا", "x", ResourceType.Paper, + System.Guid.NewGuid(), null, System.Guid.NewGuid(), System.Guid.NewGuid(), + System.Array.Empty(), clock); r.RowVersion.Should().NotBeNull(); r.RowVersion.Should().BeEmpty(); } diff --git a/backend/tests/CCE.Domain.Tests/Country/CountryResourceRequestTests.cs b/backend/tests/CCE.Domain.Tests/Country/CountryResourceRequestTests.cs index a97d9aa2..25e9f8ea 100644 --- a/backend/tests/CCE.Domain.Tests/Country/CountryResourceRequestTests.cs +++ b/backend/tests/CCE.Domain.Tests/Country/CountryResourceRequestTests.cs @@ -16,7 +16,7 @@ private static CountryResourceRequest NewPending(FakeSystemClock clock) => requestedById: System.Guid.NewGuid(), titleAr: "عنوان", titleEn: "Title", descriptionAr: "وصف", descriptionEn: "Description", - resourceType: ResourceType.Pdf, + resourceType: ResourceType.Paper, assetFileId: System.Guid.NewGuid(), clock: clock); diff --git a/backend/tests/CCE.Infrastructure.Tests/Search/MeilisearchIndexerHandlerTests.cs b/backend/tests/CCE.Infrastructure.Tests/Search/MeilisearchIndexerHandlerTests.cs index 44ba4409..4ac47b11 100644 --- a/backend/tests/CCE.Infrastructure.Tests/Search/MeilisearchIndexerHandlerTests.cs +++ b/backend/tests/CCE.Infrastructure.Tests/Search/MeilisearchIndexerHandlerTests.cs @@ -38,7 +38,7 @@ public async Task News_published_handler_upserts_document() "News Title", "محتوى عربي", "English content", - "news-title", + System.Guid.NewGuid(), System.Guid.NewGuid(), null, clock); @@ -76,11 +76,12 @@ public async Task Resource_published_handler_upserts_document() "Resource Title", "وصف عربي", "English description", - ResourceType.Document, + ResourceType.ScientificPaper, categoryId: System.Guid.NewGuid(), countryId: null, uploadedById: System.Guid.NewGuid(), assetFileId: System.Guid.NewGuid(), + countryIds: System.Array.Empty(), clock); resource.Publish(clock); @@ -122,6 +123,7 @@ public async Task Event_scheduled_handler_upserts_document() locationEn: null, onlineMeetingUrl: null, featuredImageUrl: null, + System.Guid.NewGuid(), clock); await using var db = BuildDb(); diff --git a/backend/tests/CCE.Infrastructure.Tests/Seeder/DemoDataSeederTests.cs b/backend/tests/CCE.Infrastructure.Tests/Seeder/DemoDataSeederTests.cs index 61921eac..99b045ff 100644 --- a/backend/tests/CCE.Infrastructure.Tests/Seeder/DemoDataSeederTests.cs +++ b/backend/tests/CCE.Infrastructure.Tests/Seeder/DemoDataSeederTests.cs @@ -8,19 +8,25 @@ namespace CCE.Infrastructure.Tests.Seeder; public class DemoDataSeederTests { - private static (CceDbContext Ctx, DemoDataSeeder Seeder) Build() + private static async Task<(CceDbContext Ctx, DemoDataSeeder Seeder)> BuildAsync() { var ctx = new CceDbContext(new DbContextOptionsBuilder() .UseInMemoryDatabase(System.Guid.NewGuid().ToString()) .Options); - return (ctx, new DemoDataSeeder(ctx, new FakeSystemClock(), + var clock = new FakeSystemClock(); + // Seed reference data (countries, topics, categories, etc.) first, since + // DemoDataSeeder depends on topics for News/Event TopicId associations. + var referenceSeeder = new ReferenceDataSeeder(ctx, clock, + NullLogger.Instance); + await referenceSeeder.SeedAsync(default); + return (ctx, new DemoDataSeeder(ctx, clock, NullLogger.Instance)); } [Fact] public async Task Seeds_news_and_event() { - var (ctx, seeder) = Build(); + var (ctx, seeder) = await BuildAsync(); using (ctx) { await seeder.SeedAsync(); @@ -32,7 +38,7 @@ public async Task Seeds_news_and_event() [Fact] public async Task News_articles_are_published() { - var (ctx, seeder) = Build(); + var (ctx, seeder) = await BuildAsync(); using (ctx) { await seeder.SeedAsync(); @@ -44,13 +50,13 @@ public async Task News_articles_are_published() [Fact] public async Task Idempotent() { - var (ctx, seeder) = Build(); + var (ctx, seeder) = await BuildAsync(); using (ctx) { await seeder.SeedAsync(); var firstNews = await ctx.News.CountAsync(); await seeder.SeedAsync(); - var secondNews = await ctx.News.CountAsync(); + var secondNews = ctx.News.Count(); secondNews.Should().Be(firstNews); } }