Skip to content

Commit 7be7058

Browse files
feat: Parallelize event page fetch (#4400)
1 parent 523133f commit 7be7058

File tree

2 files changed

+53
-46
lines changed

2 files changed

+53
-46
lines changed

app/components/public/ticket-list.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -123,23 +123,23 @@ export default Component.extend(FormMixin, {
123123
this.set('invalidPromotionalCode', true);
124124
}
125125
try {
126-
let discountCode = await this.store.queryRecord('discount-code', { eventIdentifier: this.event.id, code: this.promotionalCode });
127-
let discountCodeEvent = await discountCode.get('event');
126+
const discountCode = await this.store.queryRecord('discount-code', { eventIdentifier: this.event.id, code: this.promotionalCode, include: 'event,tickets' });
127+
const discountCodeEvent = await discountCode.event;
128128
if (this.currentEventIdentifier === discountCodeEvent.identifier) {
129-
let discountType = discountCode.get('type');
130-
let discountValue = discountCode.get('value');
129+
const discountType = discountCode.type;
130+
const discountValue = discountCode.value;
131131
this.order.set('discountCode', discountCode);
132-
let tickets = await discountCode.get('tickets');
132+
const tickets = await discountCode.tickets;
133133
tickets.forEach(ticket => {
134-
let ticketPrice = ticket.get('price');
135-
let taxRate = ticket.get('event.tax.rate');
136-
let discount = discountType === 'amount' ? Math.min(ticketPrice, discountValue) : ticketPrice * (discountValue / 100);
134+
const ticketPrice = ticket.price;
135+
const taxRate = ticket.get('event.tax.rate');
136+
const discount = discountType === 'amount' ? Math.min(ticketPrice, discountValue) : ticketPrice * (discountValue / 100);
137137
ticket.set('discount', discount);
138138
if (taxRate && !this.showTaxIncludedMessage) {
139-
let ticketPriceWithTax = (ticketPrice - ticket.discount) * (1 + taxRate / 100);
139+
const ticketPriceWithTax = (ticketPrice - ticket.discount) * (1 + taxRate / 100);
140140
ticket.set('ticketPriceWithTax', ticketPriceWithTax);
141141
} else if (taxRate && this.showTaxIncludedMessage) {
142-
let includedTaxAmount = (taxRate * (ticketPrice - discount)) / (100 + taxRate);
142+
const includedTaxAmount = (taxRate * (ticketPrice - discount)) / (100 + taxRate);
143143
ticket.set('includedTaxAmount', includedTaxAmount);
144144
}
145145
this.discountedTickets.addObject(ticket);

app/routes/public/index.js

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,51 +4,58 @@ import Route from '@ember/routing/route';
44
import moment from 'moment';
55
import { set } from '@ember/object';
66
import ENV from 'open-event-frontend/config/environment';
7+
import { allSettled } from 'rsvp';
78

89
@classic
910
export default class IndexRoute extends Route {
1011
@service
1112
headData;
1213

1314
async model() {
14-
const eventDetails = this.modelFor('public');
15-
return {
16-
event : eventDetails,
17-
tickets : await eventDetails.query('tickets', {
18-
reload: true,
15+
const event = this.modelFor('public');
16+
const ticketsPromise = event.query('tickets', {
17+
filter: [
18+
{
19+
and: [
20+
{
21+
name : 'sales-starts-at',
22+
op : 'le',
23+
val : moment().toISOString()
24+
},
25+
{
26+
name : 'sales-ends-at',
27+
op : 'ge',
28+
val : moment().toISOString()
29+
}
30+
]
31+
}
32+
]
33+
});
34+
const featuredSpeakersPromise = event.query('speakers', {
35+
filter: [
36+
{
37+
name : 'is-featured',
38+
op : 'eq',
39+
val : 'true'
40+
}
41+
],
42+
'page[size]': 0
43+
});
44+
const sponsorsPromise = event.get('sponsors');
45+
const taxPromise = event.get('tax');
1946

20-
filter: [
21-
{
22-
and: [
23-
{
24-
name : 'sales-starts-at',
25-
op : 'le',
26-
val : moment().toISOString()
27-
},
28-
{
29-
name : 'sales-ends-at',
30-
op : 'ge',
31-
val : moment().toISOString()
32-
}
33-
]
34-
}
35-
]
36-
}),
37-
featuredSpeakers: await eventDetails.query('speakers', {
38-
filter: [
39-
{
40-
name : 'is-featured',
41-
op : 'eq',
42-
val : 'true'
43-
}
44-
],
45-
'page[size]': 0
46-
}),
47+
const [tickets, featuredSpeakers, sponsors, tax] = (await allSettled([ticketsPromise, featuredSpeakersPromise, sponsorsPromise, taxPromise]))
48+
.map(result => result.value);
49+
50+
return {
51+
event,
52+
tickets,
53+
featuredSpeakers,
4754

48-
sponsors : await eventDetails.get('sponsors'),
49-
tax : await eventDetails.get('tax'),
50-
order : this.store.createRecord('order', {
51-
event : eventDetails,
55+
sponsors,
56+
tax,
57+
order: this.store.createRecord('order', {
58+
event,
5259
user : this.authManager.currentUser,
5360
tickets : []
5461
}),

0 commit comments

Comments
 (0)