Skip to content

Commit e688720

Browse files
authored
Add display order column (#865)
* Add display order column * Update Fake.Form.cs
1 parent 76c9946 commit e688720

File tree

24 files changed

+7160
-94
lines changed

24 files changed

+7160
-94
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ await monitoringNgoRepository.FirstOrDefaultAsync(
4040
.AsReadOnly();
4141

4242
var form = FormAggregate.Create(req.ElectionRoundId, monitoringNgo.Id, req.FormType, req.Code, req.Name,
43-
req.Description, req.DefaultLanguage, req.Languages, req.Icon, questions);
43+
req.Description, req.DefaultLanguage, req.Languages, req.Icon, displayOrder: 0, questions);
4444

4545
await monitoringNgoRepository.UpdateAsync(monitoringNgo, ct);
4646

4747
await formsRepository.AddAsync(form, ct);
4848
return TypedResults.Ok(FormFullModel.FromEntity(form));
4949
}
50-
}
50+
}

api/src/Feature.Forms/FetchAll/Endpoint.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ public override async Task<Results<Ok<NgoFormsResponseModel>, NotFound>> Execute
5454
{
5555
resultForms.AddRange(await context.CoalitionFormAccess
5656
.Include(x => x.Form)
57-
.Where(x => x.MonitoringNgoId == monitoringNgo.MonitoringNgoId && x.Coalition.ElectionRoundId == req.ElectionRoundId)
57+
.Where(x => x.MonitoringNgoId == monitoringNgo.MonitoringNgoId &&
58+
x.Coalition.ElectionRoundId == req.ElectionRoundId)
5859
.Where(x => x.Form.FormType != FormType.CitizenReporting)
5960
.Select(f => FormFullModel.FromEntity(f.Form))
6061
.AsNoTracking()
@@ -77,7 +78,7 @@ public override async Task<Results<Ok<NgoFormsResponseModel>, NotFound>> Execute
7778
{
7879
ElectionRoundId = monitoringNgo.ElectionRoundId,
7980
Version = DeterministicGuid.Create(resultForms.Select(x => x.Id)).ToString(),
80-
Forms = resultForms
81+
Forms = resultForms.OrderBy(x => x.DisplayOrder).ToList()
8182
});
8283
}
8384
}

api/src/Feature.Forms/FetchCitizenReportingForms/Endpoint.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ public override async Task<Results<NotFound, Ok<NgoFormsResponseModel>>> Execute
5959
{
6060
ElectionRoundId = monitoringNgo.ElectionRoundId,
6161
Version = monitoringNgo.FormsVersion.ToString(),
62-
Forms = forms.Select(FormFullModel.FromEntity).ToList()
62+
Forms = forms.Select(FormFullModel.FromEntity).OrderBy(x => x.DisplayOrder).ToList()
6363
};
6464
});
6565

6666
return TypedResults.Ok(cachedResponse!);
6767
}
68-
}
68+
}

api/src/Feature.Forms/Models/FormFullModel.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@ public class FormFullModel
2525
public required string DefaultLanguage { get; init; }
2626
public required string[] Languages { get; init; } = [];
2727
public int NumberOfQuestions { get; init; }
28-
public string? Icon { get; set; }
28+
public string? Icon { get; init; }
29+
public IReadOnlyList<BaseQuestionModel> Questions { get; init; } = [];
2930

3031
public LanguagesTranslationStatus LanguagesTranslationStatus { get; init; }
3132

33+
public int DisplayOrder { get; init; }
34+
3235
public static FormFullModel FromEntity(FormAggregate form) => form == null
3336
? null
3437
: new FormFullModel
@@ -46,7 +49,4 @@ public static FormFullModel FromEntity(FormAggregate form) => form == null
4649
LanguagesTranslationStatus = form.LanguagesTranslationStatus,
4750
Icon = form.Icon
4851
};
49-
50-
51-
public IReadOnlyList<BaseQuestionModel> Questions { get; init; } = [];
5252
}

api/src/Feature.Forms/Update/Endpoint.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public override async Task<Results<NoContent, NotFound>> ExecuteAsync(Request re
4949
.AsReadOnly();
5050

5151
form.UpdateDetails(req.Code, req.Name, req.Description, req.FormType, req.DefaultLanguage, req.Languages,
52-
req.Icon, questions);
52+
req.Icon, displayOrder: 0, questions);
5353

5454
await formsRepository.UpdateAsync(form, ct);
5555

api/src/Feature.PollingStation.Information.Form/Upsert/Endpoint.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ private async Task<Results<Ok<PollingStationInformationFormModel>, NotFound>> Up
3737
CancellationToken ct)
3838
{
3939
pollingStationInformationForm.UpdateDetails("PSI", TranslatedString.New(languages, "PSI"),
40-
TranslatedString.New(languages, "PSI"), FormType.PSI, defaultLanguage, languages, null, questions);
40+
TranslatedString.New(languages, "PSI"), FormType.PSI, defaultLanguage, languages, null, displayOrder: 0,
41+
questions);
4142
await repository.UpdateAsync(pollingStationInformationForm, ct);
4243

4344
return TypedResults.Ok(PollingStationInformationFormModel.FromEntity(pollingStationInformationForm));
@@ -62,4 +63,4 @@ private async Task<Results<Ok<PollingStationInformationFormModel>, NotFound>> Ad
6263

6364
return TypedResults.Ok(PollingStationInformationFormModel.FromEntity(pollingStationInformationForm));
6465
}
65-
}
66+
}

api/src/Vote.Monitor.Domain/Entities/FormAggregate/Form.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ private Form(
2828
string defaultLanguage,
2929
IEnumerable<string> languages,
3030
string? icon,
31+
int displayOrder,
3132
IEnumerable<BaseQuestion> questions) : base(electionRound,
3233
formType,
3334
code,
@@ -37,7 +38,8 @@ private Form(
3738
languages,
3839
icon,
3940
questions,
40-
FormStatus.Drafted)
41+
FormStatus.Drafted,
42+
displayOrder)
4143
{
4244
MonitoringNgoId = monitoringNgo.Id;
4345
MonitoringNgo = monitoringNgo;
@@ -53,6 +55,7 @@ private Form(
5355
string defaultLanguage,
5456
IEnumerable<string> languages,
5557
string? icon,
58+
int displayOrder,
5659
IEnumerable<BaseQuestion> questions) : base(
5760
electionRoundId,
5861
formType,
@@ -63,7 +66,8 @@ private Form(
6366
languages,
6467
icon,
6568
questions,
66-
FormStatus.Drafted)
69+
FormStatus.Drafted,
70+
displayOrder)
6771
{
6872
MonitoringNgoId = monitoringNgoId;
6973
}
@@ -81,7 +85,8 @@ public Form(Guid id,
8185
string[] languages,
8286
string? icon,
8387
int numberOfQuestions,
84-
LanguagesTranslationStatus languagesTranslationStatus) : base(id,
88+
LanguagesTranslationStatus languagesTranslationStatus,
89+
int displayOrder) : base(id,
8590
electionRoundId,
8691
formType,
8792
code,
@@ -92,7 +97,8 @@ public Form(Guid id,
9297
languages,
9398
icon,
9499
numberOfQuestions,
95-
languagesTranslationStatus)
100+
languagesTranslationStatus,
101+
displayOrder)
96102
{
97103
MonitoringNgoId = monitoringNgoId;
98104
}
@@ -107,9 +113,10 @@ public static Form Create(
107113
string defaultLanguage,
108114
IEnumerable<string> languages,
109115
string? icon,
116+
int displayOrder,
110117
IEnumerable<BaseQuestion> questions) =>
111118
new(electionRound, monitoringNgo, formType, code, name, description, defaultLanguage, languages, icon,
112-
questions);
119+
displayOrder, questions);
113120

114121
public static Form Create(
115122
Guid electionRoundId,
@@ -121,13 +128,14 @@ public static Form Create(
121128
string defaultLanguage,
122129
IEnumerable<string> languages,
123130
string? icon,
131+
int displayOrder,
124132
IEnumerable<BaseQuestion> questions) =>
125133
new(electionRoundId, monitoringNgoId, formType, code, name, description, defaultLanguage, languages, icon,
126-
questions);
134+
displayOrder, questions);
127135

128136
public Form Duplicate() =>
129137
new(ElectionRoundId, MonitoringNgoId, FormType, Code, Name, Description, DefaultLanguage, Languages, Icon,
130-
Questions);
138+
DisplayOrder, Questions);
131139

132140
public FormSubmission CreateFormSubmission(
133141
PollingStation pollingStation,

api/src/Vote.Monitor.Domain/Entities/FormBase/BaseForm.cs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public class BaseForm : AuditableBaseEntity, IAggregateRoot
2727
public FormStatus Status { get; private set; }
2828
public string DefaultLanguage { get; private set; }
2929
public string[] Languages { get; private set; } = [];
30-
public string? Icon { get; set; }
30+
public string? Icon { get; private set; }
31+
public int DisplayOrder { get; private set; }
3132
public int NumberOfQuestions { get; private set; }
3233

3334
public LanguagesTranslationStatus LanguagesTranslationStatus { get; private set; } = new();
@@ -43,7 +44,8 @@ protected BaseForm(
4344
IEnumerable<string> languages,
4445
string? icon,
4546
IEnumerable<BaseQuestion> questions,
46-
FormStatus status) : this(electionRound.Id,
47+
FormStatus status,
48+
int displayOrder) : this(electionRound.Id,
4749
formType,
4850
code,
4951
name,
@@ -52,7 +54,8 @@ protected BaseForm(
5254
languages,
5355
icon,
5456
questions,
55-
status)
57+
status,
58+
displayOrder)
5659
{
5760
ElectionRound = electionRound;
5861
ElectionRoundId = electionRound.Id;
@@ -68,7 +71,8 @@ protected BaseForm(
6871
IEnumerable<string> languages,
6972
string? icon,
7073
IEnumerable<BaseQuestion> questions,
71-
FormStatus status)
74+
FormStatus status,
75+
int displayOrder)
7276
{
7377
Id = Guid.NewGuid();
7478
ElectionRoundId = electionRoundId;
@@ -84,6 +88,7 @@ protected BaseForm(
8488
NumberOfQuestions = Questions.Count;
8589
Icon = icon;
8690
LanguagesTranslationStatus = ComputeLanguagesTranslationStatus();
91+
DisplayOrder = displayOrder;
8792
}
8893

8994
[JsonConstructor]
@@ -98,7 +103,8 @@ public BaseForm(Guid id,
98103
string[] languages,
99104
string? icon,
100105
int numberOfQuestions,
101-
LanguagesTranslationStatus languagesTranslationStatus)
106+
LanguagesTranslationStatus languagesTranslationStatus,
107+
int displayOrder)
102108
{
103109
Id = id;
104110
ElectionRoundId = electionRoundId;
@@ -112,6 +118,7 @@ public BaseForm(Guid id,
112118
Icon = icon;
113119
NumberOfQuestions = numberOfQuestions;
114120
LanguagesTranslationStatus = languagesTranslationStatus;
121+
DisplayOrder = displayOrder;
115122
}
116123

117124
public PublishResult Publish()
@@ -146,6 +153,7 @@ public void UpdateDetails(string code,
146153
string defaultLanguage,
147154
IEnumerable<string> languages,
148155
string? icon,
156+
int displayOrder,
149157
IEnumerable<BaseQuestion> questions)
150158
{
151159
Code = code;
@@ -157,6 +165,7 @@ public void UpdateDetails(string code,
157165
Questions = questions.ToList().AsReadOnly();
158166
NumberOfQuestions = Questions.Count;
159167
Icon = icon;
168+
DisplayOrder = displayOrder;
160169
LanguagesTranslationStatus = ComputeLanguagesTranslationStatus();
161170
}
162171

@@ -298,7 +307,7 @@ public Form Clone(Guid electionRoundId, Guid monitoringNgoId, string defaultLang
298307
new ValidationFailure(nameof(Status), "Form is not published.")
299308
]);
300309
}
301-
310+
302311
if (!Languages.Contains(defaultLanguage))
303312
{
304313
throw new ValidationException([
@@ -325,9 +334,10 @@ public Form Clone(Guid electionRoundId, Guid monitoringNgoId, string defaultLang
325334
defaultLanguage,
326335
languages,
327336
null,
337+
DisplayOrder,
328338
Questions.Select(x => x.DeepClone().TrimTranslations(languages)).ToList());
329339
}
330-
340+
331341
private LanguagesTranslationStatus ComputeLanguagesTranslationStatus()
332342
{
333343
var languagesTranslationStatus = new LanguagesTranslationStatus();

api/src/Vote.Monitor.Domain/Entities/FormTemplateAggregate/FormTemplate.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ public void SetDefaultLanguage(string languageCode)
165165
public FormTemplate Duplicate() =>
166166
new(FormType, Code, DefaultLanguage, Name, Description, Languages, Questions);
167167

168-
public FormAggregate.Form Clone(Guid electionRoundId, Guid monitoringNgoId, string defaultLanguage, string[] languages)
168+
public FormAggregate.Form Clone(Guid electionRoundId, Guid monitoringNgoId, string defaultLanguage,
169+
string[] languages)
169170
{
170171
if (Status != FormTemplateStatus.Published)
171172
{
@@ -201,6 +202,7 @@ public FormAggregate.Form Clone(Guid electionRoundId, Guid monitoringNgoId, stri
201202
defaultLanguage,
202203
languages,
203204
null,
205+
0,
204206
Questions.Select(x => x.DeepClone().TrimTranslations(languages)).ToList());
205207
}
206208

api/src/Vote.Monitor.Domain/Entities/PollingStationInfoFormAggregate/PollingStationInformationForm.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ private PollingStationInformationForm(
2525
languages,
2626
null,
2727
questions,
28-
FormStatus.Published)
28+
FormStatus.Published,
29+
displayOrder: 0)
2930
{
3031
}
3132

0 commit comments

Comments
 (0)