46 lines
1.4 KiB
C#
46 lines
1.4 KiB
C#
namespace GmRelay.Web.Services;
|
|
|
|
public sealed class AuthorizedSessionService(ISessionStore sessionStore)
|
|
{
|
|
public Task<List<WebGameGroup>> GetGroupsForGmAsync(long gmId) =>
|
|
sessionStore.GetGroupsForGmAsync(gmId);
|
|
|
|
public async Task<List<WebSession>?> GetUpcomingSessionsForGmAsync(Guid groupId, long gmId)
|
|
{
|
|
if (!await GroupBelongsToGmAsync(groupId, gmId))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return await sessionStore.GetUpcomingSessionsAsync(groupId);
|
|
}
|
|
|
|
public async Task<WebSession?> GetSessionForGmAsync(Guid sessionId, long gmId)
|
|
{
|
|
var session = await sessionStore.GetSessionAsync(sessionId);
|
|
if (session is null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return await GroupBelongsToGmAsync(session.GroupId, gmId) ? session : null;
|
|
}
|
|
|
|
public async Task UpdateSessionForGmAsync(Guid sessionId, long gmId, string title, DateTime scheduledAt, string joinLink)
|
|
{
|
|
var session = await GetSessionForGmAsync(sessionId, gmId);
|
|
if (session is null)
|
|
{
|
|
throw new SessionAccessDeniedException(sessionId, gmId);
|
|
}
|
|
|
|
await sessionStore.UpdateSessionAsync(sessionId, session.GroupId, title, scheduledAt, joinLink);
|
|
}
|
|
|
|
private async Task<bool> GroupBelongsToGmAsync(Guid groupId, long gmId)
|
|
{
|
|
var group = await sessionStore.GetGroupAsync(groupId);
|
|
return group?.GmTelegramId == gmId;
|
|
}
|
|
}
|