Example #1
0
    public async Task <IActionResult> Post([FromBody] OrganizationDefinition organizationDefinition)
    {
        if (organizationDefinition is null)
        {
            throw new ArgumentNullException(nameof(organizationDefinition));
        }

        if (!organizationDefinition.TryValidate(ValidatorProvider, out var validationResult))
        {
            return(ErrorResult
                   .BadRequest(validationResult)
                   .ToActionResult());
        }

        var nameExists = await organizationRepository
                         .NameExistsAsync(UserService.CurrentUserTenant, organizationDefinition.Slug)
                         .ConfigureAwait(false);

        if (nameExists)
        {
            return(ErrorResult
                   .Conflict($"The Organication '{organizationDefinition.Slug}' already exists. Please try your request again with a unique Organization Name or Id.")
                   .ToActionResult());
        }

        var organization = new Organization
        {
            Id             = Guid.NewGuid().ToString(),
            Tenant         = UserService.CurrentUserTenant,
            DisplayName    = organizationDefinition.DisplayName,
            SubscriptionId = organizationDefinition.SubscriptionId,
            Location       = organizationDefinition.Location
        };

        var currentUser = await UserService
                          .CurrentUserAsync(null, null, allowUnsafe : true)
                          .ConfigureAwait(false);

        currentUser.Role             = OrganizationUserRole.Owner;
        currentUser.Organization     = organization.Id;
        currentUser.OrganizationName = organization.Slug;

        var command = new OrganizationCreateCommand(currentUser, organization);

        return(await Orchestrator
               .InvokeAndReturnActionResultAsync(command, Request)
               .ConfigureAwait(false));
    }
Example #2
0
        public async Task <IActionResult> Post([FromBody] OrganizationCreateCommand command)
        {
            var id = await _mediator.Send(command);

            return(await Get(id));
        }