Skip to content

Commit

Permalink
Respect GroupMemberStatus for services list (#56)
Browse files Browse the repository at this point in the history
  • Loading branch information
daniel-lerch authored Jan 21, 2024
1 parent 1f762ac commit 5493207
Show file tree
Hide file tree
Showing 12 changed files with 682 additions and 8 deletions.
4 changes: 3 additions & 1 deletion server/src/Korga.Core/ChurchTools/Api/GroupMember.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@

public class GroupMember : IIdentifiable<long>
{
public GroupMember(int personId, int groupId, int groupTypeRoleId)
public GroupMember(int personId, int groupId, int groupTypeRoleId, string groupMemberStatus)
{
PersonId = personId;
GroupId = groupId;
GroupTypeRoleId = groupTypeRoleId;
GroupMemberStatus = groupMemberStatus;
}

public int PersonId { get; set; }
public int GroupId { get; set; }
public int GroupTypeRoleId { get; set; }
public string GroupMemberStatus { get; set; }

long IIdentifiable<long>.Id => (((long)PersonId) << 32) | (long)GroupId;
}
4 changes: 3 additions & 1 deletion server/src/Korga.Core/ChurchTools/Entities/GroupMember.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

public class GroupMember : IIdentifiable<long>
{
public int PersonId { get; set; }
public int PersonId { get; set; }
public Person? Person { get; set; }

public int GroupId { get; set; }
Expand All @@ -11,5 +11,7 @@ public class GroupMember : IIdentifiable<long>
public int GroupRoleId { get; set; }
public GroupRole? GroupRole { get; set; }

public GroupMemberStatus GroupMemberStatus { get; set; }

long IIdentifiable<long>.Id => (((long)PersonId) << 32) | (long)GroupId;
}
8 changes: 8 additions & 0 deletions server/src/Korga.Core/ChurchTools/GroupMemberStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Korga.ChurchTools;

public enum GroupMemberStatus
{
Active,
Requested,
ToDelete
}
1 change: 1 addition & 0 deletions server/src/Korga.Core/DatabaseContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ private void CreateChurchTools(ModelBuilder modelBuilder)
groupMember.HasOne(gm => gm.Person).WithMany().HasForeignKey(gm => gm.PersonId);
groupMember.HasOne(gm => gm.Group).WithMany().HasForeignKey(gm => gm.GroupId);
groupMember.HasOne(gm => gm.GroupRole).WithMany().HasForeignKey(gm => gm.GroupRoleId);
groupMember.Property(gm => gm.GroupMemberStatus).HasConversion<int>();

var groupType = modelBuilder.Entity<GroupType>();
groupType.HasKey(x => x.Id);
Expand Down
25 changes: 23 additions & 2 deletions server/src/Korga.Server/ChurchTools/ChurchToolsSyncService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,18 @@ await Synchronize<GroupMember, DbGroupMember, long>(
await churchTools.GetGroupMembers(cancellationToken),
database.GroupMembers,
await database.GroupMembers.OrderBy(x => x.PersonId).ThenBy(x => x.GroupId).ToListAsync(cancellationToken),
x => new() { PersonId = x.PersonId, GroupId = x.GroupId, GroupRoleId = x.GroupTypeRoleId },
(response, entity) => entity.GroupRoleId = response.GroupTypeRoleId,
x => new()
{
PersonId = x.PersonId,
GroupId = x.GroupId,
GroupRoleId = x.GroupTypeRoleId,
GroupMemberStatus = ParseGroupMemberStatus(x.GroupMemberStatus),
},
(response, entity) =>
{
entity.GroupRoleId = response.GroupTypeRoleId;
entity.GroupMemberStatus = ParseGroupMemberStatus(response.GroupMemberStatus);
},
cancellationToken
);
}
Expand Down Expand Up @@ -170,4 +180,15 @@ private void LogChanges<T>(int rowsAffected, DbSet<T> table) where T : class
else
logger.LogDebug("No changes for {EntityDisplayName} entities", table.EntityType.DisplayName());
}

private static GroupMemberStatus ParseGroupMemberStatus(string groupMemberStatus)
{
return groupMemberStatus switch
{
"active" => GroupMemberStatus.Active,
"requested" => GroupMemberStatus.Requested,
"to_delete" => GroupMemberStatus.ToDelete,
_ => throw new ArgumentException($"Unknown GroupMemberStatus {groupMemberStatus}")
};
}
}
3 changes: 2 additions & 1 deletion server/src/Korga.Server/Controllers/ServiceController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ join person in database.People on member.PersonId equals person.Id
{
PersonId = person.Id,
FirstName = person.FirstName,
LastName = person.LastName
LastName = person.LastName,
GroupMemberStatus = member.GroupMemberStatus,
})
.Distinct()
.ToDictionaryAsync(x => x.PersonId);
Expand Down
Loading

0 comments on commit 5493207

Please sign in to comment.