Skip to content

Commit 7d34ece

Browse files
Add crud for election rounds (#857)
* Add crud for election rounds * Update Validator.cs * Improve endpoints for election rounds * make phone number not mandatory * rework validation of phone number * Implement edit ps /location * undo delete * fix dashboard search * fix filtering * Refactor form builders * Rework form templates fix form builder * Refactor forms * Rebuild migrations * fix observers tab queries * more fixez and improvements * Update packages * Fix monitoring observers view/edit * Fix .net build, fix navigations * Fix new form * use navigate without void * fix file name casing * fix linting issues * Cleanup and fix add translations * Add election rounds filtering * Update form-submissions-queries.ts * Update ElectionRoundForm.tsx * Delete hooks.ts * Update queries.ts * Update PreviewDialogs.tsx * better errors * Update observer.ts * Cleanup * Potential fix for code scanning alert no. 1118: Unused variable, import, function or class Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * Potential fix for code scanning alert no. 1098: Unused variable, import, function or class Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
1 parent efd4889 commit 7d34ece

File tree

385 files changed

+35630
-8371
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

385 files changed

+35630
-8371
lines changed

api/src/Feature.CitizenReports/Specifications/GetFormSpecification.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Vote.Monitor.Domain.Entities.FormAggregate;
2+
using Vote.Monitor.Domain.Entities.FormBase;
23

34
namespace Feature.CitizenReports.Specifications;
45

api/src/Feature.DataExport/Start/FormSubmissionsFilters.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Vote.Monitor.Core.Models;
22
using Vote.Monitor.Domain.Entities.ExportedDataAggregate.Filters;
33
using Vote.Monitor.Domain.Entities.FormAggregate;
4+
using Vote.Monitor.Domain.Entities.FormBase;
45
using Vote.Monitor.Domain.Entities.FormSubmissionAggregate;
56
using Vote.Monitor.Domain.Entities.MonitoringObserverAggregate;
67

api/src/Feature.Form.Submissions/GetAggregated/Endpoint.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Vote.Monitor.Core.Services.FileStorage.Contracts;
77
using Vote.Monitor.Domain;
88
using Vote.Monitor.Domain.Entities.FormAggregate;
9+
using Vote.Monitor.Domain.Entities.FormBase;
910
using Vote.Monitor.Domain.Entities.PollingStationInfoFormAggregate;
1011

1112
namespace Feature.Form.Submissions.GetAggregated;

api/src/Feature.Form.Submissions/ListByObserver/ObserverSubmissionOverview.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public record ObserverSubmissionOverview
88
public Guid MonitoringObserverId { get; init; }
99
public string ObserverName { get; init; } = default!;
1010
public string Email { get; init; } = default!;
11-
public string PhoneNumber { get; init; } = default!;
11+
public string? PhoneNumber { get; init; } = default!;
1212
public string NgoName { get; init; } = default!;
1313
public string[] Tags { get; init; } = [];
1414
public int NumberOfFlaggedAnswers { get; init; }

api/src/Feature.Form.Submissions/ListEntries/FormSubmissionEntry.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Ardalis.SmartEnum.SystemTextJson;
33
using Vote.Monitor.Core.Models;
44
using Vote.Monitor.Domain.Entities.FormAggregate;
5+
using Vote.Monitor.Domain.Entities.FormBase;
56
using Vote.Monitor.Domain.Entities.MonitoringObserverAggregate;
67

78
namespace Feature.Form.Submissions.ListEntries;
@@ -28,7 +29,7 @@ public record FormSubmissionEntry
2829
public Guid MonitoringObserverId { get; init; }
2930
public string ObserverName { get; init; } = default!;
3031
public string Email { get; init; } = default!;
31-
public string PhoneNumber { get; init; } = default!;
32+
public string? PhoneNumber { get; init; } = default!;
3233
public string NgoName { get; init; } = default!;
3334
public string[] Tags { get; init; } = [];
3435
public int NumberOfQuestionsAnswered { get; init; }

api/src/Feature.Form.Submissions/ListEntries/Request.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Vote.Monitor.Core.Models;
22
using Vote.Monitor.Core.Security;
33
using Vote.Monitor.Domain.Entities.FormAggregate;
4+
using Vote.Monitor.Domain.Entities.FormBase;
45
using Vote.Monitor.Domain.Entities.MonitoringObserverAggregate;
56

67
namespace Feature.Form.Submissions.ListEntries;

api/src/Feature.FormTemplates/Create/Endpoint.cs

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,25 @@
44
namespace Feature.FormTemplates.Create;
55

66
public class Endpoint(IRepository<FormTemplate> repository) :
7-
Endpoint<Request, Results<Ok<FormTemplateSlimModel>, Conflict<ProblemDetails>>>
7+
Endpoint<Request, Ok<FormTemplateFullModel>>
88
{
99
public override void Configure()
1010
{
1111
Post("/api/form-templates");
1212
Policies(PolicyNames.PlatformAdminsOnly);
1313
}
1414

15-
public override async Task<Results<Ok<FormTemplateSlimModel>, Conflict<ProblemDetails>>> ExecuteAsync(Request req, CancellationToken ct)
15+
public override async Task<Ok<FormTemplateFullModel>> ExecuteAsync(Request req, CancellationToken ct)
1616
{
17-
var specification = new GetFormTemplateSpecification(req.Code, req.FormType);
18-
var duplicatedFormTemplate = await repository.AnyAsync(specification, ct);
19-
20-
if (duplicatedFormTemplate)
21-
{
22-
AddError(r => r.Code, "A form template with same parameters already exists");
23-
return TypedResults.Conflict(new ProblemDetails(ValidationFailures));
24-
}
25-
2617
var questions = req.Questions.Select(QuestionsMapper.ToEntity)
2718
.ToList()
2819
.AsReadOnly();
29-
30-
var formTemplate = Vote.Monitor.Domain.Entities.FormTemplateAggregate.FormTemplate.Create(req.FormType, req.Code, req.DefaultLanguage, req.Name, req.Description, req.Languages, questions);
20+
21+
var formTemplate = FormTemplate.Create(req.FormType, req.Code, req.DefaultLanguage, req.Name, req.Description,
22+
req.Languages, req.Icon, questions);
3123

3224
await repository.AddAsync(formTemplate, ct);
3325

34-
return TypedResults.Ok(new FormTemplateSlimModel
35-
{
36-
Id = formTemplate.Id,
37-
FormType = formTemplate.FormType,
38-
Code = formTemplate.Code,
39-
Languages = formTemplate.Languages,
40-
DefaultLanguage = formTemplate.DefaultLanguage,
41-
Name = formTemplate.Name,
42-
Description = formTemplate.Description,
43-
Status = formTemplate.Status,
44-
CreatedOn = formTemplate.CreatedOn,
45-
LastModifiedOn = formTemplate.LastModifiedOn
46-
});
26+
return TypedResults.Ok(FormTemplateFullModel.FromEntity(formTemplate));
4727
}
4828
}

api/src/Feature.FormTemplates/Create/Request.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Vote.Monitor.Core.Models;
22
using Vote.Monitor.Domain.Entities.FormAggregate;
3+
using Vote.Monitor.Domain.Entities.FormBase;
34
using Vote.Monitor.Form.Module.Requests;
45

56
namespace Feature.FormTemplates.Create;
@@ -12,6 +13,7 @@ public class Request
1213
public TranslatedString Description { get; set; } = new();
1314
public FormType FormType { get; set; }
1415
public List<string> Languages { get; set; } = [];
16+
public string? Icon { get; set; }
1517
public List<BaseQuestionRequest> Questions { get; set; } = [];
1618

1719
}
Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,46 @@
1-
using Vote.Monitor.Form.Module.Models;
1+
using Vote.Monitor.Core.Models;
2+
using Vote.Monitor.Domain.Entities.FormAggregate;
3+
using Vote.Monitor.Domain.Entities.FormBase;
4+
using Vote.Monitor.Form.Module.Models;
25

36
namespace Feature.FormTemplates;
47

5-
public record FormTemplateFullModel : FormTemplateSlimModel
8+
public record FormTemplateFullModel
69
{
7-
public List<BaseQuestionModel> Questions { get; init; } = [];
10+
public TranslatedString Description { get; init; }
11+
12+
public required Guid Id { get; init; }
13+
14+
public required FormType FormType { get; init; }
15+
16+
public required string Code { get; init; }
17+
public TranslatedString Name { get; init; }
18+
19+
public required FormStatus Status { get; init; }
20+
21+
public required string DefaultLanguage { get; init; }
22+
public required string[] Languages { get; init; } = [];
23+
public int NumberOfQuestions { get; init; }
24+
public string? Icon { get; init; }
25+
26+
public LanguagesTranslationStatus LanguagesTranslationStatus { get; init; }
27+
public IReadOnlyList<BaseQuestionModel> Questions { get; init; } = [];
28+
29+
public static FormTemplateFullModel FromEntity(FormTemplateAggregate formTemplate) => formTemplate == null
30+
? null
31+
: new FormTemplateFullModel
32+
{
33+
Id = formTemplate.Id,
34+
Code = formTemplate.Code,
35+
FormType = formTemplate.FormType,
36+
Status = formTemplate.Status,
37+
DefaultLanguage = formTemplate.DefaultLanguage,
38+
Languages = formTemplate.Languages,
39+
Name = formTemplate.Name,
40+
Questions = formTemplate.Questions.Select(QuestionsMapper.ToModel).ToList(),
41+
NumberOfQuestions = formTemplate.NumberOfQuestions,
42+
Description = formTemplate.Description,
43+
LanguagesTranslationStatus = formTemplate.LanguagesTranslationStatus,
44+
Icon = formTemplate.Icon,
45+
};
846
}
Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
1-
using System.Text.Json.Serialization;
2-
using Ardalis.SmartEnum.SystemTextJson;
3-
using Vote.Monitor.Core.Models;
1+
using Vote.Monitor.Core.Models;
42
using Vote.Monitor.Domain.Entities.FormAggregate;
5-
using Vote.Monitor.Domain.Entities.FormTemplateAggregate;
3+
using Vote.Monitor.Domain.Entities.FormBase;
64

75
namespace Feature.FormTemplates;
86

97
public record FormTemplateSlimModel
108
{
11-
public Guid Id { get; init; }
9+
public TranslatedString Description { get; set; }
10+
11+
public required Guid Id { get; init; }
12+
13+
public required FormType FormType { get; init; }
14+
1215
public required string Code { get; init; }
16+
public TranslatedString Name { get; init; }
17+
public string? Icon { get; init; }
18+
19+
public required FormStatus Status { get; init; }
20+
1321
public required string DefaultLanguage { get; init; }
14-
public string[] Languages { get; init; } = [];
22+
public required string[] Languages { get; init; } = [];
23+
public int NumberOfQuestions { get; init; }
24+
public required DateTime LastModifiedOn { get; init; }
1525

16-
public required TranslatedString Name { get; init; }
17-
public required TranslatedString Description { get; init; }
26+
public string LastModifiedBy { get; init; }
1827

19-
[JsonConverter(typeof(SmartEnumNameConverter<FormType, string>))]
20-
public required FormType FormType { get; init; }
2128

22-
[JsonConverter(typeof(SmartEnumNameConverter<FormTemplateStatus, string>))]
23-
public required FormTemplateStatus Status { get; init; }
24-
public int NumberOfQuestions { get; set; }
25-
public required DateTime CreatedOn { get; init; }
26-
public required DateTime? LastModifiedOn { get; init; }
29+
public LanguagesTranslationStatus LanguagesTranslationStatus { get; init; }
2730
}

0 commit comments

Comments
 (0)