Files
Ghadir/backend/Controllers/AdminController.cs
2026-06-05 21:09:56 +03:30

59 lines
1.8 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using backend.Data;
using backend.DTOs;
using backend.Models;
namespace backend.Controllers;
[ApiController]
[Route("api/[controller]")]
public class AdminController : ControllerBase
{
private readonly AppDbContext _db;
private readonly AppConfig _appConfig;
public AdminController(AppDbContext db, IOptions<AppConfig> appConfig)
{
_db = db;
_appConfig = appConfig.Value;
}
[HttpGet("report")]
public async Task<IActionResult> GetReport([FromQuery] string password)
{
// if (password != _appConfig.AdminPassword)
{
return StatusCode(403, new { message = "رمز عبور اشتباه است." });
}
var users = await _db.Users
.Include(u => u.QuizAttempt)
.Include(u => u.KhatmSelections)
.ThenInclude(ks => ks.KhatmItem)
.Include(u => u.TotalScore)
.OrderBy(u => u.Id)
.ToListAsync();
var report = users.Select(u => new AdminReportItem
{
UserId = u.Id,
FullName = u.FullName,
Contact = u.Contact,
TrackingCode = u.TrackingCode,
HasTakenQuiz = u.QuizAttempt != null,
ParticipationPoints = u.QuizAttempt?.ParticipationPoints ?? 0,
CorrectCount = u.QuizAttempt?.CorrectAnswersCount ?? 0,
TotalQuizPoints = u.QuizAttempt?.TotalQuizPoints ?? 0,
KhatmTitles = string.Join("، ",
u.KhatmSelections
.Where(ks => ks.IsSelected)
.Select(ks => ks.KhatmItem.Title)),
TotalScore = u.TotalScore?.TotalPoints ?? 0
}).ToList();
return Ok(report);
}
}