public async Task HandleAsync(AddGroupMember command) { var groupId = GroupId.From(command.GroupId); var group = await _groupRepository.GetAsync(groupId) ?? throw new GroupNotFoundException(groupId); var user = await _moduleClient.GetAsync <UserDto>("/identity/me", new MeQuery(command.UserIdOfMember)); var avatar = await GetAvatar(user.Avatar); group.AddMember(UserId.From(command.UserIdOfMember), MemberName.Create(user.Nickname), avatar, _clock); }
private static void Build(EntityTypeBuilder <Group> group) { group.ToTable("Groups"); group.HasKey(x => x.Id) .HasName("PK_Groups"); group.Property(x => x.Id) .HasConversion(x => x.Value, x => GroupId.From(x)) .ValueGeneratedNever() .HasColumnName("GroupId"); group.OwnsOne( x => x.Name, n => { n.Property(x => x.Value).HasColumnName(nameof(Group.Name)) .IsRequired(); } ); group.Property(x => x.CreatedAt).IsRequired(); group.Metadata.FindNavigation(nameof(Group.Members)).SetPropertyAccessMode(PropertyAccessMode.Field); group.OwnsMany( x => x.Members, m => { m.ToTable("Members"); m.HasKey(x => x.Id) .HasName("PK_Members"); m.Property(x => x.Id) .HasConversion(x => x.Value, x => MemberId.From(x)) .ValueGeneratedNever() .IsRequired(); m.Property(x => x.UserId) .HasConversion(x => x.Value, x => UserId.From(x)) .ValueGeneratedNever() .IsRequired(); m.Property(x => x.IsOwner).IsRequired(); m.Property(x => x.Name) .HasConversion(x => x.Value, x => MemberName.Create(x)) .IsRequired(); m.OwnsOne( u => u.Avatar, b => { b.Property(x => x !.Value).IsRequired().HasColumnName("Avatar"); }
public async Task HandleAsync(CreateGroupCommand command) { var groupId = GroupId.From(command.GroupId); if (await _groupRepository.ExistsAsync(groupId)) { throw new GroupAlreadyExistsException(groupId); } var me = await _client.GetAsync <UserDto>("/identity/me", new MeQuery(command.UserId)); var avatar = await GetAvatar(me.Avatar); var group = Domain.Entities.Group.Create(groupId, GroupName.Create(command.GroupName), UserId.From(command.UserId), MemberName.Create(me.Nickname), avatar, _clock); await _groupRepository.AddAsync(group); }