コード例 #1
0
        public async Task <CreateResult> Handle
            (DbCreateCommand <Actor> request,
            CancellationToken cancellationToken)
        {
            try
            {
                Logger.LogInformation(LogEvent.DatabaseRequest,
                                      "Request={Request}", request.ToDictionary());

                var validation = new DbCreateActorCommandValidator()
                                 .Validate(request);
                if (!validation.IsValid)
                {
                    Logger.LogWarning
                        (LogEvent.DatabaseRequestArgumentError,
                        "Database request validation error. " +
                        "Error={Error}.", validation.Errors);
                    return(ErrorResult("Database request validation error."));
                }

                await DbContext.Db.GetCollection <Actor>
                    (Defaults.ActorCollectionName)
                .InsertOneAsync(request.Entity)
                .ConfigureAwait(false);

                var newId = request.Entity?.Id;
                return(new CreateResult(newId));
            }
            catch (Exception e)
            {
                Logger.LogWarning(LogEvent.DatabaseExceptionError, e,
                                  "Database exception error. Error={Error}.", e.Message);
                return(ErrorResult("Database exception error"));
            }
        }
コード例 #2
0
        public async Task <CreateResult> Handle
            (DbCreateCommand <GeoTask> request,
            CancellationToken cancellationToken)
        {
            try
            {
                Logger.LogInformation(LogEvent.DatabaseRequest,
                                      "Request={Request}", request.ToDictionary());

                var validation = new DbCreateGeoTaskCommandValidator()
                                 .Validate(request);
                if (!validation.IsValid)
                {
                    Logger.LogWarning
                        (LogEvent.DatabaseRequestArgumentError,
                        "Database request validation error. Error={Error}.",
                        validation.Errors);
                    return(ErrorResult("Database request validation error."));
                }

                DbGeoTask dbEntity = request.Entity.ToDbGeoTask();

                await DbContext.Db.GetCollection <DbGeoTask>
                    (Defaults.TaskCollectionName)
                .InsertOneAsync(dbEntity)
                .ConfigureAwait(false);

                var newId = dbEntity?.Id;

                // Error while creating the entity
                if (String.IsNullOrEmpty(newId))
                {
                    return(ErrorResult("Unknown error."));
                }

                return(new CreateResult(newId));
            }
            catch (Exception e)
            {
                Logger.LogWarning(LogEvent.DatabaseExceptionError, e,
                                  "Database exception error. Error={Error}.", e.Message);
                return(ErrorResult("Database exception error"));
            }
        }
コード例 #3
0
        public static Dictionary <string, object> ToDictionary
            (this DbCreateCommand <GeoTask> from)
        {
            if (from is null)
            {
                return(null);
            }

            if (from.Entity is null)
            {
                return(new Dictionary <string, object>());
            }

            return(new Dictionary <string, object>
            {
                { nameof(from.Entity.AssistentActors),
                  string.Join(',', from.Entity.AssistentActors
                              .Select(x => x.Id)) },
                { nameof(from.Entity.CreatedAt), from.Entity.CreatedAt },
                { nameof(from.Entity.CreatedBy), from.Entity.CreatedBy?.Id },
                { nameof(from.Entity.Description), from.Entity.Description },
                { nameof(from.Entity.GeosIds),
                  string.Join(',', from.Entity.GeosIds) },
                { nameof(from.Entity.Id), from.Entity.Id },
                { nameof(from.Entity.IsArchived), from.Entity.IsArchived },
                { nameof(from.Entity.ObserverActors),
                  string.Join(',', from.Entity.ObserverActors
                              .Select(x => x.Id)) },
                { nameof(from.Entity.PlanFinishAt), from.Entity.PlanFinishAt },
                { nameof(from.Entity.PlanStartAt), from.Entity.PlanStartAt },
                { nameof(from.Entity.ProjectId), from.Entity.ProjectId },
                { nameof(from.Entity.ResponsibleActor),
                  from.Entity.ResponsibleActor?.Id },
                { nameof(from.Entity.Status), from.Entity.Status },
                { nameof(from.Entity.StatusChangedAt),
                  from.Entity.StatusChangedAt },
                { nameof(from.Entity.Title), from.Entity.Title },
            });
        }
コード例 #4
0
        public static Dictionary <string, object> ToDictionary
            (this DbCreateCommand <Actor> from)
        {
            if (from is null)
            {
                return(null);
            }

            if (from.Entity is null)
            {
                return(new Dictionary <string, object>());
            }

            var dict       = new Dictionary <string, object>();
            var entityDict = from.Entity.ToDictionary();

            foreach (var item in entityDict)
            {
                dict.TryAdd(item.Key, item.Value);
            }

            return(dict);
        }
コード例 #5
0
        public async Task <CreateResult> Handle(ActorCreateCommand command,
                                                CancellationToken cancellationToken)
        {
            Logger.LogInformation(AppLogEvent.HandleRequest,
                                  "Handle Actor Create Command. Command={Command}",
                                  command.ToDictionary());

            if (command is null)
            {
                Logger.LogWarning(AppLogEvent.HandleArgumentError,
                                  "Handle Create Actor Command got empty command");
                return(ErrorResult("Empty Actor Create command"));
            }

            try
            {
                var validator        = new ActorCreateCommandValidator();
                var validationResult = await validator.ValidateAsync(command)
                                       .ConfigureAwait(false);

                if (!validationResult.IsValid)
                {
                    Logger.LogWarning(AppLogEvent.RequestValidationError,
                                      "Validation command error. Command = {command}. " +
                                      "Error = {Error}",
                                      command.ToDictionary(), validationResult.Errors);
                    return(ErrorResult(validationResult.Errors
                                       .Select(x => x.ErrorMessage)));
                }

                // Check duplicates
                var dbActorRequest    = new DbGetActorByNameRequest(command.Login);
                var duplicateResponse = await Mediator.Send(dbActorRequest)
                                        .ConfigureAwait(false);

                if (duplicateResponse.Success &&
                    duplicateResponse.Entity != null)
                {
                    Logger.LogWarning(AppLogEvent.RequestValidationError,
                                      "Validation command error. Command={command}. " +
                                      "Error={Error}.",
                                      command.ToDictionary(), "Duplicated actor login");
                    return(ErrorResult("Duplicated actor login"));
                }

                // Get Actor for current user by user name
                Actor createdBy = null;
                if (!command.DataSeedMode)
                {
                    var currentUserName = command.CurrentPrincipal?
                                          .Identity?
                                          .Name;
                    var creatorRequest = new DbGetActorByNameRequest
                                             (currentUserName);
                    var creatorResponse = await Mediator.Send(creatorRequest)
                                          .ConfigureAwait(false);

                    if (creatorResponse.Success)
                    {
                        createdBy = creatorResponse.Entity;
                    }
                }

                var actor = command.ToActor(createdBy?.Id);

                var validatorBeforeSave        = new ActorBeforeSaveValidator();
                var validationBeforeSaveResult = await validatorBeforeSave
                                                 .ValidateAsync(actor)
                                                 .ConfigureAwait(false);

                if (!validationBeforeSaveResult.IsValid)
                {
                    Logger.LogWarning(AppLogEvent.RequestNotValid,
                                      "Actor validation error. Entity={Entity}. " +
                                      "Error={Error}",
                                      actor.ToDictionary(),
                                      validationBeforeSaveResult.Errors);
                    return(ErrorResult(validationBeforeSaveResult.Errors
                                       .Select(x => x.ErrorMessage)));
                }

                if (!command.DataSeedMode)
                {
                    var checkPermissionResult =
                        await CheckPermission(actor, createdBy)
                        .ConfigureAwait(false);

                    if (!checkPermissionResult.Success)
                    {
                        Logger.LogWarning(AppLogEvent.SecurityNotPassed,
                                          "Actor check create permission error. " +
                                          "Entity={Entity}. CurrentActor={CurrentActor}." +
                                          " Error={Error}",
                                          actor.ToDictionary(), createdBy?.ToDictionary(),
                                          checkPermissionResult.Errors);
                        return(checkPermissionResult);
                    }
                }

                var createCommand = new DbCreateCommand <Actor>(actor);
                var createResult  = await Mediator.Send(createCommand)
                                    .ConfigureAwait(false);

                return(createResult);
            }
            catch (Exception e)
            {
                Logger.LogError(AppLogEvent.HandleErrorResponse, e,
                                "Call repository exception");
                return(ErrorResult("Not found"));
            }
        }