Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
agjini committed Oct 15, 2024
1 parent 755c9bf commit d86ad68
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 23 deletions.
2 changes: 1 addition & 1 deletion back/src/Liane/Liane.Api/Community/LianeMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public sealed record MemberJoinedTrip(string Value, Ref<User> User, Ref<ApiTrip>

public sealed record MemberLeftTrip(string Value, Ref<User> User, Ref<ApiTrip> Trip) : TripMessage(Value, Trip);

public sealed record MemberHasStarted(Ref<ApiTrip> Trip) : TripMessage(null, Trip);
public sealed record MemberHasStarted(string Value, Ref<ApiTrip> Trip) : TripMessage(Value, Trip);

public sealed record MemberFeedback(Ref<ApiTrip> Trip, Feedback Feedback) : TripMessage(null, Trip);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,14 @@ public sealed class LianeFetcher(LianeRequestFetcher lianeRequestFetcher, IUserS
return await FetchLiane(connection, lianeRequestId);
}

public async Task<Api.Community.Liane?> TryFetchLiane(IDbConnection connection, Guid lianeId, IDbTransaction? tx = null)
{
return (await FetchLianes(connection, ImmutableList.Create(lianeId), tx)).GetValueOrDefault(lianeId);
}

public async Task<Api.Community.Liane> FetchLiane(IDbConnection connection, Guid lianeId, IDbTransaction? tx = null)
{
var liane = (await FetchLianes(connection, ImmutableList.Create(lianeId), tx)).GetValueOrDefault(lianeId);
var liane = await TryFetchLiane(connection, lianeId, tx);
if (liane is null)
{
throw new ResourceNotFoundException($"Liane {liane} not found");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,21 +186,21 @@ public async Task<bool> JoinRequest(Ref<LianeRequest> mine, Ref<Api.Community.Li

var mineId = mine.IdAsGuid();

var iAmAlreadyMember = await connection.FirstOrDefaultAsync(Query.Select<LianeMemberDb>().Where(m => m.LianeRequestId, ComparisonOperator.Eq, mineId), tx);
if (iAmAlreadyMember?.JoinedAt is not null)
{
return false;
}

var foreignId = foreign.IdAsGuid();

var alreadyMember = await connection.FirstOrDefaultAsync(Query.Select<LianeMemberDb>().Where(m => m.LianeRequestId, ComparisonOperator.Eq, foreignId), tx);

var lianeId = alreadyMember?.LianeId ?? foreignId;

var liane = await lianeFetcher.TryFetchLiane(connection, lianeId, tx);
var userId = currentContext.CurrentUser().Id;
if (liane is not null && liane.Members.Any(m => m.User.Id == userId))
{
return false;
}

var from = await connection.GetAsync<LianeRequestDb, Guid>(mineId, tx);

var userId = currentContext.CurrentUser().Id;
if (from.CreatedBy.Id != userId)
{
throw new UnauthorizedAccessException("User is not the owner of the liane request");
Expand All @@ -210,7 +210,8 @@ public async Task<bool> JoinRequest(Ref<LianeRequest> mine, Ref<Api.Community.Li

tx.Commit();

await eventDispatcher.Dispatch(foreign, new MessageContent.MemberRequested("", userId, mineId));
var recipient = liane is not null ? liane.CreatedBy.Id : userId;
await eventDispatcher.Dispatch(foreign, new MessageContent.MemberRequested("", recipient, mineId));
return true;
}

Expand Down
39 changes: 26 additions & 13 deletions back/src/Liane/Liane.Service/Internal/Trip/TripServiceImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -690,35 +690,48 @@ public async Task UpdateGeolocationSetting(Ref<Api.Trip.Trip> liane, Geolocation
await eventDispatcher.Dispatch(updated.Liane!, new MessageContent.GeolocationLevelChanged(updated.Id, level));
}

public async Task CancelTrip(Ref<Api.Trip.Trip> lianeRef)
public async Task CancelTrip(Ref<Api.Trip.Trip> tripRef)
{
var liane = await Get(lianeRef);
var trip = await Get(tripRef);
var sender = currentContext.CurrentUser().Id;
var now = DateTime.UtcNow;
if (sender == liane.Driver.User)

var alreadyCanceled = trip.Members.FirstOrDefault(m => m.User.Id == sender && m.Cancellation is not null);
if (alreadyCanceled is not null)
{
return;
}

if (sender == trip.Driver.User)
{
// Cancel trip
await UpdateState(liane, TripStatus.Canceled);
await UpdateState(trip, TripStatus.Canceled);
}

await Update(lianeRef, Builders<LianeDb>.Update.Set(l => l.Members, liane.Members.Select(m => m.User.Id == sender ? m with { Cancellation = now } : m)));
await Update(tripRef, Builders<LianeDb>.Update.Set(l => l.Members, trip.Members.Select(m => m.User.Id == sender ? m with { Cancellation = now } : m)));

await eventDispatcher.Dispatch(liane.Liane, new MessageContent.MemberLeftTrip("", sender, liane));
await eventDispatcher.Dispatch(trip.Liane, new MessageContent.MemberLeftTrip("", sender, trip));
}

public async Task StartTrip(Ref<Api.Trip.Trip> lianeRef)
public async Task StartTrip(Ref<Api.Trip.Trip> tripRef)
{
var liane = await Get(lianeRef);
var trip = await Get(tripRef);
var sender = currentContext.CurrentUser().Id;
var now = DateTime.UtcNow;
if (liane.State == TripStatus.NotStarted)

var alreadyStarted = trip.Members.FirstOrDefault(m => m.User.Id == sender && m.Departure is not null);
if (alreadyStarted is not null)
{
return;
}

if (trip.State == TripStatus.NotStarted)
{
await UpdateState(liane, TripStatus.Started);
await UpdateState(trip, TripStatus.Started);
}

await Update(lianeRef, Builders<LianeDb>.Update.Set(l => l.Members, liane.Members.Select(m => m.User.Id == sender ? m with { Departure = now } : m)));
await Update(tripRef, Builders<LianeDb>.Update.Set(l => l.Members, trip.Members.Select(m => m.User.Id == sender ? m with { Departure = now } : m)));

await eventDispatcher.Dispatch(liane.Liane, new MessageContent.MemberHasStarted(liane));
await eventDispatcher.Dispatch(trip.Liane, new MessageContent.MemberHasStarted("", trip));
}

private TripStatus GetUserState(Api.Trip.Trip trip, TripMember member)
Expand Down
2 changes: 2 additions & 0 deletions common/src/services/community.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ export type MemberRejected = { type: "MemberRejected"; value: string; user: Ref<
export type MemberLeft = { type: "MemberLeft"; value: string; user: Ref<User> };
export type MemberJoinedTrip = { type: "MemberJoinedTrip"; value: string; user: Ref<User>; trip: Ref<Liane>; takeReturn: boolean };
export type MemberLeftTrip = { type: "MemberLeftTrip"; value: string; user: Ref<User>; trip: Ref<Liane> };
export type MemberHasStarted = { type: "MemberHasStarted"; value: string; user: Ref<User>; trip: Ref<Liane> };

export type MessageContent =
| Text
Expand All @@ -99,6 +100,7 @@ export type MessageContent =
| MemberRequested
| MemberAdded
| MemberRejected
| MemberHasStarted
| MemberLeft
| MemberJoinedTrip
| MemberLeftTrip;
Expand Down

0 comments on commit d86ad68

Please sign in to comment.