Example #1
0
        public async Task <IActionResult> Post([FromBody] RoomViewModel roomModel)
        {
            if (roomModel == null)
            {
                return(StatusCode(500, new InternalServerError("Room model is null")));
            }

            roomModel.Name = roomModel.Name.Trim();

            if (roomModel.Name == string.Empty)
            {
                return(StatusCode(500, new InternalServerError("Room name cannot be empty")));
            }

            var existRooms = await _roomRepository.GetAsync(p => p.Name == roomModel.Name);

            if (existRooms.Any())
            {
                var existRoom    = existRooms.FirstOrDefault();
                var participants = await _participantRepository.GetAsync(p => p.RoomId == existRoom.Id);

                if (!participants.Any() && existRoom.FirstConnectionExpired < DateTime.Now)
                {
                    await _roomRepository.RemoveAsync(existRoom);
                }
                else
                {
                    return(StatusCode(500, new InternalServerError("A room with the same name already exists")));
                }
            }


            var room = new Room
            {
                Name                   = roomModel.Name,
                ListenSald             = Guid.NewGuid().ToString(),
                PlayingSald            = Guid.NewGuid().ToString(),
                FirstConnectionExpired = DateTime.Now.AddMinutes(1),
                OwnerGuid              = Guid.NewGuid().ToString()
            };
            await _roomRepository.CreateAsync(room);

            return(Ok(room.Adapt <RoomViewModel>()));
        }