/
Arsinenko
/
CompClubAPI_Go
Обзор
Документация
Войти
/
Arsinenko
/
CompClubAPI_Go
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
internal/services/booking_service.go
134 строки
4 KB
Arsinenko
Update
08 ноя 2025, 13:12
08 ноя 2025, 13:12
2f36b0f
Код
Авторство
О чём код?
package services import ( "CompClubAPI/internal/database/gen" "context" "database/sql" "errors" "time" ) type BookingResponse struct { Id int32 `json:"id"` User string `json:"user"` WorkingSpaceId int32 `json:"working_space_id"` StartTime time.Time `json:"start_time"` EndTime time.Time `json:"end_time"` } type StartBookingRequest struct { User string `json:"user"` WorkingSpaceId int32 `json:"working_space_id"` } type BookingService interface { StartBooking(req StartBookingRequest) (BookingResponse, error) StopBooking(id int32) error GetBooking(id int32) (BookingResponse, error) GetUserBookings(user string) ([]BookingResponse, error) GetBookings() ([]BookingResponse, error) DeleteBooking(id int32) error } type bookingService struct { queries *gen.Queries } func (b bookingService) StartBooking(req StartBookingRequest) (BookingResponse, error) { booking, err := b.queries.StartBooking(context.Background(), gen.StartBookingParams{ User: req.User, WorkingSpace: req.WorkingSpaceId, StartTime: time.Now(), }) if err != nil { return BookingResponse{}, err } return BookingResponse{ Id: booking.ID, User: booking.User, WorkingSpaceId: booking.WorkingSpace, StartTime: booking.StartTime, EndTime: booking.EndTime.Time, }, nil } func (b bookingService) StopBooking(id int32) error { err := b.queries.EndBooking(context.Background(), gen.EndBookingParams{ EndTime: sql.NullTime{}, ID: id, }) if err != nil { if errors.Is(err, sql.ErrNoRows) { return errors.New("booking not found") } return err } return nil } func (b bookingService) GetBooking(id int32) (BookingResponse, error) { booking, err := b.queries.GetBookingById(context.Background(), id) if err != nil { if errors.Is(err, sql.ErrNoRows) { return BookingResponse{}, errors.New("booking not found") } return BookingResponse{}, err } return BookingResponse{ Id: booking.ID, User: booking.User, WorkingSpaceId: booking.WorkingSpace, StartTime: booking.StartTime, EndTime: booking.EndTime.Time, }, nil } func (b bookingService) GetUserBookings(user string) ([]BookingResponse, error) { bookings, err := b.queries.GetUserBookings(context.Background(), user) if err != nil { if errors.Is(err, sql.ErrNoRows) { return []BookingResponse{}, errors.New("bookings not found") } return []BookingResponse{}, err } result := make([]BookingResponse, len(bookings)) for i, booking := range bookings { result[i] = BookingResponse{ Id: booking.ID, User: booking.User, WorkingSpaceId: booking.WorkingSpace, StartTime: booking.StartTime, EndTime: booking.EndTime.Time, } } return result, nil } func (b bookingService) GetBookings() ([]BookingResponse, error) { bookings, err := b.queries.GetAllBookings(context.Background()) if err != nil { if errors.Is(err, sql.ErrNoRows) { return nil, errors.New("booking not found") } return nil, err } result := make([]BookingResponse, len(bookings)) for i, booking := range bookings { result[i] = BookingResponse{ Id: booking.ID, User: booking.User, WorkingSpaceId: booking.WorkingSpace, StartTime: booking.StartTime, EndTime: booking.EndTime.Time, } } return result, nil } func (b bookingService) DeleteBooking(id int32) error { return b.queries.DeleteBooking(context.Background(), id) } func NewBookingService(queries *gen.Queries) BookingService { return &bookingService{queries: queries} }