Esempio n. 1
0
        public async Task <ActionResult> DoAction(
            [FromRoute] string sessionId,
            [FromBody] ActionRequest actionRequest
            )
        {
            UserModel userModel = await userManager.GetUserAsync(HttpContext.User);

            if (userModel?.UserId == null)
            {
                return(Status403Forbidden());
            }


            if (sessionId == null)
            {
                return(NotFound());
            }
            Task <Session?> sessionTask = sessionService.Get(sessionId);

            Session?session = await sessionTask;

            if (session == null)
            {
                return(Status404NotFound("Session"));
            }

            if (!session.HasPlayer(userModel.UserId))
            {
                return(Status403Forbidden());
            }

            string?failureMessage = null;

            try {
                AActionParams actionParams = await actionFactory.MakeActionParams(sessionId, actionRequest, userModel);

                if (ActionFactory.Create(actionParams, out AAction action))
                {
                    if (action != null && action.Execute(out failureMessage))
                    {
                        await actionFactory.Commit(action);

                        return(Ok());
                    }
                }
                else
                {
                    failureMessage = "Request missing required parameter.";
                }
            }
            catch (Exception e) {
                failureMessage = e.Message;
            }


            return(failureMessage == null
               ? Status500UnknownError()
               : Status400Invalid(failureMessage));
        }