Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7b8609b

Browse files
author
Anthony Gore
committed
Migration to Vue CLI
1 parent f8ae38b commit 7b8609b

27 files changed

+4967
-520
lines changed

.env_sample

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
PORT=8000
2+
NODE_ENV=development
3+
IMDB_IDS=tt0379225,tt1172203,tt1727587,tt1352852,tt1379199,tt1562881,tt0489037,tt1783305,tt4479976

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ yarn-error.log*
1919
*.njsproj
2020
*.sln
2121
*.sw?
22+
23+
.env

api.js

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
require("dotenv").config();
2+
3+
const axios = require("axios");
4+
const async = require("async");
5+
const moment = require("moment-timezone");
6+
moment.tz.setDefault("UTC");
7+
8+
// Axios
9+
const $http = axios.create({
10+
baseURL: `http://localhost:${process.env.PORT}/offline_api`
11+
});
12+
13+
function generateSessions(id) {
14+
let sessions = [];
15+
let nums = id
16+
.replace("tt", "")
17+
.split("")
18+
.map(item => {
19+
let num = parseInt(item);
20+
if (num === 0) {
21+
num = 1;
22+
}
23+
if (num > 6) {
24+
num = num - 2;
25+
}
26+
return num;
27+
});
28+
nums.splice(nums[3], 0, nums[0]);
29+
nums.shift();
30+
nums.forEach((num, index) => {
31+
let date = moment()
32+
.startOf("day")
33+
.add(index, "days");
34+
for (let i = 0; i < num; i++) {
35+
let pos = index + i <= nums.length ? index + i : index + i - nums.length;
36+
let hours = nums[pos] + 12;
37+
let mins =
38+
nums[pos] < 2.5 ? 0 : nums[pos] < 5 ? 15 : nums[pos] < 7.5 ? 30 : 45;
39+
sessions.push({
40+
id: `${id}_${i}`,
41+
time: moment(date)
42+
.add(hours, "hours")
43+
.add(mins, "minutes"),
44+
seats: Math.round(
45+
200 -
46+
nums.reduce((acc, val) => {
47+
return acc + val;
48+
}) +
49+
num * i
50+
)
51+
});
52+
}
53+
});
54+
return sessions.sort((a, b) => {
55+
if (a.time < b.time) {
56+
return -1;
57+
} else {
58+
return a.time > b.time;
59+
}
60+
});
61+
}
62+
63+
function cleanData(movie) {
64+
if (
65+
movie.Rated === "N/A" ||
66+
movie.Rated === "UNRATED" ||
67+
movie.Rated === "NOT RATED"
68+
) {
69+
let last = parseInt(movie.imdbID[movie.imdbID.length - 1]);
70+
movie.Rated = last < 7 ? (last < 4 ? "G" : "PG-13") : "R";
71+
}
72+
return movie;
73+
}
74+
75+
module.exports = {
76+
data: [],
77+
getData(callback) {
78+
if (!this.data.length) {
79+
let ids = process.env.IMDB_IDS.split(",");
80+
let data = [];
81+
async.each(
82+
ids,
83+
function(id, callback) {
84+
if (!data.find(item => item.id === id)) {
85+
$http.get(`?i=${id}`).then(
86+
function(response) {
87+
if (!response.data.Error) {
88+
data.push({
89+
id,
90+
movie: cleanData(response.data),
91+
sessions: generateSessions(id)
92+
});
93+
} else {
94+
console.log(response.data.Error);
95+
}
96+
callback();
97+
},
98+
function(err) {
99+
callback(err);
100+
}
101+
);
102+
} else {
103+
callback();
104+
}
105+
},
106+
err => {
107+
if (err) {
108+
callback(err, null);
109+
} else {
110+
this.data = ids.map(id => data.find(item => id === item.id));
111+
callback(null, this.data);
112+
}
113+
}
114+
);
115+
} else {
116+
callback(null, this.data);
117+
}
118+
}
119+
};

0 commit comments

Comments
 (0)