/
Egor1k
/
CompClubAPI
Обзор
Документация
Войти
/
Egor1k
/
CompClubAPI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Controllers/PlayerSessionController.cs
175 строк
7 KB
Dima Oshuev
поменял структуру проекта для сборки в docker
27 мар 2025, 16:32
27 мар 2025, 16:32
5c3d032
Код
Авторство
О чём код?
using CompClubAPI.DTO; using CompClubAPI.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace CompClubAPI.Controllers { [Route("api/[controller]")] [ApiController] public class PlayerSessionController : ControllerBase { private readonly ApplicationDbContext _context; public PlayerSessionController(ApplicationDbContext context) { this._context = context; } [HttpGet("GetPlayerSessionByAccountId/{accountId}")] public async Task<IActionResult> GetPlayerSessionByAccountId(long accountId) { var playerSessions = await _context.PlayerSessions.Where(ps => ps.AccountId == accountId).ToListAsync(); if (playerSessions == null) { return NotFound(); } return Ok(playerSessions); } [HttpGet("get-player-session-by-email/{email}")] public async Task<IActionResult> GetPlayerSessionByEmail(string email) { var account = await _context.Accounts.FirstOrDefaultAsync(a => a.Email == email); if (account == null) { return NotFound($"Пользователя с таким {email} не существует"); } var playerSessions = await _context.PlayerSessions.Where(ps => ps.AccountId == account.UserId).ToListAsync(); if (playerSessions == null) { return NotFound("Ссылка на сессии отсутствует"); } return Ok(playerSessions); } [HttpPost("add-player-session-without-promotion")] public async Task<IActionResult> AddPlayerSessionWithoutPromotion(PlayerSession playerSession) { var existingPlayerSession = await _context.PlayerSessions .FirstOrDefaultAsync(ps => ps.ComputerId == playerSession.ComputerId && ps.StartTime == playerSession.StartTime && ps.EndTime == playerSession.EndTime); var tariff = await _context.Tariffs.FirstOrDefaultAsync(t => t.TariffId == playerSession.TariffId); if (existingPlayerSession != null) { return BadRequest("Такая сессия уже существует"); } if (tariff == null) { return BadRequest("Такого тарифа не существует"); } // Проверяем, передано ли значение StartTime в запросе if (playerSession.StartTime == default) { playerSession.StartTime = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified); } if (!playerSession.EndTime.HasValue) { return BadRequest("EndTime не может быть пустым"); } // Проверка, чтобы EndTime не был меньше StartTime if (playerSession.EndTime <= playerSession.StartTime) { return BadRequest("EndTime должен быть больше StartTime"); } TimeSpan duration = playerSession.EndTime.Value - playerSession.StartTime; playerSession.TotalTime = (int)Math.Round(duration.TotalMinutes); playerSession.Cost = (decimal)(tariff.HourlyRate * (playerSession.TotalTime / 60)); playerSession.Promotion = null; await _context.PlayerSessions.AddAsync(playerSession); await _context.SaveChangesAsync(); return Ok(); } [HttpPost("add-player-session-with-promotion")] public async Task<IActionResult> AddPlayerSessionWithPromotion(PlayerSession playerSession) { var existingPlayerSession = await _context.PlayerSessions .FirstOrDefaultAsync(ps => ps.ComputerId == playerSession.ComputerId && ps.StartTime == playerSession.StartTime && ps.EndTime == playerSession.EndTime); var tariff = await _context.Tariffs.FirstOrDefaultAsync(t => t.TariffId == playerSession.TariffId); var promotion = await _context.Promotions.FirstOrDefaultAsync(p => p.PromotionId == playerSession.PromotionId); if (existingPlayerSession != null) { return BadRequest("Такая сессия уже существует"); } if (tariff == null) { return BadRequest("Такого тарифа не существует"); } if (promotion == null || promotion.ValidityPeriod <= DateOnly.FromDateTime(DateTime.Now)) { return BadRequest("Такого бонуса не существует"); } // Проверяем, передано ли значение StartTime в запросе if (playerSession.StartTime == default) { playerSession.StartTime = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified); } if (!playerSession.EndTime.HasValue) { return BadRequest("EndTime не может быть пустым"); } // Проверка, чтобы EndTime не был меньше StartTime if (playerSession.EndTime <= playerSession.StartTime) { return BadRequest("EndTime должен быть больше StartTime"); } TimeSpan duration = playerSession.EndTime.Value - playerSession.StartTime; playerSession.TotalTime = (int)Math.Round(duration.TotalMinutes); if (promotion.BonusType.Equals("Скидка")) { decimal baseCost = (decimal)(tariff.HourlyRate * (playerSession.TotalTime / 60)); decimal discountAmount = (decimal)((baseCost * promotion.DiscountPercentage) / 100); playerSession.Cost = baseCost - discountAmount; } else { playerSession.Cost = (decimal)(tariff.HourlyRate * (playerSession.TotalTime / 60)); } if (promotion.BonusType.Equals("Дополнительное время")) { playerSession.TotalTime += promotion.BonusTime; } playerSession.Promotion = promotion; await _context.PlayerSessions.AddAsync(playerSession); await _context.SaveChangesAsync(); return Ok(); } } }