Skip to content

Commit

Permalink
Inlcude Initiator Reply In Event Response (#13)
Browse files Browse the repository at this point in the history
* include initiator event reply in event response
* include number of team members in team slim response
* fix naming
  • Loading branch information
skrasekmichael committed May 15, 2024
1 parent 38817cc commit ef153ce
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@

namespace TeamUp.TeamManagement.Application.Events;

internal sealed class GetEventsQueryHandlers : IQueryHandler<GetEventsQuery, Collection<EventSlimResponse>>
internal sealed class GetEventsQueryHandler : IQueryHandler<GetEventsQuery, Collection<EventSlimResponse>>
{
private readonly ITeamManagementQueryContext _appQueryContext;
private readonly IDateTimeProvider _dateTimeProvider;

public GetEventsQueryHandlers(ITeamManagementQueryContext appQueryContext, IDateTimeProvider dateTimeProvider)
public GetEventsQueryHandler(ITeamManagementQueryContext appQueryContext, IDateTimeProvider dateTimeProvider)
{
_appQueryContext = appQueryContext;
_dateTimeProvider = dateTimeProvider;
Expand All @@ -26,9 +26,24 @@ public async Task<Result<Collection<EventSlimResponse>>> Handle(GetEventsQuery q
{
var from = query.FromUtc ?? _dateTimeProvider.UtcNow;
var team = await _appQueryContext.Teams
.Where(team => team.Id == query.TeamId)
.Select(team => new
{
team.Id,
team.EventTypes,
Initiator = team.Members
.Where(member => member.UserId == query.InitiatorId)
.Select(member => new
{
member.Id,
member.Nickname,
})
.FirstOrDefault()
})
.Select(team => new
{
team.Id,
team.Initiator,
Events = _appQueryContext.Events
.AsSplitQuery()
.Where(e => e.TeamId == team.Id && e.ToUtc > from)
Expand All @@ -42,6 +57,17 @@ public async Task<Result<Collection<EventSlimResponse>>> Handle(GetEventsQuery q
Status = e.Status,
MeetTime = e.MeetTime,
ReplyClosingTimeBeforeMeetTime = e.ReplyClosingTimeBeforeMeetTime,
InitiatorResponse = e.EventResponses
.Where(er => er.TeamMemberId == team.Initiator!.Id)
.Select(er => new EventResponseResponse
{
TeamMemberId = team.Initiator!.Id,
Message = er.Message,
TeamMemberNickname = team.Initiator.Nickname,
TimeStampUtc = er.TimeStampUtc,
Type = er.ReplyType,
})
.FirstOrDefault(),
ReplyCount = e.EventResponses
.GroupBy(er => er.ReplyType)
.Select(x => new ReplyCountResponse
Expand All @@ -53,12 +79,9 @@ public async Task<Result<Collection<EventSlimResponse>>> Handle(GetEventsQuery q
EventType = team.EventTypes.First(et => et.Id == e.EventTypeId).Name
})
.OrderBy(e => e.FromUtc)
.ToList(),
Initiator = team.Members
.Select(member => member.UserId)
.FirstOrDefault(id => id == query.InitiatorId)
.ToList()
})
.FirstOrDefaultAsync(team => team.Id == query.TeamId, ct);
.FirstOrDefaultAsync(ct);

return team
.EnsureNotNull(TeamErrors.TeamNotFound)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public async Task<Result<Collection<TeamSlimResponse>>> Handle(GetUserTeamsQuery
{
TeamId = team.Id,
Name = team.Name,
NumberOfTeamMembers = team.NumberOfMembers
})
.ToListAsync(ct);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ public sealed class EventSlimResponse
public required EventStatus Status { get; init; }
public required TimeSpan MeetTime { get; init; }
public required TimeSpan ReplyClosingTimeBeforeMeetTime { get; init; }
public required EventResponseResponse? InitiatorResponse { get; init; }
public required List<ReplyCountResponse> ReplyCount { get; init; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ public sealed class TeamSlimResponse
{
public required TeamId TeamId { get; init; }
public required string Name { get; init; }
public required int NumberOfTeamMembers { get; init; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public async Task GetUserTeams_Should_ReturnTeams_ThatUserIsMemberOf()
{
TeamId = team.Id,
Name = team.Name,
NumberOfTeamMembers = team.NumberOfMembers
});

var otherTeam = TeamGenerators.Team.WithOneOwner(members.First());
Expand Down

0 comments on commit ef153ce

Please sign in to comment.