hotel_room_busy.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // package hotel_room_busy -- сущность состояния номера в отеле
  2. package hotel_room_busy
  3. import (
  4. "fmt"
  5. "sync"
  6. "adt/pkg/alias"
  7. )
  8. // HotelRoomBusy -- сущность состояния номера в отеле
  9. type HotelRoomBusy struct {
  10. Id_ alias.BusyId `json:"id"` // ID бронирования номера в отеле в формате "hotel_id.room_id.date"
  11. HotelId_ alias.HotelId `json:"hotel_id"` // ID отеля
  12. RoomId_ alias.RoomId `json:"room_id"` // ID номера в отеле
  13. Date_ alias.Date `json:"date"` // Дата бронирования
  14. IsBusy_ bool `json:"is_busy"` // Состояние бронирования
  15. block sync.RWMutex // Блокировка на признак занятости
  16. }
  17. // NewHotelRoomBusy -- возвращает новую сущность состояния номера в отеле
  18. func NewHotelRoomBusy(
  19. hotelId alias.HotelId,
  20. roomId alias.RoomId,
  21. date alias.Date,
  22. isBusy bool) (*HotelRoomBusy, error) {
  23. { // Предусловия
  24. if hotelId == "" {
  25. return nil, fmt.Errorf("hotel_room_busy.NewHotelRoomBusy(): hotelId is empty")
  26. }
  27. if roomId == "" {
  28. return nil, fmt.Errorf("hotel_room_busy.NewHotelRoomBusy(): roomId is empty")
  29. }
  30. if date == "" {
  31. return nil, fmt.Errorf("hotel_room_busy.NewHotelRoomBusy(): date is empty")
  32. }
  33. }
  34. sf := &HotelRoomBusy{
  35. Id_: alias.BusyId(fmt.Sprintf("%s.%s.%s", hotelId, roomId, date)),
  36. HotelId_: hotelId,
  37. RoomId_: roomId,
  38. Date_: date,
  39. IsBusy_: isBusy,
  40. }
  41. return sf, nil
  42. }
  43. // Id -- возвращает ID бронирования
  44. func (sf *HotelRoomBusy) Id() alias.BusyId {
  45. return sf.Id_
  46. }
  47. // SetBusy -- устанавливает состояние бронирования
  48. func (sf *HotelRoomBusy) SetBusy() {
  49. sf.block.Lock()
  50. defer sf.block.Unlock()
  51. sf.IsBusy_ = true
  52. }
  53. // RoomId -- возвращает ID номера
  54. func (sf *HotelRoomBusy) RoomId() alias.RoomId {
  55. return sf.RoomId_
  56. }
  57. // IsBusy -- возвращает состояние бронирования
  58. func (sf *HotelRoomBusy) IsBusy() bool {
  59. sf.block.RLock()
  60. defer sf.block.RUnlock()
  61. return sf.IsBusy_
  62. }
  63. // HotelId -- возвращает ID отеля
  64. func (sf *HotelRoomBusy) HotelId() alias.HotelId {
  65. return sf.HotelId_
  66. }
  67. // Date -- возвращает дату бронирования
  68. func (sf *HotelRoomBusy) Date() alias.Date {
  69. return sf.Date_
  70. }