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(); } }