public IActionResult Create([FromHeader(Name = USER_HEADER)] int userUtn, [FromBody] CreateActivityParameter createActivityParameter)
        {
            var user = GetUserBytUtn(userUtn);

            try
            {
                CreateUserActivity(user, createActivityParameter);

                BadgeService.GeneraterNewBadges(user.UserID);
                CommunicationService.GenerateNewCommunications(user.UserID);
            }
            catch (NotExistingUserException)
            {
                return(BadRequest(new ProblemDetails                 {
                    Type = "https://www.assura.ch/problems/NotExistingUserException",
                    Title = HttpStatusCode.BadRequest.ToString(),
                    Status = (int)HttpStatusCode.BadRequest,
                    Detail = $"No user with the UTN [{userUtn}] exist.",
                    Instance = HttpContext.Request?.Path
                }));
            }
            catch (AlreadyExistingUserActivityException)
            {
                return(BadRequest(new ProblemDetails
                {
                    Type = "https://www.assura.ch/problems/AlreadyExistingUserActivity",
                    Title = HttpStatusCode.BadRequest.ToString(),
                    Status = (int)HttpStatusCode.BadRequest,
                    Detail = $"An activity with the externalId [{createActivityParameter.ExternalId}] already exist and we don't allow duplicates.",
                    Instance = HttpContext.Request?.Path
                }));
            }
            catch (NotExistingActivityTypeCodeException)
            {
                return(BadRequest(new ProblemDetails
                {
                    Type = "https://www.assura.ch/problems/NotExistingActivityTypeCode",
                    Title = HttpStatusCode.BadRequest.ToString(),
                    Status = (int)HttpStatusCode.BadRequest,
                    Detail = $"Invalid Activity Type Code : [{createActivityParameter.ActivityTypeCode}]",
                    Instance = HttpContext.Request?.Path
                }));
            }
            catch (Exception)
            {
                var result = new ObjectResult(new ProblemDetails
                {
                    Type     = "https://www.assura.ch/problems/NotExistingActivityTypeCode",
                    Title    = HttpStatusCode.InternalServerError.ToString(),
                    Status   = (int)HttpStatusCode.InternalServerError,
                    Detail   = "Invalid Activity Type Code",
                    Instance = HttpContext.Request?.Path
                });
                result.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(result);
            }

            return(Ok());
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="user"></param>
 /// <param name="type"></param>
 /// <param name="createActivityParameter"></param>
 private void ValidateUserActivityCreation(User user, ActivityType type, CreateActivityParameter createActivityParameter)
 {
     if (type == null)
     {
         throw new NotExistingActivityTypeCodeException();
     }
     if (ActivityAlreadyExist(createActivityParameter.ExternalId))
     {
         throw new AlreadyExistingUserActivityException();
     }
 }
        /// <summary>
        /// Méthode réutilisable pour créer une activité
        /// </summary>
        /// <param name="user"></param>
        /// <param name="createActivityParameter"></param>
        private void CreateUserActivity(User user, CreateActivityParameter createActivityParameter)
        {
            var type = GetActivityTypeByCode(createActivityParameter.ActivityTypeCode);

            ValidateUserActivityCreation(user, type, createActivityParameter);

            var activity = new UserActivity
            {
                UserID         = user.UserID,
                ActivityTypeID = type.ActivityTypeID,
                Date           = createActivityParameter.CreationDate ?? DateTime.UtcNow,
                Quantity       = createActivityParameter.Quantity,
                ExternalID     = createActivityParameter.ExternalId
            };

            AdjustHealthPoints(activity, type);

            using (var dbContext = new ActivityTrackerDbContext())
            {
                dbContext.UserActivities.Add(activity);
                dbContext.SaveChanges();
            }
        }