1
resposta

reserva de sala de reunião

Estou fazendo uma aplicação de reserva de sala de reunião e gostaria de saber como faço, através do controller na função store, para que o usuário não possa reservar a sala em um intervalo de horário/data já ocupado por um usuário.

public function store(Request $request){

    $event = new Event;

    $event->title = $request->title;
    $event->local = $request->local;
    $event->date = $request->date;
    $event->description = $request->description;
    $event->private = $request->private;
    $event->intern = $request->intern;
    $event->hora_inicio = $request->date .' ' .$request->hora_inicio;
    $event->hora_final = $request->date .' '. $request->hora_final;
    $user=auth()->user();
    $event->user_id = $user->id;

    }
1 resposta

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!