using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System.Text; using YandexGameServer.Models; using YandexGameServer.Services; namespace YandexGameServer.Controllers { [ApiController] [Route("[controller]")] public class AuthController : ControllerBase { private readonly DatabaseService _databaseService; private readonly CodeGenerationService _codeGenerationService; private readonly ILogger _logger; public AuthController(DatabaseService databaseService, ILogger logger, CodeGenerationService codeGenerationService) { _codeGenerationService = codeGenerationService; _logger = logger; _databaseService = databaseService; } [HttpGet("{code:int}")] public async Task Authorization(int code) { var cities = await _databaseService.GetCitiesCodesAsync(); CityUniqueCode? cityCode = cities.Find(x => x.key == code); if (cityCode == null) return NotFound("Такого кода нет в базе"); else { var client = new Client() { city = cityCode.cityEnum, games = new List() }; await _databaseService.CreateAsync(client); return Ok(client); } } [HttpGet("admin/{code:int}")] public async Task AdminAuthorization(int code) { var cities = await _databaseService.GetCitiesCodesAsync(); CityUniqueCode? cityCode = cities.Find(x => x.adminKey == code); if (cityCode == null) return NotFound(); else return Ok(cityCode); } [HttpGet("secretcode/{cityId:int}")] public async Task GetAuthorizationCodeAsync(int cityId) { Cities cityCode = (Cities)cityId; var cities = await _databaseService.GetCitiesCodesAsync(); if (cities.Any(x => x.cityEnum == cityCode)) { var cityData = cities.Find(x => x.cityEnum == cityCode); return Ok(cityData.key); } else return NotFound("Нет соответствующего секретного кода"); } [HttpGet("all")] public async Task GetAllCodes() { StringBuilder stringBuilder = new StringBuilder(); var codes = await _databaseService.GetCitiesCodesAsync(); foreach(var code in _codeGenerationService.citiesTranslation.Keys) { var data = codes.Find(x => x.cityEnum.Equals(code)); stringBuilder.AppendLine($"{_codeGenerationService.citiesTranslation[code]} - {data.key}"); } return Ok(stringBuilder.ToString()); } } }