Добавьте файлы проекта.
This commit is contained in:
parent
e787cd8afd
commit
f034e41c07
17
Data/Data.csproj
Normal file
17
Data/Data.csproj
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Services\Services.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Models\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
13
Data/Extentions/ServiceCollectionExtentions.cs
Normal file
13
Data/Extentions/ServiceCollectionExtentions.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
using Services.Tickets;
|
||||||
|
|
||||||
|
namespace Data.Extentions;
|
||||||
|
|
||||||
|
public static class ServiceCollectionExtentions
|
||||||
|
{
|
||||||
|
public static void TyAddFakeTicketRepository(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.TryAddScoped<ITicketRepository, FakeTicketRepository>();
|
||||||
|
}
|
||||||
|
}
|
||||||
21
Data/FakeTicketRepository.cs
Normal file
21
Data/FakeTicketRepository.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using Services.Tickets;
|
||||||
|
using Services.Tickets.Models;
|
||||||
|
|
||||||
|
namespace Data;
|
||||||
|
|
||||||
|
internal class FakeTicketRepository : ITicketRepository
|
||||||
|
{
|
||||||
|
private readonly List<LotteryTicket> _lotteryTickets = new List<LotteryTicket>();
|
||||||
|
public Task<long> AddNewTicket(LotteryTicket ticket)
|
||||||
|
{
|
||||||
|
var id =(long)Random.Shared.Next(1, 100);
|
||||||
|
ticket.Id = id;
|
||||||
|
_lotteryTickets.Add(ticket);
|
||||||
|
return Task.FromResult(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<List<LotteryTicket>> GetAllTickets()
|
||||||
|
{
|
||||||
|
return Task.FromResult(_lotteryTickets);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
Lottery.Tests/GlobalUsings.cs
Normal file
1
Lottery.Tests/GlobalUsings.cs
Normal file
@ -0,0 +1 @@
|
|||||||
|
global using NUnit.Framework;
|
||||||
24
Lottery.Tests/Lottery.Tests.csproj
Normal file
24
Lottery.Tests/Lottery.Tests.csproj
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<IsTestProject>true</IsTestProject>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
|
||||||
|
<PackageReference Include="NUnit" Version="3.13.3" />
|
||||||
|
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||||
|
<PackageReference Include="NUnit.Analyzers" Version="3.6.1" />
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Services\Services.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
36
Lottery.Tests/NumbersServiceTests.cs
Normal file
36
Lottery.Tests/NumbersServiceTests.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using Services.Numbers;
|
||||||
|
using Services.Tickets;
|
||||||
|
|
||||||
|
namespace Lottery.Tests;
|
||||||
|
|
||||||
|
public class NumbersServiceTests
|
||||||
|
{
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ShouldGenerateUniqNumbers()
|
||||||
|
{
|
||||||
|
var numbersService = new NumbersService();
|
||||||
|
for (int i = 0; i < 1000; i++)
|
||||||
|
{
|
||||||
|
var t = numbersService.GetNumbers(35);
|
||||||
|
CollectionAssert.AllItemsAreUnique(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ShouldGenerateRandomNumbers()
|
||||||
|
{
|
||||||
|
var numbersService = new NumbersService();
|
||||||
|
|
||||||
|
List<byte[]> numbers = new List<byte[]>();
|
||||||
|
for (int i = 0; i < 1000; i++)
|
||||||
|
{
|
||||||
|
numbers.Add(numbersService.GetNumbers(6));
|
||||||
|
}
|
||||||
|
CollectionAssert.AllItemsAreUnique(numbers);
|
||||||
|
}
|
||||||
|
}
|
||||||
6
Lottery.Tickets/Class1.cs
Normal file
6
Lottery.Tickets/Class1.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace Lottery.Tickets;
|
||||||
|
|
||||||
|
public class Class1
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
9
Lottery.Tickets/Lottery.Tickets.csproj
Normal file
9
Lottery.Tickets/Lottery.Tickets.csproj
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
43
Lottery.sln
Normal file
43
Lottery.sln
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.8.34330.188
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services", "Services\Services.csproj", "{E53B4797-FCFE-418E-B412-E08381A144E3}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Data", "Data\Data.csproj", "{1D5D5D3E-2D9A-4AAB-896E-E0957CD75E9A}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkerService1", "WorkerService1\WorkerService1.csproj", "{0A24B96A-7B80-486A-9546-B82FC5F99675}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lottery.Tests", "Lottery.Tests\Lottery.Tests.csproj", "{BCBB643F-C468-4EE6-B186-6E2084B644DE}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{E53B4797-FCFE-418E-B412-E08381A144E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{E53B4797-FCFE-418E-B412-E08381A144E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{E53B4797-FCFE-418E-B412-E08381A144E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{E53B4797-FCFE-418E-B412-E08381A144E3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1D5D5D3E-2D9A-4AAB-896E-E0957CD75E9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1D5D5D3E-2D9A-4AAB-896E-E0957CD75E9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1D5D5D3E-2D9A-4AAB-896E-E0957CD75E9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1D5D5D3E-2D9A-4AAB-896E-E0957CD75E9A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{0A24B96A-7B80-486A-9546-B82FC5F99675}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0A24B96A-7B80-486A-9546-B82FC5F99675}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0A24B96A-7B80-486A-9546-B82FC5F99675}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{0A24B96A-7B80-486A-9546-B82FC5F99675}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{BCBB643F-C468-4EE6-B186-6E2084B644DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{BCBB643F-C468-4EE6-B186-6E2084B644DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BCBB643F-C468-4EE6-B186-6E2084B644DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{BCBB643F-C468-4EE6-B186-6E2084B644DE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {F98A62EA-62A5-4385-9709-B488076B1543}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
14
Services/Games/Extentions/ServiceCollectionExtentions.cs
Normal file
14
Services/Games/Extentions/ServiceCollectionExtentions.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
using Services.Tickets.Extentions;
|
||||||
|
|
||||||
|
namespace Services.Games.Extentions;
|
||||||
|
|
||||||
|
public static class ServiceCollectionExtentions
|
||||||
|
{
|
||||||
|
public static void TyAddGamesService(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.TyAddTicketService();
|
||||||
|
services.TryAddScoped<IGameService, GameService>();
|
||||||
|
}
|
||||||
|
}
|
||||||
49
Services/Games/GameService.cs
Normal file
49
Services/Games/GameService.cs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Services.Numbers;
|
||||||
|
using Services.Tickets;
|
||||||
|
using Services.Tickets.Models;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
|
||||||
|
namespace Services.Games;
|
||||||
|
internal class GameService : IGameService
|
||||||
|
{
|
||||||
|
private readonly INumbersService _numbersService;
|
||||||
|
private readonly ITicketService _ticketService;
|
||||||
|
|
||||||
|
public GameService(ILogger<GameService> logger, INumbersService numbersService, ITicketService ticketService)
|
||||||
|
{
|
||||||
|
_numbersService = numbersService;
|
||||||
|
_ticketService = ticketService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<(List<LotteryTicket> winTickets, int matches)>> GetWinnersTickets(byte[] winNumbers)
|
||||||
|
{
|
||||||
|
List<LotteryTicket> tickets = await _ticketService.GetAllTickets();
|
||||||
|
return CalculateWinners(tickets, winNumbers);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<(List<LotteryTicket> winTickets,int matches)> CalculateWinners(List<LotteryTicket> tickets, byte[] bytes)
|
||||||
|
{
|
||||||
|
List<(List<LotteryTicket> winTickets,int matches)> results = new();
|
||||||
|
for (int i = 0; i < bytes.Length; i++)
|
||||||
|
{
|
||||||
|
List<LotteryTicket> winners = new List<LotteryTicket>();
|
||||||
|
for (int j = 0; j < tickets.Count; j++)
|
||||||
|
{
|
||||||
|
if (bytes.Except(tickets[j].Numbers!).Count() == i)
|
||||||
|
{
|
||||||
|
winners.Add(tickets[j]);
|
||||||
|
tickets.RemoveAt(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
results.Add((winners, bytes.Length - i));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] GetWinNumbers()
|
||||||
|
{
|
||||||
|
return _numbersService.GetNumbers(6);
|
||||||
|
}
|
||||||
|
}
|
||||||
9
Services/Games/IGameService.cs
Normal file
9
Services/Games/IGameService.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
using Services.Tickets.Models;
|
||||||
|
|
||||||
|
namespace Services.Games;
|
||||||
|
|
||||||
|
public interface IGameService
|
||||||
|
{
|
||||||
|
byte[] GetWinNumbers();
|
||||||
|
Task<List<(List<LotteryTicket> winTickets, int matches)>> GetWinnersTickets(byte[] winNumbers);
|
||||||
|
}
|
||||||
12
Services/Numbers/Extentions/ServiceCollectionExtentions.cs
Normal file
12
Services/Numbers/Extentions/ServiceCollectionExtentions.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
|
||||||
|
namespace Services.Numbers.Extentions;
|
||||||
|
|
||||||
|
public static class ServiceCollectionExtentions
|
||||||
|
{
|
||||||
|
public static void TyAddNumbersService(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.TryAddScoped<INumbersService, NumbersService>();
|
||||||
|
}
|
||||||
|
}
|
||||||
6
Services/Numbers/INumbersService.cs
Normal file
6
Services/Numbers/INumbersService.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace Services.Numbers;
|
||||||
|
|
||||||
|
public interface INumbersService
|
||||||
|
{
|
||||||
|
byte[] GetNumbers(byte count);
|
||||||
|
}
|
||||||
49
Services/Numbers/NumbersService.cs
Normal file
49
Services/Numbers/NumbersService.cs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
namespace Services.Numbers;
|
||||||
|
|
||||||
|
internal class NumbersService : INumbersService
|
||||||
|
{
|
||||||
|
public byte[] GetNumbers(byte count = 6)
|
||||||
|
{
|
||||||
|
byte[] init =
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
11,
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
15,
|
||||||
|
16,
|
||||||
|
17,
|
||||||
|
18,
|
||||||
|
19,
|
||||||
|
20,
|
||||||
|
21,
|
||||||
|
22,
|
||||||
|
23,
|
||||||
|
24,
|
||||||
|
25,
|
||||||
|
26,
|
||||||
|
27,
|
||||||
|
28,
|
||||||
|
29,
|
||||||
|
30,
|
||||||
|
31,
|
||||||
|
32,
|
||||||
|
33,
|
||||||
|
34,
|
||||||
|
35,
|
||||||
|
36
|
||||||
|
];
|
||||||
|
Random.Shared.Shuffle(init);
|
||||||
|
return init.Take(count).ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
20
Services/Services.csproj
Normal file
20
Services/Services.csproj
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Serilog" Version="3.1.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
|
||||||
|
<_Parameter1>Lottery.Tests</_Parameter1>
|
||||||
|
</AssemblyAttribute>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
14
Services/Tickets/Extentions/ServiceCollectionExtentions.cs
Normal file
14
Services/Tickets/Extentions/ServiceCollectionExtentions.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
using Services.Numbers.Extentions;
|
||||||
|
|
||||||
|
namespace Services.Tickets.Extentions;
|
||||||
|
|
||||||
|
public static class ServiceCollectionExtentions
|
||||||
|
{
|
||||||
|
public static void TyAddTicketService(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.TyAddNumbersService();
|
||||||
|
services.TryAddScoped<ITicketService, TicketService>();
|
||||||
|
}
|
||||||
|
}
|
||||||
8
Services/Tickets/ITicketRepository.cs
Normal file
8
Services/Tickets/ITicketRepository.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
using Services.Tickets.Models;
|
||||||
|
|
||||||
|
namespace Services.Tickets;
|
||||||
|
public interface ITicketRepository
|
||||||
|
{
|
||||||
|
Task<long> AddNewTicket(LotteryTicket ticket);
|
||||||
|
Task<List<LotteryTicket>> GetAllTickets();
|
||||||
|
}
|
||||||
9
Services/Tickets/ITicketService.cs
Normal file
9
Services/Tickets/ITicketService.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
using Services.Tickets.Models;
|
||||||
|
|
||||||
|
namespace Services.Tickets;
|
||||||
|
|
||||||
|
public interface ITicketService
|
||||||
|
{
|
||||||
|
Task<List<LotteryTicket>> GetAllTickets();
|
||||||
|
Task<LotteryTicket> GetNewTicket();
|
||||||
|
}
|
||||||
8
Services/Tickets/Models/LotteryTicket.cs
Normal file
8
Services/Tickets/Models/LotteryTicket.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace Services.Tickets.Models;
|
||||||
|
public class LotteryTicket
|
||||||
|
{
|
||||||
|
public long? Id { get; set; }
|
||||||
|
public byte[]? Numbers { get; set; }
|
||||||
|
public string? Owner { get; set; }
|
||||||
|
public string? PhoneNumber { get; set; }
|
||||||
|
}
|
||||||
36
Services/Tickets/TicketService.cs
Normal file
36
Services/Tickets/TicketService.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Services.Numbers;
|
||||||
|
using Services.Tickets.Models;
|
||||||
|
|
||||||
|
namespace Services.Tickets;
|
||||||
|
|
||||||
|
internal class TicketService : ITicketService
|
||||||
|
{
|
||||||
|
private readonly ILogger<TicketService> _logger;
|
||||||
|
private readonly ITicketRepository _ticketRepository;
|
||||||
|
private readonly INumbersService _numbersService;
|
||||||
|
|
||||||
|
public TicketService(ILogger<TicketService> logger, ITicketRepository ticketRepository, INumbersService numbersService)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_ticketRepository = ticketRepository;
|
||||||
|
_numbersService = numbersService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<List<LotteryTicket>> GetAllTickets()
|
||||||
|
{
|
||||||
|
return _ticketRepository.GetAllTickets();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<LotteryTicket> GetNewTicket()
|
||||||
|
{
|
||||||
|
LotteryTicket ticket = new()
|
||||||
|
{
|
||||||
|
Numbers = _numbersService.GetNumbers(6)
|
||||||
|
};
|
||||||
|
var id = await _ticketRepository.AddNewTicket(ticket);
|
||||||
|
ticket.Id = id;
|
||||||
|
//_logger.LogInformation("New ticket created");
|
||||||
|
return ticket;
|
||||||
|
}
|
||||||
|
}
|
||||||
13
WorkerService1/Program.cs
Normal file
13
WorkerService1/Program.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using WorkerService1;
|
||||||
|
using Data.Extentions;
|
||||||
|
using Services.Tickets.Extentions;
|
||||||
|
using Services.Games.Extentions;
|
||||||
|
|
||||||
|
var builder = Host.CreateApplicationBuilder(args);
|
||||||
|
builder.Services.AddHostedService<Worker>();
|
||||||
|
builder.Services.TyAddTicketService();
|
||||||
|
builder.Services.TyAddGamesService();
|
||||||
|
builder.Services.TyAddFakeTicketRepository();
|
||||||
|
|
||||||
|
var host = builder.Build();
|
||||||
|
host.Run();
|
||||||
12
WorkerService1/Properties/launchSettings.json
Normal file
12
WorkerService1/Properties/launchSettings.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
"profiles": {
|
||||||
|
"WorkerService1": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"environmentVariables": {
|
||||||
|
"DOTNET_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
32
WorkerService1/Worker.cs
Normal file
32
WorkerService1/Worker.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using Services.Games;
|
||||||
|
using Services.Tickets;
|
||||||
|
|
||||||
|
namespace WorkerService1;
|
||||||
|
|
||||||
|
public class Worker : BackgroundService
|
||||||
|
{
|
||||||
|
private readonly ILogger<Worker> _logger;
|
||||||
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
||||||
|
|
||||||
|
public Worker(ILogger<Worker> logger, IServiceScopeFactory serviceScopeFactory)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_serviceScopeFactory = serviceScopeFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||||
|
{
|
||||||
|
using (var scope = _serviceScopeFactory.CreateScope())
|
||||||
|
{
|
||||||
|
var ticketService = scope.ServiceProvider.GetRequiredService<ITicketService>();
|
||||||
|
for (int i = 0; i < 100000; i++)
|
||||||
|
{
|
||||||
|
var ticket = await ticketService.GetNewTicket();
|
||||||
|
}
|
||||||
|
|
||||||
|
var gameService = scope.ServiceProvider.GetRequiredService<IGameService>();
|
||||||
|
var winNumbers = gameService.GetWinNumbers();
|
||||||
|
var winners = await gameService.GetWinnersTickets(winNumbers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
WorkerService1/WorkerService1.csproj
Normal file
18
WorkerService1/WorkerService1.csproj
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Worker">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<UserSecretsId>dotnet-WorkerService1-a5282c60-3d37-46ee-983b-990e33b39645</UserSecretsId>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Data\Data.csproj" />
|
||||||
|
<ProjectReference Include="..\Services\Services.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
8
WorkerService1/appsettings.Development.json
Normal file
8
WorkerService1/appsettings.Development.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
WorkerService1/appsettings.json
Normal file
8
WorkerService1/appsettings.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user