85 lines
2.5 KiB
C#
85 lines
2.5 KiB
C#
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace sotd.Pages;
|
|
|
|
public class IndexModel : PageModel
|
|
{
|
|
private readonly ILogger<IndexModel> _logger;
|
|
|
|
public IndexModel(ILogger<IndexModel> logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
[BindProperty]
|
|
public List<SongSuggestion> SongSuggestions { get; set; } = new List<SongSuggestion>();
|
|
|
|
private User _currentUser;
|
|
|
|
public User CurrentUser
|
|
{
|
|
get
|
|
{
|
|
if (_currentUser == null)
|
|
{
|
|
var userName = this.User.Identity.Name;
|
|
using (var dci = DataContext.Instance)
|
|
{
|
|
_currentUser = dci.Users.Include(u => u.LikedSongs).Where(u => u.LdapUserName == userName).SingleOrDefault();
|
|
}
|
|
}
|
|
|
|
return _currentUser;
|
|
}
|
|
|
|
}
|
|
|
|
public bool HasUserLikedThisSong(Song song)
|
|
{
|
|
return CurrentUser.LikedSongs.Where(s => s.SongId == song.SongId).FirstOrDefault() != default(Song);
|
|
}
|
|
|
|
public Task OnGet()
|
|
{
|
|
using var dci = DataContext.Instance;
|
|
SongSuggestions = dci.SongSuggestions.OrderByDescending(s => s.Date)
|
|
.Take(50)
|
|
.Include(s => s.Song)
|
|
.Include(s => s.User)
|
|
.ToList();
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public async Task<IActionResult> OnPostLikeSong(int? songId)
|
|
{
|
|
using (var dci = DataContext.Instance)
|
|
{
|
|
var user = dci.Users.Include(u => u.LikedSongs).Where(u => u.UserId == CurrentUser.UserId).SingleOrDefault();
|
|
if (user.LikedSongs.Find(s => s.SongId == songId) == default(Song))
|
|
{
|
|
user.LikedSongs.Add(dci.Songs.Find(songId));
|
|
await dci.SaveChangesAsync();
|
|
}
|
|
}
|
|
return RedirectToPage("/");
|
|
}
|
|
|
|
public async Task<IActionResult> OnPostUnlikeSong(int? songId)
|
|
{
|
|
using (var dci = DataContext.Instance)
|
|
{
|
|
var user = dci.Users.Include(u => u.LikedSongs).Where(u => u.UserId == CurrentUser.UserId).SingleOrDefault();
|
|
var songToRemove = user.LikedSongs.Where(s => s.SongId == songId).SingleOrDefault();
|
|
if (songToRemove != default(Song))
|
|
{
|
|
user.LikedSongs.Remove(songToRemove);
|
|
await dci.SaveChangesAsync();
|
|
}
|
|
}
|
|
return RedirectToPage("/");
|
|
}
|
|
}
|