Compare commits
	
		
			2 Commits
		
	
	
		
			74e9fee942
			...
			b9f974cd1f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b9f974cd1f | |||
| 42a88034bf | 
@ -64,3 +64,65 @@ func (m *postgresDBRepo) InsertRoomRestriction(r models.RoomRestriction) error {
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SearchAvailabilityByDatesByRoomID returns true if availability exists for roomID, and false if no availability
 | 
			
		||||
func (m *postgresDBRepo) SearchAvailabilityByDatesByRoomID(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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SearchAvailabilityForAllRooms returns a slice of rooms, if any, for given date range
 | 
			
		||||
func (m *postgresDBRepo) SearchAvailabilityForAllRooms(start, end time.Time) ([]models.Room, error) {
 | 
			
		||||
	ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	var rooms []models.Room
 | 
			
		||||
	stmt := `select
 | 
			
		||||
                r.id, r.room_name
 | 
			
		||||
            from
 | 
			
		||||
                rooms r
 | 
			
		||||
            where r.id not in
 | 
			
		||||
                (select
 | 
			
		||||
                    roomId
 | 
			
		||||
                from
 | 
			
		||||
                    room_restrictions rr
 | 
			
		||||
                where
 | 
			
		||||
                    $1 < rr.end_date and $2> rr.start_date)`
 | 
			
		||||
 | 
			
		||||
	rows, err := m.DB.QueryContext(ctx, stmt, start, end)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	for rows.Next() {
 | 
			
		||||
		var room models.Room
 | 
			
		||||
 | 
			
		||||
		err := rows.Scan(&room.ID, &room.RoomName)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return rooms, err
 | 
			
		||||
		}
 | 
			
		||||
		rooms = append(rooms, room)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err = rows.Err(); err != nil {
 | 
			
		||||
		return rooms, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return rooms, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,15 @@
 | 
			
		||||
package repository
 | 
			
		||||
 | 
			
		||||
import "go-udemy-web-1/internal/models"
 | 
			
		||||
import (
 | 
			
		||||
	"go-udemy-web-1/internal/models"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DatabaseRepo interface {
 | 
			
		||||
	AllUsers() bool
 | 
			
		||||
 | 
			
		||||
	InsertReservation(res models.Reservation) (int, error)
 | 
			
		||||
	InsertRoomRestriction(res models.RoomRestriction) error
 | 
			
		||||
	SearchAvailabilityByDatesByRoomID(start, end time.Time, roomID int) (bool, error)
 | 
			
		||||
	SearchAvailabilityForAllRooms(start, end time.Time) ([]models.Room, error)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,2 @@
 | 
			
		||||
change_column("room_restrictions", "reservation_id", "integer", {"null": false})
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1 @@
 | 
			
		||||
change_column("room_restrictions", "reservation_id", "integer", {"null": true})
 | 
			
		||||
@ -107,7 +107,7 @@ CREATE TABLE public.room_restrictions (
 | 
			
		||||
    start_date date NOT NULL,
 | 
			
		||||
    end_date date NOT NULL,
 | 
			
		||||
    room_id integer NOT NULL,
 | 
			
		||||
    reservation_id integer NOT NULL,
 | 
			
		||||
    reservation_id integer,
 | 
			
		||||
    restriction_id integer NOT NULL,
 | 
			
		||||
    created_at timestamp without time zone NOT NULL,
 | 
			
		||||
    updated_at timestamp without time zone NOT NULL
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user