Skip to content

Instantly share code, notes, and snippets.

@gc-codesnippets
Created November 16, 2018 15:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gc-codesnippets/3cc1d69a43deebcf0725bf4b4dbe3875 to your computer and use it in GitHub Desktop.
Save gc-codesnippets/3cc1d69a43deebcf0725bf4b4dbe3875 to your computer and use it in GitHub Desktop.
type User {
id: ID! @id
createdAt: DateTime!
updatedAt: DateTime!
firstName: String!
lastName: String!
email: String! @unique
password: String!
phone: String!
responseRate: Float
responseTime: Int
isSuperHost: Boolean! @default(value: false)
ownedPlaces: [Place!]!
location: Location @relation(link: INLINE)
bookings: [Booking!]!
paymentAccount: [PaymentAccount!]!
sentMessages: [Message!]! @relation(name: "SentMessages")
receivedMessages: [Message!]! @relation(name: "ReceivedMessages")
notifications: [Notification!]!
profilePicture: Picture
hostingExperiences: [Experience!]!
}
type Place {
id: ID! @id
name: String!
size: PLACE_SIZES
shortDescription: String!
description: String!
slug: String!
maxGuests: Int!
numBedrooms: Int!
numBeds: Int!
numBaths: Int!
reviews: [Review!]!
amenities: Amenities!
host: User! @relation(link: INLINE)
pricing: Pricing! @relation(link: INLINE)
location: Location! @relation(link: INLINE)
views: Views!
guestRequirements: GuestRequirements
policies: Policies
houseRules: HouseRules
bookings: [Booking!]!
pictures: [Picture!]!
popularity: Int!
}
type Pricing {
id: ID! @id
place: Place!
monthlyDiscount: Int
weeklyDiscount: Int
perNight: Int!
smartPricing: Boolean! @default(value: false)
basePrice: Int!
averageWeekly: Int!
averageMonthly: Int!
cleaningFee: Int
securityDeposit: Int
extraGuests: Int
weekendPricing: Int
currency: CURRENCY
}
type GuestRequirements {
id: ID! @id
govIssuedId: Boolean! @default(value: false)
recommendationsFromOtherHosts: Boolean! @default(value: false)
guestTripInformation: Boolean! @default(value: false)
place: Place! @relation(link: INLINE)
}
type Policies {
id: ID! @id
createdAt: DateTime!
updatedAt: DateTime!
checkInStartTime: Float!
checkInEndTime: Float!
checkoutTime: Float!
place: Place! @relation(link: INLINE)
}
type HouseRules @embedded {
id: ID!
createdAt: DateTime!
updatedAt: DateTime!
suitableForChildren: Boolean
suitableForInfants: Boolean
petsAllowed: Boolean
smokingAllowed: Boolean
partiesAndEventsAllowed: Boolean
additionalRules: String
}
type Views {
id: ID! @id
lastWeek: Int!
place: Place! @relation(link: INLINE)
}
type Location {
id: ID! @id
lat: Float!
lng: Float!
neighbourHood: Neighbourhood @relation(link: INLINE)
user: User
place: Place
address: String
directions: String
experience: Experience
restaurant: Restaurant
}
type Neighbourhood {
id: ID! @id
locations: [Location!]!
name: String!
slug: String!
homePreview: Picture
city: City! @relation(link: INLINE)
featured: Boolean!
popularity: Int!
}
type City {
id: ID! @id
name: String!
neighbourhoods: [Neighbourhood!]!
}
type Picture @embedded {
id: ID!
url: String!
}
type Experience {
id: ID! @id
category: ExperienceCategory @relation(link: INLINE)
title: String!
host: User! @relation(link: INLINE)
location: Location! @relation(link: INLINE)
pricePerPerson: Int!
reviews: [Review!]!
preview: Picture!
popularity: Int!
}
type ExperienceCategory {
id: ID! @id
mainColor: String! @default(value: "#123456")
name: String!
experience: Experience
}
type Amenities {
id: ID! @id
place: Place! @relation(link: INLINE)
elevator: Boolean! @default(value: false)
petsAllowed: Boolean! @default(value: false)
internet: Boolean! @default(value: false)
kitchen: Boolean! @default(value: false)
wirelessInternet: Boolean! @default(value: false)
familyKidFriendly: Boolean! @default(value: false)
freeParkingOnPremises: Boolean! @default(value: false)
hotTub: Boolean! @default(value: false)
pool: Boolean! @default(value: false)
smokingAllowed: Boolean! @default(value: false)
wheelchairAccessible: Boolean! @default(value: false)
breakfast: Boolean! @default(value: false)
cableTv: Boolean! @default(value: false)
suitableForEvents: Boolean! @default(value: false)
dryer: Boolean! @default(value: false)
washer: Boolean! @default(value: false)
indoorFireplace: Boolean! @default(value: false)
tv: Boolean! @default(value: false)
heating: Boolean! @default(value: false)
hangers: Boolean! @default(value: false)
iron: Boolean! @default(value: false)
hairDryer: Boolean! @default(value: false)
doorman: Boolean! @default(value: false)
paidParkingOffPremises: Boolean! @default(value: false)
freeParkingOnStreet: Boolean! @default(value: false)
gym: Boolean! @default(value: false)
airConditioning: Boolean! @default(value: false)
shampoo: Boolean! @default(value: false)
essentials: Boolean! @default(value: false)
laptopFriendlyWorkspace: Boolean! @default(value: false)
privateEntrance: Boolean! @default(value: false)
buzzerWirelessIntercom: Boolean! @default(value: false)
babyBath: Boolean! @default(value: false)
babyMonitor: Boolean! @default(value: false)
babysitterRecommendations: Boolean! @default(value: false)
bathtub: Boolean! @default(value: false)
changingTable: Boolean! @default(value: false)
childrensBooksAndToys: Boolean! @default(value: false)
childrensDinnerware: Boolean! @default(value: false)
crib: Boolean! @default(value: false)
}
type Review {
id: ID! @id
createdAt: DateTime!
text: String!
stars: Int!
accuracy: Int!
location: Int!
checkIn: Int!
value: Int!
cleanliness: Int!
communication: Int!
place: Place! @relation(link: INLINE)
experience: Experience @relation(link: INLINE)
}
type Booking {
id: ID! @id
createdAt: DateTime!
bookee: User! @relation(link: INLINE)
place: Place! @relation(link: INLINE)
startDate: DateTime!
endDate: DateTime!
payment: Payment
}
type Payment @embedded {
id: ID!
createdAt: DateTime!
serviceFee: Float!
placePrice: Float!
totalPrice: Float!
}
type PaymentAccount {
id: ID! @id
createdAt: DateTime!
type: PAYMENT_PROVIDER
user: User! @relation(link: INLINE)
payments: [Payment!]!
paypal: PaypalInformation
creditcard: CreditCardInformation @relation(name: "EvenDifferentOne")
}
type PaypalInformation @embedded {
id: ID!
createdAt: DateTime!
email: String!
}
type CreditCardInformation @embedded {
id: ID!
createdAt: DateTime!
cardNumber: String!
expiresOnMonth: Int!
expiresOnYear: Int!
securityCode: String!
firstName: String!
lastName: String!
postalCode: String!
country: String!
paymentAccount: PaymentAccount @relation(link: INLINE name: "OtherRelation")
}
type Message {
id: ID! @id
createdAt: DateTime!
from: User! @relation(name: "SentMessages" link: INLINE)
to: User! @relation(name: "ReceivedMessages" link: INLINE)
deliveredAt: DateTime!
readAt: DateTime!
}
type Notification {
id: ID! @id
createdAt: DateTime!
type: NOTIFICATION_TYPE
user: User! @relation(link: INLINE)
link: String!
readDate: DateTime!
}
type Restaurant {
id: ID! @id
createdAt: DateTime!
title: String!
avgPricePerPerson: Int!
pictures: [Picture!]!
location: Location! @relation(link: INLINE)
isCurated: Boolean! @default(value: true)
slug: String!
popularity: Int!
}
enum CURRENCY {
CAD
CHF
EUR
JPY
USD
ZAR
}
enum PLACE_SIZES {
ENTIRE_HOUSE
ENTIRE_APARTMENT
ENTIRE_EARTH_HOUSE
ENTIRE_CABIN
ENTIRE_VILLA
ENTIRE_PLACE
ENTIRE_BOAT
PRIVATE_ROOM
}
enum PAYMENT_PROVIDER {
PAYPAL
CREDIT_CARD
}
enum NOTIFICATION_TYPE {
OFFER
INSTANT_BOOK
RESPONSIVENESS
NEW_AMENITIES
HOUSE_RULES
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment