public async Task AddLiftingActivityAsync(LiftingActivity activity) { // model validation if (activity == null) { throw new ModelValidationException(nameof(activity) + " must be provided."); } if (activity.UserObjectId == Guid.Empty) { throw new ModelValidationException(nameof(activity.UserObjectId) + " must be provided."); } if (activity.Date == DateTime.MinValue) { throw new ModelValidationException(nameof(activity.Date) + " must be provided."); } if (string.IsNullOrWhiteSpace(activity.Duration)) { throw new ModelValidationException(nameof(activity.Duration) + " must be provided."); } // convert the timespan type (system.text.json doesn't support it yet) var validTimespan = TimeSpan.TryParse(activity.Duration, out TimeSpan parsedTs); if (!validTimespan) { throw new ModelValidationException(nameof(activity.Duration) + " must be provided."); } using (SqlConnection sqlcon = new SqlConnection(DatabaseConnectionString)) { await sqlcon.OpenAsync().ConfigureAwait(false); using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = sqlcon; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = "dbo.AddLiftingActivity"; cmd.Parameters.AddWithValue("@UserObjectId", activity.UserObjectId); cmd.Parameters.AddWithValue("@Date", activity.Date); cmd.Parameters.AddWithValue("@Type", activity.Type); cmd.Parameters.AddWithValue("@Purpose", activity.Purpose); cmd.Parameters.AddWithValue("@FocusArea", activity.FocusArea); cmd.Parameters.AddWithValue("@Duration", parsedTs.Ticks); cmd.Parameters.AddWithValue("@AverageIntensity", activity.AverageIntensity); if (activity.Notes != null) { cmd.Parameters.AddWithValue("@Notes", activity.Notes); } await cmd.ExecuteNonQueryAsync().ConfigureAwait(false); } } }
public async Task <ActionResult> AddLiftingActivity([FromBody] LiftingActivity activity) { var eventProps = GetDefaultCustomProperties(); try { activity.UserObjectId = ClaimsHelper.GetUserObjectIdClaim((ClaimsIdentity)HttpContext.User.Identity); await Database.AddLiftingActivityAsync(activity).ConfigureAwait(false); eventProps.Add("ActivityType", nameof(LiftingActivity)); eventProps.Add("LiftingType", activity.Type.ToString()); eventProps.Add("ActivityPurpose", activity.Purpose.ToString()); eventProps.Add("ActivityDate", activity.Date.ToString()); Logger.TrackEvent(EventNames.NewDistanceActivitySubmitted, eventProps); } catch (ClaimsValidationException ex) { eventProps.Add("User.Claims", ex.GetClaims()); Logger.TrackEvent(EventNames.ClaimsValidationError, eventProps); return(Unauthorized()); } catch (ModelValidationException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { Logger.TrackException(ex); return(StatusCode(StatusCodes.Status500InternalServerError)); } return(Ok()); }