package dbrepo import ( "context" "go-udemy-web-1/internal/models" "time" ) func (m *postgresDBRepo) AllUsers() bool { return true } // InsertReservation inserts a reservation into the database func (m *postgresDBRepo) InsertReservation(res models.Reservation) (int, error) { ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() var newId int // statement stmt := `insert into reservations (first_name, last_name, email, phone, start_date, end_date, room_id, created_at, updated_at) values ($1, $2, $3, $4, $5, $6, $7, $8, $9) returning id` row := m.DB.QueryRowContext(ctx, stmt, res.FirstName, res.LastName, res.Email, res.Phone, res.StartDate, res.EndDate, res.RoomID, time.Now(), time.Now()) err := row.Scan(&newId) if err != nil { return 0, err } return newId, nil } // InsertRoomRestriction inserts a room restriction into the database func (m *postgresDBRepo) InsertRoomRestriction(r models.RoomRestriction) error { ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() stmt := `insert into room_restrictions ( start_date, end_date, room_id, reservation_id, restriction_id, created_at, updated_at) values ($1, $2, $3, $4, $5, $6, $7)` _, err := m.DB.ExecContext(ctx, stmt, r.StartDate, r.EndDate, r.RoomID, r.ReservationID, r.RestrictionID, time.Now(), time.Now()) if err != nil { return err } return nil } // SearchAvailabilityByDates returns true if availability exists for roomID, and false if no availability func (m *postgresDBRepo) SearchAvailabilityByDates(start, end time.Time, roomID int) (bool, error) { ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() var numRows int stmt := `select count(id) from room_restrictions where room_id = $1 and $2 < end_date and $3> start_date` row := m.DB.QueryRowContext(ctx, stmt, roomID, start, end) err := row.Scan(&numRows) if err != nil { return false, err } if numRows == 0 { return true, nil } return false, nil }