82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
using HopFrame.Core.Repositories;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using SpotiParty.Web.Models;
|
|
|
|
namespace SpotiParty.Web.Services;
|
|
|
|
public class EventsDashboardRepo(DatabaseContext context, DashboardAuthHandler handler, IDbContextFactory<DatabaseContext> factory) : IHopFrameRepository<Event, Guid> {
|
|
|
|
public bool ShowAllEvents { get; set; } = false;
|
|
|
|
public async Task<IEnumerable<Event>> LoadPage(int page, int perPage) {
|
|
var user = await handler.GetCurrentUser();
|
|
if (user is null) return [];
|
|
|
|
IQueryable<Event> baseQuery = context.Events
|
|
.Include(e => e.Host)
|
|
.OrderBy(e => e.Id);
|
|
|
|
if (!ShowAllEvents) {
|
|
baseQuery = baseQuery.Where(e => e.Host.UserId == user.UserId);
|
|
}
|
|
|
|
return await baseQuery
|
|
.Skip(page * perPage)
|
|
.Take(perPage)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<SearchResult<Event>> Search(string searchTerm, int page, int perPage) {
|
|
var user = await handler.GetCurrentUser();
|
|
if (user is null) return new(Enumerable.Empty<Event>(), 0);
|
|
|
|
IQueryable<Event> baseQuery = context.Events
|
|
.Include(e => e.Host)
|
|
.OrderBy(e => e.Id);
|
|
|
|
if (!ShowAllEvents) {
|
|
baseQuery = baseQuery.Where(e => e.Host.UserId == user.UserId);
|
|
}
|
|
|
|
baseQuery = baseQuery
|
|
.Where(e => e.Name.ToLower().Contains(searchTerm.ToLower()));
|
|
|
|
var totalEntries = await baseQuery.CountAsync();
|
|
var entries = await baseQuery
|
|
.Skip(page * perPage)
|
|
.Take(perPage)
|
|
.ToListAsync();
|
|
|
|
return new(entries, (int)Math.Ceiling(totalEntries / (double)perPage));
|
|
}
|
|
|
|
public async Task<int> GetTotalPageCount(int perPage) {
|
|
double count = await context.Events.CountAsync();
|
|
return Convert.ToInt32(Math.Ceiling(count / perPage));
|
|
}
|
|
|
|
public async Task CreateItem(Event item) {
|
|
await using var tempContext = await factory.CreateDbContextAsync();
|
|
|
|
var creator = await handler.GetCurrentUser();
|
|
tempContext.Attach(creator!);
|
|
item.Host = creator!;
|
|
|
|
await tempContext.Events.AddAsync(item);
|
|
await tempContext.SaveChangesAsync();
|
|
}
|
|
|
|
public async Task EditItem(Event item) {
|
|
context.Events.Update(item);
|
|
await context.SaveChangesAsync();
|
|
}
|
|
|
|
public async Task DeleteItem(Event item) {
|
|
context.Events.Remove(item);
|
|
await context.SaveChangesAsync();
|
|
}
|
|
|
|
public async Task<Event?> GetOne(Guid key) {
|
|
return await context.Events.FindAsync(key);
|
|
}
|
|
} |