1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // package hotel_room_busy -- сущность состояния номера в отеле
- package hotel_room_busy
- import (
- "fmt"
- "sync"
- "adt/pkg/alias"
- )
- // HotelRoomBusy -- сущность состояния номера в отеле
- type HotelRoomBusy struct {
- Id_ alias.BusyId `json:"id"` // ID бронирования номера в отеле в формате "hotel_id.room_id.date"
- HotelId_ alias.HotelId `json:"hotel_id"` // ID отеля
- RoomId_ alias.RoomId `json:"room_id"` // ID номера в отеле
- Date_ alias.Date `json:"date"` // Дата бронирования
- IsBusy_ bool `json:"is_busy"` // Состояние бронирования
- block sync.RWMutex // Блокировка на признак занятости
- }
- // NewHotelRoomBusy -- возвращает новую сущность состояния номера в отеле
- func NewHotelRoomBusy(
- hotelId alias.HotelId,
- roomId alias.RoomId,
- date alias.Date,
- isBusy bool) (*HotelRoomBusy, error) {
- { // Предусловия
- if hotelId == "" {
- return nil, fmt.Errorf("hotel_room_busy.NewHotelRoomBusy(): hotelId is empty")
- }
- if roomId == "" {
- return nil, fmt.Errorf("hotel_room_busy.NewHotelRoomBusy(): roomId is empty")
- }
- if date == "" {
- return nil, fmt.Errorf("hotel_room_busy.NewHotelRoomBusy(): date is empty")
- }
- }
- sf := &HotelRoomBusy{
- Id_: alias.BusyId(fmt.Sprintf("%s.%s.%s", hotelId, roomId, date)),
- HotelId_: hotelId,
- RoomId_: roomId,
- Date_: date,
- IsBusy_: isBusy,
- }
- return sf, nil
- }
- // Id -- возвращает ID бронирования
- func (sf *HotelRoomBusy) Id() alias.BusyId {
- return sf.Id_
- }
- // SetBusy -- устанавливает состояние бронирования
- func (sf *HotelRoomBusy) SetBusy() {
- sf.block.Lock()
- defer sf.block.Unlock()
- sf.IsBusy_ = true
- }
- // RoomId -- возвращает ID номера
- func (sf *HotelRoomBusy) RoomId() alias.RoomId {
- return sf.RoomId_
- }
- // IsBusy -- возвращает состояние бронирования
- func (sf *HotelRoomBusy) IsBusy() bool {
- sf.block.RLock()
- defer sf.block.RUnlock()
- return sf.IsBusy_
- }
- // HotelId -- возвращает ID отеля
- func (sf *HotelRoomBusy) HotelId() alias.HotelId {
- return sf.HotelId_
- }
- // Date -- возвращает дату бронирования
- func (sf *HotelRoomBusy) Date() alias.Date {
- return sf.Date_
- }
|