Добавьте файлы проекта.
This commit is contained in:
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user