Ajout de HelloFresh

This commit is contained in:
2025-09-03 20:17:50 +02:00
parent bcef0a472b
commit d287112b7d
429 changed files with 82881 additions and 22074 deletions

View File

@@ -0,0 +1,141 @@
using administration.Models.Finances;
using administration.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace administration.Controllers.Finances
{
/// <summary>
/// Contrôleur API pour la gestion des dépenses de l'utilisateur.
/// Fournit des points de terminaison pour récupérer les dépenses du mois en cours
/// pour l'utilisateur actuellement connecté.
/// </summary>
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class ExpenseController : Controller
{
private readonly FinancesContext _context;
private readonly IUserSessionService _userSession;
/// <summary>
/// Initialise une nouvelle instance du contrôleur <see cref="ExpenseController"/>.
/// </summary>
/// <param name="context">Contexte de base de données des finances.</param>
/// <param name="userSession">Service de session utilisateur pour obtenir l'utilisateur courant.</param>
public ExpenseController(FinancesContext context, IUserSessionService userSession)
{
_context = context;
_userSession = userSession;
}
/// <summary>
/// Récupère la dernière dépense du mois en cours pour l'utilisateur connecté.
/// </summary>
/// <returns>
/// Un objet <see cref="IActionResult"/> contenant la dépense trouvée ou un code d'erreur approprié.
/// </returns>
[HttpGet("last_expenses")]
public IActionResult GetRightExpenses()
{
try
{
if (_userSession.UserId == null)
return Unauthorized("Utilisateur non connecté.");
var expense = _context.Expenses
.Where(e => e.UserId == _userSession.UserId &&
e.Date.Month == DateTime.Now.Month)
.OrderByDescending(e => e.Date)
.FirstOrDefault();
if (expense == null)
return NotFound("Aucune dépense trouvée pour ce mois.");
var additionalSources = (
from additional in _context.AdditionalSources
join logo in _context.Logos on additional.LogoId equals logo.Id
where additional.UserId == _userSession.UserId &&
additional.Date.Month == DateTime.Now.Month &&
(additional.TransactionType == "expense" || additional.TransactionType == "sub")
select new
{
additional.Id,
additional.TransactionType,
additional.Amount,
additional.Description,
additional.Date,
Logo = new
{
logo.Id,
logo.Name,
logo.Image
}
}
).ToList();
var totalExpenses = expense.Rent
+ expense.Electricity
+ expense.Trash
+ expense.Wifi
+ expense.Groceries
+ expense.Insurance
+ expense.Saving;
var totalAdditionalExpense = additionalSources
.Where(a => a.TransactionType == "expense")
.Sum(a => a.Amount);
var totalAdditionalSub = additionalSources
.Where(a => a.TransactionType == "sub")
.Sum(a => a.Amount);
var result = new
{
expense.Id,
expense.Rent,
expense.Electricity,
expense.Trash,
expense.Wifi,
expense.Groceries,
expense.Insurance,
expense.Date,
expense.Saving,
AdditionalSourcesExpense = additionalSources.Where(a => a.TransactionType == "expense").ToList(),
AdditionalSourcesSub = additionalSources.Where(a => a.TransactionType == "sub").ToList(),
Total = totalExpenses + totalAdditionalExpense + totalAdditionalSub
};
return Ok(result);
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur serveur : {ex.Message}, Méthode GetAdditionalRevenues");
}
}
/// <summary>
/// Récupère les dépenses depuis la base de données avec l'id X.
/// </summary>
/// <param name="rows">L'id de la dépense</param>
/// <returns>La bonne dépense</returns>
[HttpGet("expense_by_id")]
public IActionResult GetExpenseByID(int id)
{
try
{
Expense expense = _context.Expenses
.Where(r => r.Id == id)
.FirstOrDefault();
return Ok(expense);
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur serveur : {ex.Message}, Méthode GetRevenueByID");
}
}
}
}

View File

@@ -0,0 +1,153 @@
using Microsoft.AspNetCore.Mvc;
using administration.Services;
using administration.Models.Finances;
using Microsoft.AspNetCore.Authorization;
namespace administration.Controllers.Finances
{
[Authorize]
public class FinancesController : Controller
{
public IActionResult Index()
{
return View();
}
private readonly FinancesContext _context;
private readonly IUserSessionService _userSession;
public FinancesController(FinancesContext context, IUserSessionService userSession)
{
_context = context;
_userSession = userSession;
}
/// <summary>
/// Récupère les X derniers revenues depuis la base de données.
/// </summary>
/// <param name="rows">Nombre de lignes à retourner</param>
/// <returns>Liste des revenues</returns>
[HttpGet("x_revenues")]
public IActionResult GetXRevenues([FromQuery] int rows = 1)
{
try
{
if (_userSession.UserId == null)
return Unauthorized("Utilisateur non connecté.");
var revenues = _context.Revenues
.Where(r => r.UserId == _userSession.UserId)
.OrderByDescending(r => r.Id)
.Take(rows)
.ToList();
return Ok(revenues);
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur serveur : {ex.Message}, Méthode GetXRevenues");
}
}
/// <summary>
/// Récupère le dernier revenue depuis la base de données.
/// </summary>
/// <returns>Le dernier revenue</returns>
[HttpGet("last_revenue")]
public IActionResult GetLastRevenues()
{
try
{
if (_userSession.UserId == null)
return Unauthorized("Utilisateur non connecté.");
var revenue = _context.Revenues
.Where(r => r.UserId == _userSession.UserId)
.OrderByDescending(r => r.Id)
.FirstOrDefault();
return Ok(revenue);
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur serveur : {ex.Message}, Méthode GetLastRevenues");
}
}
/// <summary>
/// Récupère tous les revenues depuis la base de données.
/// </summary>
/// <returns>Liste de revenues</returns>
[HttpGet("all_revenues")]
public IActionResult GetAllRevenues()
{
try
{
if (_userSession.UserId == null)
return Unauthorized("Utilisateur non connecté.");
var revenues = _context.Revenues
.Where(r => r.UserId == _userSession.UserId)
.OrderByDescending(r => r.Id)
.ToList();
return Ok(revenues);
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur serveur : {ex.Message}, Méthode GetAllRevenues");
}
}
/// <summary>
/// Récupère toutes les ressources supplémentaires dont le type de transaction contient "revenu".
/// </summary>
/// <returns>Liste des ressources supplémentaires</returns>
[HttpGet("additional_revenues")]
public IActionResult GetAdditionalRevenues()
{
try
{
if (_userSession.UserId == null)
return Unauthorized("Utilisateur non connecté.");
var revenus = _context.AdditionalSources
.Where(r => r.UserId == _userSession.UserId &&
r.TransactionType.ToLower().Contains("revenu") &&
r.Date.Month == DateTime.Now.Month)
.OrderByDescending(r => r.Id)
.ToList();
return Ok(revenus);
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur serveur : {ex.Message}, Méthode GetAdditionalRevenues");
}
}
/// <summary>
/// Récupère les revenues depuis la base de données avec l'id X.
/// </summary>
/// <param name="rows">L'id du revenue</param>
/// <returns>Le bon revenue</returns>
[HttpGet("revenues_by_id")]
public IActionResult GetRevenueByID(int id)
{
try
{
Revenue revenue = _context.Revenues
.Where(r => r.Id == id)
.FirstOrDefault();
return Ok(revenue);
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur serveur : {ex.Message}, Méthode GetRevenueByID");
}
}
}
}