Skip to content

Commit 42a8c2f

Browse files
committed
feat: Tasks have an Id
1 parent 5c10b9c commit 42a8c2f

9 files changed

Lines changed: 135 additions & 11 deletions

File tree

Backend.Tests/TestAPI/TaskFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ public static Task AnyBackendTask()
99
return BackendTask(named: "Any");
1010
}
1111

12-
public static Task BackendTask(string named)
12+
public static Task BackendTask(string named, string description = "Any")
1313
{
14-
return new Task(named, "Any");
14+
return new Task(named, description);
1515
}
1616
}

Backend.Tests/UnitTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Backend.Domain;
2+
using FluentAssertions;
3+
using NUnit.Framework;
4+
5+
namespace Backend.Tests;
6+
7+
public class UnitTests
8+
{
9+
[Test]
10+
public void TasksHaveAnAutogeneratedId()
11+
{
12+
new Task("Any", "Any").Id.Should().NotBeEmpty();
13+
}
14+
}

Backend/Backend/Domain/Task.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,27 @@
11
namespace Backend.Domain;
22

3-
public record Task(string Name, string Description);
3+
public record Task
4+
{
5+
public Task()
6+
{
7+
}
8+
9+
public Task(string name, string description)
10+
{
11+
Id = Guid.NewGuid();
12+
Name = name;
13+
Description = description;
14+
}
15+
16+
public Task(Guid id, string name, string description)
17+
{
18+
Id = id;
19+
Name = name;
20+
Description = description;
21+
}
22+
23+
public Guid Id { get; init; }
24+
25+
public string Name { get; init; }
26+
public string Description { get; init; }
27+
}

Backend/Backend/Persistence/Migrations/20250627173338_TasksHaveAnId.Designer.cs

Lines changed: 42 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using Microsoft.EntityFrameworkCore.Migrations;
3+
4+
#nullable disable
5+
6+
namespace Backend.Persistence.Migrations
7+
{
8+
/// <inheritdoc />
9+
public partial class TasksHaveAnId : Migration
10+
{
11+
/// <inheritdoc />
12+
protected override void Up(MigrationBuilder migrationBuilder)
13+
{
14+
migrationBuilder.AddColumn<Guid>(
15+
name: "Id",
16+
table: "Tasks",
17+
type: "TEXT",
18+
nullable: false,
19+
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
20+
}
21+
22+
/// <inheritdoc />
23+
protected override void Down(MigrationBuilder migrationBuilder)
24+
{
25+
migrationBuilder.DropColumn(
26+
name: "Id",
27+
table: "Tasks");
28+
}
29+
}
30+
}

Backend/Backend/Persistence/Migrations/BackendContextModelSnapshot.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// <auto-generated />
2+
using System;
23
using Backend.Persistence;
34
using Microsoft.EntityFrameworkCore;
45
using Microsoft.EntityFrameworkCore.Infrastructure;
@@ -14,7 +15,7 @@ partial class BackendContextModelSnapshot : ModelSnapshot
1415
protected override void BuildModel(ModelBuilder modelBuilder)
1516
{
1617
#pragma warning disable 612, 618
17-
modelBuilder.HasAnnotation("ProductVersion", "9.0.4");
18+
modelBuilder.HasAnnotation("ProductVersion", "9.0.6");
1819

1920
modelBuilder.Entity("Backend.Domain.Task", b =>
2021
{
@@ -25,6 +26,9 @@ protected override void BuildModel(ModelBuilder modelBuilder)
2526
.IsRequired()
2627
.HasColumnType("TEXT");
2728

29+
b.Property<Guid>("Id")
30+
.HasColumnType("TEXT");
31+
2832
b.HasKey("Name");
2933

3034
b.ToTable("Tasks");

Desktop.Tests/Integration/BackendTaskRepositoryTests.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public async Task CanLoadPersistedTasks()
3737
[Test]
3838
public async Task CanLoadSeveralPersistedTasks()
3939
{
40-
var aTask = new Backend.Domain.Task("aTask", "Any");
41-
var anotherTask = new Backend.Domain.Task("anotherTask", "Any");
40+
var aTask = BackendTask("aTask", "Any");
41+
var anotherTask = BackendTask("anotherTask", "Any");
4242
var backend = BackendBuilder.Backend()
4343
.With(aTask)
4444
.With(anotherTask)
@@ -61,13 +61,14 @@ public async Task CanPersistTasksWhenNoOtherExistedBefore()
6161
.Launch();
6262
var sut = new BackendTaskRepository(backend);
6363

64-
await sut.Save(DesktopTask());
64+
await sut.Save(DesktopTask("A name", "A description"));
6565

6666
var existingTasks = await sut.All();
6767
existingTasks.Should().BeEquivalentTo(
68-
[
69-
AnyBackendTask(),
70-
]);
68+
[
69+
BackendTask("A name", "A description"),
70+
],
71+
options => options.Excluding(x => x.Id));
7172
}
7273

7374
[Test]

Desktop/Domain/Task.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public class Task : INotifyPropertyChanged
88
private string name;
99
private string description;
1010

11+
public Guid? Id { get; set; }
12+
1113
public string Name
1214
{
1315
get => name;
@@ -38,6 +40,13 @@ public Task(string name, string description)
3840
Description = description;
3941
}
4042

43+
public Task(Guid id, string name, string description)
44+
{
45+
Id = id;
46+
Name = name;
47+
Description = description;
48+
}
49+
4150
public event PropertyChangedEventHandler? PropertyChanged;
4251

4352
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)

Desktop/Tasks/BackendTaskRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public async Task<IReadOnlyList<Task>> All()
5151

5252
private static Task ToDesktopTask(BackendTask task)
5353
{
54-
return new Task(task.Name, task.Description);
54+
return new Task(task.Id, task.Name, task.Description);
5555
}
5656

5757
public async SystemTask Save(Task task)

0 commit comments

Comments
 (0)