예제 #1
0
        public async Task <ActionResult> ApproveCircleRequest([FromBody] CircleRequest model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var loggedInUser = await GetLoggedInUserAsync();

            if (loggedInUser == null)
            {
                return(Unauthorized());
            }
            if (!await _repo.IsOwner(loggedInUser.Id, model.CircleId))
            {
                return(Unauthorized());
            }
            var circleRequestFromRepo = await _repo.GetCircleRequest((int)model.AppUserId, model.CircleId);

            if (circleRequestFromRepo == null)
            {
                return(NotFound("リクエストが見つかりません"));
            }

            _repo.Delete(circleRequestFromRepo);
            //If already member, just remove request and create nothing
            if (await _repo.IsMember(model.AppUserId, model.CircleId))
            {
                await _repo.SaveAll();

                return(Ok());
            }

            var newCircleMember = new CircleMember()
            {
                AppUserId      = (int)model.AppUserId,
                Circle         = circleRequestFromRepo.Circle,
                CircleId       = model.CircleId,
                Role           = CircleRoleEnum.MEMBER,
                DateJoined     = DateTime.Now,
                DateLastActive = DateTime.Now
            };

            _repo.Add(newCircleMember);
            await _repo.SaveAll();

            await _notificationRepo.AddNotification(NotificationEnum.CircleRequestAccepted, model.AppUserId, newCircleMember);

            await _repo.SaveAll();

            return(CreatedAtRoute("GetCircleMember", new { userId = model.AppUserId, circleId = model.CircleId }, _mapper.Map <CircleMemberForReturnDto>(await _repo.GetCircleMember(model.AppUserId, model.CircleId))));
        }
예제 #2
0
        public async Task <ActionResult> Post([FromBody] CircleEventUpdateDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (!await this.MatchAppUserWithToken(model.AppUserId) || !await _repo.IsOwner((int)model.AppUserId, model.CircleId))
            {
                return(Unauthorized());
            }

            var newEvent = this._mapper.Map <CircleEvent>(model);

            _repo.Add(newEvent);
            CircleEvent oldestEvent = null;

            if (await _repo.GetCircleEventCount(model.CircleId) >= CIRCLE_EVENT_MAX)
            {
                oldestEvent = await _repo.GetOldestCircleEvent(model.CircleId);

                _repo.Delete(oldestEvent);
            }
            await _repo.SaveAll();

            if (oldestEvent != null)
            {
                await this.deleteAttachedPhotos(oldestEvent.Photos);
            }

            return(CreatedAtRoute("GetCircleEvent", new { id = newEvent.Id }, _mapper.Map <CircleEventForReturnDto>(await _repo.Get <CircleEvent>(newEvent.Id))));
        }
예제 #3
0
        public async Task <ActionResult> Get(int id)
        {
            var circleForReturn = _mapper.Map <CircleForReturnDto>(await _repo.GetCircle(id));
            var appUser         = await GetLoggedInUserAsync();

            if (appUser != null)
            {
                if (await _repo.IsOwner(appUser.Id, circleForReturn.Id))
                {
                    circleForReturn.IsManageable = true;
                    circleForReturn.IsMember     = true;
                }
                else if (await _repo.IsMember(appUser.Id, circleForReturn.Id))
                {
                    circleForReturn.IsMember = true;
                }
                else
                {
                    var request = await _repo.GetCircleRequest(appUser.Id, circleForReturn.Id);

                    if (request != null)
                    {
                        if (request.Declined)
                        {
                            circleForReturn.IsDeclined = true;
                        }
                        else
                        {
                            circleForReturn.IsWaitingApproval = true;
                        }
                    }
                }
            }

            circleForReturn.TotalMemberCount = await _repo.GetCircleMemberCount(id);

            return(Ok(circleForReturn));
        }