Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { AngularFireAuth } from 'angularfire2/auth';
- import { AngularFireDatabase, AngularFireList, AngularFireObject } from 'angularfire2/database';
- import { FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database-deprecated';
- import { Observable } from 'rxjs/Observable';
- import { Injectable } from '@angular/core';
- import * as moment from 'moment';
- import { Alert } from './alert';
- import { AlertController } from 'ionic-angular';
- //import { ScoresPage } from '../pages/scores/scores';
- export interface User {
- uid: string;
- username: string;
- displayname: string;
- email: string;
- password: string;
- registered: boolean;
- //score: number;
- index: number;
- lastLogin: number;
- lastDrawTs: number;
- lastDrawText: string;
- dateScore: string;
- }
- interface UserScore {
- score: number;
- displayname: string;
- email: string;
- }
- export interface Notification {
- username: string;
- timestamp: string;
- amount: string;
- email: string;
- }
- export interface UserDataReadyListener {
- (ok: boolean): void
- }
- @Injectable()
- export class UserDAO {
- userDatabase: FirebaseListObservable<any>;
- userDetailRef: AngularFireObject<User>;
- userScoreRef: AngularFireObject<UserScore>;
- notificationRef: AngularFireObject<Notification>;
- user: User;
- currentLogin: moment.Moment;
- timePrefix: String;
- currentScore: number;
- constructor(
- // public scores: ScoresPage,
- private afauth: AngularFireAuth,
- public db: AngularFireDatabase,
- private alertCtrl: AlertController) {
- this.db = db;
- this.checkAuthState(null);
- this.timePrefix = this.getPrefix(moment());
- }
- getPrefix(now: moment.Moment) {
- return now.format("YYYYMM");
- }
- public checkAuthState(listener: UserDataReadyListener) {
- this.afauth.authState.subscribe(data => {
- if (!data || !data.uid) {
- if (listener) {
- listener(false);
- }
- return;
- }
- this.currentLogin = moment(data.metadata.lastSignInTime);
- this.userDetailRef = this.db.object('users/' + data.uid);
- this.notificationRef = this.db.object('notifications/' + data.uid);
- this.userDetailRef.valueChanges().subscribe(user => {
- this.user = user;
- console.log("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU0 " + JSON.stringify(this.user));
- console.log("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU1 " + JSON.stringify(data));
- var ts = moment.utc().valueOf();
- if (user == undefined) {
- console.log("create user");
- this.user = {} as User;
- this.user.uid = data.uid;
- this.user.email = data.email;
- this.user.displayname = data.displayName;
- //this.user.score = 0;
- this.user.lastLogin = this.currentLogin.valueOf();
- this.userDetailRef.set(this.user);
- }
- if (listener)
- listener(true);
- this.registerForScoreData(null)
- //this._updateScore(100, 1001);
- });
- });
- }
- public isLoggedIn() {
- return !!this.user;
- }
- checkLogin() {
- var current = this.currentLogin;
- var prev = moment(this.user.lastLogin);
- console.log(">>>>>>>>>>>>>>>>>>>>>> " + this.user.lastLogin, prev);
- if (current.dayOfYear() == prev.dayOfYear()) {
- console.log("same day login, abort", current.toString(), prev.toString(), current.dayOfYear(), prev.dayOfYear());
- return;
- }
- console.log(current)
- if (current.month() != prev.month()) {
- //reset on day 1
- this.resetScore();
- }
- var lastDayOfMonth = moment(moment().format("YYYY-MM") + "-" + moment().daysInMonth());
- console.log("lst day of month " + lastDayOfMonth.format("YYYY-MM-DD"));
- var remainingDays = lastDayOfMonth.diff(moment(), "days");
- console.log("remaining days " + remainingDays);
- if (remainingDays <= 3) {
- new Alert(this.alertCtrl).showAlertId(Alert.ID_WARN_RESET);
- }
- if (remainingDays >= 5) {
- var days = true;
- }
- if (remainingDays == 1) {
- new Alert(this.alertCtrl).showAlertId(Alert.ID_END_OF_MONTH);
- //this.scores.writeTop3(moment().month());
- console.log(moment().month());
- }
- console.log("update last login");
- this.userDetailRef.update({ "lastLogin": this.currentLogin.valueOf() });
- return days;
- }
- getUserName() {
- if (this.user != undefined)
- return this.user.username;
- return 0
- }
- getBoolean(id: number) {
- var res;
- }
- getScore() {
- return this.currentScore;
- }
- registerForScoreData(cb) {
- console.log("123123");
- this.userScoreRef = this.db.object('scores/' + this.timePrefix + "/" + this.user.uid);
- console.log("1231234545");
- this.userScoreRef.valueChanges().subscribe(data => {
- if (!data) {
- var scoreData = {} as UserScore;
- scoreData.displayname = this.user.displayname;
- scoreData.email = this.user.email;
- data = scoreData;
- data.score = 0;
- this.userScoreRef.set(data);
- }
- this.currentScore = data.score;
- if (cb) cb(this.userScoreRef);
- });
- return this.userScoreRef;
- }
- _updateScore(val:number, val_if_new_month: number) {
- this.getServerTime((now) => {
- let pfx = this.getPrefix(moment.utc(now))
- if (pfx != this.timePrefix) {
- this.timePrefix = pfx;
- this.registerForScoreData((ref) => {
- ref.update({'score': val_if_new_month});
- });
- } else {
- this.userScoreRef.update({'score': val});
- }
- });
- }
- increaseScore() {
- this._updateScore(this.currentScore + 1, 1);
- if (this.isLoggedIn() && this.currentScore == 300) new Alert(this.alertCtrl).showAlertId(1);
- }
- public drawLuck(text) {
- if (this.user != undefined) {
- this.userDetailRef.update({ "lastDrawTs": moment().utc().valueOf(), "lastDrawText": text }); //FIXME
- }
- }
- public isDrawLuckAllowed() {
- if (this.user == undefined && this.user.lastDrawTs == null) {
- return true;
- }
- if (!this.user.lastDrawTs) { //never happened
- return true;
- }
- var hoursePassed = moment().utc().diff(moment(this.user.lastDrawTs), "hours");
- console.log("HOURS " + hoursePassed , this.user.lastDrawTs);
- return hoursePassed >= 12;
- }
- public getLastDrawText() {
- if (this.user != undefined)
- return this.user.lastDrawText;
- return "";
- }
- cashOutScore(price: number) {
- if (this.user != undefined && this.currentScore >= price)
- this._updateScore(this.currentScore - price, 0);
- }
- resetScore() {
- //this._updateScore(0);
- }
- public switchBool(val: Partial<User>) {
- this.userDetailRef.update(val);
- }
- public setUsername(username) {
- this.user.username = username;
- this.userDetailRef.update({ "username": username });
- }
- public sendCashOutNotification(amount, counter, markedOuter) {
- var n = {} as Notification;
- n.timestamp = moment().utc().toString();
- console.log("COUNTER" + counter);
- var message = "";
- switch (amount) {
- case 300:
- message = " 30USD";
- break;
- case 600:
- if (counter > 1) {
- message = " 2 X 30 USD";
- } else {
- message = " 50USD";
- }
- break;
- case 900:
- if (counter > 1) {
- message = " 1 X 30 USD and 1 X 50USD";
- } else {
- message = " 70USD";
- }
- break;
- case 1200:
- if (counter == 2) {
- message = " 1 X 30 USD and 1 X 70USD";
- }
- if (counter == 1) {
- message = " 100USD";
- }
- break;
- case 1500:
- if (counter == 2 && markedOuter) {
- message = " 1 X 30 USD and 1 X 100USD";
- }
- if (counter == 2 && !markedOuter) {
- message = " 1 X 50 USD and 1 X 70USD";
- }
- break;
- case 1800:
- if (counter == 2) {
- message = " 1 X 30 USD and 1 X 100USD";
- }
- if (counter == 3) {
- message = " 1 X 30 USD, 1 X 50USD and 70USD";
- }
- break;
- case 3000:
- if (counter == 4) {
- message = " 1 X 30 USD, 1 X 50USD, 1 X 70 USD and 1 X 100USD";
- }
- break;
- default:
- break;
- }
- n.amount = message;
- n.username = this.user.displayname || this.user.username;
- n.email = this.user.email;
- this.notificationRef.set(n);
- }
- padLeft(text:string, padChar:string, size:number): string {
- return (String(padChar).repeat(size) + text).substr( (size * -1), size) ;
- }
- getServerTime( cb ) {
- this.db.database.ref( '.info/serverTimeOffset' ).once( 'value', function( snap ) {
- var offset = snap.val();
- // Get server time by milliseconds
- cb( new Date().getTime() + offset );
- });
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement