예제 #1
0
        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);
        }
예제 #2
0
        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");
                }
예제 #3
0
        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);
        }