אוקטובר 2013
סמסטר ב' תשע"ג
– Qyouספר הפרויקט
מנחה :ד"ר אוסי מוקרין
מגישים:
עומרי שייקו
מוטי קדוש
רון פלד
תוכן עניינים
הקדמה 4........................ ................................ ................................ ................................
הצורך 4....................... ................................ ................................ ................................
על המערכת 4............... ................................ ................................ ................................
מטרות המערכת 5......................................... ................................ ................................
מוטיבציה למערכת 5...................................... ................................ ................................
דרישות פונקציונליות 5.................................... ................................ ................................
קהל היעד והגדרת משתמשים 6....................... ................................ ................................
תהליכים עסקיים 7......................................... ................................ ................................
ניתוח מערכות מתחרות 8................................ ................................ ................................
תיאור אופן השימוש במערכת 9............................ ................................ ................................
זרימת המערכת – תהליכים עיקריים 9............... ................................ ................................
אפליקציית 9..................................... ................................ ................................ qyou
פאנל ניהול המערכת – 17.................. ................................ qyou.co.il – web application
צד לקוח 18..................... ................................ ................................ ................................
18.......................................... ................................ ................................ Html5 + CSS3
18............... ................................ ................................ ................................ AngularJS
18...................................... ................................ Single page application by angularJS
19.............................. ................................ ................................ Ajax with angularJS
20............... ................................ ................................ ................................ Phonegap
20............... ................................ ................................ ................................ Facebook
תקשורת בין שרת ללקוח באמצעות 22................................ ................................ SOKCET I/O
צד שרת 23...................... ................................ ................................ ................................
עיצוב הקוד 23.............. ................................ ................................ ................................
מודל )23...................................... ................................ ................................ (Model
מבט )23......................................... ................................ ................................ (View
בקר )24.................................. ................................ ................................ (Controller
קבצים נוספים מחוץ ל 27..................... ................................ ................................ MVC
אלגוריתם חישוב הדירוג עבור ניהול התור 28...................................... ................................
29................... ................................ ................................ ................................ Database
30................................... ................................ ................................ USER collection
31.................................. ................................ ................................ PLACE collection
31.................................... ................................ ................................ LINE collection
32................................. ................................ ................................ EVENT collection
33................................ ................................ ................................ QUEUE collection
תוכניות עתידיות 34........... ................................ ................................ ................................
טכנולוגיות בהן השתמשנו 35.............................. ................................ ................................
הקדמה
הצורך
הצורך לאפליקציה הגיע מצורך עצמי שלנו :היינו יוצאים למקומות בילוי ,במיוחד בסופי שבוע
והיינו מחכים בתורים העצומים למועדון בין שעה לשעתיים בלי לדעת אם נכנס למועדון בסוף
הערב או לא.
בנוסף הרגשנו שבגלל שאנו לא בליינים מוכרים ואיננו מכירים יחצנים ,אנו נכנסים לאט יותר
ואפילו כלל לו .זאת אף על פי שיכול להיות שאנו לקוחות פוטנציאלים שווים לבעל העסק –
ובעל העסק לא יודע זאת.
את בעיה זו רצינו לפתור ,כלומר לעזור לבליין להכנס למועדון ולבעל המועדון להרוויח יותר
מהעסק שלו.
על המערכת
Qyouהיא אפליקציית רשת ייחודית לאירועים בתחום חיי הלילה ,שמיועדת לכל מי שמתכנן
אירוע או מתכנן להשתתף באירוע.
אנחנו מסייעים למארגני אירועים ולבליינים להפיק את המרב מהאירוע שלהם.
ב , Qyou-כל אחד יכול להיות מארגן אירוע ולכן אנו מציעים כלים שיעזרו לך ליצור אירוע
ולקדם אותו במדיה ממש בכמה קליקים.
אפליקציית Qyouממקסמת את הפוטנציאל של הרשת במהלך חיי הלילה .סצנת התור
שמתרחשת בכניסה למועדונים היא מתסכלת ולא יעילה -לא עבור הבליין ולא עבור בעל
המועדון .הפתרון שלנו הוא אוטומציה של סצנת התור בכניסה -פלטפורמה ניידת לניהול
האירוע באופן חכם אונליין ,אשר הופכת את התור לחוויה מהנה שמתגמלת את הבליין –
בכל אירוע נכנס יותר מהר מהאירוע הקודם ובעל המועדון מתוגמל גם -הוא מקבל
סטטיסטיקות בזמן אמת שיתנו לו מידע מדויק על האנשים שנכנסים אליו למועדון לפי חתכים
שונים וכך אופטימיזציה לגבי העסק שלו בהמשך.
אפליקציית Qyouנותנת את כל הכלים כדי ליצור אירוע בקלות ,להביא אנשים לאירוע ולנהל
את התור בכניסה באופן חכם.
איך זה קורה?
בערב האירוע יגיע בליין למקום ,ועל מנת להכנס בקלות ,פשוט יפתח את האפליקציה,
יתחבר באמצעות פייסבוק ,יראה את כל המועדונים סביבו )לפי (GPSואת הליינים של אותו
יום ,וילחץ על ליין ספציפי ויבקש להכנס למועודן ע"י לחיצה על כפתור.
סלקטורית תראה את כל אנשים שמבקשים להכנס ,אם בליין ביקש להכנס והוא כבר אישר
הגעה באיבנט בפייסבוק המערכת תזהה זאת אוטומטית ותדרג אותו גבוה ברשימת
האנשים המבקשים להכנס למערכת .כאשר הסלקטורית תרצה להכניס את הבליין היא
תלחץ על כפתור אישור כניסה ,הבליין יקבל לתוך האפליקציה שהוא אושר להכנס ויקבל
QR-CODEלצורך אימות .כאשר ירצה להכנס למועדון ,יסרקו לו את הברקוד וכך יוודאו
שהוא אכן אושר כניסה.
בכל שלב בעל המועדון יראה את כל מה שקורה כרגע בתור ,כמה אנשים בחוץ ,כמה אנשים
נכנסו ,מי הם מאיפה הם באו וכל הפרטים שפייסבוק יכול לספק.
מטרות המערכת
מטרתה העיקרית של המערכת היא אוטומציה של סצנת התור שמתקיימת היום במועדונים,
באמצעות הרחבת האיבנט הקיים היום בפייסבוק.
למערכת qyouיש שתי מטרות עיקריות:
להקל על חייו של הבליין.
היום ,מאוד מתסכל לבוא למועדונים ולחכות בתור שאין בו סדר ,שצריך להידחף
ושנשארים הרבה זמן בחוץ ללא סיבה .המערכת שלנו באה לפתור את בעיה זאת
בכך שהבליין פשוט יכנס לאפליקציה ,Qyouהתחבר למערכת באמצעות פייסבוק,
יקבל את רשימת המועדונים הקרובים ביותר אליו ופשוט יבקש להכנס למקום ע"י
לחיצה כפתור באפליקציה .בשלב זה המערכת תודיע לסלקטורית שהבליין הזה
הגיע ,תראה לה את חשבון הפייסבוק שלו והיא תוכל להכניס אותו ע"י לחיצה על
כפתור) .נסביר על תהליך זה בפירוט בהמשך(
לתת לבעל המועדון אינפורמציה על אוכלוסיית המועדון בקלות לסמארטפון בזמן
אמת.
מכיוון שכל המערכת עובדת עם פייסבוק ,בעל המועדון יוכל לדעת בדיוק מי נמצא לו
במועדון בכל שלב .למשל ,הוא יוכל לראות מי האנשים במחכים בכניסה ,מי כבר
נכנס למקום ,כמה אנשים הגיעו דרך איבנטים בפייסבוק ,כמה לא ועוד..
מוטיבציה למערכת
ניהול התור במועדון באופן מסודר ,יעיל וחכם:
oמסודר -הלקוחות שבאים למועדון לא יצטרכו להידחף בכניסה.
oיעיל -אפשרות לניהול התור באופן מבוקר.
oחכם -דרך המערכת תזרום הרבה אינפורמציה על הלקוחות ,שממנה יוכלו
בעלי המועדון לנתב את העסק שלהם .בנוסף התור יוכל להתנהל לפי צרכי
המועדון )עדיפות לגיל ,מין ,לקוחות קבועים בזמן אמת(
כניסה חלקה למועדון ,זמני המתנה נמוכים יותר ובטוחים ללקוח .אווירה נעימה
ויצירת מיני רשת חברתית למשתמשי המערכת )למשל לקוח יוכל לדעת אם חבריו
כבר נכנסו(.
סטטיסטיקות לבעלי המועדון על האוכלוסייה שנמצאת במועדון שלהם על פי חתכים
שונים.
דרישות פונקציונליות
הדרישות מתחלקות לשני תחומים:
.1לפני האירוע:
בשלב זה ,בעל המועדון יוכל להכניס נתונים ל ,DBליצור איבנטים בפייסבוק דרך
Qyouולקדם את האירוע .לכן הדרישות הן:
כניסה לפאנל ניהול.
יצירת מועדון חדש ,עריכה ,מחיקה.
יצירת איבנטים בפייסבוק דרך הפאנל ניהול.
.2בזמן האירוע:
בשלב זה התור צריך להיות מנוהל ,לכן הדרישות הן בצד של הבליין ובצד הניהול
אפליקציה שתראה את את כל המועדונים שקרובים אלי )לפי מיקום
המכשיר(
התחברות לאפליקציה באמצעות פייסבוק ע"י פרוטוקול )(Auth2.0
כפתור בקשת כניסה למערכת.
דף בתוך האפליקציה רק לאנשים מורשים אשר יקבלו את כל הבליינים
שרוצים להכנס למערכת ,ויאשרו את הכניסה שלהם ויקבלו סטסטיסטיקות
בזמן אמת.
כאשר הבליין מאושר כניסה ,יקבל ברקוד ייחודי שהוא יוכל להכנס.
כאשר יציג את הברקוד ,האפליקציה של הסלקטורית תוכל לסרוק אותו
וכך לראות שהברוד מאושר.
קהל היעד והגדרת משתמשים
קהל היעד שלנו מחולק לשניים:
.1בעלי מועדונים
בעלי מועדונים מכל רחבי הארץ חובבי חידושים וטכנולוגיות שרוצים לפתח את
העסק שלהם.
.2בליינים
סטודנטים בפרט וחבר'ה בני 18-30בכלל שיוצאים באופן קבוע למועדונים ויש להם
סמארטפון.
תהליכים עסקיים
נתאר 2תהליכים:
.1הכנסת נתונים למערכת ע"י בעל המועדון .כמו שציינו בעל המועדון יכניס את פרטי המועדון,
הליינים ויוכל ליצור איבנטים בפייסבוק.
.2תהליך הכניסה למועדון מהרגע שבו המשתמש פותח את האפליקציה ועד שממש נכנס
למקום ,כמו שתואר בסעיף הקודם
ניתוח מערכות מתחרות
נציין שכרגע ,אין שום אפליקציה שכזאת ,אנחנו רוצים להיות חלוצים בזה ,ולנסות להכנס באמת לשוק
האמיתי ,ולא רק כפרוקייט במכללה.
ישנן אפליקציות רבות בשוק המועדונים אך הן לא באותו נושא של ניהול התור במועדון ואוטומטיזציה
של כל המצב הזה.
תיאור אופן השימוש במערכת
זרימת המערכת – תהליכים עיקריים
נתאר תהליכים עיקריים:
אפליקציית qyou
.1משתמש (בליין)
.aהרשמה למערכת ובקשה להכנס לתור של מסיבה:
.iכניסה למערכת :המשתמש יכנס לאפליקציה דרך אייקון האפליקציה:
.iiהמשתמש ילחץ על כפתור Connect with Facebook
.iiiהמשתמש מועבר לדף פייסבוק לאישור הרשאות האפליקציה:
.ivסיום ההרשמה למערכת :לאחר שהמשתמש לחץ על " ,"OKהוא מגיע
למסך הראשי של האפליקציה.
במסך הראשי של האפליקציה ישנם מגוון אירועים ולכל אירוע
המשתמש יכול לראות את הפרטים הרלוונטים:
כך המשתמש יכול לראות בנוחות את כל האירועים ולחפש את
האירוע המתאים לו.
.vכאשר המשתמש מוצא אירוע שהוא רוצה להרשם לתור שלו ,הוא
לוחץ על המועדון הנבחר ומגיע למסך האירוע:
.viבלחיצה על כפתור ,GO PARTYהמשתמש נרשם לתור בהצלחה
ומקבל הודעת עדכון ) (Notificationשהבקשה להכנס לאירוע נשלחה
בהצלחה.
.2אדמין (סלקטורית/בעל מועדון)
.aהכנסת משתמש (בליין) לתוך מסיבה דרך התור:
.iכניסה למערכת :כמפורט בסעיף הקודם .מכיוון שהאדמין מסומן ב-
DBכהרשאה שונה ,המסך שיקבל לאחר סיום הכניסה למערכת הוא
המסך הבא:
.iiלחיצה על כפתור :Queue
.iiiלאחר לחיצה על הכפתור ,האדמין יקבל את מסך התור .במסך התור
קיימות 3רשימות :רשימת הממתינים ,רשימת האנשים שאושרו
להכנס למסיבה ורשימת האנשים שלא אושרו להכנס למסיבה.
האדמין קודם כל צריך לבחור מאיזה רשימה הוא רוצה להכניס את
הבליין – מרשימת הממתינים או מרשימת הלא מאושרים:
.ivלאחר שבחר את הרשימה הנכונה ,וברשימה בחר את המשתמש
שאותו רצה להכניס )המשתמשים מסודרים לפי דירוג משוכלל של
המערכת( ,האדמין צריך ללחוץ על המשתמש שאותו רוצה להכניס:
.vמסך פרטים אישיים על המשתמש ואישור המשתמש :האדמין רואה
את הפרטים האישיים הרלוונטיים על המשתמש ולוחץ על כפתור
"אישור"
.bקבלת סטטיסטיקות על המועדון:
.iכניסה למערכת :כמפורט בסעיף הקודם .מכיוון שהאדמין מסומן ב-
DBכהרשאה שונה ,המסך שיקבל לאחר סיום הכניסה למערכת הוא
המסך הבא:
.iiלחיצה על כפתור :Statistics
.iiiצפייה בסטטיסטיקות:
פאנל ניהול המערכת – qyou.co.il – web application
.1הוספת מועדון חדש:
הוספת מועדון חדש אפשרית ע"י שני דרכים:
.aהוספת פרטי המועדון:
.iשם
.iiעיר
.iiiרחוב
.ivכתובת +מספר
.vלוגו של המועדון
.viתיאור כללי על המועדון
.bהכנסת קישור facebookשל המועדון והמערכת תשאוב את כל הפרטים באופן
אוטומטי.
.2הוספת ליין חדש:
הוספת ליין חדש מתבצעת ע"י הכנסת פרטי הליין:
שם
ימים בשבוע
טווח גילאים
לוגו\תמונה של הליין
תיאור כללי
כעת ,כאשר הגדיר זאת ,יוכל דרך המערכת להוסיף איבנטים חדשים בפייסבוק כך
שהמערכת שלנו תהיה מסוגלת לקרוא את המידע מהאיבנט בפייסבוק.
צד לקוח
Html5 + CSS3
את הבסיס של האפליקציה בנינו באמצעות התוסף הבא:
/http://maker.github.io/ratchet
תוסף זה נותן לנו כפתורים תפריטים יפים וכפתורים .אך את רוב האפליקציה כתבנו ועיצבנו בעצמנו.
באפליקציה שלנו ניצלנו את היכולות של ,CSS3 + HTML5כך שהשתמשנו בהצללה ,פינות מעוגלות,
אנימציה ב ) CSSאשר לא גורמת לאפליקציה להאט( ועוד אלמנטים מ .CSS3
השתמשנו בספריה של אייקונים הבאה:
/http://fortawesome.github.io/Font-Awesome
בשביל כל האייקונים באפליקציה.
על מנת להראות את המפה של של המעדון ,השתמשמנו ב APIשל ,Google Mapsוהוספנו למפה
pinבסמל של הלוגו המשנה את צבעו באופן רנדומלי.
סה"כ ניצלנו את המירב מהטכנולוגיות הללו ,והקוד שלנו מאוד קריא וקל להבנה.
AngularJS
פיתחנו את האפליקציה ב HTML + CSS + JS
בשביל שהאפליקציה תהיה מהירה ,לא השתמשנו ב .jqueryהשתמשנו ב .angularJS
angularJSהיא סיפריה JSקטנה יחסית ,המנהלת את כל האפליקציה במודל .MVC
angularJSמספקת חיבור ישיר בין המודל לבין הדף עצמו ) (viewע"י סינטקס חדש .וחוסכת הרבה
קוד.
לכל דף באפליקציה שלנו ,יש קונטרולר שהוא מתווך בין המודל ל .view
למשל אצלנו בדף שמציג את ה ,QR-codeהקונטרולר נראה כך:
כאן אנחנו מקבלים מהכתובת של הדף את ה lineIdואת ה .uuIdהחלק החשוב ביותר בקונטרולר
הוא הקטע הבא:
scope.qr$
קטע זה מגדיר משתנה הנקרא qrשיהיה גישה אליו ב .view
הגישה אליו תתבצע כך }}qr{{ :בתוך הדף .HTML
מומלץ לקרוא על angularJSכאן/http://angularjs.org :
Single page application by angularJS
את האפליקציה שלנו ממישנו כ ,Single Page Applicationכלומר יש רק דף HTMLאחד ,ואנחנו
"מזריקים" לו תוכן אחר כל פעם .באמצעות זה שהאפליקציה היא Single Page Applicationאנחנו
מקבלים את היתרון שאנחנו טוענים פעם אחת את כל הספריות שאנו משתמשים בהם ,ורק מחליפים
את התוכן של הדף .דבר היוצר מצד אחד נראות של אפליקציה עם הרבה עמודים ,מצד שני חסכון
בטעינה )הדף נטען פעם אחת כשהוא עולה וזהו(.
נסביר את תהליך את Single Page Applicationעם angularJSעובד:
מגדירים דף index.htmlכך:
התגית htmlנראת כך:
נצרף את הקוד של :angularJs
ובתוך ה bodyשל הדף נגדיר כך:
מה שעשינו כאן זה בעצם הגדרנו את האפליקציה עצמה כאפליקצית ,angularJSוהקטע קוד
< >mobile-view></mobile-viewיוחלף בדף הרלוונטי.
בקוד ה JSנשתמש במנגנון ה routesשל .angularJSנסביר זאת:
קוד זה עובד רק עבור אפליקצית Qyouכמו שהוגדר בתגית ה HTML
הקוד כאן בעצם מגדיר עבור כל לינק איזה קונטרולר ואיזה viewצריכים להיות פעילים .למשל כאן
בדוגמא ,אם גלשנו ל"דף" lines/אז angularJSידחוף את ה viewשל lines.htmlלתוך ה
< >mobile-view></mobile-viewהמקורי ,וידליק את הקונטרולר .linesCtrl
כך בעצם ,כל "דף" שנקרא angularJS ,מחליף את התוכן וקורא לקונטרולר המתאים.
כמובן ,שאנחנו לא באמת גולשים לדף ,lines/המנגון routesמנצל את ה anchorשל htmlובעצם
קורא לדף כך:
qyou/d3/AppAsAdmin/#/lines
נשים לב שזה lines/#ולא lines/כך הדפדפן לא עובר לדף אחר וגם angularJSיודע כאשר קראו לזה
ומעביר אותו לדף הנ"ל
וכך מתבצע ה single Page Applicationבמערכת שלנו.
Ajax with angularJS
כעת נסביר על קריאות ה AJAXב .angularJS
האפליקציה שלנו משתמשת המון בפעולת ,AJAXעבור כל קבלה ושליחה של נתונים אנחנו
משתמשים ב .AJAXנובע גם מהעובדה שהאפליקציה היא Single Page Applicationואנחנו לא יכולים
לעבור פתאום לשרת ולחזור חזרה לדף.
כמו שציינו בספר בצד של השרת השתמשתנו ב ,RESTולכן כעת בצד בלקוח מאוד קל לנו לקבל
ולשלוח נתונים.
בשונה מ jqueryשצריך לכתוב כל פעם ajax.$עבור כל בקשת ,ajaxל angularJSיש פלאגין קטן
המאפשר לקבל ולשלוח נתונים על גבי ajaxבפורמט restבקלות מאוד.
נסביר:
השתמשנו בפלאגין - restangular
https://github.com/mgonto/restangular
באמצעות הפלאגין הזה אפשר לבצע בקשות ajaxבשורה אחת ובקלות .לדוגמא על מנת לשלוף את
כל הליינים באותו ערב פשוט נרשום כך:
('rest.all('lines
שורה זאת בעצם יצרה בקשת ajaxלשרת וביקשה את כל הליינים ב .GET
על מנת לעבוד עם הפלאגין הזה צריך להגדיר אותו פעם אחת:
בקובץ ההגדרות הראשי app.jsרשמנו:
כלומר בעצם הגדרנו את ה BASEשלנו ,כלומר את הכתובת של השרת ,ומעכשיו כל פעם שנבצע
בקשת ajaxכמו
('rest.all('lines
היא תתורגם מאחורי הקלעים ל:
http://qyou.co.il:80/api/lines
ותחזיר לנו את התשובה מהשרת.
Phonegap
לאחר שבנינו את כל האפליקציה ברמה של HTML + JS + CSSנשאר לנו להפוך את ה"אתר" שהכנו
לאפליקציה ממש שמתאימה לאייפון.
על מנת לעשות זאת ,השתמשמנו ב ,PhoneGapאשר "אורזת" את כל האתר שלנו לתוך פרוייקט
xcodeשאותו אפשר לקמפל לאפליקצית אייפון אמיתית.
האפליקציה שלנו דורשת יותר ממה ש PhoneGapהבסיסית נותנת ,לכן השתמשנו ב pluginsל
:phonegap
חיבור לפייסבוק ברמה של האייפון -רצינו שיהיה חיבור מלא בין פייסבוק לאפליקציה שלנו ,כלומר
שכאשר משתמש רוצה להתחבר למערכת שלנו ,הוא צריך לעבור דרך פייסבוק .מבחינה פרקטית ,זה
אומר שהמשתמש נכנס לאפליקציה שלנו ,לוחץ על כפתור "התחבר" ומועבר לאפליקצית פייסבוק
המותקנת לו במכשיר )במידה ולא מותקנת אפליקציה הוא מועבר לדפדפן לאתר של פייסבוק( ושם
הוא מאשר את האפליקציה שלנו ולאחר האישור הוא חוזר אוטומטית לאפליקציה שלנו ומתחיל
לעבוד.
סורק - QR-codeהאפליקציה שלנו צריכה להשתמש במצלמה של המכשיר ,לצורך סריקת הברקוד
של המשתמש .פעולה זאת מתבצעת כאשר הבליין קיבל אישור כניסה למועדון והוא צריך להציג את
האישור בכניסה לצורך בדיקה אם האישור הוא אמיתי.
כלומר ,סיימנו את האתר שבנינו ,וארזנו אותו לתוך פרוייקט xcodeבאמצעות phonegapהתקנו את
הפלאגינים שציינו למעלה.
לאחר מכן phonegap ,נותנת לנו APIב JavaScriptלהפעלה של אלמנטים במכשיר ,השתמשנו בהם
בחלקים מהאפליקציה ,לדוגמא כאשר אנחנו מודיעים לבליין שהוא קיבל אישור כניסה ,אנחנו
מפעילים את הרטט במכשיר של הבליין ומפעילים מוזיקה במכשיר של הבליין.
לאחר שסיימנו את כל החלקים האלה עם phonegapנשאר לנו רק לקמפל את הפרוייקט xcode
ולהעלות אותו ל AppStoreשל .Apple
נציין גם ,שלמעט ההתקנה של ה pluginsשציינו ,אנחנו יכולים גם להתקין את האפליקציה על
אנדורואיד ,בלאקברי ,וינדוס פון בקלות רבה ,רק נצטרך להתקין את ה pluginsהללו בפרוייקטים
האלה.
Facebook
האפליקציה שלנו מתממשקת ב 100%עם פייסבוק ,מההתחברות למערכת ,ועד לתמונת הפרופיל
שאנחנו מציגים לסלקטורית על הבליין.
לצורך עבודה כזאת מול פייסבוק ,השתמשנו בדברים הבאים:
יצרנו אפליקצית פייסבוק ב /https://developers.facebook.comהגדרנו את האפליקציה הזאת כך
שנוכל לגשת לחשבון על המשתמשים שלנו ולשאוב מהם את הפרטים האישיים שלהם כגון ,שם,
משפחה ,גיל ,עיר מגורים ,גישה לחברים שלו ,אפשרות פרסום על הקיר שלו.
פייסבוק :SDKפייסבוק הוציאו SDKבכל מיני שפות תכנות לצורך עבודה מולם .אנחנו השתמשנו ב
:facebook JS SDK
https://developers.facebook.com/docs/javascript/gettingstarted
עם ה sdkהזה אנחנו עובדים מול פייסבוק לצורך של קריאה של נתונים מהם .ופרסום על הקיר של
הבליין.
כמו שציינו בסעיף על הפלאגין לפייסבוק ב PhoneGapלצורך המעבר בין האפליקציה שלנו
לאפליקציה של פייסבוק ,התחברות וחזרה לאפליקציה שלנו.
כאשר אנחנו משתמשים בכל מה שציינו למעלה ,אנחנו מסוגלים לעבוד בצורה חלקה מול פייסבוק.
תקשורת בין שרת ללקוח באמצעות SOKCET I/O
Websocketהוא פרוטוקול הרץ מעל ה .TCP-באמצעות ה Websocket -אפשר ליצר תקשורת דו
כיוונית בין שרת ללקוח בזמן אמת ).(real time
באפליקציה שלנו חשוב לנו מאוד תקשורת בזמן אמת כלומר כאשר בלין מבקש להכנס למועדון,
הסלקטורית תקבל את הבקשה שלו באותו הרגע ולא לאחר מספר דקות.
באותו אופן גם כשסלקטורית מאשרת לבליין להכנס ,נרצה שהבליין יקבל את אישור הכניסה באותו
רגע כדי לא ליצור עומס בכניסה.
לכן בחרנו להשתמש ב ,Websocket -שנותן לנו את הביצועים הנדרשים הללו.
ניתן לראות את הדיאגרמה הממחישה את התקשורת בין הסלקטורית לבליין:
צד שרת
צד השרת נכתב כולו ב Node.jsבסביבת לינוקס )גרסת (Ubuntuע"י ) Webstorm IDEפירוט
נוסף ניתן למצוא בפרק "טכנולוגיות בהן השתמשנו"(.
עיצוב הקוד
צד השרת נכתב תוך שימוש בתבנית העיצוב ) , MVC (model,view,controllerהמשמשת
להפשטת היישום על ידי חלוקתו ל 3מרכיבים עיקריים ולצמידות נמוכה של המרכיבים דבר שאפשר
לנו לבצע יותר שימוש חוזר בקוד ) ,(Reusableויסייע לנו בעתיד בעת תחזוקת הקוד.
להלן תרשים ה MVCהמתאר את היחסים בין שלושת המרכיבים.
כעת ,נפרט מה מטרתו של כל אחד מהרכיבים שהוזכרו לעיל באפליקציה שלנו.
מודל ()Model
מרכיב זה כולל את הייצוג של כל המידע עליו פועל היישום כלומר ,מכיל
את כל טבלאות ה DBואת כל הפונקציות הבסיסיות שמימשנו עבור
הטבלאות הללו )יצירה עריכה ,מחיקה(.
חלק זה יתואר בהמשך בפירוט בפרק .Database
מבט ()View
מרכיב זה תפקידו להמיר את נתוני המודל לייצוג המאפשר למשתמש לבצע פעולת גומלין
כלשהי ,באפליקציה שלנו מרכיב זה כולל את כל דפי ה ) ejs (embedded javascriptשל
ממשק המנהלים שעל ידם אנו יכולים לבצע פעולות בסיסיות לאפליקציה כמו
יצירה/מחיקה/עריכה של אירוע חדש מקום חדש ועוד...
מרכיב זה כולל את הקבצים הבאים:
תיקיית Adminהכוללת את 3תיקיות Place , Line , Eventשכל אחת מהן כוללת
את הקבצים הבאים:
– main.ejs oבעזרת דף זה אנו מציגים את כל
המקומות/ליינים/אירועים שהמשתמש יצר.
– new.ejs oבדף זה אנו מציגים טופס שבעזרתו
המשתמש יכול ליצור מקום/ליין/אירוע בצורה נוחה
ולשמור מקום זה ב DBעל ידי לחיצה על "שמירה".
– edit.ejs oבדף זה אנו מציגים טופס שבעזרתו
המשתמש יכול לעדכן מקום/ליין/אירוע קיםם בצורה
נוחה ולשמור את העדכון ב DBעל ידי לחיצה על
"עדכון".
תיקיית – Errorתיקייה זו כוללת קבצי ejsשמופיעים כאשר
המשתמש קיבל שגיאה בזמן השימוש באפליקציה )לדוגמא:
שגיאת 404עבור ניווט לדף שלא נמצא(
– HomePage.ejsדף הבית של ממשק הניהול.
– Layout.ejsדף זה מכיל את הפאנל העליון הקבוע שמופיע
בכל הדפים.
בקר ()Controller
תפקיד מרכיב זה לעבד ולהגיב לאירועים המתרחשים ב ,Viewכתגובה לפעולה של
המשתמש.
באפליקציה שלנו הבקר עונה לבקשות שהתקבלו מה View-מטפל בהם ומחזיר תשובה
בפורמט ,JSONכמו כן בבקר נעשות בדיקות תקינות של קלט שהגיע מה View-לפני שקלט
זה מועבר למודל.
כעת על הפונקציות העיקריות בכל אחד מהקבצים שיצרנו ב .Controller
authentication.js
קובץ זה מכיל פונקציות המאמתות המשתמש עם חשבון הפייסבוק שלו
שהצהיר עליו )כזכור ,ההתחברות לאפליקציה היא על ידי חשבון פייסבוק(
בשימוש בפונקציות אלו אנו משתמשים במודל ) Passportקישור למודל זה
(https://npmjs.org/package/passportבדיקות האימות עבור המשמש
נעשות גם בין כל מעבר מדף לדף על ממת להבטיח שמשתמש לא יגיע
לדפים "פנימיים" מבלי לעבור תהליך של אימות.
facebook.js
קובץ אלו מכיל את כל הפונקציות שפונות לשרתים של פייסבוק ומבקשות
מידע שונה לטובת האפליקציה ,פונקציות אלו משתמשות במודול fbgraph
)קישור למודול זה ( https://npmjs.org/package/fbgraphהמהווה Apiלשירותי
פייסבוק הפונקציות הכלולות בו הם:
– createNewEventפונקציה המשמשת את המשתמש ליצור Eventבפרופיל
הפייסבוק שלו דרך אתר .Qyouהמספר המזהה של האיבנט שנוצר נשמר ב DB
)בקולקציה (Eventומאפשר לנו לקבל חיוני מפייסבוק ביחס לאירוע זה.
– GetFriendAttendingByEventIDפונקציה זו משמשת אותנו לקבלת מידע על
האנשים שהוזמנו/אישרו הגעתם לאירוע זה.
schedule.js
קובץ זה מכיל פונקציות ש"רצות ברקע" ונקראות לפעולה באופן אוטומטי כל זמן מוגדר.
למימוש פונקציות אלו אנו משתמשים במודול ) Cronקישור למודול
(https://npmjs.org/package/cronהמאפשר לנו לקבוע זמן מחזורי קבוע בו נבצע
פעולות מסוימות ,במערכות ההפעלה של Unixמשתמשים במנגנון זה על מנת לבצע
פעולות באופן מחזורי.
) לינק להסבר מויקיפדיה על ממגנון הcron -
( http://en.wikipedia.org/wiki/Cron
הפונקציות העיקריות בקובץ זה:
– updateDateOfLinesפונקציה זו נקראת באופן אוטומטי כל בוקר ותפקידה הוא
לעדכן את התאריך הבא של ליין שהוגדר באופן מחזורי )לדוגמא :נניח ויש לנו ליין קבוע בכל
ימי שני וחמישי אז על ידי הפונקציה ביום שלישי בבוקר תאריך האירוע הקרוב של הליין
ישתנה מיום שני ליום חמישי(.
- UpdateQueueפונקציה זאת נקראת באופן אוטומטי כל 5דקות ותפקידה הוא
להכניס לתור של אותו ליין את כל האנשים שאישרו את הגעתם לאירוע דרך אחד מהאיבנטים
שנפתחו עבור האירוע בפייסבוק.
– StartRankIncrementOfQueueפונקציה זו מופעלת לראשונה על ידי
הסלקטורית כאשר האירוע מתחיל ולאחר מכן נקראת באופן מחזורי כל 3דקות ותפקידה הוא
להעלות את הדירוג הזמני של כל כל המשתמשים הממתינים בתור וזאת על מנת למנוע מצב
של "הרעבת" המשתמשים )הסבר מפורט יותר ניתן למצוא בחלק שמפרט על אלגוריתם
ניהול התור מטה(.
Places.js
בקובץ זה ממושמות כל הפונקציות הפועלות על טבלת ה Placeשב DBנפרט על
העיקריות שבהם:
– calcLonAndLatבפונקציה זו נעשה שימוש כאשר יוצרים מקום חדש והיא
משמשת אותנו לחישוב מיקום גיאוגרפי מדויק ) (lat & lonשל המקום על סמך הכתובת
המלאה שלו ,המכילה את הפרמטרים :ארץ ,עיר ,רחוב ומספר רחוב )ניתן להעביר
לפונקציה את הפרמטרים בעברית או באנגלית( .בפונקציה זו אנו משתמשים במודול
) geocoderקישור למודול (https://npmjs.org/package/geocoderשמשמש כ
wrapperשל .google map apiהמיקום הגיאוגרפי המתקבל מהפונקציה נשמר ב DB
ומשמש אותנו בפונקציות הבאות.
– GetDistanceפונקציה זו מקבלת כפרמטר את המיקום הנוכחי של המשתמש
ומספר מזהה עבור מקום כלשהו ומחשבת את המרחק בין המשתמש לבין המקום.
Lines.js
קובץ זה מכיל פונקציות רבות המספקות מידע עבור הליין כמו קודם נפרט על העיקריות
שבהם
– getLinesDataForMainScreenפונקציה זו נקראת בכל פעם שהמשתמש נכנס
לאפליקציה ,הפונקציה מוצאת את כל הליינים הפעילים שצריך להציג למשתמש עבור כל אחד
מהם מרכזת את המידע הנחוץ להצגה )ע"י פונקציית ( dataCollectionForLineבפורמט
של JSONושולחת את המידע לצד הלקוח שם הוא מפוענח ומוצג על הסמארטפון.
– GetDataAboutSpecificLineפונקציה זו נקראת לאחר שהמשתמש בחר בליין
כלשהו בדף הרשאי של האפליקציה .פונקציה זו מייצרת אובייקט JSONהכולל את כל
הנתונים הידועים לגבי אותו ליין )שם ,תאריך ,תיאור ,תמונה ,שם המקום בו מתרחש
האירוע ,מרחק של המשתמש מהאירוע ועוד.(..
– getLinesDataSortByDistanceפונקציה זו מחזירה למשתמש את רשימת כל
האירועים לפי המרחק הנוכחי שלו מכל אחד מהאירועים הפעילים שבאפליקציה.
– getAverageAges/CalcGenderPropositionפונקציות אלו מספקות
סטטיסטיקה לבעל המועדון והסלקטורית על יחס הבנים/בנות וממוצע הגילאים של הבליינים
שנכנסו לאירוע ושל אילו שעדיין ממתינים בתור.
Events.js
קובץ זה מכיל פונקציות בסיסיות המספקות מידע עבור הליין לא מצאנו כי ישנם פונקציות
לא ברורות הדורשות הסבר מיוחד בקובץ זה.
Queue.js
קובץ זה מכיל את כל הפונקציות המשמשות לניהול התור בפועל וביניהן הפונקציות
הבאות:
– addUserToWaitingListAndInitializeQueueRankפונקציה זו נקראת את
כאשר המשתמש הגיע למסיבה וברצונו להיכנס לתור ,הפונקציה מכניסה את
המשתמש לרשימת ההמתנה של אותו תור ומחשבת את ה Queue Rank
ההתחלתי שלו )כפי שמתואר באלגוריתם התור המופיע מטה( לשם דירוג בתור.
- getPeoplesWaitingSortByRankפונקציה זו נקראת כאשר הסלקטור מבקש
לראות את רשימת על האנשים בתור ,הפונקציה יוצרת אובייקט JSONהמכיל
פרטים על המשתמשים )תמונה ,שם ועוד , (..את הזמן שבו כל המשתמש ביקש
להיכנס )על מנת להציג כמה זמן המשתמש ממתין( כאשר סדר המשתמשים
באובייקט הנשלח נקבע על פי דירוגם מהגבוהה לנמוך.
- generateUUIDפונקציה זו נקראת כאשר הסלקטורית אישרה את המשתמש
וכעת אנו יוצרים עבור משתמש מספר UUIDלשם יצירת ברקוד ייחודי )שנשלח
למשתמש על ידי (Web Socketאת המספר יצרנו ע"י המודול ) UUIDניתן
לראות פירוט על המודול כאן .(https://npmjs.org/package/uuid :
- VerifiedUserפונקציה זו נקראת כאשר הסלקטורית סורקת את הברקוד
שהמשתמש מציג לה ,תפקידה של הפונקציה הוא לבדוק האם הברקוד
שהמשתמש מציג הוא אכן הברקוד שנשלח לו.
קבצים נוספים מחוץ ל MVC
– SERVER.jsקובץ זה מהווה כ ENTRY POINTשל האפליקציה ,בקובץ זה
אנו מבצעים התחברות לשרת בהתאם לסביבת העבודה עליה אנו עובדים
) Productionאו ,, (Developmentהתחברות ל ) DBע"י (mongoose
וטוענים את המודלים הבאים http , Passport , Express :ו .Socket I/O
- ROUTES.jsבקובץ זה אנו משתמשים ב Express Frameworkשל
(/http://expressjs.com) Node.jsתפקידו של Frameworkזה הוא לבצע
התאמה בין כתובת ה URLשהוזנה על ידי המשתמש לדפדפן לבין
הפונקציה שצריך להריץ בצד השרת בעקבות בקשה זו ,במידה ולא נמצאה
התאמה בין הכתובת שהוכנסה לבין אחת מהכתובות המופיעות בקובץ
השרת יחזיר שגיאת ) 404דף לא נמצא(.
קובץ זה בנוי במתודולוגיית ) RESTהסבר על RESTמויקיפדיה
(http://en.wikipedia.org/wiki/Representational_state_transfer
שמספקת לנו את היתרונות של פשטות וניהול של כל הניתובים בקובץ אחד
ובצורה ברורה.
– Package.jsonקובץ זה מכיל את כל המודולים מה NPMבהם
השתמשו במערכת ,קובץ זה משמש להתקנת על המודלים
הרשומים בו בשרת באופן הבא :כאשר אנו מעלים את השרת
ומכניסים בקונסול את הפקודה Npm Installאז הרצת הפקודה
גורמת לחיפוש בכל הקבצים בקוד קובץ בשם Package.json
בתוך קובץ זה מחפשים את האובייקט dependenciesועל פי ה
) Keyהמייצג את שם המודול( וה ) valueהמייצג את הגרסא של
המודול ( מתבצעת התקנת המודולים לשרת.
אלגוריתם חישוב הדירוג עבור ניהול התור
בחלק זה נסביר על האלגוריתם בעזרתו המערכת מנהלת את התור האלגוריתם מורכב מ 3
פרמטרים עיקריים
– Global Rankמספר חיובי המייצג את הדירוג הכללי שיש לכל משתמש ,ביחס לרמת
השימוש שלא באפליקציה באופן כללי ,ערך זה גדל באופן איטי יחסית.
– Line Rankמספר חיובי המייצג את הדירוג שיש לכל משמש ביחס לליין ספציפי )כלומר
הדירוג נקבע על פי מספר הפעמים שהמשתמש השתמש באפליקציה באותו הליין( ,ערך זה
גדל באופן מהיר יותר מאשר .Global Rank
– Queue Rankמספר חיובי שערכו הראשוני נקבע על סמך 2הפרמטרים בתוספת פרמטר
המייצג את משך זמן ההמתנה של כל משתמש ,בניגוד ל 2הפרמטרים האחרים פרמטר זה
הוא זמני ואין לא חשיבות לאחר שהמשתמש נכנס למסיבה.
הבליינים בתור מדורגים באופן הבא:
שלב ההגעה למסיבה :כאשר משתמש מגיע לתור ומבקש להיכנס למסיבה אנו מבצעים
את הדברים הבאים:
oמחלצים מה DBאת Global Rankשל אותו המשתמש )במידה וזהו השימוש
הראשון שלו באפליקציה .(Global Rank=0
oמחלצים מה DBאת ה Line Rankשל אותו משתמש )במידה וזהו השימוש
הראשון של המשתמש באפליקציה באותו הליין .(Line Rank =0
oמאתחלים את Queue Rankלערך הבא:
}Queue Rank = MAX { Global Rank , Line Rank
בזמן המתנה בתור :בכל 3דקות רצה פונקציה מתוזמנת בשרת ותפקידה הוא להגדיל
את ה Queue Rankשל כל המשתמשים שממתינים בתור .פונקציה זו נצרה על מנת
למנוע מצב של "הרעבת" משתמשים חדשים.
לאחר הכניסה למועדון :לאחר שהמשתמש אושר על ידי הסלקטורית אין יותר חשיבות
לערך ה ,Queue Rankמה שהמערכת עושה היא מעדכנת את ערך ה Global Rankואת
ערך ה ) Line Rankביחס לאותו הליין( של המשתמש לטובת השימוש הבא שלו
באפליקציה.
Database
בפרויקט עבדנו עם Databaseמסוג MongoDBעשינו זאת בעזרת הorginal design -
(manufacturer ODMשנקרא Mongooseהמאפשר לעבוד בצורה נוחה וקלה ב MongoDBעם
.Node.js
להלן שרטוט המכיל את מבנה הטבלאות
ב mongoDBהטבלאות נקראות קולקציות ולכן מעתה נשתמש במילה זו לתיאור טבלה )והקשר
ההיררכי בינהן(.
נפרט קצת כל כל אחת מהקולקציות שמופיעות בשרטוט למעלה:
USER collection
מכיל את כל המידע שאנו רוצים לשמור על המשתמש שכולל נתונים כללים על המשתמש )שם,
שם משפחה ,מייל ,תאריך לידה ,מין ,תמונה ,טלפון ומידע נוסף מהפייסבוק ( לצד אובייקטים
מעניינים יותר שאותם נפרט כעת .
– EventInfoHistoryמערך אובייקטים זה מכיל מידע על כל היסטוריית הבילויים של
המשתמש באוביקט זה אנו שומרים מידע חשוב כמו מספרים מזהים
למועדון/ליין/אירוע/תור ,תאריך וזמן שהמשתמש ביקש להיכנס למועדון ,דגל בוליאני
שמורה האם המשתמש נכנס למסיבה באותו האירוע,תאריך וזמן בו הסלקטורית אישרה
את המשתמש והוא נכנס למועדון בפועל.
– Barcodeמערך אובייקטים זה מכיל את הברקוד שהמשתמש קיבל באותו ערב
בכניסתו לאירועים השונים )וזאת על מנת שבמידה והמשתמש יצא החוצה הוא יוכל
לחזור בקלות למסיבה ע"י הצגת הברקוד( נציין כי ברקוד זה תקף לערב האירוע בלבד
ולאחר מכן הוא נמחק מה.DB -
– Verifiedמערך אובייקטים שמכיל את כל המקומות )על פי מספר מזהה( שבהם
המשתמש מאושר לא מאושר )מאושר הכוונה שהסלקטורית במועדון אימתה את גיל
האמיתי מול גילו בפייסבוק(.
– LineRankמערך אובייקטים המכיל רשימה של מקומות ואת הדירוג של המשתמש
במקומות אלו )הדירוג נקבע על פי היסטוריית הביקורים של המשתמש באותו ליין
ומשמש לדירוגו בתור(.
– QueueRankמערך אובייקטים המכיל רשימה של מקומות ושל התור ששייך להם,
שדה בוליאני בשם Invitedהמציין אם המשתמש אישר את ההגעה דרך אחד
מהאיבנטים של הליין בפייסבוק )במידה וכן הוא מקבל על כך סוג של "בונוס" בדירוג(,
דירוג התור שנקבע על פי אלגוריתם ניהול התור שהוסבר קודם לכן.
– GlobalRankדירוג גלובאלי המייצג עבור כל משתמש את מדד השימוש שלו
באפליקציה.
– UserTypeשדה המתאר מאיזה סוג המשתמש )משתמש רגיל ,בעלים ,יחצ"ן או
סלקטורית(.
PLACE collection
מכיל את כל המידע שאנו רוצים לשמור על מקום בילוי כלשהו )שם ,כתובת ועיר ,לוגו ,סוג
מקום הבילוי ומידע מהפייסבוק( נפרט כעת על השדות הפחות טריוואלים בקולציה זו.
– geoמכיל מערך של 2מספרים המייצגים longitudeו latitudeשדה זה מאונדקס כ '.'d2
שדה זה מכיל את המיקום הגיאוגרפי של מקום הבילוי ומשמש לחישוב המרחק בין
המשתמשים לבין מקום הבילוי.
– Descriptionשדה המשמש לתיאור מילוי )עד 5000תווים( של המקום.
– Ownerמערך המכיל רשימה של המשתמשים שהם הבעלים של המקום.
– Linesמערך המכיל את כל הליינים )ראה פירוט על הקולקציה Lineמטה( שנפתחו
עבור מקום בילוי זה.
LINE collection
מכיל את כל המידע שאנו רוצים לשמור ליין )שם ,תאריך יצירה ,תמונה ( נפרט כעת על
השדות הנוספים בקולקציה
– schedulingLineשדה בוליאני המשמש לציין האם הליין שנקבע הוא ליין מחזורי )ליין
מחזורי זה ליין שמתקיים במועדון כלשהו בימים קבועים בכל שבוע( או שהליין הוא חד פעמי.
– Daysשדה זה הוא נכנס לשימוש במידה והליין הנוכחי הוא ליין מחזורי ,שדה זה
מכיל מערך של מספרים מ 0עד 6המייצגים את הימים הקבועים בהם הליין יתקיים ) – 0ראשון ,
– 1שני – 2 ,שלישי וכך הלאה.(...
– Daysשדה זה הוא נכנס לשימוש במידה והליין הנוכחי הוא ליין מחזורי ,שדה זה
מכיל מערך של מספרים מ 0עד 6המייצגים את הימים הקבועים בהם הליין יתקיים ) – 0ראשון ,
– 1שני – 2 ,שלישי וכך הלאה.(...
– IsActiveשדה בוליאני המציין אם הליין עדיין פעיל.
– LineDateשדה המציין את התאריך בו מתקיים הליין ,שדה זה מאונדקס מכיוון
שביצענו שאילתות רבות באפליקציה על ערך זה והאינדוקס חוסך המון זמן תקורה.
– GenderPropositionשדה המייצג את היחס בין המינים שדורש בעל הליין שעל ידו
האלגוריתם יודע אם לתת עדיפות לבנים או לבנות בכניסה לתור.
– MinAge Female/maleשדה המייצג את הגיל המינימאלי עבור נשים/גברים עבור
אותו הליין.
– Descriptionשדה המשמש לתיאור מילוי )עד 5000תווים( של הליין.
– Promotersמערך המכיל את רשימת כל המשתמשים שהם יחצ"נים של הליין.
ליין זה.
– Eventsרשימת כל האיבנטים )ראה פירוט על הקולקציה Eventמטה( שנפתחו עבור
– Queuesרשימת כל התורים )ראה פירוט על הקולקציה Queueמטה( שנפתחו
עבור ליין זה.
:EVENT collection
מכיל את כל המידע שאנו רוצים לשמור עבור האיבנט מהפייסבוק של האירוע .קולקציה זו מכילה
מידע בסיסי כמו שם האיבנט ,תאריך יצירה ,תמונה ומחיר כניסה לאירוע לצד מידע מורכב יותר
שנפרט עליו מטה
– facebookEventIdשדה זה מייצג את מספר המזהה של פייסבוק עבור האיבנט
שיצרנו בפייסבוק )באמצעות מספר זה נוכל להוציא מידע חיוני מאוד על האירוע(.
– Descriptionשדה המשמש לתיאור מילוי )עד 5000תווים( של האיבנט.
.- eventStartDateשדה המציין את התאריך בו מתקיים האיבנט ,שדה זה מאונדקס
מכיוון שביצענו שאילתות רבות באפליקציה על ערך זה והאינדוקס חוסך המון זמן תקורה.
– eventStartTimeשדה המכיל את השעה בא מתקיים האירוע.
– Invitedמערך של המשתמשים שהוזמנו
– goingמערך של המשתמשים שאישרו בפייסבוק את הגעת לאירוע.
:QUEUE collection
קולקציה זו מייצגת את כל המידע שאנו צריכים לשמור עבור ניהול של תור ספציפי וכוללת את
השדות הבאים
– eventDateתאריך האירוע בו מתנהל תור זה.
– IsActiveשדה בוליאני המייצג אם באותו הרגע התור פעיל.
– Invitedמערך המכיל את רשימת המשתמשים שאישרו את הגעתם בלפחות אחד
מהאיבנטים בפייסבוק המשוייכים לאירוע זה.
– waitingמערך של אובייקטים המכיל את כל המשתמשים הממתינים בתור ואת הזמן
המדויק בו כל אחד מהם ביקש להצטרף לתור.
- approvedמערך של אובייקטים המכיל את כל המשתמשים שאושרו לכניסה על
ידי הסלקטורית אך טרם נכנסו ואת הזמן המדויק בו הם אושרו.
- acceptמערך של אובייקטים המכיל את כל המשתמשים שנכנסו למועדון ואת הזמן
המדויק בו הם נכנסו.
- Rejectedמערך של אובייקטים המכיל את כל המשתמשים שנדחו מהמועדון ואת
הזמן המדויק בו הם נדחו.
תוכניות עתידיות
הרחבת המערכת ככלי לניהול יחצ"נים כך שהאפליקציה עצמה תהיה ככלי נלווה למוצר
וההכנסה העיקרית תהיה ממכירת המידע.
- BIG DATAהגדלת מסד הנתונים כך שיעבוד עם Cassandra DBעל מנת להפיק יותר מידע
ממה שיש היום ולבצע אנליזות מתוחכמות.
המלצות על בליינים מיחצנים ומבליינים אחרים שיעזרו להם להיכנס למועדונים.
שביעות רצון של הבליינים.
הרחבת האפליקציה לטובת מענה מגוון תורים )מסעדות ,אירועים ועוד(...
טכנולוגיות בהן השתמשנו
צד שרת
Node.js
Express framework o
NPM o
MongoDB
Mongoose ODM o
Restful API
Amazon web services
צד לקוח
HTML5
CSS3
Rachet o
Font awesome o
Javascript
AngularJS o
PhoneGap
אינטגרציה עם פייסבוק
Passport
Fbgraph
Facbook JS SDK
phoneGap facebook plugin
סביבת עבודה
Linux Ubuntu מערכת הפעלה
Git – ניהול גרסאות ועבודה בצוות
BitBucket אחסון הקוד בענן מאובטח
IDE WebStorm 6
© Copyright 2025