public async Task <ActionResult> SendCircleRequest([FromBody] CircleRequest model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (!await this.MatchAppUserWithToken(model.AppUserId)) { return(Unauthorized()); } if (await _repo.IsMember((int)model.AppUserId, model.CircleId)) { return(BadRequest("既にメンバーになっています")); } var circleFromRepo = await _repo.Get <Circle>(model.CircleId); if (circleFromRepo == null) { return(NotFound("サークルレコードが見つかりません: " + model.CircleId)); } if (await _repo.RequestSent((int)model.AppUserId, model.CircleId)) { return(BadRequest("既にリクエストしています")); } if (circleFromRepo.ApprovalRequired) { _repo.Add(model); await _notificationRepo.AddNotification(NotificationEnum.NewCircleMemberRequest, model.AppUserId, model); await _repo.SaveAll(); return(CreatedAtRoute("GetCircleRequest", new { userId = model.AppUserId, circleId = model.CircleId }, null)); } _repo.Add(new CircleMember() { AppUserId = (int)model.AppUserId, CircleId = model.CircleId, Role = CircleRoleEnum.MEMBER, DateJoined = DateTime.Now, DateLastActive = DateTime.Now }); await _repo.SaveAll(); return(CreatedAtRoute("GetCircleMember", new { userId = model.AppUserId, circleId = model.CircleId }, null)); }