public async Task <IActionResult> PartiallyUpdate(
            [FromRoute] string id,
            [FromBody] JsonPatchDocument <MenstruationDescriptionUpdateResource> patchDoc)
        {
            MenstruationDescription mDescription = await _mdescriptionRepository
                                                   .FindByIdAsync(
                id, q => q.Include(x => x.MenstruationLog).ThenInclude(x => x.LoverCloudUser));

            if (mDescription == null)
            {
                return(null);
            }
            if (mDescription.MenstruationLog?.LoverCloudUser?.Sex == Sex.Male || // 禁止男性用户
                mDescription.MenstruationLog?.LoverCloudUser?.Id != this.GetUserId())
            {
                return(Forbid());
            }

            MenstruationDescriptionUpdateResource updateResource = _mapper.Map <MenstruationDescriptionUpdateResource>(mDescription);

            patchDoc.ApplyTo(updateResource);
            _mapper.Map(updateResource, mDescription);

            if (!await _unitOfWork.SaveChangesAsync())
            {
                throw new Exception("Failed to update resource");
            }

            return(NoContent());
        }
        public async Task <IActionResult> Delete([FromRoute] string id)
        {
            MenstruationDescription mDescription = await _mdescriptionRepository
                                                   .FindByIdAsync(
                id, q => q.Include(x => x.MenstruationLog).ThenInclude(x => x.LoverCloudUser));

            if (mDescription == null)
            {
                return(null);
            }
            if (mDescription.MenstruationLog?.LoverCloudUser?.Sex == Sex.Male || // 禁止男性用户
                mDescription.MenstruationLog?.LoverCloudUser?.Id != this.GetUserId())
            {
                return(Forbid());
            }

            _mdescriptionRepository.Delete(mDescription);

            if (!await _unitOfWork.SaveChangesAsync())
            {
                throw new Exception("Failed to delete resource");
            }

            return(NoContent());
        }
        public async Task <IActionResult> Add(
            [FromRoute] string menstruationLogId,
            [FromBody] MenstruationDescriptionAddResource addResource)
        {
            if (!ModelState.IsValid)
            {
                return(UnprocessableEntity(ModelState));
            }

            MenstruationLog mlog = await _mlogRepository.FindByIdAsync(
                menstruationLogId,
                c => c.Include(x => x.LoverCloudUser));

            if (mlog == null)
            {
                return(NotFound());
            }
            if (mlog.LoverCloudUser?.Sex == Sex.Male || // 禁止男性用户
                mlog.LoverCloudUser?.Id != this.GetUserId())
            {
                return(Forbid());
            }

            MenstruationDescription mDescription = _mapper.Map <MenstruationDescription>(addResource);

            mDescription.Date            = DateTime.Now;
            mDescription.MenstruationLog = mlog;
            _mdescriptionRepository.Add(mDescription);

            if (!await _unitOfWork.SaveChangesAsync())
            {
                throw new Exception("Failed to add resource");
            }

            MenstruationDescriptionResource mDescriptionResource = _mapper.Map <MenstruationDescriptionResource>(mDescription);

            var result = mDescriptionResource.ToDynamicObject()
                         .AddLinks(
                this, null, "menstruation_description", null,
                "DeleteMenstruationDescription", "PartiallyUpdateMenstruationDescription");

            return(CreatedAtRoute("AddMenstruationDescription", result));
        }
 public void Update(MenstruationDescription entity)
 {
     _dbContext.MenstruationDescriptions.Update(entity);
 }
 public void Delete(MenstruationDescription entity)
 {
     _dbContext.MenstruationDescriptions.Remove(entity);
 }
 public void Add(MenstruationDescription entity)
 {
     _dbContext.MenstruationDescriptions.Add(entity);
 }