gozdrofitapi

package module
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2022 License: MIT Imports: 7 Imported by: 3

README

Build Status Coverage Status

Unofficial implementation of Zdrofit Polska API in Golang.


Usage

api := gozdrofitapi.NewHttpApi(*baseUrl, gozdrofitapi.NewDefaultHttpClient(), true)

authenticated, err := api.Authenticate(gozdrofitapi.LoginRequest{
    RememberMe: true,
    Login:      "Username",
    Password:   "Password",
})

if err != nil {
    return err
}

dailyClasses, err := api.DailyClasses(gozdrofitapi.DailyClassesRequest{
    ClubId: 1,
    Date:   gozdrofitapi.Date{Time: time.Now()},
})

API Documentation

Login

POST /ClientPortal2/Auth/Login

{
  "RememberMe": true,
  "Login": "some@mail.to",
  "Password": "password"
}
{
  "User": {
    "Member": {
      "Id": 111111,
      "FirstName": "Imie",
      "LastName": "Nazwisko",
      "Email": "some@mail.to",
      "PhotoUrl": null,
      "HomeClubId": 99,
      "DefaultClubId": 99,
      "Type": "ClubMember",
      "IsGuest": false,
      "IsFamilyChild": false,
      "NotificationsData": {
        "CanUpdateFromTrial": false,
        "HasInvalidContractPaymentMethod": false,
        "HasFingerprintAssigned": false,
        "RemainingDeposit": 0,
        "ContractStatus": "Ended"
      }
    },
    "Employee": null,
    "Roles": [
      "Member"
    ]
  },
  "State": "Classes"
}
Daily Classes

POST /ClientPortal2/Classes/ClassCalendar/DailyClasses

{
  "clubId": 99,
  "date": "2021-08-12",
  "categoryId": null,
  "timeTableId": null,
  "trainerId": null,
  "zoneId": null
}
{
  "CalendarData": [
    {
      "Hour": "1900-01-01T17:00:00",
      "Classes": [
        {
          "Id": 1,
          "Status": "Bookable",
          "StatusReason": null,
          "Name": "TBC",
          "StartTime": "2021-08-12T17:00:00",
          "Duration": "PT45M",
          "BookingIndicator": {
            "Indicator": 3,
            "Limit": 16,
            "Available": 7
          },
          "Trainer": "IMIE NAZWISKO",
          "Users": [],
          "HasRelatives": false,
          "AllowBookSeatNumber": false,
          "IsClassAvailableOnline": false,
          "ClassRatingSummaryInfo": {
            "TimeTableId": 1,
            "RatingsCount": 2734,
            "Rating": 4.819312362838332,
            "Ranking": 4.8
          }
        }
      ]
    },
    {
      "Hour": "1900-01-01T18:00:00",
      "Classes": [
        {
          "Id": 1,
          "Status": "Awaitable",
          "StatusReason": null,
          "Name": "Tabata",
          "StartTime": "2021-08-12T18:00:00",
          "Duration": "PT45M",
          "BookingIndicator": {
            "Indicator": 0,
            "Limit": 16,
            "Available": 0
          },
          "Trainer": "IMIE NAZWISKO",
          "Users": [],
          "HasRelatives": false,
          "AllowBookSeatNumber": false,
          "IsClassAvailableOnline": false,
          "ClassRatingSummaryInfo": {
            "TimeTableId": 1,
            "RatingsCount": 1453,
            "Rating": 4.90984170681349,
            "Ranking": 4.9
          }
        }
      ]
    },
    {
      "Hour": "1900-01-01T19:00:00",
      "Classes": [
        {
          "Id": 1,
          "Status": "Awaitable",
          "StatusReason": null,
          "Name": "Trening Funkcjonalny",
          "StartTime": "2021-08-12T19:00:00",
          "Duration": "PT45M",
          "BookingIndicator": {
            "Indicator": 0,
            "Limit": 16,
            "Available": 0
          },
          "Trainer": "IMIE NAZWISKO",
          "Users": [],
          "HasRelatives": false,
          "AllowBookSeatNumber": false,
          "IsClassAvailableOnline": false,
          "ClassRatingSummaryInfo": {
            "TimeTableId": 1,
            "RatingsCount": 268,
            "Rating": 4.951499937313433,
            "Ranking": 4.9
          }
        }
      ]
    },
    {
      "Hour": "1900-01-01T20:00:00",
      "Classes": [
        {
          "Id": 1,
          "Status": "Bookable",
          "StatusReason": null,
          "Name": "Pumba®",
          "StartTime": "2021-08-12T20:00:00",
          "Duration": "PT45M",
          "BookingIndicator": {
            "Indicator": 2,
            "Limit": 16,
            "Available": 6
          },
          "Trainer": "IMIE NAZWISKO",
          "Users": [],
          "HasRelatives": false,
          "AllowBookSeatNumber": false,
          "IsClassAvailableOnline": false,
          "ClassRatingSummaryInfo": {
            "TimeTableId": 1,
            "RatingsCount": 9969,
            "Rating": 4.9046321599885554,
            "Ranking": 4.9
          }
        }
      ]
    }
  ],
  "PagerData": {
    "Days": [
      "2021-08-11",
      "2021-08-12",
      "2021-08-13",
      "2021-08-14",
      "2021-08-15"
    ],
    "NextDate": "2021-08-17",
    "PreviousDate": "2021-08-07",
    "Date": "2021-08-12",
    "CanGoForward": true,
    "CanGoBack": false,
    "QueryStartDate": "2021-08-12",
    "QueryEndDate": "2021-08-12"
  }
}
BookClass

POST /ClientPortal2/Classes/ClassCalendar/BookClass

{
  "classId": 1
}
{
  "Tickets": [
    {
      "TimeTableEventId": 1,
      "Name": "Pumba®",
      "StartTime": "2021-08-12T20:00:00",
      "ZoneName": "Zdrofit Centrum Krucza",
      "UserName": "Imie Nazwisko",
      "UserNumber": "5555555",
      "UserId": 111111,
      "Trainer": "IMIE NAZWISKO"
    }
  ],
  "ClassId": 1,
  "UserId": 111111
}
CancelBooking

POST /ClientPortal2/Classes/ClassCalendar/CancelBooking

{
  "classId": 1
}
{
  "ClassId": 1,
  "UserId": 111111
}

Documentation

Index

Constants

View Source
const (
	ClassStatusBookable  = "Bookable"
	ClassStatusAwaitable = "Awaitable"
)
View Source
const DateFormat = "2006-01-02"
View Source
const DateTimeFormat = "2006-01-02T15:04:05"

Variables

This section is empty.

Functions

func NewDefaultHttpClient

func NewDefaultHttpClient() http.Client

Types

type Api

type Api interface {
	Authenticated() bool
	Authenticate(request LoginRequest) (*LoginResponse, error)
	DailyClasses(request DailyClassesRequest) (*DailyClassesResponse, error)
	BookClass(request BookClassRequest) error
	CancelClassBooking(request CancelBookingRequest) error
}

func NewHttpApi

func NewHttpApi(baseUrl url.URL, httpClient http.Client, debug bool) Api

type BookClassRequest

type BookClassRequest struct {
	ClassId int64 `json:"classId"`
}

type BookingIndicator

type BookingIndicator struct {
	Limit     int `json:"Limit"`
	Available int `json:"Available"`
}

type CalendarData

type CalendarData struct {
	Classes []Class `json:"Classes"`
}

type CancelBookingRequest

type CancelBookingRequest struct {
	ClassId int64 `json:"classId"`
}

type Class

type Class struct {
	Id               int64            `json:"Id"`
	Status           string           `json:"Status"`
	StatusReason     string           `json:"StatusReason,omitempty"`
	Name             string           `json:"Name"`
	StartTime        DateTime         `json:"StartTime"`
	BookingIndicator BookingIndicator `json:"BookingIndicator"`
	Users            []ClassUser      `json:"Users"`
}

type ClassUser

type ClassUser struct {
	Id            int64 `json:"Id"`
	IsCurrentUser bool  `json:"IsCurrentUser"`
}

type DailyClassesRequest

type DailyClassesRequest struct {
	ClubId int64 `json:"clubId"`
	Date   Date  `json:"date"`
}

type DailyClassesResponse

type DailyClassesResponse struct {
	CalendarData []CalendarData `json:"CalendarData"`
}

type Date

type Date struct {
	time.Time
}

func (Date) MarshalJSON

func (Date Date) MarshalJSON() ([]byte, error)

func (*Date) UnmarshalJSON

func (Date *Date) UnmarshalJSON(b []byte) error

type DateTime

type DateTime struct {
	time.Time
}

func (DateTime) MarshalJSON

func (DateTime DateTime) MarshalJSON() ([]byte, error)

func (*DateTime) UnmarshalJSON

func (DateTime *DateTime) UnmarshalJSON(b []byte) error

type LoginRequest

type LoginRequest struct {
	RememberMe bool   `json:"RememberMe"`
	Login      string `json:"Login"`
	Password   string `json:"Password"`
}

type LoginResponse

type LoginResponse struct {
	User User `json:"User"`
}

type Member

type Member struct {
	Id            int64 `json:"Id"`
	HomeClubId    int64 `json:"HomeClubId"`
	DefaultClubId int64 `json:"DefaultClubId"`
}

type User

type User struct {
	Member Member `json:"Member"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL