Skip to content

Commit cbb304d

Browse files
Simple seeding tool (#65)
1 parent dd18287 commit cbb304d

File tree

8 files changed

+221
-1
lines changed

8 files changed

+221
-1
lines changed

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
<PackageVersion Include="Skrasek.RailwayResult.Errors" Version="1.2.0" />
3636
<PackageVersion Include="Skrasek.RailwayResult.FunctionalExtensions" Version="1.2.0" />
3737
<PackageVersion Include="Swashbuckle.AspNetCore" Version="8.1.1" />
38+
<PackageVersion Include="System.CommandLine.DragonFruit" Version="0.4.0-alpha.22272.1" />
3839
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.9.0" />
3940
<PackageVersion Include="Testcontainers" Version="4.4.0" />
4041
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.4.0" />

TeamUp.sln

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,52 +39,152 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scripts", "Scripts", "{F77B
3939
scripts\rundb.ps1 = scripts\rundb.ps1
4040
EndProjectSection
4141
EndProject
42+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{07C2787E-EAC7-C090-1BA3-A61EC2A24D84}"
43+
EndProject
44+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TeamUp.Tools.Seeder", "tools\TeamUp.Tools.Seeder\TeamUp.Tools.Seeder.csproj", "{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}"
45+
EndProject
4246
Global
4347
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4448
Debug|Any CPU = Debug|Any CPU
49+
Debug|x64 = Debug|x64
50+
Debug|x86 = Debug|x86
4551
Release|Any CPU = Release|Any CPU
52+
Release|x64 = Release|x64
53+
Release|x86 = Release|x86
4654
EndGlobalSection
4755
GlobalSection(ProjectConfigurationPlatforms) = postSolution
4856
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4957
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
58+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Debug|x64.ActiveCfg = Debug|Any CPU
59+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Debug|x64.Build.0 = Debug|Any CPU
60+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Debug|x86.ActiveCfg = Debug|Any CPU
61+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Debug|x86.Build.0 = Debug|Any CPU
5062
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
5163
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Release|Any CPU.Build.0 = Release|Any CPU
64+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Release|x64.ActiveCfg = Release|Any CPU
65+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Release|x64.Build.0 = Release|Any CPU
66+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Release|x86.ActiveCfg = Release|Any CPU
67+
{F2C98137-BF50-4057-AF00-4066EC92E3E1}.Release|x86.Build.0 = Release|Any CPU
5268
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5369
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Debug|Any CPU.Build.0 = Debug|Any CPU
70+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Debug|x64.ActiveCfg = Debug|Any CPU
71+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Debug|x64.Build.0 = Debug|Any CPU
72+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Debug|x86.ActiveCfg = Debug|Any CPU
73+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Debug|x86.Build.0 = Debug|Any CPU
5474
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Release|Any CPU.ActiveCfg = Release|Any CPU
5575
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Release|Any CPU.Build.0 = Release|Any CPU
76+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Release|x64.ActiveCfg = Release|Any CPU
77+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Release|x64.Build.0 = Release|Any CPU
78+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Release|x86.ActiveCfg = Release|Any CPU
79+
{088538A8-5F06-43D3-A3F0-0EE80480136F}.Release|x86.Build.0 = Release|Any CPU
5680
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5781
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
82+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Debug|x64.ActiveCfg = Debug|Any CPU
83+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Debug|x64.Build.0 = Debug|Any CPU
84+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Debug|x86.ActiveCfg = Debug|Any CPU
85+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Debug|x86.Build.0 = Debug|Any CPU
5886
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
5987
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Release|Any CPU.Build.0 = Release|Any CPU
88+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Release|x64.ActiveCfg = Release|Any CPU
89+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Release|x64.Build.0 = Release|Any CPU
90+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Release|x86.ActiveCfg = Release|Any CPU
91+
{B450F5AA-0D07-4A15-93C9-772107912EE8}.Release|x86.Build.0 = Release|Any CPU
6092
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
6193
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
94+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Debug|x64.ActiveCfg = Debug|Any CPU
95+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Debug|x64.Build.0 = Debug|Any CPU
96+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Debug|x86.ActiveCfg = Debug|Any CPU
97+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Debug|x86.Build.0 = Debug|Any CPU
6298
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
6399
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Release|Any CPU.Build.0 = Release|Any CPU
100+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Release|x64.ActiveCfg = Release|Any CPU
101+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Release|x64.Build.0 = Release|Any CPU
102+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Release|x86.ActiveCfg = Release|Any CPU
103+
{E7527EA8-CE3D-4DEA-A888-8914B010CEC3}.Release|x86.Build.0 = Release|Any CPU
64104
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
65105
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
106+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Debug|x64.ActiveCfg = Debug|Any CPU
107+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Debug|x64.Build.0 = Debug|Any CPU
108+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Debug|x86.ActiveCfg = Debug|Any CPU
109+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Debug|x86.Build.0 = Debug|Any CPU
66110
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
67111
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Release|Any CPU.Build.0 = Release|Any CPU
112+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Release|x64.ActiveCfg = Release|Any CPU
113+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Release|x64.Build.0 = Release|Any CPU
114+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Release|x86.ActiveCfg = Release|Any CPU
115+
{14F9228A-78AF-406F-A8D9-A9B968F743D3}.Release|x86.Build.0 = Release|Any CPU
68116
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
69117
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Debug|Any CPU.Build.0 = Debug|Any CPU
118+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Debug|x64.ActiveCfg = Debug|Any CPU
119+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Debug|x64.Build.0 = Debug|Any CPU
120+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Debug|x86.ActiveCfg = Debug|Any CPU
121+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Debug|x86.Build.0 = Debug|Any CPU
70122
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Release|Any CPU.ActiveCfg = Release|Any CPU
71123
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Release|Any CPU.Build.0 = Release|Any CPU
124+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Release|x64.ActiveCfg = Release|Any CPU
125+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Release|x64.Build.0 = Release|Any CPU
126+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Release|x86.ActiveCfg = Release|Any CPU
127+
{34E8F682-1BBF-44E8-979C-23A523FEA846}.Release|x86.Build.0 = Release|Any CPU
72128
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
73129
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
130+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Debug|x64.ActiveCfg = Debug|Any CPU
131+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Debug|x64.Build.0 = Debug|Any CPU
132+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Debug|x86.ActiveCfg = Debug|Any CPU
133+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Debug|x86.Build.0 = Debug|Any CPU
74134
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
75135
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Release|Any CPU.Build.0 = Release|Any CPU
136+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Release|x64.ActiveCfg = Release|Any CPU
137+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Release|x64.Build.0 = Release|Any CPU
138+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Release|x86.ActiveCfg = Release|Any CPU
139+
{BFC0159D-37D8-494F-90A6-DA3EA05CFDEF}.Release|x86.Build.0 = Release|Any CPU
76140
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
77141
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
142+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Debug|x64.ActiveCfg = Debug|Any CPU
143+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Debug|x64.Build.0 = Debug|Any CPU
144+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Debug|x86.ActiveCfg = Debug|Any CPU
145+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Debug|x86.Build.0 = Debug|Any CPU
78146
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
79147
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Release|Any CPU.Build.0 = Release|Any CPU
148+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Release|x64.ActiveCfg = Release|Any CPU
149+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Release|x64.Build.0 = Release|Any CPU
150+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Release|x86.ActiveCfg = Release|Any CPU
151+
{63C1F34E-C706-43AC-A98B-E9530F875FFA}.Release|x86.Build.0 = Release|Any CPU
80152
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
81153
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Debug|Any CPU.Build.0 = Debug|Any CPU
154+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Debug|x64.ActiveCfg = Debug|Any CPU
155+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Debug|x64.Build.0 = Debug|Any CPU
156+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Debug|x86.ActiveCfg = Debug|Any CPU
157+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Debug|x86.Build.0 = Debug|Any CPU
82158
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Release|Any CPU.ActiveCfg = Release|Any CPU
83159
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Release|Any CPU.Build.0 = Release|Any CPU
160+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Release|x64.ActiveCfg = Release|Any CPU
161+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Release|x64.Build.0 = Release|Any CPU
162+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Release|x86.ActiveCfg = Release|Any CPU
163+
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423}.Release|x86.Build.0 = Release|Any CPU
84164
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
85165
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Debug|Any CPU.Build.0 = Debug|Any CPU
166+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Debug|x64.ActiveCfg = Debug|Any CPU
167+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Debug|x64.Build.0 = Debug|Any CPU
168+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Debug|x86.ActiveCfg = Debug|Any CPU
169+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Debug|x86.Build.0 = Debug|Any CPU
86170
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Release|Any CPU.ActiveCfg = Release|Any CPU
87171
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Release|Any CPU.Build.0 = Release|Any CPU
172+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Release|x64.ActiveCfg = Release|Any CPU
173+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Release|x64.Build.0 = Release|Any CPU
174+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Release|x86.ActiveCfg = Release|Any CPU
175+
{A3D136DD-571F-4B1C-83E2-9B538F85C575}.Release|x86.Build.0 = Release|Any CPU
176+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
177+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Debug|Any CPU.Build.0 = Debug|Any CPU
178+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Debug|x64.ActiveCfg = Debug|Any CPU
179+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Debug|x64.Build.0 = Debug|Any CPU
180+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Debug|x86.ActiveCfg = Debug|Any CPU
181+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Debug|x86.Build.0 = Debug|Any CPU
182+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Release|Any CPU.ActiveCfg = Release|Any CPU
183+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Release|Any CPU.Build.0 = Release|Any CPU
184+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Release|x64.ActiveCfg = Release|Any CPU
185+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Release|x64.Build.0 = Release|Any CPU
186+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Release|x86.ActiveCfg = Release|Any CPU
187+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80}.Release|x86.Build.0 = Release|Any CPU
88188
EndGlobalSection
89189
GlobalSection(SolutionProperties) = preSolution
90190
HideSolutionNode = FALSE
@@ -100,6 +200,7 @@ Global
100200
{63C1F34E-C706-43AC-A98B-E9530F875FFA} = {B78B958B-7250-4FEC-96F4-4FE0DE49D916}
101201
{B80B3E02-0B98-4ABA-92A9-74AEEEF76423} = {B78B958B-7250-4FEC-96F4-4FE0DE49D916}
102202
{A3D136DD-571F-4B1C-83E2-9B538F85C575} = {B78B958B-7250-4FEC-96F4-4FE0DE49D916}
203+
{B83870D6-4B4D-4629-B3A9-CD8FA985EE80} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84}
103204
EndGlobalSection
104205
GlobalSection(ExtensibilityGlobals) = postSolution
105206
SolutionGuid = {2E9D991D-377D-45D8-9599-801391683CEA}

tests/TeamUp.Tests.Common/DataGenerators/EventGeneratorExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ public static class EventGeneratorExtensions
44
{
55
public static EventGenerator WithEventType(this EventGenerator generator, EventTypeId eventTypeId) => generator.RuleFor(x => x.EventTypeId, eventTypeId);
66

7+
public static EventGenerator WithRandomEventType(this EventGenerator generator, IReadOnlyList<EventType> eventTypes) => generator.RuleFor(x => x.EventTypeId, f => f.PickRandomFromReadOnlyList(eventTypes).Id);
8+
79
public static EventGenerator WithRandomEventResponses(this EventGenerator generator, IEnumerable<TeamMember> members)
810
{
911
return generator

tests/TeamUp.Tests.Common/DataGenerators/InvitationGenerators.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,20 @@ public static List<Invitation> GenerateUserInvitations(UserId userId, DateTime c
5050
.ToList();
5151
}
5252

53+
public static List<Invitation> GenerateRandomInvitations(DateTime createdUtc, List<User> users, List<Team> teams)
54+
{
55+
var created = createdUtc.DropMicroSeconds();
56+
return users
57+
.Select(user =>
58+
Invitation
59+
.RuleForBackingField(i => i.RecipientId, user.Id)
60+
.RuleForBackingField(i => i.TeamId, f => f.PickRandomFromReadOnlyList(teams).Id)
61+
.RuleFor(i => i.CreatedUtc, created)
62+
.Generate())
63+
.OrderBy(i => i.Id)
64+
.ToList();
65+
}
66+
5367
public sealed class InvalidInviteUserRequest : TheoryData<InvalidRequest<InviteUserRequest>>
5468
{
5569
public InvalidInviteUserRequest()

tests/TeamUp.Tests.EndToEnd/EndpointTests/Invitations/InvitationTests.GetTeamInvitations.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public async Task GetTeamInvitations_AsCoordinatorOrHigher_Should_ReturnListOfIn
1515
var initiatorUser = UserGenerators.User.Generate();
1616
var members = UserGenerators.User.Generate(19);
1717
var team = TeamGenerators.Team.WithMembers(initiatorUser, teamRole, members).Generate();
18-
var invitations = InvitationGenerators.GenerateTeamInvitations(team.Id, DateTime.UtcNow.DropMicroSeconds(), members);
18+
var invitations = InvitationGenerators.GenerateTeamInvitations(team.Id, DateTime.UtcNow, members);
1919

2020
await UseDbContextAsync(dbContext =>
2121
{
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using TeamUp.Infrastructure.Persistence;
3+
4+
namespace TeamUp.Tools.Seeder;
5+
6+
class Program
7+
{
8+
/// <param name="connectionString">DB connection string</param>
9+
static async Task<int> Main(string connectionString)
10+
{
11+
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
12+
.UseNpgsql(connectionString)
13+
.Options;
14+
15+
await using (var dbContext = new ApplicationDbContext(options))
16+
{
17+
await dbContext.Database.MigrateAsync();
18+
19+
var seeder = new Seeder(dbContext);
20+
await seeder.SeedAsync();
21+
}
22+
23+
return 0;
24+
}
25+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
using TeamUp.Contracts.Teams;
2+
using TeamUp.Infrastructure.Persistence;
3+
using TeamUp.Tests.Common.DataGenerators;
4+
5+
namespace TeamUp.Tools.Seeder;
6+
7+
internal sealed class Seeder(ApplicationDbContext dbContext) : IAsyncDisposable, IDisposable
8+
{
9+
private readonly ApplicationDbContext _dbContext = dbContext;
10+
11+
public async Task SeedAsync(CancellationToken ct = default)
12+
{
13+
var users = UserGenerators.DistinctUser.Generate(3500);
14+
var usersWithoutTeam = UserGenerators.DistinctUser.Generate(500);
15+
16+
_dbContext.Users.AddRange(users);
17+
_dbContext.Users.AddRange(usersWithoutTeam);
18+
19+
Console.Write("Adding 4.000 users...");
20+
await _dbContext.SaveChangesAsync(ct);
21+
Console.WriteLine("DONE");
22+
23+
var teams = TeamGenerators.Team
24+
.WithRandomMembers(TeamConstants.MAX_TEAM_CAPACITY, users)
25+
.WithEventTypes(10)
26+
.Generate(500);
27+
28+
_dbContext.Teams.AddRange(teams);
29+
30+
Console.Write("Adding 500 teams each with 30 members and 10 event types...");
31+
await _dbContext.SaveChangesAsync(ct);
32+
Console.WriteLine("DONE");
33+
34+
var events = teams
35+
.Select(team => EventGenerators.Event
36+
.ForTeam(team.Id)
37+
.WithRandomEventType(team.EventTypes)
38+
.WithRandomEventResponses(team.Members)
39+
.Generate(100))
40+
.SelectMany(teamEvents => teamEvents)
41+
.ToList();
42+
43+
_dbContext.Events.AddRange(events);
44+
45+
Console.Write("Adding 50.000 events and 1.500.000 event responses...");
46+
await _dbContext.SaveChangesAsync(ct);
47+
Console.WriteLine("DONE");
48+
49+
var invitations = InvitationGenerators.GenerateRandomInvitations(DateTime.UtcNow, usersWithoutTeam, teams);
50+
51+
_dbContext.Invitations.AddRange(invitations);
52+
53+
Console.Write("Adding 500 invitations...");
54+
await _dbContext.SaveChangesAsync(ct);
55+
Console.WriteLine("DONE");
56+
}
57+
58+
public ValueTask DisposeAsync() => _dbContext.DisposeAsync();
59+
60+
public void Dispose() => _dbContext.Dispose();
61+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<PackageReference Include="System.CommandLine.DragonFruit" />
9+
</ItemGroup>
10+
11+
<ItemGroup>
12+
<ProjectReference Include="..\..\src\TeamUp.Infrastructure\TeamUp.Infrastructure.csproj" />
13+
<ProjectReference Include="..\..\tests\TeamUp.Tests.Common\TeamUp.Tests.Common.csproj" />
14+
</ItemGroup>
15+
16+
</Project>

0 commit comments

Comments
 (0)