Добавьте файлы проекта.

This commit is contained in:
Yevgeniy Ulyantsev
2024-02-02 17:36:06 +03:00
parent e787cd8afd
commit f034e41c07
27 changed files with 495 additions and 0 deletions

View 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>();
}
}

View 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);
}
}

View 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);
}

View 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>();
}
}

View File

@@ -0,0 +1,6 @@
namespace Services.Numbers;
public interface INumbersService
{
byte[] GetNumbers(byte count);
}

View 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
View 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>

View 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>();
}
}

View File

@@ -0,0 +1,8 @@
using Services.Tickets.Models;
namespace Services.Tickets;
public interface ITicketRepository
{
Task<long> AddNewTicket(LotteryTicket ticket);
Task<List<LotteryTicket>> GetAllTickets();
}

View File

@@ -0,0 +1,9 @@
using Services.Tickets.Models;
namespace Services.Tickets;
public interface ITicketService
{
Task<List<LotteryTicket>> GetAllTickets();
Task<LotteryTicket> GetNewTicket();
}

View 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; }
}

View 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;
}
}