namespace qtc_api.Services.RoomService { public class RoomService : IRoomService { private readonly DataContext _dataContext; private long idMax = 900000000000000000; public RoomService(DataContext dataContext) { _dataContext = dataContext; } public async Task> AddRoom(string userId, RoomDto room) { var serviceResponse = new ServiceResponse(); var roomList = await _dataContext.Rooms.ToListAsync(); var roomToAdd = new Room(); Random rnd = new Random(); roomToAdd.Id = LongRandom(1, idMax, rnd).ToString(); roomToAdd.Name = room.Name; roomToAdd.CreatorId = userId; roomToAdd.CreatedAt = DateTime.UtcNow; var cRoom = await _dataContext.Rooms.FirstOrDefaultAsync(x => x.Name == roomToAdd.Name); if (cRoom == null) { await _dataContext.Rooms.AddAsync(roomToAdd); await _dataContext.SaveChangesAsync(); serviceResponse.Success = true; serviceResponse.Data = roomToAdd; } else { serviceResponse.Success = false; serviceResponse.Message = "Room already exists."; } return serviceResponse; } public async Task> DeleteRoom(string id) { var serviceResponse = new ServiceResponse(); var room = await _dataContext.Rooms.FirstOrDefaultAsync(x => x.Id == id); if (room != null) { _dataContext.Rooms.Remove(room); await _dataContext.SaveChangesAsync(); serviceResponse.Success = true; serviceResponse.Data = room; } else { serviceResponse.Success = false; serviceResponse.Message = "Room not found."; } return serviceResponse; } public async Task>> GetAllRooms() { var serviceResponse = new ServiceResponse>(); var rooms = await _dataContext.Rooms.ToListAsync(); serviceResponse.Success = true; serviceResponse.Data = rooms; return serviceResponse; } public async Task> GetRoom(string id) { var serviceResponse = new ServiceResponse(); var room = await _dataContext.Rooms.FirstOrDefaultAsync(x => x.Id == id); if (room != null) { serviceResponse.Success = true; serviceResponse.Data = room; } else { serviceResponse.Success = false; serviceResponse.Message = "Room not found."; } return serviceResponse; } public Task> UpdateRoom(Room room) { throw new NotImplementedException(); } private long LongRandom(long min, long max, Random rnd) { long result = rnd.Next((int)(min >> 32), (int)(max >> 32)); result = result << 32; result = result | (long)rnd.Next((int)min, (int)max); return result; } } }