src/app/services/firebase/firestore/firebase-firestore.service.ts
Service to comunicate with the Firestore database
constructor(afs: AngularFirestore)
|
||||||||
|
Constructor
Parameters :
|
| checkDisplayname | ||||||||
checkDisplayname(photographerUrl: string)
|
||||||||
|
Check photographer url
Parameters :
Returns :
AngularFirestoreDocument<any>
|
| createEvent | ||||||||
createEvent(event: Event)
|
||||||||
|
Create event
Parameters :
Returns :
Promise<void>
|
| createPriceList | ||||||||||||
createPriceList(priceList: PriceList, photographer: string)
|
||||||||||||
|
Create photographer price list
Parameters :
Returns :
Promise<void>
|
| createPrintingHouse | ||||||||
createPrintingHouse(printingHouse: PrintingHouse)
|
||||||||
|
Create prin ting house
Parameters :
Returns :
Promise<void>
|
| deleteEventImage | ||||||||
deleteEventImage(image: string)
|
||||||||
|
Delete image firestore document
Parameters :
Returns :
Promise<void>
|
| deletePhotographerEvent | ||||||||
deletePhotographerEvent(id: string)
|
||||||||
|
Set Event "deleted" value to true
Parameters :
Returns :
Promise<void>
|
| deleteUser | ||||||||
deleteUser(uid: string)
|
||||||||
|
Delete user
Parameters :
Returns :
Promise<void>
|
| getAllEvents |
getAllEvents()
|
|
Get all events
Returns :
AngularFirestoreCollection<Event>
|
| getAllPhotographer |
getAllPhotographer()
|
|
Get all photographer profiles |
| getAllTransactions |
getAllTransactions()
|
|
Returns all transactions
Returns :
AngularFirestoreCollection<Transaction>
|
| getAllUser |
getAllUser()
|
|
Get all user
Returns :
AngularFirestoreCollection<User>
|
| getDefautlPrintingHouse |
getDefautlPrintingHouse()
|
|
Returns default printing house AngularFirestoreCollection |
| getEvent | ||||||||
getEvent(id: string)
|
||||||||
|
Get event by id
Parameters :
Returns :
AngularFirestoreDocument<Event>
|
| getEventOriginalPictures | ||||||||
getEventOriginalPictures(id: string)
|
||||||||
|
Get event original pictures
Parameters :
Returns :
AngularFirestoreCollection<EventPicture>
|
| getEventPictures | ||||||||
getEventPictures(id: string)
|
||||||||
|
Get event pictures
Parameters :
Returns :
AngularFirestoreCollection<EventPicture>
|
| getId |
getId()
|
|
Create a firestore UID
Returns :
string
|
| getPhotographerByUrl | ||||||||
getPhotographerByUrl(url: string)
|
||||||||
|
Get photogreapher by url
Parameters :
|
| getPhotographerEvents | ||||||||
getPhotographerEvents(uid: string)
|
||||||||
|
Get photographer events
Parameters :
Returns :
AngularFirestoreCollection<Event>
|
| getPhotographerProfile | ||||||||
getPhotographerProfile(uid: string)
|
||||||||
|
Get photographer profile by id
Parameters :
|
| getPopularImages |
getPopularImages()
|
|
Get most rated top 100 images
Returns :
AngularFirestoreCollection<EventPicture>
|
| getPriceList | ||||||||
getPriceList(photographer: string)
|
||||||||
|
Get photographer price list
Parameters :
Returns :
AngularFirestoreDocument<PriceList>
|
| getPrintingHouseById | ||||||||
getPrintingHouseById(id: string)
|
||||||||
|
Returns a printing house
Parameters :
Returns :
AngularFirestoreDocument<PrintingHouse>
|
| getPrintingHouseByUser | ||||||||
getPrintingHouseByUser(uid: string)
|
||||||||
|
Retruns a printing house
Parameters :
|
| getTransactionsByPhotographer | ||||||||
getTransactionsByPhotographer(photographer: string)
|
||||||||
|
Get transaction by photographer uid
Parameters :
Returns :
AngularFirestoreCollection<Transaction>
|
| getTransactionsByUser | ||||||||
getTransactionsByUser(reference_id: string)
|
||||||||
|
Get transaction by user uid
Parameters :
Returns :
AngularFirestoreCollection<Transaction>
|
| getUser | ||||||||
getUser(uid: string)
|
||||||||
|
Get user
Parameters :
Returns :
AngularFirestoreDocument<User>
|
| saveTransaction | ||||||||
saveTransaction(transaction: Transaction)
|
||||||||
|
Save transaction
Parameters :
Returns :
Promise<void>
|
| updateImage | ||||||||
updateImage(image: EventPicture)
|
||||||||
|
Update event picture information
Parameters :
Returns :
Promise<void>
|
| updatePhotographerEvent | ||||||||
updatePhotographerEvent(event: Event)
|
||||||||
|
Update an event
Parameters :
Returns :
Promise<void>
|
| updatePriceList | ||||||||||||
updatePriceList(priceList: PriceList, photographer: string)
|
||||||||||||
|
Update photographer price list
Parameters :
Returns :
Promise<void>
|
| updatePrintingHouse | ||||||||
updatePrintingHouse(printingHouse: PrintingHouse)
|
||||||||
|
Parameters :
Returns :
Promise<void>
|
| updateUserData | ||||||||
updateUserData(user: any)
|
||||||||
|
Update user data
Parameters :
Returns :
Promise<void>
|
| Private log |
log:
|
Default value : Log.create('FirebaseFirestoreService')
|
|
Logger |
import { Injectable } from '@angular/core';
import {
AngularFirestore,
AngularFirestoreCollection,
AngularFirestoreDocument
} from 'angularfire2/firestore';
import { Log } from 'ng2-logger';
import { Event } from '../../../classes/event';
import { PriceList } from '../../../classes/price-list';
import { User } from '../../../classes/user';
import { EventPicture } from '../../../interfaces/event-picture';
import { PhotographerProfile } from '../../../interfaces/photographer-profile';
import { PrintingHouse } from '../../../interfaces/printing-house';
import { Transaction } from '../../../interfaces/transaction';
/**
* Service to comunicate with the Firestore database
* @author Daniel Sogl
*/
@Injectable()
export class FirebaseFirestoreService {
/** Logger */
private log = Log.create('FirebaseFirestoreService');
/**
* Constructor
* @param {AngularFirestore} afs AngularFire Firestore
*/
constructor(private afs: AngularFirestore) {
this.log.color = 'green';
this.log.d('Service injected');
}
/************************************
* Firestore: User
************************************/
/**
* Update user data
* @param {any} user User
* @returns {Promise<void>}
*/
updateUserData(user: any): Promise<void> {
this.log.d('Update user in firestore', user);
const userRef: AngularFirestoreDocument<any> = this.afs.doc(
`users/${user.uid}`
);
if (!user.roles) {
user = new User(user);
}
if (!user.photoUrl) {
user.photoUrl =
'https://s3.amazonaws.com/37assets/svn/765-default-avatar.png';
}
if (user.photographerUrl) {
this.afs
.doc(`photographerUrls/${user.photographerUrl}`)
.set({ uid: user.uid });
}
return userRef.set(JSON.parse(JSON.stringify(user)));
}
/**
* Get user
* @param {string} uid UID
* @returns {AngularFirestoreDocument<User>}
*/
getUser(uid: string): AngularFirestoreDocument<User> {
return this.afs.doc<User>(`users/${uid}`);
}
/**
* Check photographer url
* @param {string} photographerUrl URL
* @returns {AngularFirestoreDocument<any>}
*/
checkDisplayname(photographerUrl: string): AngularFirestoreDocument<any> {
return this.afs.doc(`photographerUrls/${photographerUrl.toLowerCase()}`);
}
/**
* Get all user
* @returns {AngularFirestoreCollection<User>}
*/
getAllUser(): AngularFirestoreCollection<User> {
return this.afs.collection('users');
}
/**
* Delete user
* @param {User} uid User uid to delete
* @returns {Promise<void>}
*/
deleteUser(uid: string): Promise<void> {
return this.afs
.collection('users')
.doc(uid)
.delete();
}
/************************************
* Firestore: Printing houses
************************************/
/**
* Returns default printing house
* @returns AngularFirestoreCollection
*/
getDefautlPrintingHouse(): AngularFirestoreCollection<PrintingHouse> {
return this.afs.collection('printing-houses', ref =>
ref.where('isDefault', '==', true)
);
}
/**
* Returns a printing house
* @param {string} id Printing house id
* @returns {AngularFirestoreDocument<PrintingHouse>}
*/
getPrintingHouseById(id: string): AngularFirestoreDocument<PrintingHouse> {
return this.afs.collection('printing-houses').doc(id);
}
/**
* Retruns a printing house
* @param {string} uid User Id
* @returns {AngularFirestoreCollection<PrintingHouse>}
*/
getPrintingHouseByUser(
uid: string
): AngularFirestoreCollection<PrintingHouse> {
return this.afs.collection('printing-houses', ref =>
ref.where('uid', '==', uid)
);
}
/**
* Create prin ting house
* @param {PrintingHouse} printingHouse Printing house
* @returns {Promise<void>}
*/
createPrintingHouse(printingHouse: PrintingHouse): Promise<void> {
return this.afs
.collection('printing-houses')
.doc(printingHouse.id)
.set(JSON.parse(JSON.stringify(printingHouse)));
}
updatePrintingHouse(printingHouse: PrintingHouse): Promise<void> {
return this.afs
.collection('printing-houses')
.doc(printingHouse.id)
.update(JSON.parse(JSON.stringify(printingHouse)));
}
/************************************
* Firestore: Price Lists
************************************/
/**
* Get photographer price list
* @param {string} photographer Photographer UID
* @returns {AngularFirestoreDocument<PriceList>}
*/
getPriceList(photographer: string): AngularFirestoreDocument<PriceList> {
return this.afs.collection('price-lists').doc(photographer);
}
/**
* Create photographer price list
* @param {PriceList} priceList Price list
* @param {string} photographer Photographer UID
* @returns {Promise<void>}
*/
createPriceList(priceList: PriceList, photographer: string): Promise<void> {
return this.afs
.collection('price-lists')
.doc(photographer)
.set(JSON.parse(JSON.stringify(priceList)));
}
/**
* Update photographer price list
* @param {PriceList} priceList Price list
* @param {string} photographer Photographer UID
* @returns {Promise<void>}
*/
updatePriceList(priceList: PriceList, photographer: string): Promise<void> {
return this.afs
.collection('price-lists')
.doc(photographer)
.update(JSON.parse(JSON.stringify(priceList)));
}
/************************************
* Firestore: Transactions
************************************/
/**
* Save transaction
* @param {Transaction} transaction Transaction
* @returns {Promise<void>}
*/
saveTransaction(transaction: Transaction): Promise<void> {
return this.afs
.collection('transactions')
.doc(transaction.invoice_number)
.set(JSON.parse(JSON.stringify(transaction)));
}
/**
* Returns all transactions
* @returns {AngularFirestoreCollection<Transaction>}
*/
getAllTransactions(): AngularFirestoreCollection<Transaction> {
return this.afs.collection('transactions');
}
/**
* Get transaction by user uid
* @param {string} reference_id
* @returns {AngularFirestoreCollection<Transaction>}
*/
getTransactionsByUser(
reference_id: string
): AngularFirestoreCollection<Transaction> {
return this.afs.collection('transactions', ref =>
ref.where('reference_id', '==', reference_id)
);
}
/**
* Get transaction by photographer uid
* @param {string} reference_id
* @returns {AngularFirestoreCollection<Transaction>}
*/
getTransactionsByPhotographer(
photographer: string
): AngularFirestoreCollection<Transaction> {
return this.afs.collection('transactions', ref =>
ref.where('photographer', '==', photographer)
);
}
/************************************
* Firestore: Events
************************************/
/**
* Get event by id
* @param {string} id ID
* @returns {AngularFirestoreDocument<Event>}
*/
getEvent(id: string): AngularFirestoreDocument<Event> {
return this.afs.doc(`events/${id}`);
}
/**
* Create event
* @param {Event} event Event
* @returns {Promise<void>}
*/
createEvent(event: Event): Promise<void> {
return this.afs
.collection('events')
.doc(event.id)
.set(JSON.parse(JSON.stringify(event)));
}
/**
* Get all events
* @returns {AngularFirestoreCollection<Event>}
*/
getAllEvents(): AngularFirestoreCollection<Event> {
return this.afs.collection('events');
}
/**
* Get photographer events
* @param {string} uid UID
* @returns {AngularFirestoreCollection<Event[]>}
*/
getPhotographerEvents(uid: string): AngularFirestoreCollection<Event> {
return this.afs.collection('events', ref =>
ref.where('photographerUid', '==', uid)
);
}
/**
* Set Event "deleted" value to true
* @param {string} id Event Id
* @returns {Promise<void>}
*/
deletePhotographerEvent(id: string): Promise<void> {
return this.afs
.collection('events')
.doc(id)
.update({ deleted: true });
}
/**
* Update an event
* @param {Event} event Event to update
* @returns {Promise<void>}
*/
updatePhotographerEvent(event: Event): Promise<void> {
return this.afs
.collection('events')
.doc(event.id)
.update(JSON.parse(JSON.stringify(event)));
}
/************************************
* Firestore: Images
************************************/
/**
* Get event pictures
* @param {string} id ID
* @returns {AngularFirestoreCollection<EventPicture>}
*/
getEventPictures(id: string): AngularFirestoreCollection<EventPicture> {
return this.afs.collection('public-images', ref =>
ref.where('event', '==', id)
);
}
/**
* Get event original pictures
* @param {string} id ID
* @returns {AngularFirestoreCollection<EventPicture>}
*/
getEventOriginalPictures(
id: string
): AngularFirestoreCollection<EventPicture> {
return this.afs.collection('original-images', ref =>
ref.where('event', '==', id)
);
}
/**
* Delete image firestore document
* @param {string} image Image ID
* @returns {Promise<void>}
*/
deleteEventImage(image: string): Promise<void> {
return this.afs
.collection('public-images')
.doc(image)
.delete();
}
/**
* Update event picture information
* @param {EventPicture} image Image object
* @returns {Promise<void>}
*/
updateImage(image: EventPicture): Promise<void> {
return this.afs
.collection('public-images')
.doc(image.id)
.update(JSON.parse(JSON.stringify(image)));
}
/**
* Get most rated top 100 images
* @returns {AngularFirestoreCollection<EventPicture>}
*/
getPopularImages(): AngularFirestoreCollection<EventPicture> {
return this.afs.collection('public-images', ref =>
ref
.where('ratings', '>', 0)
.orderBy('ratings', 'desc')
.limit(100)
);
}
/************************************
* Firestore: Photographer Profile
************************************/
/**
* Get photographer profile by id
* @param {string} uid UID
* @returns {AngularFirestoreDocument<PhotographerProfile>}
*/
getPhotographerProfile(
uid: string
): AngularFirestoreDocument<PhotographerProfile> {
return this.afs.doc(`/photographer/${uid}`);
}
/**
* Get photogreapher by url
* @param {string} url URL
* @returns {AngularFirestoreCollection<PhotographerProfile>}
*/
getPhotographerByUrl(
url: string
): AngularFirestoreCollection<PhotographerProfile> {
return this.afs.collection('photographer', ref =>
ref.where('profileUrl', '==', url)
);
}
/**
* Get all photographer profiles
* @returns {AngularFirestoreCollection<PhotographerProfile>}
*/
getAllPhotographer(): AngularFirestoreCollection<PhotographerProfile> {
return this.afs.collection('photographer');
}
/************************************
* Firestore: Utility
************************************/
/**
* Create a firestore UID
* @returns {string}
*/
getId(): string {
return this.afs.createId();
}
}