mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-08 19:56:49 +00:00
91 lines
2.5 KiB
Go
91 lines
2.5 KiB
Go
package parser
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/rjNemo/rentease/internal/service/booking"
|
|
)
|
|
|
|
type BookingAgentParser struct {
|
|
baseUrl string
|
|
}
|
|
|
|
func NewBookingAgentParser(baseUrl string) *BookingAgentParser {
|
|
return &BookingAgentParser{
|
|
baseUrl: baseUrl,
|
|
}
|
|
}
|
|
|
|
func (p *BookingAgentParser) Parse(rawContent string) (*booking.Booking, error) {
|
|
log.Println("sending request to booking agent parser")
|
|
|
|
resp, err := http.Post(fmt.Sprintf("%s/sync?input=%s", p.baseUrl, url.QueryEscape(rawContent)), "application/json", nil)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error sending request to booking agent parser: %w", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
type ResponseData struct {
|
|
ArrivalDate string `json:"arrival_date"`
|
|
BookingFees json.Number `json:"booking_fees"`
|
|
BookingID string `json:"booking_id"`
|
|
DepartureDate string `json:"departure_date"`
|
|
StayLength int `json:"stay_length"`
|
|
GuestEmail string `json:"guest_email"`
|
|
GuestName string `json:"guest_name"`
|
|
GuestNumber int `json:"guest_number"`
|
|
GuestPhone string `json:"guest_phone"`
|
|
RoomBooked string `json:"room_booked"`
|
|
StandardRate json.Number `json:"standard_rate"`
|
|
SpecialRequests string `json:"special_requests"`
|
|
}
|
|
|
|
type Response struct {
|
|
Data ResponseData `json:"data"`
|
|
}
|
|
|
|
var r Response
|
|
err = json.NewDecoder(resp.Body).Decode(&r)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error decoding response from booking agent parser: %w", err)
|
|
}
|
|
|
|
var b booking.Booking
|
|
b.From, err = time.Parse("2006-01-02", r.Data.ArrivalDate)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing arrival_date: %w", err)
|
|
}
|
|
b.To, err = time.Parse("2006-01-02", r.Data.DepartureDate)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing departure_date: %w", err)
|
|
}
|
|
b.Name = r.Data.GuestName
|
|
b.PhoneNumber = r.Data.GuestPhone
|
|
b.Email = r.Data.GuestEmail
|
|
b.CustomerNumber = r.Data.GuestNumber
|
|
bookingFees, err := r.Data.BookingFees.Float64()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing booking fees: %w", err)
|
|
}
|
|
b.Platform = "Booking"
|
|
b.PlatformFees = bookingFees
|
|
b.ExternalId = &r.Data.BookingID
|
|
|
|
price, err := r.Data.StandardRate.Float64()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing standard rate: %w", err)
|
|
}
|
|
b.Items = append(b.Items, booking.Item{
|
|
Item: r.Data.RoomBooked,
|
|
Quantity: r.Data.StayLength,
|
|
Price: price,
|
|
PaymentMethod: "Card",
|
|
})
|
|
|
|
return &b, nil
|
|
}
|