示例#1
0
        public async Task <IActionResult> Get([FromBody] IdFormModel model)
        {
            var result = new ResultModel();

            if (ModelState.IsValid)
            {
                var userId = User.GetUserId();

                var data = await _db.Channels.Include(i => i.Users).FirstOrDefaultAsync(i => i.Id == model.Id);

                if (data != null)
                {
                    // if the user is owner or member of the channel, then let him in
                    if (data.OwnerId == userId || data.Users.Any(i => i.UserId == userId))
                    {
                        var user = data.Users.FirstOrDefault(i => i.UserId.Equals(userId));
                        if (user != null && user.State == (int)UserStates.Blocked)
                        {
                            result.Succeeded = false;
                            result.Message   = "You have blocked from this channel.";
                        }
                        else
                        {
                            result.Succeeded = true;
                            result.Data      = FillTheModel(data);
                        }
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(data.Password))
                        {
                            result.Prompt  = true;
                            result.Message = "Enter Password";
                        }
                        else
                        {
                            _db.ChannelUsers.Add(new ChannelUser()
                            {
                                UserId    = userId,
                                ChannelId = model.Id,
                                State     = (int)UserStates.Joined
                            });

                            var affected = await _db.SaveChangesAsync();

                            if (affected == 1)
                            {
                                result.Data      = FillTheModel(data);
                                result.Succeeded = true;
                            }
                        }
                    }
                }
            }

            return(Json(result));
        }
        public async Task GetWithPasswordPublicUserOne()
        {
            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", MockData.AuthKey);
            IdFormModel model = new IdFormModel();

            model.Id = MockData.CPublicSecondUserWithPassword; // second user's channel it should proceed

            var response = await _client.PostAsync("/api/Channel/Get",
                                                   new StringContent(JsonConvert.SerializeObject(model), System.Text.Encoding.UTF8, "application/json"));

            response.EnsureSuccessStatusCode();
            var content = await response.Content.ReadAsStringAsync();

            var result = JsonConvert.DeserializeObject <TResultModel <object> >(content);

            Assert.True(result.Prompt);
            _client.DefaultRequestHeaders.Clear();
        }