Advertisement
Guest User

Untitled

a guest
Jun 6th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.12 KB | None | 0 0
  1. import { AngularFireAuth } from 'angularfire2/auth';
  2. import { AngularFireDatabase, AngularFireList, AngularFireObject } from 'angularfire2/database';
  3. import { FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database-deprecated';
  4. import { Observable } from 'rxjs/Observable';
  5. import { Injectable } from '@angular/core';
  6. import * as moment from 'moment';
  7. import { Alert } from './alert';
  8. import { AlertController } from 'ionic-angular';
  9.  
  10. //import { ScoresPage } from '../pages/scores/scores';
  11.  
  12. export interface User {
  13. uid: string;
  14. username: string;
  15. displayname: string;
  16. email: string;
  17. password: string;
  18. registered: boolean;
  19. //score: number;
  20. index: number;
  21. lastLogin: number;
  22. lastDrawTs: number;
  23. lastDrawText: string;
  24. dateScore: string;
  25. }
  26.  
  27. interface UserScore {
  28. score: number;
  29. displayname: string;
  30. email: string;
  31. }
  32.  
  33. export interface Notification {
  34. username: string;
  35. timestamp: string;
  36. amount: string;
  37. email: string;
  38. }
  39.  
  40. export interface UserDataReadyListener {
  41. (ok: boolean): void
  42. }
  43.  
  44. @Injectable()
  45. export class UserDAO {
  46.  
  47. userDatabase: FirebaseListObservable<any>;
  48. userDetailRef: AngularFireObject<User>;
  49. userScoreRef: AngularFireObject<UserScore>;
  50. notificationRef: AngularFireObject<Notification>;
  51. user: User;
  52. currentLogin: moment.Moment;
  53. timePrefix: String;
  54. currentScore: number;
  55.  
  56. constructor(
  57. // public scores: ScoresPage,
  58. private afauth: AngularFireAuth,
  59. public db: AngularFireDatabase,
  60. private alertCtrl: AlertController) {
  61. this.db = db;
  62. this.checkAuthState(null);
  63. this.timePrefix = this.getPrefix(moment());
  64. }
  65.  
  66. getPrefix(now: moment.Moment) {
  67. return now.format("YYYYMM");
  68. }
  69.  
  70. public checkAuthState(listener: UserDataReadyListener) {
  71. this.afauth.authState.subscribe(data => {
  72. if (!data || !data.uid) {
  73. if (listener) {
  74. listener(false);
  75. }
  76. return;
  77. }
  78.  
  79. this.currentLogin = moment(data.metadata.lastSignInTime);
  80. this.userDetailRef = this.db.object('users/' + data.uid);
  81. this.notificationRef = this.db.object('notifications/' + data.uid);
  82.  
  83. this.userDetailRef.valueChanges().subscribe(user => {
  84. this.user = user;
  85. console.log("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU0 " + JSON.stringify(this.user));
  86. console.log("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU1 " + JSON.stringify(data));
  87. var ts = moment.utc().valueOf();
  88. if (user == undefined) {
  89. console.log("create user");
  90.  
  91. this.user = {} as User;
  92. this.user.uid = data.uid;
  93. this.user.email = data.email;
  94. this.user.displayname = data.displayName;
  95. //this.user.score = 0;
  96. this.user.lastLogin = this.currentLogin.valueOf();
  97. this.userDetailRef.set(this.user);
  98. }
  99. if (listener)
  100. listener(true);
  101.  
  102. this.registerForScoreData(null)
  103. //this._updateScore(100, 1001);
  104. });
  105.  
  106. });
  107.  
  108. }
  109.  
  110. public isLoggedIn() {
  111. return !!this.user;
  112. }
  113.  
  114. checkLogin() {
  115. var current = this.currentLogin;
  116. var prev = moment(this.user.lastLogin);
  117. console.log(">>>>>>>>>>>>>>>>>>>>>> " + this.user.lastLogin, prev);
  118.  
  119. if (current.dayOfYear() == prev.dayOfYear()) {
  120. console.log("same day login, abort", current.toString(), prev.toString(), current.dayOfYear(), prev.dayOfYear());
  121. return;
  122. }
  123. console.log(current)
  124. if (current.month() != prev.month()) {
  125. //reset on day 1
  126. this.resetScore();
  127. }
  128. var lastDayOfMonth = moment(moment().format("YYYY-MM") + "-" + moment().daysInMonth());
  129. console.log("lst day of month " + lastDayOfMonth.format("YYYY-MM-DD"));
  130. var remainingDays = lastDayOfMonth.diff(moment(), "days");
  131. console.log("remaining days " + remainingDays);
  132.  
  133. if (remainingDays <= 3) {
  134. new Alert(this.alertCtrl).showAlertId(Alert.ID_WARN_RESET);
  135. }
  136.  
  137. if (remainingDays >= 5) {
  138. var days = true;
  139. }
  140.  
  141. if (remainingDays == 1) {
  142. new Alert(this.alertCtrl).showAlertId(Alert.ID_END_OF_MONTH);
  143. //this.scores.writeTop3(moment().month());
  144. console.log(moment().month());
  145. }
  146. console.log("update last login");
  147. this.userDetailRef.update({ "lastLogin": this.currentLogin.valueOf() });
  148. return days;
  149. }
  150.  
  151. getUserName() {
  152. if (this.user != undefined)
  153. return this.user.username;
  154. return 0
  155. }
  156.  
  157. getBoolean(id: number) {
  158. var res;
  159. }
  160.  
  161. getScore() {
  162. return this.currentScore;
  163. }
  164.  
  165. registerForScoreData(cb) {
  166. console.log("123123");
  167. this.userScoreRef = this.db.object('scores/' + this.timePrefix + "/" + this.user.uid);
  168. console.log("1231234545");
  169. this.userScoreRef.valueChanges().subscribe(data => {
  170. if (!data) {
  171. var scoreData = {} as UserScore;
  172. scoreData.displayname = this.user.displayname;
  173. scoreData.email = this.user.email;
  174. data = scoreData;
  175. data.score = 0;
  176. this.userScoreRef.set(data);
  177. }
  178. this.currentScore = data.score;
  179. if (cb) cb(this.userScoreRef);
  180. });
  181. return this.userScoreRef;
  182. }
  183.  
  184. _updateScore(val:number, val_if_new_month: number) {
  185. this.getServerTime((now) => {
  186. let pfx = this.getPrefix(moment.utc(now))
  187.  
  188. if (pfx != this.timePrefix) {
  189. this.timePrefix = pfx;
  190. this.registerForScoreData((ref) => {
  191. ref.update({'score': val_if_new_month});
  192. });
  193. } else {
  194. this.userScoreRef.update({'score': val});
  195. }
  196. });
  197.  
  198. }
  199.  
  200. increaseScore() {
  201. this._updateScore(this.currentScore + 1, 1);
  202. if (this.isLoggedIn() && this.currentScore == 300) new Alert(this.alertCtrl).showAlertId(1);
  203.  
  204. }
  205.  
  206. public drawLuck(text) {
  207. if (this.user != undefined) {
  208. this.userDetailRef.update({ "lastDrawTs": moment().utc().valueOf(), "lastDrawText": text }); //FIXME
  209. }
  210. }
  211.  
  212. public isDrawLuckAllowed() {
  213. if (this.user == undefined && this.user.lastDrawTs == null) {
  214. return true;
  215. }
  216.  
  217. if (!this.user.lastDrawTs) { //never happened
  218. return true;
  219. }
  220.  
  221. var hoursePassed = moment().utc().diff(moment(this.user.lastDrawTs), "hours");
  222. console.log("HOURS " + hoursePassed , this.user.lastDrawTs);
  223. return hoursePassed >= 12;
  224. }
  225.  
  226. public getLastDrawText() {
  227. if (this.user != undefined)
  228. return this.user.lastDrawText;
  229. return "";
  230. }
  231.  
  232.  
  233. cashOutScore(price: number) {
  234. if (this.user != undefined && this.currentScore >= price)
  235. this._updateScore(this.currentScore - price, 0);
  236. }
  237.  
  238. resetScore() {
  239. //this._updateScore(0);
  240. }
  241.  
  242. public switchBool(val: Partial<User>) {
  243. this.userDetailRef.update(val);
  244. }
  245.  
  246. public setUsername(username) {
  247. this.user.username = username;
  248. this.userDetailRef.update({ "username": username });
  249. }
  250.  
  251. public sendCashOutNotification(amount, counter, markedOuter) {
  252. var n = {} as Notification;
  253. n.timestamp = moment().utc().toString();
  254. console.log("COUNTER" + counter);
  255. var message = "";
  256. switch (amount) {
  257. case 300:
  258. message = " 30USD";
  259. break;
  260. case 600:
  261. if (counter > 1) {
  262. message = " 2 X 30 USD";
  263. } else {
  264. message = " 50USD";
  265. }
  266. break;
  267. case 900:
  268. if (counter > 1) {
  269. message = " 1 X 30 USD and 1 X 50USD";
  270. } else {
  271. message = " 70USD";
  272. }
  273. break;
  274. case 1200:
  275. if (counter == 2) {
  276. message = " 1 X 30 USD and 1 X 70USD";
  277. }
  278. if (counter == 1) {
  279. message = " 100USD";
  280. }
  281. break;
  282. case 1500:
  283. if (counter == 2 && markedOuter) {
  284. message = " 1 X 30 USD and 1 X 100USD";
  285. }
  286. if (counter == 2 && !markedOuter) {
  287. message = " 1 X 50 USD and 1 X 70USD";
  288. }
  289. break;
  290. case 1800:
  291. if (counter == 2) {
  292. message = " 1 X 30 USD and 1 X 100USD";
  293. }
  294. if (counter == 3) {
  295. message = " 1 X 30 USD, 1 X 50USD and 70USD";
  296. }
  297. break;
  298. case 3000:
  299. if (counter == 4) {
  300. message = " 1 X 30 USD, 1 X 50USD, 1 X 70 USD and 1 X 100USD";
  301. }
  302. break;
  303. default:
  304. break;
  305. }
  306. n.amount = message;
  307. n.username = this.user.displayname || this.user.username;
  308. n.email = this.user.email;
  309. this.notificationRef.set(n);
  310. }
  311.  
  312. padLeft(text:string, padChar:string, size:number): string {
  313. return (String(padChar).repeat(size) + text).substr( (size * -1), size) ;
  314. }
  315.  
  316.  
  317. getServerTime( cb ) {
  318. this.db.database.ref( '.info/serverTimeOffset' ).once( 'value', function( snap ) {
  319. var offset = snap.val();
  320.  
  321. // Get server time by milliseconds
  322. cb( new Date().getTime() + offset );
  323. });
  324. };
  325. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement