Oi Leandro, tudo bem?
Para evitar que um usuário reserve uma sala em um intervalo de horário/data já ocupado por outro usuário, você pode adicionar uma validação no seu controller na função store.
Uma forma de fazer isso é verificar se já existe algum evento cadastrado que esteja no mesmo intervalo de horário/data que o usuário está tentando reservar. Caso exista, você pode retornar uma mensagem de erro informando que o horário já está ocupado e impedir que o evento seja criado.
Aqui está um exemplo de como você pode implementar essa validação:
public function store(Request $request)
{
// ...
// Verifica se já existe algum evento no mesmo intervalo de horário/data
$existingEvent = Event::where('date', $request->date)
->where(function ($query) use ($request) {
$query->where('hora_inicio', '<=', $request->hora_final)
->where('hora_final', '>=', $request->hora_inicio);
})
->first();
// Se existir, retorna uma mensagem de erro
if ($existingEvent) {
return back()->with('error', 'Este horário já está ocupado. Por favor, escolha outro horário.');
}
// Se não existir, cria o evento normalmente
$event->save();
// ...
return redirect()->route('event.index')->with('success', 'Evento criado com sucesso!');
}
Neste exemplo, estou utilizando o Eloquent ORM para fazer a consulta no banco de dados e verificar se já existe algum evento no mesmo intervalo de horário/data. Caso exista, estou utilizando a função back()
para redirecionar o usuário de volta ao formulário de criação do evento, exibindo uma mensagem de erro. Caso contrário, o evento é criado normalmente.
Espero ter ajudado! Bons estudos!